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

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

#if defined(LINUX_REBOOT_MAGIC2) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2) && HAVE_DECL_LINUX_REBOOT_MAGIC2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_MAGIC2) == (672274793), "LINUX_REBOOT_MAGIC2 != 672274793");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_MAGIC2 672274793
#endif
#if defined(LINUX_REBOOT_MAGIC2A) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2A) && HAVE_DECL_LINUX_REBOOT_MAGIC2A)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_MAGIC2A) == (85072278), "LINUX_REBOOT_MAGIC2A != 85072278");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_MAGIC2A 85072278
#endif
#if defined(LINUX_REBOOT_MAGIC2B) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2B) && HAVE_DECL_LINUX_REBOOT_MAGIC2B)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_MAGIC2B) == (369367448), "LINUX_REBOOT_MAGIC2B != 369367448");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_MAGIC2B 369367448
#endif
#if defined(LINUX_REBOOT_MAGIC2C) || (defined(HAVE_DECL_LINUX_REBOOT_MAGIC2C) && HAVE_DECL_LINUX_REBOOT_MAGIC2C)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_MAGIC2C) == (537993216), "LINUX_REBOOT_MAGIC2C != 537993216");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_MAGIC2C 537993216
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat bootflags2 in mpers mode

# else

static
const struct xlat bootflags2[] = {
 XLAT(LINUX_REBOOT_MAGIC2),
 XLAT(LINUX_REBOOT_MAGIC2A),
 XLAT(LINUX_REBOOT_MAGIC2B),
 XLAT(LINUX_REBOOT_MAGIC2C),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
