The patch titled fixed reliable stack trace support (i386 entry.S annotations) has been added to the -mm tree. Its filename is fix-x86_64-mm-reliable-stack-trace-support-i386-entrys.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: fixed reliable stack trace support (i386 entry.S annotations) From: "Jan Beulich" <jbeulich@xxxxxxxxxx> To increase the usefulness of reliable stack unwinding, this adds CFI unwind annotations to many low-level i386 routines. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> Cc: Andi Kleen <ak@xxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- arch/i386/kernel/entry.S | 56 ++++++++++++++++++++++++++++++++++-- include/asm-i386/dwarf2.h | 2 - 2 files changed, 54 insertions(+), 4 deletions(-) diff -puN arch/i386/kernel/entry.S~fix-x86_64-mm-reliable-stack-trace-support-i386-entrys arch/i386/kernel/entry.S --- devel/arch/i386/kernel/entry.S~fix-x86_64-mm-reliable-stack-trace-support-i386-entrys 2006-05-29 15:17:12.000000000 -0700 +++ devel-akpm/arch/i386/kernel/entry.S 2006-05-29 15:17:12.000000000 -0700 @@ -732,33 +732,39 @@ nmi_debug_stack_check: jmp nmi_stack_correct nmi_16bit_stack: + RING0_INT_FRAME /* create the pointer to lss back */ - CFI_STARTPROC simple pushl %ss + CFI_ADJUST_CFA_OFFSET 4 pushl %esp + CFI_ADJUST_CFA_OFFSET 4 movzwl %sp, %esp addw $4, (%esp) /* copy the iret frame of 12 bytes */ .rept 3 pushl 16(%esp) + CFI_ADJUST_CFA_OFFSET 4 .endr pushl %eax + CFI_ADJUST_CFA_OFFSET 4 SAVE_ALL FIXUP_ESPFIX_STACK # %eax == %esp + CFI_ADJUST_CFA_OFFSET -20 # the frame has now moved xorl %edx,%edx # zero error code call do_nmi RESTORE_REGS - CFI_ENDPROC lss 12+4(%esp), %esp # back to 16bit stack 1: iret + CFI_ENDPROC .section __ex_table,"a" .align 4 .long 1b,iret_exc .previous KPROBE_ENTRY(int3) + RING0_INT_FRAME pushl $-1 # mark this as an int - CFI_STARTPROC simple + CFI_ADJUST_CFA_OFFSET 4 SAVE_ALL xorl %edx,%edx # zero error code movl %esp,%eax # pt_regs pointer @@ -768,65 +774,108 @@ KPROBE_ENTRY(int3) .previous .text ENTRY(overflow) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl $do_overflow + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(bounds) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl $do_bounds + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(invalid_op) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl $do_invalid_op + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(coprocessor_segment_overrun) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl $do_coprocessor_segment_overrun + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(invalid_TSS) + RING0_EC_FRAME pushl $do_invalid_TSS + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(segment_not_present) + RING0_EC_FRAME pushl $do_segment_not_present + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC ENTRY(stack_segment) + RING0_EC_FRAME pushl $do_stack_segment + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC KPROBE_ENTRY(general_protection) + RING0_EC_FRAME pushl $do_general_protection + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC .previous .text ENTRY(alignment_check) + RING0_EC_FRAME pushl $do_alignment_check + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC KPROBE_ENTRY(page_fault) + RING0_EC_FRAME pushl $do_page_fault + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC .previous .text #ifdef CONFIG_X86_MCE ENTRY(machine_check) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl machine_check_vector + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC #endif ENTRY(spurious_interrupt_bug) + RING0_INT_FRAME pushl $0 + CFI_ADJUST_CFA_OFFSET 4 pushl $do_spurious_interrupt_bug + CFI_ADJUST_CFA_OFFSET 4 jmp error_code + CFI_ENDPROC #ifdef CONFIG_STACK_UNWIND ENTRY(arch_unwind_init_running) + CFI_STARTPROC movl 4(%esp), %edx movl (%esp), %ecx leal 4(%esp), %eax @@ -851,6 +900,7 @@ ENTRY(arch_unwind_init_running) movl EBX(%edx), %ebx movl $__KERNEL_DS, OLDSS(%edx) jmpl *%eax + CFI_ENDPROC ENDPROC(arch_unwind_init_running) #endif diff -puN include/asm-i386/dwarf2.h~fix-x86_64-mm-reliable-stack-trace-support-i386-entrys include/asm-i386/dwarf2.h --- devel/include/asm-i386/dwarf2.h~fix-x86_64-mm-reliable-stack-trace-support-i386-entrys 2006-05-29 15:17:12.000000000 -0700 +++ devel-akpm/include/asm-i386/dwarf2.h 2006-05-29 15:17:12.000000000 -0700 @@ -31,7 +31,7 @@ #else -/* Due to the structure of pre-existing code, don't use assembler line +/* Due to the structure of pre-exisiting code, don't use assembler line comment character # to ignore the arguments. Instead, use a dummy macro. */ .macro ignore a=0, b=0, c=0, d=0 .endm _ Patches currently in -mm which might be from jbeulich@xxxxxxxxxx are i386-apic=-command-line-option-should-always-be.patch x86_64-fix-last_tsc-calculation-of-pm-timer.patch dprintk-adjustments-to-cpufreq-nforce2.patch dprintk-adjustments-to-cpufreq-speedstep-centrino.patch cpufreq-dprintk-adjustments.patch fix-recovery-path-from-errors-during-pcie_init.patch mpt_interrupt-should-return-irq_none-when.patch fix-x86_64-mm-reliable-stack-trace-support-i386-entrys.patch fix-x86-microcode-driver-handling-of-multiple-matching.patch adjust-handle_irr_event-return-type.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html