Date: Wed, 19 May 2021 15:01:12 +1000 From: Nicholas Piggin <npiggin@...il.com> To: "Dmitry V. Levin" <ldv@...linux.org>, Michael Ellerman <mpe@...erman.id.au> Cc: libc-alpha@...rceware.org, libc-dev@...ts.llvm.org, linux-api@...r.kernel.org, linuxppc-dev@...ts.ozlabs.org, Matheus Castanho <msc@...ux.ibm.com>, musl@...ts.openwall.com Subject: Re: Linux powerpc new system call instruction and ABI Excerpts from Nicholas Piggin's message of May 19, 2021 12:50 pm: > Excerpts from Dmitry V. Levin's message of May 19, 2021 9:13 am: >> Hi, >> >> On Thu, Jun 11, 2020 at 06:12:01PM +1000, Nicholas Piggin wrote: >> [...] >>> - Error handling: The consensus among kernel, glibc, and musl is to move to >>> using negative return values in r3 rather than CR0[SO]=1 to indicate error, >>> which matches most other architectures, and is closer to a function call. >> >> Apparently, the patchset merged by commit v5.9-rc1~100^2~164 was >> incomplete: all functions defined in arch/powerpc/include/asm/ptrace.h and >> arch/powerpc/include/asm/syscall.h that use ccr are broken when scv is used. >> This includes syscall_get_error() and all its users including >> PTRACE_GET_SYSCALL_INFO API, which in turn makes strace unusable >> when scv is used. >> >> See also https://bugzilla.redhat.com/1929836 > > I see, thanks. Using latest strace from github.com, the attached kernel > patch makes strace -k check results a lot greener. > > Some of the remaining failing tests look like this (I didn't look at all > of them yet): > > signal(SIGUSR1, 0xfacefeeddeadbeef) = 0 (SIG_DFL) > write(1, "signal(SIGUSR1, 0xfacefeeddeadbe"..., 50signal(SIGUSR1, 0xfacefeeddeadbeef) = 0 (SIG_DFL) > ) = 50 > signal(SIGUSR1, SIG_IGN) = 0xfacefeeddeadbeef > write(2, "errno2name.c:461: unknown errno "..., 41errno2name.c:461: unknown errno 559038737) = 41 > write(2, ": Unknown error 559038737\n", 26: Unknown error 559038737 > ) = 26 > exit_group(1) = ? > > I think the problem is glibc testing for -ve, but it should be comparing > against -4095 (+cc Matheus) > > #define RET_SCV \ > cmpdi r3,0; \ > bgelr+; \ > neg r3,r3; This glibc patch at least gets that signal test working. Haven't run the full suite yet because of trouble making it work with a local glibc install... Thanks, Nick --- diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h index c57bb1c05d..1ea4c3b917 100644 --- a/sysdeps/powerpc/powerpc64/sysdep.h +++ b/sysdeps/powerpc/powerpc64/sysdep.h @@ -398,8 +398,9 @@ LT_LABELSUFFIX(name,_name_end): ; \ #endif #define RET_SCV \ - cmpdi r3,0; \ - bgelr+; \ + li r9,-4095; \ + cmpld r3,r9; \ + bltlr+; \ neg r3,r3; #define RET_SC \
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.