Installed-header hygiene (BZ#20366): stack_t.

sys/ucontext.h unconditionally uses stack_t, and it does not make
sense to change that.  But signal.h only declares stack_t under
__USE_XOPEN_EXTENDED || __USE_XOPEN2K8.  The actual definition is
already in a bits header, bits/sigstack.h, but that header insists on
only being included by signal.h, so we have to change that as well as
all of the sys/ucontext.h variants.  (Some but not all variants of
bits/sigcontext.h, which sys/ucontext.h may also need, had already
received this adjustment; for consistency, I made them all the same,
even if that's not strictly necessary in some configurations.)
bits/sigcontext.h and bits/sigstack.h also all need to receive
multiple inclusion guards.

	* sysdeps/generic/sys/ucontext.h
	* sysdeps/arm/sys/ucontext.h
	* sysdeps/i386/sys/ucontext.h
	* sysdeps/m68k/sys/ucontext.h
	* sysdeps/mips/sys/ucontext.h
	* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
	* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
	* sysdeps/unix/sysv/linux/arm/sys/ucontext.h
	* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
	* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h
	* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
	* sysdeps/unix/sysv/linux/mips/sys/ucontext.h
	* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
	* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
	* sysdeps/unix/sysv/linux/s390/sys/ucontext.h
	* sysdeps/unix/sysv/linux/sh/sys/ucontext.h
	* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
	* sysdeps/unix/sysv/linux/tile/sys/ucontext.h
	* sysdeps/unix/sysv/linux/x86/sys/ucontext.h:
	Include both bits/sigcontext.h and bits/sigstack.h.
	Fix grammar error in comment, if present.

	* bits/sigstack.h
	* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
	* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h
	* sysdeps/unix/sysv/linux/bits/sigstack.h
	* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h
	* sysdeps/unix/sysv/linux/mips/bits/sigstack.h
	* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
	* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h
	* bits/sigcontext.h
	* sysdeps/mach/hurd/i386/bits/sigcontext.h
	* sysdeps/unix/sysv/linux/bits/sigcontext.h
	* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
	* sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h:
	Add multiple inclusion guard.  Permit inclusion by sys/ucontext.h
	as well as signal.h, if this was not already allowed.  Request
	definition of size_t if necessary.  Minimize semantically-null
	differences across files.
This commit is contained in:
Zack Weinberg 2016-07-13 16:11:57 -04:00
parent 05b68e14b1
commit c66b29f9cc
33 changed files with 271 additions and 108 deletions

View File

@ -1,3 +1,45 @@
2016-09-23 Zack Weinberg <zackw@panix.com>
* sysdeps/generic/sys/ucontext.h
* sysdeps/arm/sys/ucontext.h
* sysdeps/i386/sys/ucontext.h
* sysdeps/m68k/sys/ucontext.h
* sysdeps/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h:
Include both bits/sigcontext.h and bits/sigstack.h.
Fix grammar error in comment, if present.
* bits/sigstack.h
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h
* sysdeps/unix/sysv/linux/bits/sigstack.h
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h
* bits/sigcontext.h
* sysdeps/mach/hurd/i386/bits/sigcontext.h
* sysdeps/unix/sysv/linux/bits/sigcontext.h
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
* sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h:
Add multiple inclusion guard. Permit inclusion by sys/ucontext.h
as well as signal.h, if this was not already allowed. Request
definition of size_t if necessary. Minimize semantically-null
differences across files.
2016-09-23 Zack Weinberg <zackw@panix.com>
* time/time.h, bits/time.h, sysdeps/unix/sysv/linux/bits/time.h:

View File

@ -16,7 +16,10 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
#endif
@ -30,3 +33,5 @@ struct sigcontext
};
/* Signal subcodes should be defined here. */
#endif /* bits/sigcontext.h */

View File

@ -16,7 +16,10 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
@ -52,3 +55,5 @@ enum
/* System default stack size. */
#define SIGSTKSZ (MINSIGSTKSZ + 32768)
#endif /* bits/sigstack.h */

View File

@ -23,6 +23,12 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
typedef int greg_t;
/* Number of general registers. */

View File

@ -25,9 +25,11 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
typedef struct sigcontext mcontext_t;

View File

@ -23,6 +23,12 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for general register. */
typedef int greg_t;

View File

@ -23,6 +23,12 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for general register. */
typedef int greg_t;

View File

@ -16,12 +16,13 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
#endif
#ifndef sc_pc
/* Signal handlers are actually called:
void handler (int sig, int code, struct sigcontext *scp); */
@ -116,4 +117,4 @@ struct sigcontext
#define DBG_SINGLE_TRAP 0x1 /* single step */
#define DBG_BRKPNT_FAULT 0x2 /* breakpoint instruction */
#endif /* sc_pc */
#endif /* bits/sigcontext.h */

View File

@ -21,9 +21,16 @@
#define _SYS_UCONTEXT_H 1
#include <features.h>
#include <sgidefs.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#include <sgidefs.h>
/* Type for general register. */
#if _MIPS_SIM == _ABIO32
typedef __uint32_t greg_t;

View File

@ -16,10 +16,15 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 16384
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -23,11 +23,14 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#include <sys/procfs.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
#include <bits/sigcontext.h>
typedef elf_greg_t greg_t;

View File

@ -16,10 +16,15 @@
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
__ptr_t ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 16384
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
__ptr_t ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -21,7 +21,10 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for general register. */

View File

@ -23,9 +23,11 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
typedef int greg_t;

View File

@ -15,6 +15,9 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
#endif
@ -30,3 +33,5 @@
# define __need_NULL
# include <stddef.h>
#endif
#endif /* bits/sigcontext.h */

View File

@ -16,10 +16,15 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 8192
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -23,9 +23,10 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for general register. */

View File

@ -16,13 +16,13 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
#endif
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#define __need_size_t
#include <stddef.h>
#include <bits/sigstack.h>

View File

@ -16,12 +16,15 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#ifndef _SIGSTACK_H
#define _SIGSTACK_H 1
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -30,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
__ptr_t ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -50,13 +60,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 262144
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
__ptr_t ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */
#endif /* bits/sigstack.h */

View File

@ -21,7 +21,11 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/*
* These are here mostly for backwards compatibility with older Unices.

View File

@ -23,6 +23,12 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for general register. */
typedef int greg_t;

View File

@ -16,10 +16,15 @@
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
size_t ss_size;
int ss_flags;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 8192
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
size_t ss_size;
int ss_flags;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -20,12 +20,15 @@
#define _SYS_UCONTEXT_H 1
#include <features.h>
#include <sgidefs.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#include <sgidefs.h>
/* Type for general register. Even in o32 we assume 64-bit registers,
like the kernel. */

View File

@ -24,6 +24,12 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* These definitions must be in sync with the kernel. */
#define MCONTEXT_VERSION 2

View File

@ -16,10 +16,15 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 16384
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -21,9 +21,11 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#if __WORDSIZE == 32

View File

@ -18,15 +18,15 @@
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
/* Forward definition to avoid parse errors */
struct ucontext;
typedef struct ucontext ucontext_t;
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by in <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Type for a program status word. */
typedef struct

View File

@ -23,9 +23,10 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
typedef int greg_t;

View File

@ -15,6 +15,9 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_SIGCONTEXT_H
#define _BITS_SIGCONTEXT_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
#endif
@ -75,3 +78,5 @@ struct sigcontext
};
#endif /* sparc64 */
#endif /* bits/sigcontext.h */

View File

@ -16,10 +16,15 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SIGNAL_H
#ifndef _BITS_SIGSTACK_H
#define _BITS_SIGSTACK_H 1
#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
# error "Never include this file directly. Use <signal.h> instead"
#endif
#define __need_size_t
#include <stddef.h>
/* Structure describing a signal stack (obsolete). */
struct sigstack
@ -28,8 +33,15 @@ struct sigstack
int ss_onstack; /* Nonzero if executing on this stack. */
};
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
/* Possible values for `ss_flags.'. */
/* Possible values for `ss_flags'. */
enum
{
SS_ONSTACK = 1,
@ -44,11 +56,4 @@ enum
/* System default stack size. */
#define SIGSTKSZ 16384
/* Alternate, preferred interface. */
typedef struct sigaltstack
{
void *ss_sp;
int ss_flags;
size_t ss_size;
} stack_t;
#endif /* bits/sigstack.h */

View File

@ -20,8 +20,15 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#include <bits/wordsize.h>
#if __WORDSIZE == 64
#define MC_TSTATE 0

View File

@ -22,13 +22,15 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
/* Get register type and register names. */
#include <arch/abi.h>
/* Type for general register. */
typedef uint_reg_t greg_t;

View File

@ -21,9 +21,11 @@
#include <features.h>
#include <signal.h>
/* We need the signal context definitions even if they are not used
included in <signal.h>. */
/* We need the signal context definitions even if they are not exposed
by <signal.h>. */
#include <bits/sigcontext.h>
#include <bits/sigstack.h>
#ifdef __x86_64__