Message ID | 480ff20f-ec75-397e-7375-cd4f0f376bdd@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | S/390: Fix layout of struct sigaction_t | expand |
ping On 3/23/20 6:05 PM, Stefan Liebler wrote: > Hi, > > the ordering of some fields in struct sigaction on s390x (64bit) > differs compared to s390 and other architectures. > This patch adjusts this order according to the definition of > <glibc-src>/sysdeps/unix/sysv/linux/s390/bits/sigaction.h > > Without this fix e.g. the call > sigaction( suspendSignalNumber, &sigusr1, null ) in thread.d > leads to setting the sa_restorer field to 0xffffffffffffffff. > In case a signal, the signal handler returns to this address > and the process stops with a SIGILL. > > This was observable in several execution testcases on s390x: > libphobos.druntime/core/thread.d > libphobos.druntime_shared/core/thread.d > libphobos.thread/tlsgc_sections.d > libphobos.allocations/tls_gc_integration.d > libphobos.phobos/std/parallelism.d > libphobos.phobos_shared/std/parallelism.d > libphobos.shared/host.c > libphobos.shared/linkD.c > libphobos.shared/linkDR.c > libphobos.shared/link_linkdep.d > libphobos.shared/load.d > libphobos.shared/loadDR.c > libphobos.shared/load_linkdep.d > libphobos.shared/load_loaddep.d > > Bye, > Stefan > > -- > > libphobos/ChangeLog: > > 2020-03-23 Stefan Liebler <stli@linux.ibm.com> > > * libphobos/libdruntime/core/sys/posix/signal.d: > Add struct sigaction_t for SystemZ.
On 01/04/2020 08:28, Stefan Liebler wrote: > ping > Thanks, I'll send the patch upstream, as it's the same there. Looks OK to me. Regards Iain.
On 4/1/20 12:54 PM, Iain Buclaw wrote: > On 01/04/2020 08:28, Stefan Liebler wrote: >> ping >> > > Thanks, I'll send the patch upstream, as it's the same there. > > Looks OK to me. > > Regards > Iain. > Thanks for committing the patch upstream
On 01/04/2020 18:20, Stefan Liebler wrote: > On 4/1/20 12:54 PM, Iain Buclaw wrote: >> On 01/04/2020 08:28, Stefan Liebler wrote: >>> ping >>> >> >> Thanks, I'll send the patch upstream, as it's the same there. >> >> Looks OK to me. >> >> Regards >> Iain. >> > > Thanks for committing the patch upstream > Hi Stefan, They have been merged in: https://github.com/dlang/druntime/pull/3020 Do you want to commit this yourself? Iain.
On 07.04.20 09:59, Iain Buclaw wrote: > On 01/04/2020 18:20, Stefan Liebler wrote: >> On 4/1/20 12:54 PM, Iain Buclaw wrote: >>> On 01/04/2020 08:28, Stefan Liebler wrote: >>>> ping >>>> >>> >>> Thanks, I'll send the patch upstream, as it's the same there. >>> >>> Looks OK to me. >>> >>> Regards >>> Iain. >>> >> >> Thanks for committing the patch upstream >> > > Hi Stefan, > > They have been merged in: https://github.com/dlang/druntime/pull/3020 > > Do you want to commit this yourself? I've committed the patch for Stefan. Thanks! Andreas
commit 0986df3847c287c144b2e38d3ec1d423b934d7a8 Author: Stefan Liebler <stli@linux.ibm.com> Date: Tue Mar 17 17:00:44 2020 +0100 S/390: Fix layout of struct sigaction_t The ordering of some fields in struct sigaction on s390x (64bit) differs compared to s390 and other architectures. This patch adjusts this order according to the definition of <glibc-src>/sysdeps/unix/sysv/linux/s390/bits/sigaction.h Without this fix e.g. the call sigaction( suspendSignalNumber, &sigusr1, null ) in thread.d leads to setting the sa_restorer field to 0xffffffffffffffff. In case a signal, the signal handler returns to this address and the process stops with a SIGILL. This was observable in several execution testcases on s390x: libphobos.druntime/core/thread.d libphobos.druntime_shared/core/thread.d libphobos.thread/tlsgc_sections.d libphobos.allocations/tls_gc_integration.d libphobos.phobos/std/parallelism.d libphobos.phobos_shared/std/parallelism.d libphobos.shared/host.c libphobos.shared/linkD.c libphobos.shared/linkDR.c libphobos.shared/link_linkdep.d libphobos.shared/load.d libphobos.shared/loadDR.c libphobos.shared/load_linkdep.d libphobos.shared/load_loaddep.d libphobos/ChangeLog: 2020-03-23 Stefan Liebler <stli@linux.ibm.com> * libphobos/libdruntime/core/sys/posix/signal.d: Add struct sigaction_t for SystemZ. diff --git a/libphobos/libdruntime/core/sys/posix/signal.d b/libphobos/libdruntime/core/sys/posix/signal.d index ed3985eee4d..5abcdac1355 100644 --- a/libphobos/libdruntime/core/sys/posix/signal.d +++ b/libphobos/libdruntime/core/sys/posix/signal.d @@ -575,24 +575,51 @@ else version (CRuntime_Glibc) { - struct sigaction_t + version (SystemZ) { - static if ( true /* __USE_POSIX199309 */ ) + struct sigaction_t { - union + static if ( true /* __USE_POSIX199309 */ ) + { + union + { + sigfn_t sa_handler; + sigactfn_t sa_sigaction; + } + } + else { sigfn_t sa_handler; - sigactfn_t sa_sigaction; } + int __glibc_reserved0; + int sa_flags; + + void function() sa_restorer; + + sigset_t sa_mask; } - else + } + else + { + struct sigaction_t { - sigfn_t sa_handler; - } - sigset_t sa_mask; - int sa_flags; + static if ( true /* __USE_POSIX199309 */ ) + { + union + { + sigfn_t sa_handler; + sigactfn_t sa_sigaction; + } + } + else + { + sigfn_t sa_handler; + } + sigset_t sa_mask; + int sa_flags; - void function() sa_restorer; + void function() sa_restorer; + } } } else version (CRuntime_Musl)