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-04-07 Stefan Liebler <stli@linux.ibm.com> * libdruntime/core/sys/posix/signal.d: Add struct sigaction_t for SystemZ.
This commit is contained in:
parent
23f1f67914
commit
434fe1a409
|
@ -1,3 +1,8 @@
|
||||||
|
2020-04-07 Stefan Liebler <stli@linux.ibm.com>
|
||||||
|
|
||||||
|
* libdruntime/core/sys/posix/signal.d:
|
||||||
|
Add struct sigaction_t for SystemZ.
|
||||||
|
|
||||||
2020-03-16 Iain Buclaw <ibuclaw@gdcproject.org>
|
2020-03-16 Iain Buclaw <ibuclaw@gdcproject.org>
|
||||||
|
|
||||||
PR d/92792
|
PR d/92792
|
||||||
|
|
|
@ -575,24 +575,51 @@ else
|
||||||
|
|
||||||
version (CRuntime_Glibc)
|
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;
|
sigfn_t sa_handler;
|
||||||
sigactfn_t sa_sigaction;
|
|
||||||
}
|
}
|
||||||
}
|
int __glibc_reserved0;
|
||||||
else
|
int sa_flags;
|
||||||
{
|
|
||||||
sigfn_t sa_handler;
|
|
||||||
}
|
|
||||||
sigset_t sa_mask;
|
|
||||||
int sa_flags;
|
|
||||||
|
|
||||||
void function() sa_restorer;
|
void function() sa_restorer;
|
||||||
|
|
||||||
|
sigset_t sa_mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct sigaction_t
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else version (CRuntime_Musl)
|
else version (CRuntime_Musl)
|
||||||
|
|
Loading…
Reference in New Issue