diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:07:57 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:07:57 -0500 |
commit | be9c5ae4eeec2e85527e95647348b8ea4eb25128 (patch) | |
tree | 59383b15bc0891b8a44500a0ac172a8850f1068d /lib | |
parent | bb26c6c29b7cc9f39e491b074b09f3c284738d36 (diff) | |
parent | 79a66b96c339626a3e4b226fefc0e45244cfe6ff (diff) |
Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (246 commits)
x86: traps.c replace #if CONFIG_X86_32 with #ifdef CONFIG_X86_32
x86: PAT: fix address types in track_pfn_vma_new()
x86: prioritize the FPU traps for the error code
x86: PAT: pfnmap documentation update changes
x86: PAT: move track untrack pfnmap stubs to asm-generic
x86: PAT: remove follow_pfnmap_pte in favor of follow_phys
x86: PAT: modify follow_phys to return phys_addr prot and return value
x86: PAT: clarify is_linear_pfn_mapping() interface
x86: ia32_signal: remove unnecessary declaration
x86: common.c boot_cpu_stack and boot_exception_stacks should be static
x86: fix intel x86_64 llc_shared_map/cpu_llc_id anomolies
x86: fix warning in arch/x86/kernel/microcode_amd.c
x86: ia32.h: remove unused struct sigfram32 and rt_sigframe32
x86: asm-offset_64: use rt_sigframe_ia32
x86: sigframe.h: include headers for dependency
x86: traps.c declare functions before they get used
x86: PAT: update documentation to cover pgprot and remap_pfn related changes - v3
x86: PAT: add pgprot_writecombine() interface for drivers - v3
x86: PAT: change pgprot_noncached to uc_minus instead of strong uc - v3
x86: PAT: implement track/untrack of pfnmap regions for x86 - v3
...
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bug.c | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -5,6 +5,8 @@ | |||
5 | 5 | ||
6 | CONFIG_BUG - emit BUG traps. Nothing happens without this. | 6 | CONFIG_BUG - emit BUG traps. Nothing happens without this. |
7 | CONFIG_GENERIC_BUG - enable this code. | 7 | CONFIG_GENERIC_BUG - enable this code. |
8 | CONFIG_GENERIC_BUG_RELATIVE_POINTERS - use 32-bit pointers relative to | ||
9 | the containing struct bug_entry for bug_addr and file. | ||
8 | CONFIG_DEBUG_BUGVERBOSE - emit full file+line information for each BUG | 10 | CONFIG_DEBUG_BUGVERBOSE - emit full file+line information for each BUG |
9 | 11 | ||
10 | CONFIG_BUG and CONFIG_DEBUG_BUGVERBOSE are potentially user-settable | 12 | CONFIG_BUG and CONFIG_DEBUG_BUGVERBOSE are potentially user-settable |
@@ -43,6 +45,15 @@ | |||
43 | 45 | ||
44 | extern const struct bug_entry __start___bug_table[], __stop___bug_table[]; | 46 | extern const struct bug_entry __start___bug_table[], __stop___bug_table[]; |
45 | 47 | ||
48 | static inline unsigned long bug_addr(const struct bug_entry *bug) | ||
49 | { | ||
50 | #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS | ||
51 | return bug->bug_addr; | ||
52 | #else | ||
53 | return (unsigned long)bug + bug->bug_addr_disp; | ||
54 | #endif | ||
55 | } | ||
56 | |||
46 | #ifdef CONFIG_MODULES | 57 | #ifdef CONFIG_MODULES |
47 | static LIST_HEAD(module_bug_list); | 58 | static LIST_HEAD(module_bug_list); |
48 | 59 | ||
@@ -55,7 +66,7 @@ static const struct bug_entry *module_find_bug(unsigned long bugaddr) | |||
55 | unsigned i; | 66 | unsigned i; |
56 | 67 | ||
57 | for (i = 0; i < mod->num_bugs; ++i, ++bug) | 68 | for (i = 0; i < mod->num_bugs; ++i, ++bug) |
58 | if (bugaddr == bug->bug_addr) | 69 | if (bugaddr == bug_addr(bug)) |
59 | return bug; | 70 | return bug; |
60 | } | 71 | } |
61 | return NULL; | 72 | return NULL; |
@@ -108,7 +119,7 @@ const struct bug_entry *find_bug(unsigned long bugaddr) | |||
108 | const struct bug_entry *bug; | 119 | const struct bug_entry *bug; |
109 | 120 | ||
110 | for (bug = __start___bug_table; bug < __stop___bug_table; ++bug) | 121 | for (bug = __start___bug_table; bug < __stop___bug_table; ++bug) |
111 | if (bugaddr == bug->bug_addr) | 122 | if (bugaddr == bug_addr(bug)) |
112 | return bug; | 123 | return bug; |
113 | 124 | ||
114 | return module_find_bug(bugaddr); | 125 | return module_find_bug(bugaddr); |
@@ -133,7 +144,11 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs) | |||
133 | 144 | ||
134 | if (bug) { | 145 | if (bug) { |
135 | #ifdef CONFIG_DEBUG_BUGVERBOSE | 146 | #ifdef CONFIG_DEBUG_BUGVERBOSE |
147 | #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS | ||
136 | file = bug->file; | 148 | file = bug->file; |
149 | #else | ||
150 | file = (const char *)bug + bug->file_disp; | ||
151 | #endif | ||
137 | line = bug->line; | 152 | line = bug->line; |
138 | #endif | 153 | #endif |
139 | warning = (bug->flags & BUGFLAG_WARNING) != 0; | 154 | warning = (bug->flags & BUGFLAG_WARNING) != 0; |