mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-30 06:25:27 +08:00
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>
|
||||
|
||||
PR d/92792
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sigfn_t sa_handler;
|
||||
}
|
||||
sigset_t sa_mask;
|
||||
int sa_flags;
|
||||
int __glibc_reserved0;
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user