linux-stable-rt/arch/x86/kernel
Roland McGrath 54a0151041 asmlinkage_protect replaces prevent_tail_call
The prevent_tail_call() macro works around the problem of the compiler
clobbering argument words on the stack, which for asmlinkage functions
is the caller's (user's) struct pt_regs.  The tail/sibling-call
optimization is not the only way that the compiler can decide to use
stack argument words as scratch space, which we have to prevent.
Other optimizations can do it too.

Until we have new compiler support to make "asmlinkage" binding on the
compiler's own use of the stack argument frame, we have work around all
the manifestations of this issue that crop up.

More cases seem to be prevented by also keeping the incoming argument
variables live at the end of the function.  This makes their original
stack slots attractive places to leave those variables, so the compiler
tends not clobber them for something else.  It's still no guarantee, but
it handles some observed cases that prevent_tail_call() did not.

Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-10 17:28:26 -07:00
..
acpi PCI: don't load acpi_php when acpi is disabled 2008-02-21 15:34:37 -08:00
cpu Fix booting pentium+ with dodgy TSC 2008-04-06 16:10:40 -07:00
.gitignore
Makefile x86: exclude vsyscall files from stackprotect 2008-02-19 16:18:32 +01:00
alternative.c pop previous section in alternative.c 2008-04-09 18:38:08 -07:00
aperture_64.c x86: fix long standing bug with usb after hibernation with 4GB ram 2008-03-21 17:06:15 +01:00
apic_32.c x86: don't disable the APIC if it hasn't been mapped yet 2008-01-30 13:33:17 +01:00
apic_64.c x86: change bios_cpu_apicid to percpu data variable fixup 2008-01-30 13:33:21 +01:00
apm_32.c x86: isolate PIC/PIT in/out calls 2008-01-30 13:33:14 +01:00
asm-offsets.c
asm-offsets_32.c lguest: fix build breakage 2008-02-26 12:55:49 +01:00
asm-offsets_64.c x86: add asm_offset PARAVIRT constants 2008-01-30 13:33:19 +01:00
audit_64.c
bootflag.c
bugs_64.c x86, 32-bit: trim memory not covered by wb mtrrs 2008-01-30 13:33:18 +01:00
cpuid.c x86: cpuid, msr: use inode mutex instead of big kernel lock 2008-02-04 16:47:59 +01:00
crash.c
crash_dump_32.c
crash_dump_64.c
doublefault_32.c
ds.c x86: fix small sparse warning 2008-01-31 22:05:47 +01:00
e820_32.c x86: trim mtrr don't close gap for resource allocation. 2008-03-21 17:06:15 +01:00
e820_64.c x86: trim mtrr don't close gap for resource allocation. 2008-03-21 17:06:15 +01:00
early-quirks.c x86: fix section mismatch warning in early-quirks.c 2008-01-30 13:33:37 +01:00
early_printk.c x86: make early_console static in early_printk.c 2008-02-01 17:49:42 +01:00
efi.c x86: sparse warning in efi.c 2008-02-19 16:18:28 +01:00
efi_32.c x86: sparse error in efi_32.c 2008-02-19 16:18:28 +01:00
efi_64.c x86: EFI runtime code mapping enhancement 2008-02-13 16:20:35 +01:00
efi_stub_32.S
efi_stub_64.S
entry_32.S x86: don't make irq_return global 2008-02-19 16:18:29 +01:00
entry_64.S x86: fix execve with -fstack-protect 2008-02-26 12:55:57 +01:00
genapic_64.c x86: cleanup x86_cpu_to_apicid references 2008-01-30 13:33:11 +01:00
genapic_flat_64.c
geode_32.c x86: GEODE: MFGPT: Use "just-in-time" detection for the MFGPT timers 2008-02-09 23:24:08 +01:00
head64.c x86: zap invalid and unused pmds in early boot 2008-02-18 20:54:14 +01:00
head_32.S x86: fix fault_msg nul termination 2008-03-21 17:06:15 +01:00
head_64.S x86: rename KERNEL_TEXT_SIZE => KERNEL_IMAGE_SIZE 2008-02-26 12:55:56 +01:00
hpet.c x86: revert assign IRQs to hpet timer 2008-04-04 18:36:49 +02:00
i386_ksyms_32.c
i387.c x86: fix merge mistake in i387.c 2008-03-07 16:39:14 +01:00
i8237.c
i8253.c x86: pit_clockevent can be static 2008-02-13 16:20:35 +01:00
i8259_32.c x86: i8259A: remove redundant irq_descinitialization 2008-02-19 16:18:34 +01:00
i8259_64.c x86: provide a native_init_IRQ function on 64-bit 2008-01-30 13:33:19 +01:00
init_task.c x86: delay the export removal of init_mm 2008-02-29 18:55:42 +01:00
io_apic_32.c
io_apic_64.c
io_delay.c x86: add dmi quirk for io_delay 2008-03-26 22:23:40 +01:00
ioport.c
irq_32.c
irq_64.c
k8.c
kdebugfs.c
kprobes.c x86, kprobes: remove sparse warnings from x86 2008-02-19 16:18:28 +01:00
ldt.c x86: cleanup - eliminate numbers in LDT allocation code 2008-02-04 16:48:03 +01:00
machine_kexec_32.c vmcoreinfo: fix the configuration dependencies 2008-02-07 08:42:25 -08:00
machine_kexec_64.c vmcoreinfo: add the symbol "phys_base" 2008-04-02 15:28:19 -07:00
mca_32.c
mfgpt_32.c x86: GEODE: add missing module.h include 2008-03-26 22:23:40 +01:00
microcode.c x86: fix section mismatch warnings when referencing notifiers 2008-02-01 17:49:42 +01:00
module_32.c
module_64.c
mpparse_32.c Introduce flags for reserve_bootmem() 2008-02-07 08:42:25 -08:00
mpparse_64.c x86: fix section mismatch warning in acpi/boot.c 2008-01-30 13:33:37 +01:00
msr.c x86: cpuid, msr: use inode mutex instead of big kernel lock 2008-02-04 16:47:59 +01:00
nmi_32.c x86: fix compile warning building without CONFIG_SYSCTL 2008-02-19 16:18:29 +01:00
nmi_64.c x86: fix compile warning building without CONFIG_SYSCTL 2008-02-19 16:18:29 +01:00
numaq_32.c x86: convert TSC disabling to generic cpuid disable bitmap 2008-01-30 13:33:20 +01:00
paravirt.c x86: fill in missing pv_mmu_ops entries for PAGETABLE_LEVELS >= 3 2008-01-30 13:33:20 +01:00
paravirt_patch_32.c
paravirt_patch_64.c x86: add stringify header 2008-01-30 13:33:19 +01:00
pci-calgary_64.c iommu sg: x86: convert calgary IOMMU to use the IOMMU helper 2008-02-05 09:44:11 -08:00
pci-dma_32.c
pci-dma_64.c x86: revert: reserve dma32 early for gart 2008-03-22 19:25:41 +01:00
pci-gart_64.c x86, agpgart: scary messages are fortunately obsolete 2008-04-04 18:36:46 +02:00
pci-nommu_64.c
pci-swiotlb_64.c
pcspeaker.c
pmtimer_64.c
process_32.c x86: Simplify cpu_idle_wait 2008-04-10 15:38:29 -07:00
process_64.c x86: Simplify cpu_idle_wait 2008-04-10 15:38:29 -07:00
ptrace.c x86: ptrace.c: fix defined-but-unused warnings 2008-03-27 16:08:44 +01:00
quirks.c x86: hpet clock enable quirk on nVidia nForce 430 2008-03-21 17:06:15 +01:00
reboot.c x86: fix reboot problem with Dell Optiplex 745, 0KW626 board 2008-03-21 17:06:15 +01:00
reboot_fixups_32.c x86: add the RDC machine specific reboot fixup 2008-01-30 13:33:36 +01:00
relocate_kernel_32.S
relocate_kernel_64.S
rtc.c
scx200_32.c x86: fix sparse warning in kernel/scx200_32.c 2008-01-31 22:05:45 +01:00
setup64.c x86: tight online check in setup_per_cpu_areas 2008-03-21 17:06:15 +01:00
setup_32.c x86: fix trim mtrr not to setup_memory two times 2008-03-26 22:23:41 +01:00
setup_64.c x86: fix memoryless node oops during boot 2008-03-26 22:23:40 +01:00
sigframe_32.h
signal_32.c x86: clear DF before calling signal handler 2008-03-07 16:39:14 +01:00
signal_64.c x86: ia32 syscall restart fix 2008-03-11 17:11:54 +01:00
smp_32.c
smp_64.c
smpboot_32.c calibrate_delay() must be __cpuinit 2008-02-06 10:41:08 -08:00
smpboot_64.c x86: make c_idle.work have a static address. 2008-02-26 12:56:02 +01:00
smpcommon_32.c
srat_32.c Merge branches 'release', 'bugzilla-6217', 'bugzilla-6629', 'bugzilla-6933', 'bugzilla-7186', 'bugzilla-8269', 'bugzilla-8570', 'bugzilla-9139', 'bugzilla-9277', 'bugzilla-9341', 'bugzilla-9444', 'bugzilla-9614', 'bugzilla-9643' and 'bugzilla-9644' into release 2008-02-07 03:09:43 -05:00
stacktrace.c x86: don't save unreliable stack trace entries 2008-02-26 12:55:58 +01:00
step.c x86 ptrace: avoid unnecessary wrmsr 2008-04-03 15:42:43 -07:00
summit_32.c
sys_i386_32.c
sys_x86_64.c
syscall_64.c
syscall_table_32.S timerfd: wire the new timerfd API to the x86 family 2008-02-05 09:44:07 -08:00
tce_64.c
test_nx.c x86: mark the .rodata section also NX 2008-02-06 22:39:45 +01:00
test_rodata.c x86: include proper prototypes for rodata_test 2008-02-14 23:30:20 +01:00
time_32.c
time_64.c time: fix typo in comments 2008-02-08 09:22:29 -08:00
tls.c asmlinkage_protect replaces prevent_tail_call 2008-04-10 17:28:26 -07:00
tls.h
topology.c x86: fix section mismatch warning in topology.c:arch_register_cpu 2008-02-19 16:18:30 +01:00
trampoline_32.S x86: remove misleading comments in trampoline_*.S 2008-02-04 16:48:01 +01:00
trampoline_64.S x86: remove misleading comments in trampoline_*.S 2008-02-04 16:48:01 +01:00
traps_32.c x86: fix sparse error in traps_32.c 2008-02-06 22:39:44 +01:00
traps_64.c x86: fix "BUG: sleeping function called from invalid context" in print_vma_addr() 2008-02-14 23:30:19 +01:00
tsc_32.c x86: fix call to set_cyc2ns_scale() from time_cpufreq_notifier() 2008-04-07 21:09:14 +02:00
tsc_64.c x86: fix call to set_cyc2ns_scale() from time_cpufreq_notifier() 2008-04-07 21:09:14 +02:00
tsc_sync.c x86: add warning to check_tsc_warp() 2008-01-30 13:33:24 +01:00
verify_cpu_64.S
vm86_32.c
vmi_32.c x86: VMI fix 2008-02-04 16:47:54 +01:00
vmiclock_32.c x86: isolate PIC/PIT in/out calls 2008-01-30 13:33:14 +01:00
vmlinux.lds.S
vmlinux_32.lds.S x86: lds - Use PAGE_SIZE instead of numeric constant 2008-02-19 16:18:33 +01:00
vmlinux_64.lds.S x86: lds - Use THREAD_SIZE instead of numeric constant 2008-02-19 16:18:34 +01:00
vsmp_64.c
vsyscall_64.c x86: restore vsyscall64 prochandler 2008-02-29 18:55:39 +01:00
x8664_ksyms_64.c