diff options
-rw-r--r-- | arch/i386/kernel/entry.S | 18 | ||||
-rw-r--r-- | include/asm-i386/dwarf2.h | 2 |
2 files changed, 17 insertions, 3 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index 0928f70639aa..4b0845249222 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
@@ -701,9 +701,15 @@ device_not_available_emulate: | |||
701 | jne ok; \ | 701 | jne ok; \ |
702 | label: \ | 702 | label: \ |
703 | movl TSS_sysenter_esp0+offset(%esp),%esp; \ | 703 | movl TSS_sysenter_esp0+offset(%esp),%esp; \ |
704 | CFI_DEF_CFA esp, 0; \ | ||
705 | CFI_UNDEFINED eip; \ | ||
704 | pushfl; \ | 706 | pushfl; \ |
707 | CFI_ADJUST_CFA_OFFSET 4; \ | ||
705 | pushl $__KERNEL_CS; \ | 708 | pushl $__KERNEL_CS; \ |
706 | pushl $sysenter_past_esp | 709 | CFI_ADJUST_CFA_OFFSET 4; \ |
710 | pushl $sysenter_past_esp; \ | ||
711 | CFI_ADJUST_CFA_OFFSET 4; \ | ||
712 | CFI_REL_OFFSET eip, 0 | ||
707 | 713 | ||
708 | KPROBE_ENTRY(debug) | 714 | KPROBE_ENTRY(debug) |
709 | RING0_INT_FRAME | 715 | RING0_INT_FRAME |
@@ -754,6 +760,7 @@ KPROBE_ENTRY(nmi) | |||
754 | cmpl $sysenter_entry,12(%esp) | 760 | cmpl $sysenter_entry,12(%esp) |
755 | je nmi_debug_stack_check | 761 | je nmi_debug_stack_check |
756 | nmi_stack_correct: | 762 | nmi_stack_correct: |
763 | /* We have a RING0_INT_FRAME here */ | ||
757 | pushl %eax | 764 | pushl %eax |
758 | CFI_ADJUST_CFA_OFFSET 4 | 765 | CFI_ADJUST_CFA_OFFSET 4 |
759 | SAVE_ALL | 766 | SAVE_ALL |
@@ -764,9 +771,12 @@ nmi_stack_correct: | |||
764 | CFI_ENDPROC | 771 | CFI_ENDPROC |
765 | 772 | ||
766 | nmi_stack_fixup: | 773 | nmi_stack_fixup: |
774 | RING0_INT_FRAME | ||
767 | FIX_STACK(12,nmi_stack_correct, 1) | 775 | FIX_STACK(12,nmi_stack_correct, 1) |
768 | jmp nmi_stack_correct | 776 | jmp nmi_stack_correct |
777 | |||
769 | nmi_debug_stack_check: | 778 | nmi_debug_stack_check: |
779 | /* We have a RING0_INT_FRAME here */ | ||
770 | cmpw $__KERNEL_CS,16(%esp) | 780 | cmpw $__KERNEL_CS,16(%esp) |
771 | jne nmi_stack_correct | 781 | jne nmi_stack_correct |
772 | cmpl $debug,(%esp) | 782 | cmpl $debug,(%esp) |
@@ -777,8 +787,10 @@ nmi_debug_stack_check: | |||
777 | jmp nmi_stack_correct | 787 | jmp nmi_stack_correct |
778 | 788 | ||
779 | nmi_16bit_stack: | 789 | nmi_16bit_stack: |
780 | RING0_INT_FRAME | 790 | /* We have a RING0_INT_FRAME here. |
781 | /* create the pointer to lss back */ | 791 | * |
792 | * create the pointer to lss back | ||
793 | */ | ||
782 | pushl %ss | 794 | pushl %ss |
783 | CFI_ADJUST_CFA_OFFSET 4 | 795 | CFI_ADJUST_CFA_OFFSET 4 |
784 | pushl %esp | 796 | pushl %esp |
diff --git a/include/asm-i386/dwarf2.h b/include/asm-i386/dwarf2.h index fe2392f361ee..5d1a8db5a9b0 100644 --- a/include/asm-i386/dwarf2.h +++ b/include/asm-i386/dwarf2.h | |||
@@ -26,6 +26,7 @@ | |||
26 | #define CFI_RESTORE .cfi_restore | 26 | #define CFI_RESTORE .cfi_restore |
27 | #define CFI_REMEMBER_STATE .cfi_remember_state | 27 | #define CFI_REMEMBER_STATE .cfi_remember_state |
28 | #define CFI_RESTORE_STATE .cfi_restore_state | 28 | #define CFI_RESTORE_STATE .cfi_restore_state |
29 | #define CFI_UNDEFINED .cfi_undefined | ||
29 | 30 | ||
30 | #else | 31 | #else |
31 | 32 | ||
@@ -46,6 +47,7 @@ | |||
46 | #define CFI_RESTORE ignore | 47 | #define CFI_RESTORE ignore |
47 | #define CFI_REMEMBER_STATE ignore | 48 | #define CFI_REMEMBER_STATE ignore |
48 | #define CFI_RESTORE_STATE ignore | 49 | #define CFI_RESTORE_STATE ignore |
50 | #define CFI_UNDEFINED ignore | ||
49 | 51 | ||
50 | #endif | 52 | #endif |
51 | 53 | ||