chromium/sandbox/linux/system_headers/linux_signal.h

// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SIGNAL_H_
#define SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SIGNAL_H_

#include <stdint.h>

#include "build/build_config.h"

// 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
#define LINUX_SIGINT
#define LINUX_SIGQUIT
#define LINUX_SIGABRT
#define LINUX_SIGBUS
#define LINUX_SIGUSR1
#define LINUX_SIGSEGV
#define LINUX_SIGUSR2
#define LINUX_SIGPIPE
#define LINUX_SIGTERM
#define LINUX_SIGCHLD
#define LINUX_SIGSYS

#define LINUX_SIG_BLOCK
#define LINUX_SIG_UNBLOCK

#define LINUX_SA_SIGINFO
#define LINUX_SA_NODEFER
#define LINUX_SA_RESTART

#define LINUX_SIG_DFL

#elif defined(__mips__)

#define LINUX_SIGHUP
#define LINUX_SIGINT
#define LINUX_SIGQUIT
#define LINUX_SIGABRT
#define LINUX_SIGBUS
#define LINUX_SIGSEGV
#define LINUX_SIGSYS
#define LINUX_SIGPIPE
#define LINUX_SIGTERM
#define LINUX_SIGUSR1
#define LINUX_SIGUSR2
#define LINUX_SIGCHLD

#define LINUX_SIG_BLOCK
#define LINUX_SIG_UNBLOCK

#define LINUX_SA_SIGINFO
#define LINUX_SA_NODEFER
#define LINUX_SA_RESTART

#define LINUX_SIG_DFL

#else
#error "Unsupported platform"
#endif

#include <signal.h>

static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;
static_assert;

LinuxSigInfo;

// struct sigset_t is different size in PNaCl from the Linux's.
#if (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
#if !defined(_NSIG_WORDS)
#define _NSIG_WORDS
#endif
struct LinuxSigSet {
  unsigned long sig[_NSIG_WORDS];
};
#elif defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_64_BITS)
#if !defined(_NSIG_WORDS)
#define _NSIG_WORDS
#endif
struct LinuxSigSet {
  unsigned long sig[_NSIG_WORDS];
};
#else
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 {};
#endif

#endif  // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SIGNAL_H_