linux/arch/arm64/include/asm/bug.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2015  ARM Limited
   3 * Author: Dave Martin <Dave.Martin@arm.com>
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License version 2 as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16 */
  17
  18#ifndef _ARCH_ARM64_ASM_BUG_H
  19#define _ARCH_ARM64_ASM_BUG_H
  20
  21#include <asm/brk-imm.h>
  22
  23#ifdef CONFIG_DEBUG_BUGVERBOSE
  24#define _BUGVERBOSE_LOCATION(file, line) __BUGVERBOSE_LOCATION(file, line)
  25#define __BUGVERBOSE_LOCATION(file, line)                               \
  26                ".pushsection .rodata.str,\"aMS\",@progbits,1\n"        \
  27        "2:     .string \"" file "\"\n\t"                               \
  28                ".popsection\n\t"                                       \
  29                                                                        \
  30                ".long 2b - 0b\n\t"                                     \
  31                ".short " #line "\n\t"
  32#else
  33#define _BUGVERBOSE_LOCATION(file, line)
  34#endif
  35
  36#ifdef CONFIG_GENERIC_BUG
  37
  38#define __BUG_ENTRY(flags)                              \
  39                ".pushsection __bug_table,\"aw\"\n\t"   \
  40                ".align 2\n\t"                          \
  41        "0:     .long 1f - 0b\n\t"                      \
  42_BUGVERBOSE_LOCATION(__FILE__, __LINE__)                \
  43                ".short " #flags "\n\t"                 \
  44                ".popsection\n"                         \
  45        "1:     "
  46#else
  47#define __BUG_ENTRY(flags) ""
  48#endif
  49
  50#define __BUG_FLAGS(flags)                              \
  51        asm volatile (                                  \
  52                __BUG_ENTRY(flags)                      \
  53                "brk %[imm]" :: [imm] "i" (BUG_BRK_IMM) \
  54        );
  55
  56
  57#define BUG() do {                                      \
  58        __BUG_FLAGS(0);                                 \
  59        unreachable();                                  \
  60} while (0)
  61
  62#define __WARN_FLAGS(flags) __BUG_FLAGS(BUGFLAG_WARNING|(flags))
  63
  64#define HAVE_ARCH_BUG
  65
  66#include <asm-generic/bug.h>
  67
  68#endif /* ! _ARCH_ARM64_ASM_BUG_H */
  69