Merge tag 'x86-core-2020-08-03' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 debug fixlets from Ingo Molnar: "Improve x86 debuggability: print registers with the same log level as the backtrace" * tag 'x86-core-2020-08-03' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/dumpstack: Show registers dump with trace's log level x86/dumpstack: Add log_lvl to __show_regs() x86/dumpstack: Add log_lvl to show_iret_regs()
This commit is contained in:
@@ -133,15 +133,15 @@ void show_ip(struct pt_regs *regs, const char *loglvl)
|
||||
show_opcodes(regs, loglvl);
|
||||
}
|
||||
|
||||
void show_iret_regs(struct pt_regs *regs)
|
||||
void show_iret_regs(struct pt_regs *regs, const char *log_lvl)
|
||||
{
|
||||
show_ip(regs, KERN_DEFAULT);
|
||||
printk(KERN_DEFAULT "RSP: %04x:%016lx EFLAGS: %08lx", (int)regs->ss,
|
||||
show_ip(regs, log_lvl);
|
||||
printk("%sRSP: %04x:%016lx EFLAGS: %08lx", log_lvl, (int)regs->ss,
|
||||
regs->sp, regs->flags);
|
||||
}
|
||||
|
||||
static void show_regs_if_on_stack(struct stack_info *info, struct pt_regs *regs,
|
||||
bool partial)
|
||||
bool partial, const char *log_lvl)
|
||||
{
|
||||
/*
|
||||
* These on_stack() checks aren't strictly necessary: the unwind code
|
||||
@@ -153,7 +153,7 @@ static void show_regs_if_on_stack(struct stack_info *info, struct pt_regs *regs,
|
||||
* they can be printed in the right context.
|
||||
*/
|
||||
if (!partial && on_stack(info, regs, sizeof(*regs))) {
|
||||
__show_regs(regs, SHOW_REGS_SHORT);
|
||||
__show_regs(regs, SHOW_REGS_SHORT, log_lvl);
|
||||
|
||||
} else if (partial && on_stack(info, (void *)regs + IRET_FRAME_OFFSET,
|
||||
IRET_FRAME_SIZE)) {
|
||||
@@ -162,7 +162,7 @@ static void show_regs_if_on_stack(struct stack_info *info, struct pt_regs *regs,
|
||||
* full pt_regs might not have been saved yet. In that case
|
||||
* just print the iret frame.
|
||||
*/
|
||||
show_iret_regs(regs);
|
||||
show_iret_regs(regs, log_lvl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
||||
printk("%s <%s>\n", log_lvl, stack_name);
|
||||
|
||||
if (regs)
|
||||
show_regs_if_on_stack(&stack_info, regs, partial);
|
||||
show_regs_if_on_stack(&stack_info, regs, partial, log_lvl);
|
||||
|
||||
/*
|
||||
* Scan the stack, printing any text addresses we find. At the
|
||||
@@ -278,7 +278,7 @@ next:
|
||||
/* if the frame has entry regs, print them */
|
||||
regs = unwind_get_entry_regs(&state, &partial);
|
||||
if (regs)
|
||||
show_regs_if_on_stack(&stack_info, regs, partial);
|
||||
show_regs_if_on_stack(&stack_info, regs, partial, log_lvl);
|
||||
}
|
||||
|
||||
if (stack_name)
|
||||
@@ -352,7 +352,7 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
|
||||
oops_exit();
|
||||
|
||||
/* Executive summary in case the oops scrolled away */
|
||||
__show_regs(&exec_summary_regs, SHOW_REGS_ALL);
|
||||
__show_regs(&exec_summary_regs, SHOW_REGS_ALL, KERN_DEFAULT);
|
||||
|
||||
if (!signr)
|
||||
return;
|
||||
@@ -444,9 +444,12 @@ void die_addr(const char *str, struct pt_regs *regs, long err, long gp_addr)
|
||||
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
enum show_regs_mode print_kernel_regs;
|
||||
|
||||
show_regs_print_info(KERN_DEFAULT);
|
||||
|
||||
__show_regs(regs, user_mode(regs) ? SHOW_REGS_USER : SHOW_REGS_ALL);
|
||||
print_kernel_regs = user_mode(regs) ? SHOW_REGS_USER : SHOW_REGS_ALL;
|
||||
__show_regs(regs, print_kernel_regs, KERN_DEFAULT);
|
||||
|
||||
/*
|
||||
* When in-kernel, we also print out the stack at the time of the fault..
|
||||
|
||||
Reference in New Issue
Block a user