From: jbeulich@novell.com Subject: fix unwind annotations Patch-mainline: some parts in 2.6.29 References: bnc#472783 --- arch/x86/kernel/entry_64.S | 8 +++++--- arch/x86/kernel/head_64.S | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -275,12 +275,13 @@ ENTRY(native_usergs_sysret64) ENTRY(ret_from_fork) CFI_DEFAULT_STACK push kernel_eflags(%rip) - CFI_ADJUST_CFA_OFFSET 4 + CFI_ADJUST_CFA_OFFSET 8 popf # reset kernel eflags - CFI_ADJUST_CFA_OFFSET -4 + CFI_ADJUST_CFA_OFFSET -8 call schedule_tail GET_THREAD_INFO(%rcx) testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%rcx) + CFI_REMEMBER_STATE jnz rff_trace rff_action: RESTORE_REST @@ -290,6 +291,7 @@ rff_action: jnz int_ret_from_sys_call RESTORE_TOP_OF_STACK %rdi,ARGOFFSET jmp ret_from_sys_call + CFI_RESTORE_STATE rff_trace: movq %rsp,%rdi call syscall_trace_leave @@ -1080,7 +1082,6 @@ error_exit: andl %edi,%edx jnz retint_careful jmp retint_swapgs - CFI_ENDPROC error_kernelspace: incl %ebx @@ -1098,6 +1099,7 @@ error_kernelspace: cmpq $gs_change,RIP(%rsp) je error_swapgs jmp error_sti + CFI_ENDPROC KPROBE_END(error_entry) /* Reload gs selector with exception handling */ --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S @@ -280,6 +280,8 @@ early_idt_handlers: ENTRY(early_idt_handler) #ifdef CONFIG_EARLY_PRINTK +#include +#include cmpl $2,early_recursion_flag(%rip) jz 1f incl early_recursion_flag(%rip) @@ -295,6 +297,16 @@ ENTRY(early_idt_handler) testl $0x27d00,%eax je 0f popq %r8 # get error code + + CFI_STARTPROC simple + CFI_SIGNAL_FRAME + CFI_DEF_CFA rsp, SS+8-RIP +# CFI_REL_OFFSET ss, SS-RIP + CFI_REL_OFFSET rsp, RSP-RIP +# CFI_REL_OFFSET rflags, EFLAGS-RIP +# CFI_REL_OFFSET cs, CS-RIP + CFI_REL_OFFSET rip, RIP-RIP + 0: movq 0(%rsp),%rcx # get ip movq 8(%rsp),%rdx # get cs xorl %eax,%eax @@ -308,6 +320,7 @@ ENTRY(early_idt_handler) movq 0(%rsp),%rsi # get rip again call __print_symbol #endif + CFI_ENDPROC #endif /* EARLY_PRINTK */ 1: hlt jmp 1b