-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CRIS: Add architecture dependent bug.h for CRIS v10 and CRIS v32
- Loading branch information
Jesper Nilsson
committed
Feb 8, 2008
1 parent
fbdb5f8
commit 0dfb8c3
Showing
2 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#ifndef __ASM_CRISv10_ARCH_BUG_H | ||
#define __ASM_CRISv10_ARCH_BUG_H | ||
|
||
#include <linux/stringify.h> | ||
|
||
#ifdef CONFIG_BUG | ||
#ifdef CONFIG_DEBUG_BUGVERBOSE | ||
/* The BUG() macro is used for marking obviously incorrect code paths. | ||
* It will cause a message with the file name and line number to be printed, | ||
* and then cause an oops. The message is actually printed by handle_BUG() | ||
* in arch/cris/kernel/traps.c, and the reason we use this method of storing | ||
* the file name and line number is that we do not want to affect the registers | ||
* by calling printk() before causing the oops. | ||
*/ | ||
|
||
#define BUG_PREFIX 0x0D7F | ||
#define BUG_MAGIC 0x00001234 | ||
|
||
struct bug_frame { | ||
unsigned short prefix; | ||
unsigned int magic; | ||
unsigned short clear; | ||
unsigned short movu; | ||
unsigned short line; | ||
unsigned short jump; | ||
unsigned char *filename; | ||
}; | ||
|
||
#if 0 | ||
/* Unfortunately this version of the macro does not work due to a problem | ||
* with the compiler (aka a bug) when compiling with -O2, which sometimes | ||
* erroneously causes the second input to be stored in a register... | ||
*/ | ||
#define BUG() \ | ||
__asm__ __volatile__ ("clear.d [" __stringify(BUG_MAGIC) "]\n\t"\ | ||
"movu.w %0,$r0\n\t" \ | ||
"jump %1\n\t" \ | ||
: : "i" (__LINE__), "i" (__FILE__)) | ||
#else | ||
/* This version will have to do for now, until the compiler is fixed. | ||
* The drawbacks of this version are that the file name will appear multiple | ||
* times in the .rodata section, and that __LINE__ and __FILE__ can probably | ||
* not be used like this with newer versions of gcc. | ||
*/ | ||
#define BUG() \ | ||
__asm__ __volatile__ ("clear.d [" __stringify(BUG_MAGIC) "]\n\t"\ | ||
"movu.w " __stringify(__LINE__) ",$r0\n\t"\ | ||
"jump 0f\n\t" \ | ||
".section .rodata\n" \ | ||
"0:\t.string \"" __FILE__ "\"\n\t" \ | ||
".previous") | ||
#endif | ||
|
||
#else | ||
|
||
/* This just causes an oops. */ | ||
#define BUG() (*(int *)0 = 0) | ||
|
||
#endif | ||
|
||
#define HAVE_ARCH_BUG | ||
#endif | ||
|
||
#include <asm-generic/bug.h> | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#ifndef __ASM_CRISv32_ARCH_BUG_H | ||
#define __ASM_CRISv32_ARCH_BUG_H | ||
|
||
#include <linux/stringify.h> | ||
|
||
#ifdef CONFIG_BUG | ||
#ifdef CONFIG_DEBUG_BUGVERBOSE | ||
/* | ||
* The penalty for the in-band code path will be the size of break 14. | ||
* All other stuff is done out-of-band with exception handlers. | ||
*/ | ||
#define BUG() \ | ||
__asm__ __volatile__ ("0: break 14\n\t" \ | ||
".section .fixup,\"ax\"\n" \ | ||
"1:\n\t" \ | ||
"move.d %0, $r10\n\t" \ | ||
"move.d %1, $r11\n\t" \ | ||
"jump do_BUG\n\t" \ | ||
"nop\n\t" \ | ||
".previous\n\t" \ | ||
".section __ex_table,\"a\"\n\t" \ | ||
".dword 0b, 1b\n\t" \ | ||
".previous\n\t" \ | ||
: : "ri" (__FILE__), "i" (__LINE__)) | ||
#else | ||
#define BUG() __asm__ __volatile__ ("break 14\n\t") | ||
#endif | ||
|
||
#define HAVE_ARCH_BUG | ||
#endif | ||
|
||
#include <asm-generic/bug.h> | ||
#endif |