1 /* 2 * Copyright 2004-2009 Analog Devices Inc. 3 * 4 * Licensed under the GPL-2 or later. 5 */ 6 7 #ifndef _BLACKFIN_BUG_H 8 #define _BLACKFIN_BUG_H 9 10 #ifdef CONFIG_BUG 11 12 /* 13 * This can be any undefined 16-bit opcode, meaning 14 * ((opcode & 0xc000) != 0xc000) 15 * Anything from 0x0001 to 0x000A (inclusive) will work 16 */ 17 #define BFIN_BUG_OPCODE 0x0001 18 19 #ifdef CONFIG_DEBUG_BUGVERBOSE 20 21 #define _BUG_OR_WARN(flags) \ 22 asm volatile( \ 23 "1: .hword %0\n" \ 24 " .section __bug_table,\"a\",@progbits\n" \ 25 "2: .long 1b\n" \ 26 " .long %1\n" \ 27 " .short %2\n" \ 28 " .short %3\n" \ 29 " .org 2b + %4\n" \ 30 " .previous" \ 31 : \ 32 : "i"(BFIN_BUG_OPCODE), "i"(__FILE__), \ 33 "i"(__LINE__), "i"(flags), \ 34 "i"(sizeof(struct bug_entry))) 35 36 #else 37 38 #define _BUG_OR_WARN(flags) \ 39 asm volatile( \ 40 "1: .hword %0\n" \ 41 " .section __bug_table,\"a\",@progbits\n" \ 42 "2: .long 1b\n" \ 43 " .short %1\n" \ 44 " .org 2b + %2\n" \ 45 " .previous" \ 46 : \ 47 : "i"(BFIN_BUG_OPCODE), "i"(flags), \ 48 "i"(sizeof(struct bug_entry))) 49 50 #endif /* CONFIG_DEBUG_BUGVERBOSE */ 51 52 #define BUG() \ 53 do { \ 54 _BUG_OR_WARN(0); \ 55 unreachable(); \ 56 } while (0) 57 58 #define WARN_ON(condition) \ 59 ({ \ 60 int __ret_warn_on = !!(condition); \ 61 if (unlikely(__ret_warn_on)) \ 62 _BUG_OR_WARN(BUGFLAG_WARNING); \ 63 unlikely(__ret_warn_on); \ 64 }) 65 66 #define HAVE_ARCH_BUG 67 #define HAVE_ARCH_WARN_ON 68 69 #endif 70 71 #include <asm-generic/bug.h> 72 73 #endif 74