linux/arch/i386/kernel
Jan Beulich adf1423698 [PATCH] i386/x86-64: Work around gcc bug with noreturn functions in unwinder
Current gcc generates calls not jumps to noreturn functions. When that happens the
return address can point to the next function, which confuses the unwinder.

This patch works around it by marking asynchronous exception
frames in contrast normal call frames in the unwind information.  Then teach
the unwinder to decode this.

For normal call frames the unwinder now subtracts one from the address which avoids
this problem.  The standard libgcc unwinder uses the same trick.

It doesn't include adjustment of the printed address (i.e. for the original
example, it'd still be kernel_math_error+0 that gets displayed, but the
unwinder wouldn't get confused anymore.

This only works with binutils 2.6.17+ and some versions of H.J.Lu's 2.6.16
unfortunately because earlier binutils don't support .cfi_signal_frame

[AK: added automatic detection of the new binutils and wrote description]

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Signed-off-by: Andi Kleen <ak@suse.de>
2006-09-26 10:52:41 +02:00
..
acpi [PATCH] i386: add HPET(s) into resource map 2006-09-26 10:52:39 +02:00
cpu [PATCH] i386: mark cpu cache functions as __cpuinit 2006-09-26 10:52:36 +02:00
.gitignore
alternative.c [PATCH] lockdep: x86 smp alternatives workaround 2006-07-03 15:27:04 -07:00
apic.c [PATCH] i386: Make enable_local_apic static 2006-09-26 10:52:35 +02:00
apm.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
asm-offsets.c
bootflag.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
cpuid.c [PATCH] Fix modular cpuid.ko 2006-07-03 21:25:20 -07:00
crash_dump.c
crash.c [PATCH] i386: Kdump i386 nmi event notification fix 2006-09-26 10:52:27 +02:00
doublefault.c
early_printk.c
efi_stub.S Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
efi.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
entry.S [PATCH] i386/x86-64: Work around gcc bug with noreturn functions in unwinder 2006-09-26 10:52:41 +02:00
head.S [PATCH] i386: Do better early exception handlers 2006-09-26 10:52:39 +02:00
hpet.c [PATCH] Fix faulty HPET clocksource usage (fix for bug #7062) 2006-09-01 11:39:08 -07:00
i386_ksyms.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
i387.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
i8237.c
i8253.c
i8259.c [PATCH] x86: - restore i8259A eoi status on resume 2006-09-26 10:52:41 +02:00
init_task.c
io_apic.c [PATCH] i386: Replace i386 open-coded cmdline parsing with 2006-09-26 10:52:32 +02:00
ioport.c [PATCH] i386: use thread_info flags for debug regs and IO bitmaps 2006-07-09 18:47:12 -07:00
irq.c [PATCH] i386: Fix stack switching in do_IRQ 2006-08-30 16:05:16 -07:00
kprobes.c [PATCH] kprobe-booster: disable in preemptible kernel 2006-07-31 13:28:38 -07:00
ldt.c
machine_kexec.c [PATCH] i386: Avoid overwriting the current pgd (V4, i386) 2006-09-26 10:52:38 +02:00
Makefile [PATCH] i386: Do stacktracer conversion too 2006-09-26 10:52:34 +02:00
mca.c [PATCH] i386: Disallow kprobes on NMI handlers 2006-09-26 10:52:36 +02:00
microcode.c
module.c
mpparse.c [PATCH] i386: Support physical cpu hotplug for x86_64 2006-09-26 10:52:35 +02:00
msr.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2006-06-30 15:39:30 -07:00
nmi.c [PATCH] i386: Disallow kprobes on NMI handlers 2006-09-26 10:52:36 +02:00
numaq.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pci-dma.c
process.c [PATCH] i386: Allow a kernel not to be in ring 0 2006-09-26 10:52:39 +02:00
ptrace.c [PATCH] i386/x86-64: rename is_at_popf(), add iret to tests and fix 2006-09-26 10:52:33 +02:00
quirks.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
reboot_fixups.c
reboot.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
relocate_kernel.S [PATCH] i386: Avoid overwriting the current pgd (V4, i386) 2006-09-26 10:52:38 +02:00
scx200.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
setup.c [PATCH] i386/x86-64: Move acpi_disabled variables into acpi/boot.c 2006-09-26 10:52:33 +02:00
sigframe.h
signal.c
smp.c
smpboot.c [PATCH] i386: don't taint UP K7's running SMP kernels. 2006-09-26 10:52:34 +02:00
srat.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
summit.c
sys_i386.c
syscall_table.S [PATCH] x86: Add portable getcpu call 2006-09-26 10:52:28 +02:00
sysenter.c
time_hpet.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
time.c [PATCH] i386: Account spinlocks to the caller during profiling for !FP kernels 2006-09-26 10:52:28 +02:00
topology.c [PATCH] i386: clean up topology.c 2006-09-26 10:52:35 +02:00
trampoline.S
traps.c [PATCH] i386: Split multi-line printk in oops output. 2006-09-26 10:52:41 +02:00
tsc.c [PATCH] i386: mark two more functions as __init 2006-09-26 10:52:35 +02:00
vm86.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
vmlinux.lds.S
vsyscall-int80.S
vsyscall-note.S
vsyscall-sigreturn.S
vsyscall-sysenter.S
vsyscall.lds.S [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
vsyscall.S