| /* | |
| * Copyright (C) 2006 Atmel Corporation | |
| * | |
| * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License version 2 as | |
| * published by the Free Software Foundation. | |
| */ | |
| #ifndef __ASM_AVR32_BUG_H | |
| #define __ASM_AVR32_BUG_H | |
| #ifdef CONFIG_BUG | |
| /* | |
| * According to our Chief Architect, this compact opcode is very | |
| * unlikely to ever be implemented. | |
| */ | |
| #define AVR32_BUG_OPCODE 0x5df0 | |
| #ifdef CONFIG_DEBUG_BUGVERBOSE | |
| #define _BUG_OR_WARN(flags) \ | |
| asm volatile( \ | |
| "1: .hword %0\n" \ | |
| " .section __bug_table,\"a\",@progbits\n" \ | |
| "2: .long 1b\n" \ | |
| " .long %1\n" \ | |
| " .short %2\n" \ | |
| " .short %3\n" \ | |
| " .org 2b + %4\n" \ | |
| " .previous" \ | |
| : \ | |
| : "i"(AVR32_BUG_OPCODE), "i"(__FILE__), \ | |
| "i"(__LINE__), "i"(flags), \ | |
| "i"(sizeof(struct bug_entry))) | |
| #else | |
| #define _BUG_OR_WARN(flags) \ | |
| asm volatile( \ | |
| "1: .hword %0\n" \ | |
| " .section __bug_table,\"a\",@progbits\n" \ | |
| "2: .long 1b\n" \ | |
| " .short %1\n" \ | |
| " .org 2b + %2\n" \ | |
| " .previous" \ | |
| : \ | |
| : "i"(AVR32_BUG_OPCODE), "i"(flags), \ | |
| "i"(sizeof(struct bug_entry))) | |
| #endif /* CONFIG_DEBUG_BUGVERBOSE */ | |
| #define BUG() \ | |
| do { \ | |
| _BUG_OR_WARN(0); \ | |
| unreachable(); \ | |
| } while (0) | |
| #define WARN_ON(condition) \ | |
| ({ \ | |
| int __ret_warn_on = !!(condition); \ | |
| if (unlikely(__ret_warn_on)) \ | |
| _BUG_OR_WARN(BUGFLAG_WARNING); \ | |
| unlikely(__ret_warn_on); \ | |
| }) | |
| #define HAVE_ARCH_BUG | |
| #define HAVE_ARCH_WARN_ON | |
| #endif /* CONFIG_BUG */ | |
| #include <asm-generic/bug.h> | |
| struct pt_regs; | |
| void die(const char *str, struct pt_regs *regs, long err); | |
| void _exception(long signr, struct pt_regs *regs, int code, | |
| unsigned long addr); | |
| #endif /* __ASM_AVR32_BUG_H */ |