/* Generated by ./xlat/gen.sh from ./xlat/sigtrap_codes.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(TRAP_BRKPT) || (defined(HAVE_DECL_TRAP_BRKPT) && HAVE_DECL_TRAP_BRKPT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TRAP_BRKPT) == (1), "TRAP_BRKPT != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TRAP_BRKPT 1
#endif
#if defined(TRAP_TRACE) || (defined(HAVE_DECL_TRAP_TRACE) && HAVE_DECL_TRAP_TRACE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TRAP_TRACE) == (2), "TRAP_TRACE != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TRAP_TRACE 2
#endif
#if defined(TRAP_BRANCH) || (defined(HAVE_DECL_TRAP_BRANCH) && HAVE_DECL_TRAP_BRANCH)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TRAP_BRANCH) == (3), "TRAP_BRANCH != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TRAP_BRANCH 3
#endif
#if defined(TRAP_HWBKPT) || (defined(HAVE_DECL_TRAP_HWBKPT) && HAVE_DECL_TRAP_HWBKPT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TRAP_HWBKPT) == (4), "TRAP_HWBKPT != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TRAP_HWBKPT 4
#endif
#if defined(TRAP_UNK) || (defined(HAVE_DECL_TRAP_UNK) && HAVE_DECL_TRAP_UNK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((TRAP_UNK) == (5), "TRAP_UNK != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define TRAP_UNK 5
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat sigtrap_codes[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat sigtrap_codes[] = {
#if defined(TRAP_STEP) || (defined(HAVE_DECL_TRAP_STEP) && HAVE_DECL_TRAP_STEP)
  XLAT(TRAP_STEP),
#endif
 XLAT(TRAP_BRKPT),
#if defined(TRAP_TRACEFLOW) || (defined(HAVE_DECL_TRAP_TRACEFLOW) && HAVE_DECL_TRAP_TRACEFLOW)
  XLAT(TRAP_TRACEFLOW),
#endif
 XLAT(TRAP_TRACE),
#if defined(TRAP_WATCHPT) || (defined(HAVE_DECL_TRAP_WATCHPT) && HAVE_DECL_TRAP_WATCHPT)
  XLAT(TRAP_WATCHPT),
#endif
 XLAT(TRAP_BRANCH),
#if defined(TRAP_ILLTRAP) || (defined(HAVE_DECL_TRAP_ILLTRAP) && HAVE_DECL_TRAP_ILLTRAP)
  XLAT(TRAP_ILLTRAP),
#endif
 XLAT(TRAP_HWBKPT),
 XLAT(TRAP_UNK),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
