* [musl] waitpid (wait4) on Linux 5 returns invalid values @ 2021-01-19 18:18 Rasmus Andersson 2021-01-19 19:33 ` Markus Wichmann 0 siblings, 1 reply; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 18:18 UTC (permalink / raw) To: musl Hello! I'm having an issue with musl (at git master.) It appears as the waitpid[1] implementation assumes that the syscall returns values matching the waitpid specification, but it does not! This causes some programs to hang. Runit's "runsv" program is one example. It does something like this: for (;;) { child = waitpid(-1, &wstat, WNOHANG); if (!child) break; if ((child == -1) && (errno != EINTR)) break; if (child == svd[0].pid) { // do things with child } } When I inspect a hung runsv process with strace I find it calling wait4 at full speed, stuck in this loop. wait4 comes from calling the waitpid function which in musl performs the wait4 syscall and returns the value. The waitpid spec[2] says its return value is either the PID, -1 with errno set to EINTR or 0 in WNOHANG mode. So, the expected returns values are: >0, 0, -1. However the wait4 syscall[3] in Linux 5 returns other values, specifically it returns errors as negative values. The error that trips up programs like runit's runsv is ECHILD (-10) which wait4 returns when there are no children (i.e. they have exited.) I propose that you change the waitpid implementation to handle this. Something like this: pid_t waitpid(pid_t pid, int *status, int options) { pid_t r = syscall_cp(SYS_wait4, pid, status, options, 0); if (r < 0) { errno = -r; r = -1; } return r; } -- Rasmus [1] waitpid in musl: http://git.musl-libc.org/cgit/musl/tree/src/process/waitpid.c [2] waitpid spec: https://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html [2] waitpid in glibc: https://man7.org/linux/man-pages/man2/waitpid.2.html [3] wait4 syscall implementation in Linux 5.10.1: kernel/exit.c:1638 and kernel/exit.c:1579 (online: https://elixir.bootlin.com/linux/v5.10.1/source/kernel/exit.c#L1579) ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 18:18 [musl] waitpid (wait4) on Linux 5 returns invalid values Rasmus Andersson @ 2021-01-19 19:33 ` Markus Wichmann 2021-01-19 20:17 ` Rasmus Andersson 0 siblings, 1 reply; 11+ messages in thread From: Markus Wichmann @ 2021-01-19 19:33 UTC (permalink / raw) To: musl On Tue, Jan 19, 2021 at 10:18:04AM -0800, Rasmus Andersson wrote: > However the wait4 syscall[3] in Linux 5 returns other values, > specifically it returns errors as negative values. The error that > trips up programs like runit's runsv is ECHILD (-10) which wait4 > returns when there are no children (i.e. they have exited.) > Hmm... that is very weird. That should not happen. Because the syscall_cp macro already contains a call to __syscall_ret(), which does exactly what you propose. So that means, there is something else going on in your copy of the code. Did you change anything about the source code? Or can you disassemble the function to see what it does? Ciao, Markus ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 19:33 ` Markus Wichmann @ 2021-01-19 20:17 ` Rasmus Andersson 2021-01-19 20:28 ` Rasmus Andersson 0 siblings, 1 reply; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 20:17 UTC (permalink / raw) To: musl On Tue, Jan 19, 2021 at 11:33 AM Markus Wichmann <nullplan@gmx.net> wrote: > > On Tue, Jan 19, 2021 at 10:18:04AM -0800, Rasmus Andersson wrote: > > However the wait4 syscall[3] in Linux 5 returns other values, > > specifically it returns errors as negative values. The error that > > trips up programs like runit's runsv is ECHILD (-10) which wait4 > > returns when there are no children (i.e. they have exited.) > > > > Hmm... that is very weird. That should not happen. Because the > syscall_cp macro already contains a call to __syscall_ret(), which does > exactly what you propose. So that means, there is something else going > on in your copy of the code. Did you change anything about the source > code? Or can you disassemble the function to see what it does? > Strange! You are right of course; looking at src/internal/syscall.h I indeed see that syscall_cp calls __syscall_ret(__syscall_cp(args)) The musl I'm building with comes from https://musl.cc/#binaries which is created from these scripts according to the author: https://git.zv.io/xstatic/mcm It doesn't seem to apply any patches. Anyhow, I'm currently building musl & gcc myself using musl-cross-make. I will see how that pans out and report back. Thank you for your quick response Markus! ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 20:17 ` Rasmus Andersson @ 2021-01-19 20:28 ` Rasmus Andersson 2021-01-19 20:35 ` Rasmus Andersson 0 siblings, 1 reply; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 20:28 UTC (permalink / raw) To: musl [-- Attachment #1: Type: text/plain, Size: 1852 bytes --] In the meantime, in case you're curious, here's a program that reproduces the issue. I've attached a statically-compiled version too that can be disassembled. Running it: $ gcc -static a.c && ./a.out waitpid returned -10, wstat=0 #include <sys/wait.h> #include <stdio.h> int main(int argc, char **argv) { int wstat = 0; pid_t child = waitpid(-1, &wstat, WNOHANG); printf("waitpid returned %d, wstat=%d\n", child, wstat); return 0; } On Tue, Jan 19, 2021 at 12:17 PM Rasmus Andersson <rasmus@notion.se> wrote: > > On Tue, Jan 19, 2021 at 11:33 AM Markus Wichmann <nullplan@gmx.net> wrote: > > > > On Tue, Jan 19, 2021 at 10:18:04AM -0800, Rasmus Andersson wrote: > > > However the wait4 syscall[3] in Linux 5 returns other values, > > > specifically it returns errors as negative values. The error that > > > trips up programs like runit's runsv is ECHILD (-10) which wait4 > > > returns when there are no children (i.e. they have exited.) > > > > > > > Hmm... that is very weird. That should not happen. Because the > > syscall_cp macro already contains a call to __syscall_ret(), which does > > exactly what you propose. So that means, there is something else going > > on in your copy of the code. Did you change anything about the source > > code? Or can you disassemble the function to see what it does? > > > Strange! You are right of course; looking at src/internal/syscall.h I > indeed see that syscall_cp calls __syscall_ret(__syscall_cp(args)) > The musl I'm building with comes from https://musl.cc/#binaries which > is created from these scripts according to the author: > https://git.zv.io/xstatic/mcm It doesn't seem to apply any patches. > Anyhow, I'm currently building musl & gcc myself using > musl-cross-make. I will see how that pans out and report back. > Thank you for your quick response Markus! [-- Attachment #2: a.tar.gz --] [-- Type: application/x-gzip, Size: 9769 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 20:28 ` Rasmus Andersson @ 2021-01-19 20:35 ` Rasmus Andersson 2021-01-19 20:56 ` Rasmus Andersson 2021-01-19 21:16 ` Rich Felker 0 siblings, 2 replies; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 20:35 UTC (permalink / raw) To: musl 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 main(): ... 4002a2: e8 56 02 00 00 callq 4004fd <waitpid> On Tue, Jan 19, 2021 at 12:28 PM Rasmus Andersson <rasmus@notion.se> wrote: > > In the meantime, in case you're curious, here's a program that > reproduces the issue. I've attached a statically-compiled version too > that can be disassembled. Running it: > $ gcc -static a.c && ./a.out > waitpid returned -10, wstat=0 > > #include <sys/wait.h> > #include <stdio.h> > int main(int argc, char **argv) { > int wstat = 0; > pid_t child = waitpid(-1, &wstat, WNOHANG); > printf("waitpid returned %d, wstat=%d\n", child, wstat); > return 0; > } > > On Tue, Jan 19, 2021 at 12:17 PM Rasmus Andersson <rasmus@notion.se> wrote: > > > > On Tue, Jan 19, 2021 at 11:33 AM Markus Wichmann <nullplan@gmx.net> wrote: > > > > > > On Tue, Jan 19, 2021 at 10:18:04AM -0800, Rasmus Andersson wrote: > > > > However the wait4 syscall[3] in Linux 5 returns other values, > > > > specifically it returns errors as negative values. The error that > > > > trips up programs like runit's runsv is ECHILD (-10) which wait4 > > > > returns when there are no children (i.e. they have exited.) > > > > > > > > > > Hmm... that is very weird. That should not happen. Because the > > > syscall_cp macro already contains a call to __syscall_ret(), which does > > > exactly what you propose. So that means, there is something else going > > > on in your copy of the code. Did you change anything about the source > > > code? Or can you disassemble the function to see what it does? > > > > > Strange! You are right of course; looking at src/internal/syscall.h I > > indeed see that syscall_cp calls __syscall_ret(__syscall_cp(args)) > > The musl I'm building with comes from https://musl.cc/#binaries which > > is created from these scripts according to the author: > > https://git.zv.io/xstatic/mcm It doesn't seem to apply any patches. > > Anyhow, I'm currently building musl & gcc myself using > > musl-cross-make. I will see how that pans out and report back. > > Thank you for your quick response Markus! ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 20:35 ` Rasmus Andersson @ 2021-01-19 20:56 ` Rasmus Andersson 2021-01-19 21:16 ` Rich Felker 1 sibling, 0 replies; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 20:56 UTC (permalink / raw) To: musl waitpid works as expected after building musl 1.2.1 and GCC 9.2.0 from source. It must be so that the binary distributions at https://musl.cc/#binaries are broken somehow. $ /build/gcc-x86_64-linux-musl/bin/x86_64-linux-musl-gcc -static a.c && ./a.out waitpid returned -1, wstat=0, errno=10 "No child process" Markus thank you for pointing me in the right direction :-) On Tue, Jan 19, 2021 at 12:35 PM Rasmus Andersson <rasmus@notion.se> 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 > > main(): > ... > 4002a2: e8 56 02 00 00 callq 4004fd <waitpid> > > On Tue, Jan 19, 2021 at 12:28 PM Rasmus Andersson <rasmus@notion.se> wrote: > > > > In the meantime, in case you're curious, here's a program that > > reproduces the issue. I've attached a statically-compiled version too > > that can be disassembled. Running it: > > $ gcc -static a.c && ./a.out > > waitpid returned -10, wstat=0 > > > > #include <sys/wait.h> > > #include <stdio.h> > > int main(int argc, char **argv) { > > int wstat = 0; > > pid_t child = waitpid(-1, &wstat, WNOHANG); > > printf("waitpid returned %d, wstat=%d\n", child, wstat); > > return 0; > > } > > > > On Tue, Jan 19, 2021 at 12:17 PM Rasmus Andersson <rasmus@notion.se> wrote: > > > > > > On Tue, Jan 19, 2021 at 11:33 AM Markus Wichmann <nullplan@gmx.net> wrote: > > > > > > > > On Tue, Jan 19, 2021 at 10:18:04AM -0800, Rasmus Andersson wrote: > > > > > However the wait4 syscall[3] in Linux 5 returns other values, > > > > > specifically it returns errors as negative values. The error that > > > > > trips up programs like runit's runsv is ECHILD (-10) which wait4 > > > > > returns when there are no children (i.e. they have exited.) > > > > > > > > > > > > > Hmm... that is very weird. That should not happen. Because the > > > > syscall_cp macro already contains a call to __syscall_ret(), which does > > > > exactly what you propose. So that means, there is something else going > > > > on in your copy of the code. Did you change anything about the source > > > > code? Or can you disassemble the function to see what it does? > > > > > > > Strange! You are right of course; looking at src/internal/syscall.h I > > > indeed see that syscall_cp calls __syscall_ret(__syscall_cp(args)) > > > The musl I'm building with comes from https://musl.cc/#binaries which > > > is created from these scripts according to the author: > > > https://git.zv.io/xstatic/mcm It doesn't seem to apply any patches. > > > Anyhow, I'm currently building musl & gcc myself using > > > musl-cross-make. I will see how that pans out and report back. > > > Thank you for your quick response Markus! ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 20:35 ` Rasmus Andersson 2021-01-19 20:56 ` Rasmus Andersson @ 2021-01-19 21:16 ` Rich Felker 2021-01-19 22:00 ` Rasmus Andersson 1 sibling, 1 reply; 11+ messages in thread From: Rich Felker @ 2021-01-19 21:16 UTC (permalink / raw) To: Rasmus Andersson; +Cc: musl 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 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 21:16 ` Rich Felker @ 2021-01-19 22:00 ` Rasmus Andersson 2021-01-19 22:02 ` Rasmus Andersson 0 siblings, 1 reply; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 22:00 UTC (permalink / raw) To: Rich Felker; +Cc: musl 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@libc.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 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 22:00 ` Rasmus Andersson @ 2021-01-19 22:02 ` Rasmus Andersson 2021-01-19 23:01 ` Zach van Rijn 0 siblings, 1 reply; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 22:02 UTC (permalink / raw) To: Rich Felker; +Cc: musl 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@notion.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@libc.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 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 22:02 ` Rasmus Andersson @ 2021-01-19 23:01 ` Zach van Rijn 2021-01-19 23:07 ` Rasmus Andersson 0 siblings, 1 reply; 11+ messages in thread From: Zach van Rijn @ 2021-01-19 23:01 UTC (permalink / raw) To: Rasmus Andersson; +Cc: musl On Tue, 2021-01-19 at 14:02 -0800, Rasmus Andersson wrote: > 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? Rasmus, thank you for reporting this issue. Using your reproducer I'm able to observe the following: (1) GCC 10 as-published on musl.cc : BUG waitpid returned -10, wstat=0, errno=0 (No error information) (2) GCC 10 without this patch [1] : OK waitpid returned -1, wstat=0, errno=10 (No child process) which matches your GCC 9 (20200828) observation. This patch was applied to musl.cc as part of a series to add experimental riscv32 support in September 2020, but was applied universally and not strictly riscv32 targets. The patch in question was /not/ applied to the GCC 9 binaries as they were last updated in August of 2020, nor to earlier 10 ones. I am updating the build infrastructure to avoid contamination of "supported" targets by experimental patches such as this one. New (fixed and newer GCC) toolchains will be published as soon as they finish building (~24 hours). I will ping you off-list. Additional tests (not simply spot-checks) will be implemented for future releases. Sorry for the inconvenience. [1]: https://www.openwall.com/lists/musl/2020/09/03/14 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [musl] waitpid (wait4) on Linux 5 returns invalid values 2021-01-19 23:01 ` Zach van Rijn @ 2021-01-19 23:07 ` Rasmus Andersson 0 siblings, 0 replies; 11+ messages in thread From: Rasmus Andersson @ 2021-01-19 23:07 UTC (permalink / raw) To: Zach van Rijn; +Cc: musl Zach I'm glad I was able to help! No trouble at all. Thank you all for your work on musl & accompanying tools :-) On Tue, Jan 19, 2021 at 3:01 PM Zach van Rijn <me@zv.io> wrote: > > On Tue, 2021-01-19 at 14:02 -0800, Rasmus Andersson wrote: > > 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? > > Rasmus, thank you for reporting this issue. > > > Using your reproducer I'm able to observe the following: > > (1) GCC 10 as-published on musl.cc : BUG > waitpid returned -10, wstat=0, errno=0 (No error information) > > (2) GCC 10 without this patch [1] : OK > waitpid returned -1, wstat=0, errno=10 (No child process) > > which matches your GCC 9 (20200828) observation. > > > This patch was applied to musl.cc as part of a series to add > experimental riscv32 support in September 2020, but was applied > universally and not strictly riscv32 targets. > > The patch in question was /not/ applied to the GCC 9 binaries as > they were last updated in August of 2020, nor to earlier 10 ones. > > I am updating the build infrastructure to avoid contamination of > "supported" targets by experimental patches such as this one. > > New (fixed and newer GCC) toolchains will be published as soon as > they finish building (~24 hours). I will ping you off-list. > > Additional tests (not simply spot-checks) will be implemented for > future releases. > > > Sorry for the inconvenience. > > > [1]: https://www.openwall.com/lists/musl/2020/09/03/14 > ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-01-19 23:07 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-01-19 18:18 [musl] waitpid (wait4) on Linux 5 returns invalid values Rasmus Andersson 2021-01-19 19:33 ` Markus Wichmann 2021-01-19 20:17 ` Rasmus Andersson 2021-01-19 20:28 ` Rasmus Andersson 2021-01-19 20:35 ` Rasmus Andersson 2021-01-19 20:56 ` Rasmus Andersson 2021-01-19 21:16 ` Rich Felker 2021-01-19 22:00 ` Rasmus Andersson 2021-01-19 22:02 ` Rasmus Andersson 2021-01-19 23:01 ` Zach van Rijn 2021-01-19 23:07 ` Rasmus Andersson
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/musl/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).