forked from Minki/linux
[PATCH] x86_64: reliable stack trace support (x86-64 IRQ stack
Change the switching to/from the IRQ stack so that unwind annotations can be added for it without requiring CFA expressions. AK: I cleaned it up a bit, making it unconditional and removing the obsolete DEBUG_INFO full frame code. Signed-off-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
b538ed278b
commit
1de9c3f67e
@ -473,29 +473,18 @@ END(stub_rt_sigreturn)
|
||||
/* 0(%rsp): interrupt number */
|
||||
.macro interrupt func
|
||||
cld
|
||||
#ifdef CONFIG_DEBUG_INFO
|
||||
SAVE_ALL
|
||||
movq %rsp,%rdi
|
||||
/*
|
||||
* Setup a stack frame pointer. This allows gdb to trace
|
||||
* back to the original stack.
|
||||
*/
|
||||
movq %rsp,%rbp
|
||||
CFI_DEF_CFA_REGISTER rbp
|
||||
#else
|
||||
SAVE_ARGS
|
||||
leaq -ARGOFFSET(%rsp),%rdi # arg1 for handler
|
||||
#endif
|
||||
pushq %rbp
|
||||
CFI_ADJUST_CFA_OFFSET 8
|
||||
CFI_REL_OFFSET rbp, 0
|
||||
movq %rsp,%rbp
|
||||
CFI_DEF_CFA_REGISTER rbp
|
||||
testl $3,CS(%rdi)
|
||||
je 1f
|
||||
swapgs
|
||||
1: incl %gs:pda_irqcount # RED-PEN should check preempt count
|
||||
movq %gs:pda_irqstackptr,%rax
|
||||
cmoveq %rax,%rsp /*todo This needs CFI annotation! */
|
||||
pushq %rdi # save old stack
|
||||
#ifndef CONFIG_DEBUG_INFO
|
||||
CFI_ADJUST_CFA_OFFSET 8
|
||||
#endif
|
||||
cmoveq %gs:pda_irqstackptr,%rsp
|
||||
call \func
|
||||
.endm
|
||||
|
||||
@ -504,17 +493,11 @@ ENTRY(common_interrupt)
|
||||
interrupt do_IRQ
|
||||
/* 0(%rsp): oldrsp-ARGOFFSET */
|
||||
ret_from_intr:
|
||||
popq %rdi
|
||||
#ifndef CONFIG_DEBUG_INFO
|
||||
CFI_ADJUST_CFA_OFFSET -8
|
||||
#endif
|
||||
cli
|
||||
decl %gs:pda_irqcount
|
||||
#ifdef CONFIG_DEBUG_INFO
|
||||
movq RBP(%rdi),%rbp
|
||||
leaveq
|
||||
CFI_DEF_CFA_REGISTER rsp
|
||||
#endif
|
||||
leaq ARGOFFSET(%rdi),%rsp /*todo This needs CFI annotation! */
|
||||
CFI_ADJUST_CFA_OFFSET -8
|
||||
exit_intr:
|
||||
GET_THREAD_INFO(%rcx)
|
||||
testl $3,CS-ARGOFFSET(%rsp)
|
||||
|
Loading…
Reference in New Issue
Block a user