diff --git a/ChangeLog b/ChangeLog index 78a8afc2e8..6cc3067dae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,39 @@ +2017-06-05 Joseph Myers + + [BZ #21517] + * bits/types/stack_t.h (stack_t): Remove struct tag. + * sysdeps/unix/sysv/linux/bits/types/stack_t.h (stack_t): + Likewise. + * sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h (stack_t): + Likewise. + * debug/segfault.c (install_handler): Use stack_t instead of + struct sigaltstack. + * hurd/hurd/signal.h (struct hurd_sigstate): Likewise. + * hurd/trampoline.c (_hurd_setup_sighandler): Likewise. + * include/signal.h (__sigaltstack): Likwise. + * signal/sigaltstack.c (__sigaltstack): Likewise. + * signal/signal.h (sigaltstack): Likewise. + * sysdeps/mach/hurd/i386/signal-defines.sym + (SIGALTSTACK__SS_SP__OFFSET): Likewise. + (SIGALTSTACK__SS_SIZE__OFFSET): Likewise. + (SIGALTSTACK__SS_FLAGS__OFFSET): Likewise. + * sysdeps/mach/hurd/sigaltstack.c (__sigaltstack): Likewise. + * sysdeps/mach/hurd/sigstack.c (sigstack): Likewise. + * sysdeps/unix/sysv/linux/alpha/sys/procfs.h (struct + elf_prstatus): Likewise. + * sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c (CHECK_SP): + Likewise. + * sysdeps/unix/sysv/linux/ia64/sys/procfs.h (struct elf_prstatus): + Likewise. + * sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c (CHECK_SP): + Likewise. + * sysdeps/unix/sysv/linux/powerpc/sys/procfs.h (struct + elf_prstatus): Likewise. + * sysdeps/unix/sysv/linux/sh/sys/procfs.h (struct elf_prstatus): + Likewise. + * sysdeps/unix/sysv/linux/sys/procfs.h (struct elf_prstatus): + Likewise. + 2017-06-04 Zack Weinberg * sysdeps/gnu/errlist.c: Regenerate. diff --git a/NEWS b/NEWS index 256d8f0e3f..608538f77f 100644 --- a/NEWS +++ b/NEWS @@ -77,6 +77,9 @@ Version 2.26 compat implementation will be used (which refuses all flags and routes it to preadv or pwritev). +* The stack_t type no longer has the name struct sigaltstack. This changes + the C++ name mangling for interfaces involving this type. + Security related changes: * The DNS stub resolver limits the advertised UDP buffer size to 1200 bytes, diff --git a/bits/types/stack_t.h b/bits/types/stack_t.h index 3cf0a4019a..47149fce94 100644 --- a/bits/types/stack_t.h +++ b/bits/types/stack_t.h @@ -23,7 +23,7 @@ #include /* Structure describing a signal stack. */ -typedef struct sigaltstack +typedef struct { void *ss_sp; size_t ss_size; diff --git a/debug/segfault.c b/debug/segfault.c index dac9efb765..78c1cf5d1d 100644 --- a/debug/segfault.c +++ b/debug/segfault.c @@ -156,7 +156,7 @@ install_handler (void) if (getenv ("SEGFAULT_USE_ALTSTACK") != 0) { void *stack_mem = malloc (2 * SIGSTKSZ); - struct sigaltstack ss; + stack_t ss; if (stack_mem != NULL) { diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h index f899e81862..e03d53e6d7 100644 --- a/hurd/hurd/signal.h +++ b/hurd/hurd/signal.h @@ -70,7 +70,7 @@ struct hurd_sigstate sigset_t blocked; /* What signals are blocked. */ sigset_t pending; /* Pending signals, possibly blocked. */ struct sigaction actions[NSIG]; - struct sigaltstack sigaltstack; + stack_t sigaltstack; /* Chain of thread-local signal preemptors; see . Each element of this chain is in local stack storage, and the chain diff --git a/hurd/trampoline.c b/hurd/trampoline.c index 8216e22b7a..e506fd8c96 100644 --- a/hurd/trampoline.c +++ b/hurd/trampoline.c @@ -28,7 +28,7 @@ struct sigcontext * _hurd_setup_sighandler (int flags, __sighandler_t handler, - struct sigaltstack *sigaltstack, + stack_t *sigaltstack, int signo, int sigcode, void *state) { diff --git a/include/signal.h b/include/signal.h index e39ddc60b9..bcf1455ae7 100644 --- a/include/signal.h +++ b/include/signal.h @@ -41,8 +41,8 @@ extern int __sigqueue (__pid_t __pid, int __sig, #ifdef __USE_MISC extern int __sigreturn (struct sigcontext *__scp); #endif -extern int __sigaltstack (const struct sigaltstack *__ss, - struct sigaltstack *__oss); +extern int __sigaltstack (const stack_t *__ss, + stack_t *__oss); extern int __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact); libc_hidden_proto (__libc_sigaction) diff --git a/signal/sigaltstack.c b/signal/sigaltstack.c index e4d23195a0..b70afa7127 100644 --- a/signal/sigaltstack.c +++ b/signal/sigaltstack.c @@ -21,7 +21,7 @@ /* Run signals handlers on the stack specified by SS (if not NULL). If OSS is not NULL, it is filled in with the old signal stack status. */ int -sigaltstack (const struct sigaltstack *ss, struct sigaltstack *oss) +sigaltstack (const stack_t *ss, stack_t *oss) { __set_errno (ENOSYS); return -1; diff --git a/signal/signal.h b/signal/signal.h index 21d628dbd2..b3114736a5 100644 --- a/signal/signal.h +++ b/signal/signal.h @@ -309,8 +309,8 @@ extern int siginterrupt (int __sig, int __interrupt) __THROW; /* Alternate signal handler stack interface. This interface should always be preferred over `sigstack'. */ -extern int sigaltstack (const struct sigaltstack *__restrict __ss, - struct sigaltstack *__restrict __oss) __THROW; +extern int sigaltstack (const stack_t *__restrict __ss, + stack_t *__restrict __oss) __THROW; #endif /* Use POSIX.1-2008 or X/Open Unix. */ diff --git a/sysdeps/mach/hurd/i386/signal-defines.sym b/sysdeps/mach/hurd/i386/signal-defines.sym index 9521bd723c..e42bbbe061 100644 --- a/sysdeps/mach/hurd/i386/signal-defines.sym +++ b/sysdeps/mach/hurd/i386/signal-defines.sym @@ -5,6 +5,6 @@ HURD_SIGSTATE__SIGALTSTACK__OFFSET offsetof(struct hurd_sigstate, sigaltstack) -SIGALTSTACK__SS_SP__OFFSET offsetof(struct sigaltstack, ss_sp) -SIGALTSTACK__SS_SIZE__OFFSET offsetof(struct sigaltstack, ss_size) -SIGALTSTACK__SS_FLAGS__OFFSET offsetof(struct sigaltstack, ss_flags) +SIGALTSTACK__SS_SP__OFFSET offsetof(stack_t, ss_sp) +SIGALTSTACK__SS_SIZE__OFFSET offsetof(stack_t, ss_size) +SIGALTSTACK__SS_FLAGS__OFFSET offsetof(stack_t, ss_flags) diff --git a/sysdeps/mach/hurd/sigaltstack.c b/sysdeps/mach/hurd/sigaltstack.c index 06a6a5c112..4fba69e766 100644 --- a/sysdeps/mach/hurd/sigaltstack.c +++ b/sysdeps/mach/hurd/sigaltstack.c @@ -22,16 +22,16 @@ /* Run signals handlers on the stack specified by SS (if not NULL). If OSS is not NULL, it is filled in with the old signal stack status. */ int -__sigaltstack (const struct sigaltstack *argss, struct sigaltstack *oss) +__sigaltstack (const stack_t *argss, stack_t *oss) { struct hurd_sigstate *s; - struct sigaltstack ss, old; + stack_t ss, old; /* Fault before taking any locks. */ if (argss != NULL) ss = *argss; if (oss != NULL) - *(volatile struct sigaltstack *) oss = *oss; + *(volatile stack_t *) oss = *oss; s = _hurd_self_sigstate (); __spin_lock (&s->lock); diff --git a/sysdeps/mach/hurd/sigstack.c b/sysdeps/mach/hurd/sigstack.c index a3a11f9772..484efb627a 100644 --- a/sysdeps/mach/hurd/sigstack.c +++ b/sysdeps/mach/hurd/sigstack.c @@ -24,7 +24,7 @@ int sigstack (struct sigstack *ss, struct sigstack *oss) { - struct sigaltstack as, oas; + stack_t as, oas; as.ss_sp = ss->ss_sp; as.ss_size = 0; diff --git a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h index 2cd69d442e..abc9fd8d6e 100644 --- a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h @@ -71,7 +71,7 @@ struct elf_prstatus unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ #if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ + stack_t pr_altstack; /* Alternate stack info. */ struct sigaction pr_action; /* Signal action for current sig. */ #endif __pid_t pr_pid; diff --git a/sysdeps/unix/sysv/linux/bits/types/stack_t.h b/sysdeps/unix/sysv/linux/bits/types/stack_t.h index 497e42b0ff..373c227930 100644 --- a/sysdeps/unix/sysv/linux/bits/types/stack_t.h +++ b/sysdeps/unix/sysv/linux/bits/types/stack_t.h @@ -23,7 +23,7 @@ #include /* Structure describing a signal stack. */ -typedef struct sigaltstack +typedef struct { void *ss_sp; int ss_flags; diff --git a/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c b/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c index 3a04250add..48aaeb36c9 100644 --- a/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c +++ b/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c @@ -27,7 +27,7 @@ destroyed must all have stack values higher than ours. */ \ if ((unsigned long) (sp) > this_sp) \ { \ - struct sigaltstack oss; \ + stack_t oss; \ INTERNAL_SYSCALL_DECL (err); \ int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss);\ /* If we aren't using an alternate stack then we have already \ diff --git a/sysdeps/unix/sysv/linux/ia64/sys/procfs.h b/sysdeps/unix/sysv/linux/ia64/sys/procfs.h index 93e569b2cc..afe54fbd53 100644 --- a/sysdeps/unix/sysv/linux/ia64/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/ia64/sys/procfs.h @@ -73,7 +73,7 @@ struct elf_prstatus unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ #if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ + stack_t pr_altstack; /* Alternate stack info. */ struct sigaction pr_action; /* Signal action for current sig. */ #endif __pid_t pr_pid; diff --git a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c b/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c index 3539b54d7a..030e46389e 100644 --- a/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c +++ b/sysdeps/unix/sysv/linux/m68k/____longjmp_chk.c @@ -24,7 +24,7 @@ register unsigned long this_sp asm ("sp"); \ if ((unsigned long) (sp) < this_sp) \ { \ - struct sigaltstack oss; \ + stack_t oss; \ INTERNAL_SYSCALL_DECL (err); \ int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss); \ if (!INTERNAL_SYSCALL_ERROR_P (result, err) \ diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h b/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h index ef06072e94..b9635ad18a 100644 --- a/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h +++ b/sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h @@ -23,7 +23,7 @@ #include /* Structure describing a signal stack. */ -typedef struct sigaltstack +typedef struct { void *ss_sp; size_t ss_size; diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h b/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h index b7b7b0b904..61ded22955 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/powerpc/sys/procfs.h @@ -83,7 +83,7 @@ struct elf_prstatus unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ #if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ + stack_t pr_altstack; /* Alternate stack info. */ struct sigaction pr_action; /* Signal action for current sig. */ #endif __pid_t pr_pid; diff --git a/sysdeps/unix/sysv/linux/sh/sys/procfs.h b/sysdeps/unix/sysv/linux/sh/sys/procfs.h index c41c87788b..414911a661 100644 --- a/sysdeps/unix/sysv/linux/sh/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/sh/sys/procfs.h @@ -55,7 +55,7 @@ struct elf_prstatus unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ #if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ + stack_t pr_altstack; /* Alternate stack info. */ struct sigaction pr_action; /* Signal action for current sig. */ #endif __pid_t pr_pid; diff --git a/sysdeps/unix/sysv/linux/sys/procfs.h b/sysdeps/unix/sysv/linux/sys/procfs.h index 8dfa0c08d5..b3b2cf3e12 100644 --- a/sysdeps/unix/sysv/linux/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/sys/procfs.h @@ -58,7 +58,7 @@ struct elf_prstatus unsigned long int pr_sigpend; /* Set of pending signals. */ unsigned long int pr_sighold; /* Set of held signals. */ #if 0 - struct sigaltstack pr_altstack; /* Alternate stack info. */ + stack_t pr_altstack; /* Alternate stack info. */ struct sigaction pr_action; /* Signal action for current sig. */ #endif __pid_t pr_pid;