mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
S390: Fix struct sigaction for 31bit in kernel_sigaction.h.
The recent commit b4a5d26d88
"linux: Consolidate sigaction implementation" changed the definition
of struct sigaction for s390 (31bit). Unfortunately the order of the
fields were wrong.
This leads to blocking testcases e.g. nptl/tst-sem11.
A thread which blocks due to sem_wait() is cancelled via pthread_cancel()
and the signal-handler sigcancel_handler (see <glibc-src>/nptl/nptl-init.c
is called.
But it just returns as the siginfo_t argument is not setup by the kernel.
Then the main-thread is blocking due to pthread_join().
The flag SA_SIGINFO is set in sa_flags in struct sigaction and
is copied to the "kernel_sigaction.h" struct by the sigaction() call,
but due to the wrong ordering of the struct fields,
the kernel does not recognize it.
This commit is contained in:
parent
583a27d525
commit
d8abfab7d4
@ -1,3 +1,9 @@
|
||||
2018-04-12 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/s390/kernel_sigaction.h
|
||||
(struct kernel_sigaction): Use the same definition on 31bit as is used
|
||||
on 64bit.
|
||||
|
||||
2018-04-09 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
[BZ #23037]
|
||||
|
@ -11,15 +11,19 @@ struct kernel_sigaction
|
||||
void (*_sa_sigaction)(int, siginfo_t *, void *);
|
||||
} _u;
|
||||
#define k_sa_handler _u._sa_handler
|
||||
#ifndef __s390x__
|
||||
sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
#else
|
||||
/* The 'struct sigaction' definition in s390 kernel header
|
||||
arch/s390/include/uapi/asm/signal.h is used for __NR_rt_sigaction
|
||||
on 64 bits and for __NR_sigaction for 31 bits.
|
||||
|
||||
The expected layout for __NR_rt_sigaction for 31 bits is either
|
||||
'struct sigaction' from include/linux/signal_types.h or
|
||||
'struct compat_sigaction' from include/linux/compat.h.
|
||||
|
||||
So for __NR_rt_sigaction we can use the same layout for both s390x
|
||||
and s390. */
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
sigset_t sa_mask;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
|
Loading…
Reference in New Issue
Block a user