From 43a45c2d829f164c1fb94d5f44afe326fae946e1 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Tue, 11 Dec 2018 16:52:47 -0200 Subject: m68k: Fix sigaction kernel definition (BZ #23960) Commit b4a5d26d883 (linux: Consolidate sigaction implementation) added a wrong kernel_sigaction definition for m68k, meant for __NR_sigaction instead of __NR_rt_sigaction as used on generic Linux sigaction implementation. This patch fixes it by using the Linux generic definition meant for the RT kernel ABI. Checked the signal tests on emulated m68-linux-gnu (Aranym). It fixes the faulty signal/tst-sigaction and man works as expected. Adhemerval Zanella James Clarke [BZ #23960] * sysdeps/unix/sysv/linux/kernel_sigaction.h (HAS_SA_RESTORER): Define if SA_RESTORER is defined. (kernel_sigaction): Define sa_restorer if HAS_SA_RESTORER is defined. (SET_SA_RESTORER, RESET_SA_RESTORER): Define iff the macro are not already defined. * sysdeps/unix/sysv/linux/m68k/kernel_sigaction.h (SA_RESTORER, kernel_sigaction, SET_SA_RESTORER, RESET_SA_RESTORER): Remove definitions. (HAS_SA_RESTORER): Define. * sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h (SA_RESTORER, SET_SA_RESTORER, RESET_SA_RESTORER): Remove definition. (HAS_SA_RESTORER): Define. * sysdeps/unix/sysv/linux/nios2/kernel_sigaction.h: Include generic kernel_sigaction after define SET_SA_RESTORER and RESET_SA_RESTORER. * sysdeps/unix/sysv/linux/powerpc/kernel_sigaction.h: Likewise. * sysdeps/unix/sysv/linux/x86_64/sigaction.c: Likewise. --- sysdeps/unix/sysv/linux/kernel_sigaction.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'sysdeps/unix/sysv/linux/kernel_sigaction.h') diff --git a/sysdeps/unix/sysv/linux/kernel_sigaction.h b/sysdeps/unix/sysv/linux/kernel_sigaction.h index 2dbec08099..1c36146d46 100644 --- a/sysdeps/unix/sysv/linux/kernel_sigaction.h +++ b/sysdeps/unix/sysv/linux/kernel_sigaction.h @@ -1,19 +1,27 @@ #ifndef _KERNEL_SIGACTION_H # define _KERNEL_SIGACTION_H +#ifdef SA_RESTORER +# define HAS_SA_RESTORER 1 +#endif + /* This is the sigaction structure from the Linux 3.2 kernel. */ struct kernel_sigaction { __sighandler_t k_sa_handler; unsigned long sa_flags; -#ifdef SA_RESTORER +#ifdef HAS_SA_RESTORER void (*sa_restorer) (void); #endif + /* glibc sigset is larger than kernel expected one, however sigaction + passes the kernel expected size on rt_sigaction syscall. */ sigset_t sa_mask; }; -#ifndef SA_RESTORER +#ifndef SET_SA_RESTORER # define SET_SA_RESTORER(kact, act) +#endif +#ifndef RESET_SA_RESTORER # define RESET_SA_RESTORER(act, kact) #endif -- cgit 1.4.1