|
Message-ID: <CADFzTteNPP3uVE43gk+mL+jQETr0O9AcoMbMb=GNYGz9ZaYyiw@mail.gmail.com> Date: Tue, 19 Jan 2021 14:02:50 -0800 From: Rasmus Andersson <rasmus@...ion.se> To: Rich Felker <dalias@...c.org> Cc: musl@...ts.openwall.com Subject: Re: waitpid (wait4) on Linux 5 returns invalid values The program compiles correctly with https://more.musl.cc/9/x86_64-linux-musl/x86_64-linux-musl-native.tgz (The GCC 9 version) Perhaps an issue with GCC 10? On Tue, Jan 19, 2021 at 2:00 PM Rasmus Andersson <rasmus@...ion.se> wrote: > > That was compiled using > https://more.musl.cc/10/x86_64-linux-musl/x86_64-linux-musl-native.tgz > on Alpine Linux in a docker container (alpine:3.12) > > Full repro: > $ wget https://more.musl.cc/10/x86_64-linux-musl/x86_64-linux-musl-native.tgz > $ tar -xf x86_64-linux-musl-native.tgz > $ cat << EOF > a.c > #include <sys/wait.h> > #include <stdio.h> > #include <errno.h> > #include <string.h> > int main(int argc, char **argv) { > int wstat = 0; > pid_t child = waitpid(-1, &wstat, WNOHANG); > printf("waitpid returned %d, wstat=%d, errno=%d (%s)\n", child, > wstat, errno, strerror(errno)); > return 0; > } > EOF > $ x86_64-linux-musl-native/bin/gcc -static a.c > $ ./a.out > waitpid returned -10, wstat=0, errno=0 (No error information) > > On Tue, Jan 19, 2021 at 1:16 PM Rich Felker <dalias@...c.org> wrote: > > > > On Tue, Jan 19, 2021 at 12:35:26PM -0800, Rasmus Andersson wrote: > > > Relevant parts from disassembly: (objdump --disassemble --source > > > --line-numbers a.out) > > > > > > 0000000000401f61 <__syscall_cp_c>: > > > sccp(): > > > 401f61: 48 89 f8 mov %rdi,%rax > > > 401f64: 4d 89 c2 mov %r8,%r10 > > > 401f67: 48 89 f7 mov %rsi,%rdi > > > 401f6a: 4d 89 c8 mov %r9,%r8 > > > 401f6d: 48 89 d6 mov %rdx,%rsi > > > 401f70: 4c 8b 4c 24 08 mov 0x8(%rsp),%r9 > > > 401f75: 48 89 ca mov %rcx,%rdx > > > 401f78: 0f 05 syscall > > > 401f7a: c3 retq > > > > > > 0000000000401f7b <__syscall_cp>: > > > __syscall_cp(): > > > 401f7b: e9 e1 ff ff ff jmpq 401f61 <__syscall_cp_c> > > > > > > 00000000004004fd <waitpid>: > > > waitpid(): > > > ... > > > 40051a: e8 5c 1a 00 00 callq 401f7b <__syscall_cp> > > > 40051f: 48 83 c4 18 add $0x18,%rsp > > > 400523: c3 retq > > > > This disassembly shows a miscompiled (or compiled with wrong patches) > > waitpid. It should be a tail call to __syscall_ret, not a retq. > > > > Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.