diff options
author | Alexander van Heukelum <heukelum@fastmail.fm> | 2008-10-04 17:12:46 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-13 04:33:45 -0400 |
commit | 8a541665b9063c5006b370d4488cf9f6beb6083f (patch) | |
tree | fe3411f956e0be63f9eee4ca6c49df2276be4571 /arch/x86/kernel/dumpstack_64.c | |
parent | 802a67de0cbd1ef10df80ad48b840e2103b13e52 (diff) |
dumpstack: x86: various small unification steps
- define STACKSLOTS_PER_LINE and use it
- define get_bp macro to hide the %%ebp/%%rbp difference
- i386: check task==NULL in dump_trace, like x86_64
- i386: show_trace(NULL, ...) uses current automatically
- x86_64: use [#%d] for die_counter, like i386
- whitespace and comments
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/dumpstack_64.c')
-rw-r--r-- | arch/x86/kernel/dumpstack_64.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 7fd32944ceac..13379a988292 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -16,8 +16,11 @@ | |||
16 | 16 | ||
17 | #include <asm/stacktrace.h> | 17 | #include <asm/stacktrace.h> |
18 | 18 | ||
19 | #define STACKSLOTS_PER_LINE 4 | ||
20 | #define get_bp(bp) asm("movl %%rbp, %0" : "=r" (bp) :) | ||
21 | |||
19 | int panic_on_unrecovered_nmi; | 22 | int panic_on_unrecovered_nmi; |
20 | int kstack_depth_to_print = 12; | 23 | int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; |
21 | static unsigned int code_bytes = 64; | 24 | static unsigned int code_bytes = 64; |
22 | static int die_counter; | 25 | static int die_counter; |
23 | 26 | ||
@@ -177,7 +180,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs, | |||
177 | if (!bp) { | 180 | if (!bp) { |
178 | if (task == current) { | 181 | if (task == current) { |
179 | /* Grab bp right from our regs */ | 182 | /* Grab bp right from our regs */ |
180 | asm("movq %%rbp, %0" : "=r" (bp) : ); | 183 | get_bp(bp); |
181 | } else { | 184 | } else { |
182 | /* bp is the last reg pushed by switch_to */ | 185 | /* bp is the last reg pushed by switch_to */ |
183 | bp = *(unsigned long *) task->thread.sp; | 186 | bp = *(unsigned long *) task->thread.sp; |
@@ -329,7 +332,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, | |||
329 | if (((long) stack & (THREAD_SIZE-1)) == 0) | 332 | if (((long) stack & (THREAD_SIZE-1)) == 0) |
330 | break; | 333 | break; |
331 | } | 334 | } |
332 | if (i && ((i % 4) == 0)) | 335 | if (i && ((i % STACKSLOTS_PER_LINE) == 0)) |
333 | printk("\n%s", log_lvl); | 336 | printk("\n%s", log_lvl); |
334 | printk(" %016lx", *stack++); | 337 | printk(" %016lx", *stack++); |
335 | touch_nmi_watchdog(); | 338 | touch_nmi_watchdog(); |
@@ -353,7 +356,7 @@ void dump_stack(void) | |||
353 | 356 | ||
354 | #ifdef CONFIG_FRAME_POINTER | 357 | #ifdef CONFIG_FRAME_POINTER |
355 | if (!bp) | 358 | if (!bp) |
356 | asm("movq %%rbp, %0" : "=r" (bp) : ); | 359 | get_bp(bp); |
357 | #endif | 360 | #endif |
358 | 361 | ||
359 | printk("Pid: %d, comm: %.20s %s %s %.*s\n", | 362 | printk("Pid: %d, comm: %.20s %s %s %.*s\n", |
@@ -396,7 +399,7 @@ void show_registers(struct pt_regs *regs) | |||
396 | 399 | ||
397 | ip = (u8 *)regs->ip - code_prologue; | 400 | ip = (u8 *)regs->ip - code_prologue; |
398 | if (ip < (u8 *)PAGE_OFFSET || probe_kernel_address(ip, c)) { | 401 | if (ip < (u8 *)PAGE_OFFSET || probe_kernel_address(ip, c)) { |
399 | /* try starting at RIP */ | 402 | /* try starting at IP */ |
400 | ip = (u8 *)regs->ip; | 403 | ip = (u8 *)regs->ip; |
401 | code_len = code_len - code_prologue + 1; | 404 | code_len = code_len - code_prologue + 1; |
402 | } | 405 | } |
@@ -475,7 +478,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | |||
475 | 478 | ||
476 | int __kprobes __die(const char *str, struct pt_regs *regs, long err) | 479 | int __kprobes __die(const char *str, struct pt_regs *regs, long err) |
477 | { | 480 | { |
478 | printk(KERN_EMERG "%s: %04lx [%u] ", str, err & 0xffff, ++die_counter); | 481 | printk(KERN_EMERG "%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter); |
479 | #ifdef CONFIG_PREEMPT | 482 | #ifdef CONFIG_PREEMPT |
480 | printk("PREEMPT "); | 483 | printk("PREEMPT "); |
481 | #endif | 484 | #endif |