diff options
Diffstat (limited to 'arch/x86/kernel/process_64.c')
-rw-r--r-- | arch/x86/kernel/process_64.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index a451bc374b9b..ea5ea850348d 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -62,7 +62,7 @@ | |||
62 | __visible DEFINE_PER_CPU(unsigned long, rsp_scratch); | 62 | __visible DEFINE_PER_CPU(unsigned long, rsp_scratch); |
63 | 63 | ||
64 | /* Prints also some state that isn't saved in the pt_regs */ | 64 | /* Prints also some state that isn't saved in the pt_regs */ |
65 | void __show_regs(struct pt_regs *regs, int all) | 65 | void __show_regs(struct pt_regs *regs, enum show_regs_mode mode) |
66 | { | 66 | { |
67 | unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L, fs, gs, shadowgs; | 67 | unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L, fs, gs, shadowgs; |
68 | unsigned long d0, d1, d2, d3, d6, d7; | 68 | unsigned long d0, d1, d2, d3, d6, d7; |
@@ -87,9 +87,17 @@ void __show_regs(struct pt_regs *regs, int all) | |||
87 | printk(KERN_DEFAULT "R13: %016lx R14: %016lx R15: %016lx\n", | 87 | printk(KERN_DEFAULT "R13: %016lx R14: %016lx R15: %016lx\n", |
88 | regs->r13, regs->r14, regs->r15); | 88 | regs->r13, regs->r14, regs->r15); |
89 | 89 | ||
90 | if (!all) | 90 | if (mode == SHOW_REGS_SHORT) |
91 | return; | 91 | return; |
92 | 92 | ||
93 | if (mode == SHOW_REGS_USER) { | ||
94 | rdmsrl(MSR_FS_BASE, fs); | ||
95 | rdmsrl(MSR_KERNEL_GS_BASE, shadowgs); | ||
96 | printk(KERN_DEFAULT "FS: %016lx GS: %016lx\n", | ||
97 | fs, shadowgs); | ||
98 | return; | ||
99 | } | ||
100 | |||
93 | asm("movl %%ds,%0" : "=r" (ds)); | 101 | asm("movl %%ds,%0" : "=r" (ds)); |
94 | asm("movl %%cs,%0" : "=r" (cs)); | 102 | asm("movl %%cs,%0" : "=r" (cs)); |
95 | asm("movl %%es,%0" : "=r" (es)); | 103 | asm("movl %%es,%0" : "=r" (es)); |