mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-07 10:00:07 +00:00
m68k: Fix sigaction kernel definition (BZ #23967)
Commitb4a5d26d88
(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 <adhemerval.zanella@linaro.org> James Clarke <jrtc27@jrtc27.com> [BZ #23967] * 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. (cherry picked from commit43a45c2d82
)
This commit is contained in:
parent
b4ce4476fc
commit
27e039455d
22
ChangeLog
22
ChangeLog
@ -1,3 +1,25 @@
|
||||
2018-12-18 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
James Clarke <jrtc27@jrtc27.com>
|
||||
|
||||
[BZ #23967]
|
||||
* 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/s390/kernel_sigaction.h: Likewise.
|
||||
* sysdeps/unix/sysv/linux/x86_64/sigaction.c: Likewise.
|
||||
|
||||
2018-10-30 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
[BZ #23125]
|
||||
|
@ -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
|
||||
|
||||
|
@ -1,22 +1,4 @@
|
||||
#ifndef _KERNEL_SIGACTION_H
|
||||
# define _KERNEL_SIGACTION_H
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
#define SA_RESTORER 0x04000000
|
||||
|
||||
/* This is the sigaction structure from the Linux 3.2 kernel. */
|
||||
struct kernel_sigaction
|
||||
{
|
||||
__sighandler_t k_sa_handler;
|
||||
sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer) (void);
|
||||
};
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
(kact)->sa_restorer = (act)->sa_restorer
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
||||
#endif
|
||||
/* m68k does not define SA_RESTORER, but does have sa_restorer member
|
||||
on kernel sigaction struct. */
|
||||
#define HAS_SA_RESTORER 1
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
@ -1,8 +1,9 @@
|
||||
/* NIOS2 uses the generic Linux UAPI but defines SA_RESTORER. */
|
||||
#define SA_RESTORER 0x04000000
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
(kact)->sa_restorer = (act)->sa_restorer
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
@ -1,9 +1,10 @@
|
||||
/* powerpc kernel sigaction is similar to generic Linux UAPI one,
|
||||
but the architecture also defines SA_RESTORER. */
|
||||
#define SA_RESTORER 0x04000000
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
(kact)->sa_restorer = (act)->sa_restorer
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
@ -1,8 +1,9 @@
|
||||
/* SH uses the generic Linux UAPI but defines SA_RESTORER. */
|
||||
#define SA_RESTORER 0x04000000
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
(kact)->sa_restorer = (act)->sa_restorer
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
@ -1,10 +1,5 @@
|
||||
/* SPARC 'struct __new_sigaction' is similar to generic Linux UAPI with
|
||||
a sa_restorer field, even though function is passed as an argument
|
||||
to rt_sigaction syscall. */
|
||||
#define SA_RESTORER 0x04000000
|
||||
#define HAS_SA_RESTORER 1
|
||||
#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
||||
|
||||
#define SET_SA_RESTORER(kact, act) \
|
||||
(kact)->sa_restorer = NULL
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
@ -18,7 +18,6 @@
|
||||
|
||||
#include <signal.h>
|
||||
#define SA_RESTORER 0x04000000
|
||||
#include <kernel_sigaction.h>
|
||||
|
||||
extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
|
||||
|
||||
@ -29,6 +28,8 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
|
||||
#define RESET_SA_RESTORER(act, kact) \
|
||||
(act)->sa_restorer = (kact)->sa_restorer
|
||||
|
||||
#include <kernel_sigaction.h>
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/sigaction.c>
|
||||
|
||||
/* NOTE: Please think twice before making any changes to the bits of
|
||||
|
Loading…
Reference in New Issue
Block a user