| Index: sandbox/linux/system_headers/linux_signal.h
|
| diff --git a/sandbox/linux/system_headers/linux_signal.h b/sandbox/linux/system_headers/linux_signal.h
|
| index 5db7fc5ea1dba01b659232c92c03b21a42380d6e..6801b71cee741aeb4b7d098b3c828869bad7f206 100644
|
| --- a/sandbox/linux/system_headers/linux_signal.h
|
| +++ b/sandbox/linux/system_headers/linux_signal.h
|
| @@ -8,6 +8,58 @@
|
| // NOTE: On some toolchains, signal related ABI is incompatible with Linux's
|
| // (not undefined, but defined different values and in different memory
|
| // layouts). So, fill the gap here.
|
| +#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
|
| + defined(__aarch64__)
|
| +
|
| +#define LINUX_SIGHUP 1
|
| +#define LINUX_SIGINT 2
|
| +#define LINUX_SIGQUIT 3
|
| +#define LINUX_SIGABRT 6
|
| +#define LINUX_SIGBUS 7
|
| +#define LINUX_SIGUSR1 10
|
| +#define LINUX_SIGSEGV 11
|
| +#define LINUX_SIGUSR2 12
|
| +#define LINUX_SIGPIPE 13
|
| +#define LINUX_SIGTERM 15
|
| +#define LINUX_SIGCHLD 17
|
| +#define LINUX_SIGSYS 31
|
| +
|
| +#define LINUX_SIG_BLOCK 0
|
| +#define LINUX_SIG_UNBLOCK 1
|
| +
|
| +#define LINUX_SA_SIGINFO 4
|
| +#define LINUX_SA_NODEFER 0x40000000
|
| +#define LINUX_SA_RESTART 0x10000000
|
| +
|
| +#define LINUX_SIG_DFL 0
|
| +
|
| +#elif defined(__mips__)
|
| +
|
| +#define LINUX_SIGHUP 1
|
| +#define LINUX_SIGINT 2
|
| +#define LINUX_SIGQUIT 3
|
| +#define LINUX_SIGABRT 6
|
| +#define LINUX_SIGBUS 10
|
| +#define LINUX_SIGSEGV 11
|
| +#define LINUX_SIGSYS 12
|
| +#define LINUX_SIGPIPE 13
|
| +#define LINUX_SIGTERM 15
|
| +#define LINUX_SIGUSR1 16
|
| +#define LINUX_SIGUSR2 17
|
| +#define LINUX_SIGCHLD 18
|
| +
|
| +#define LINUX_SIG_BLOCK 1
|
| +#define LINUX_SIG_UNBLOCK 2
|
| +
|
| +#define LINUX_SA_SIGINFO 0x00000008
|
| +#define LINUX_SA_NODEFER 0x40000000
|
| +#define LINUX_SA_RESTART 0x10000000
|
| +
|
| +#define LINUX_SIG_DFL 0
|
| +
|
| +#else
|
| +#error "Unsupported platform"
|
| +#endif
|
|
|
| #if defined(__native_client_nonsfi__)
|
| #if !defined(__i386__) && !defined(__arm__)
|
| @@ -16,20 +68,6 @@
|
|
|
| #include <signal.h>
|
|
|
| -#define LINUX_SIGBUS 7 // 10 in PNaCl toolchain.
|
| -#define LINUX_SIGSEGV 11 // 11 in PNaCl toolchain. Defined for consistency.
|
| -#define LINUX_SIGCHLD 17 // 20 in PNaCl toolchain.
|
| -#define LINUX_SIGSYS 31 // 12 in PNaCl toolchain.
|
| -
|
| -#define LINUX_SIG_BLOCK 0 // 1 in PNaCl toolchain.
|
| -#define LINUX_SIG_UNBLOCK 1 // 2 in PNaCl toolchain.
|
| -
|
| -#define LINUX_SA_SIGINFO 4 // 2 in PNaCl toolchain.
|
| -#define LINUX_SA_NODEFER 0x40000000 // Undefined in PNaCl toolchain.
|
| -#define LINUX_SA_RESTART 0x10000000 // Undefined in PNaCl toolchain.
|
| -
|
| -#define LINUX_SIG_DFL 0 // In PNaCl toolchain, unneeded cast is applied.
|
| -
|
| struct LinuxSigInfo {
|
| int si_signo;
|
| int si_errno;
|
| @@ -44,22 +82,27 @@ struct LinuxSigInfo {
|
|
|
| #else // !defined(__native_client_nonsfi__)
|
|
|
| -// Just alias the toolchain's value.
|
| #include <signal.h>
|
|
|
| -#define LINUX_SIGBUS SIGBUS
|
| -#define LINUX_SIGSEGV SIGSEGV
|
| -#define LINUX_SIGCHLD SIGCHLD
|
| -#define LINUX_SIGSYS SIGSYS
|
| -
|
| -#define LINUX_SIG_BLOCK SIG_BLOCK
|
| -#define LINUX_SIG_UNBLOCK SIG_UNBLOCK
|
| -
|
| -#define LINUX_SA_SIGINFO SA_SIGINFO
|
| -#define LINUX_SA_NODEFER SA_NODEFER
|
| -#define LINUX_SA_RESTART SA_RESTART
|
| -
|
| -#define LINUX_SIG_DFL SIG_DFL
|
| +static_assert(LINUX_SIGHUP == SIGHUP, "LINUX_SIGHUP == SIGHUP");
|
| +static_assert(LINUX_SIGINT == SIGINT, "LINUX_SIGINT == SIGINT");
|
| +static_assert(LINUX_SIGQUIT == SIGQUIT, "LINUX_SIGQUIT == SIGQUIT");
|
| +static_assert(LINUX_SIGABRT == SIGABRT, "LINUX_SIGABRT == SIGABRT");
|
| +static_assert(LINUX_SIGBUS == SIGBUS, "LINUX_SIGBUS == SIGBUS");
|
| +static_assert(LINUX_SIGUSR1 == SIGUSR1, "LINUX_SIGUSR1 == SIGUSR1");
|
| +static_assert(LINUX_SIGSEGV == SIGSEGV, "LINUX_SIGSEGV == SIGSEGV");
|
| +static_assert(LINUX_SIGUSR2 == SIGUSR2, "LINUX_SIGUSR2 == SIGUSR2");
|
| +static_assert(LINUX_SIGPIPE == SIGPIPE, "LINUX_SIGPIPE == SIGPIPE");
|
| +static_assert(LINUX_SIGTERM == SIGTERM, "LINUX_SIGTERM == SIGTERM");
|
| +static_assert(LINUX_SIGCHLD == SIGCHLD, "LINUX_SIGCHLD == SIGCHLD");
|
| +static_assert(LINUX_SIGSYS == SIGSYS, "LINUX_SIGSYS == SIGSYS");
|
| +static_assert(LINUX_SIG_BLOCK == SIG_BLOCK, "LINUX_SIG_BLOCK == SIG_BLOCK");
|
| +static_assert(LINUX_SIG_UNBLOCK == SIG_UNBLOCK,
|
| + "LINUX_SIG_UNBLOCK == SIG_UNBLOCK");
|
| +static_assert(LINUX_SA_SIGINFO == SA_SIGINFO, "LINUX_SA_SIGINFO == SA_SIGINFO");
|
| +static_assert(LINUX_SA_NODEFER == SA_NODEFER, "LINUX_SA_NODEFER == SA_NODEFER");
|
| +static_assert(LINUX_SA_RESTART == SA_RESTART, "LINUX_SA_RESTART == SA_RESTART");
|
| +static_assert(LINUX_SIG_DFL == SIG_DFL, "LINUX_SIG_DFL == SIG_DFL");
|
|
|
| typedef siginfo_t LinuxSigInfo;
|
|
|
| @@ -70,4 +113,32 @@ typedef siginfo_t LinuxSigInfo;
|
|
|
| #endif // !defined(__native_client_nonsfi__)
|
|
|
| +// struct sigset_t is different size in PNaCl from the Linux's.
|
| +#if defined(__mips__)
|
| +#if !defined(_NSIG_WORDS)
|
| +#define _NSIG_WORDS 4
|
| +#endif
|
| +struct LinuxSigSet {
|
| + unsigned long sig[_NSIG_WORDS];
|
| +};
|
| +#else
|
| +typedef uint64_t LinuxSigSet;
|
| +#endif
|
| +
|
| +// struct sigaction is different in PNaCl from the Linux's.
|
| +#if defined(__mips__)
|
| +struct LinuxSigAction {
|
| + unsigned int sa_flags;
|
| + void (*kernel_handler)(int);
|
| + LinuxSigSet sa_mask;
|
| +};
|
| +#else
|
| +struct LinuxSigAction {
|
| + void (*kernel_handler)(int);
|
| + uint32_t sa_flags;
|
| + void (*sa_restorer)(void);
|
| + LinuxSigSet sa_mask;
|
| +};
|
| +#endif
|
| +
|
| #endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SIGNAL_H_
|
|
|