summaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/Makefile
diff options
context:
space:
mode:
authorJeremy Fitzhardinge2009-08-27 21:46:35 +0200
committerJeremy Fitzhardinge2009-09-10 01:37:39 +0200
commit577eebeae34d340685d8985dfdb7dfe337c511e8 (patch)
tree047aa135d143ed12035ca04433e563b948f9b059 /arch/x86/mm/Makefile
parentLinux 2.6.31-rc9 (diff)
downloadkernel-qcow2-linux-577eebeae34d340685d8985dfdb7dfe337c511e8.tar.gz
kernel-qcow2-linux-577eebeae34d340685d8985dfdb7dfe337c511e8.tar.xz
kernel-qcow2-linux-577eebeae34d340685d8985dfdb7dfe337c511e8.zip
xen: make -fstack-protector work under Xen
-fstack-protector uses a special per-cpu "stack canary" value. gcc generates special code in each function to test the canary to make sure that the function's stack hasn't been overrun. On x86-64, this is simply an offset of %gs, which is the usual per-cpu base segment register, so setting it up simply requires loading %gs's base as normal. On i386, the stack protector segment is %gs (rather than the usual kernel percpu %fs segment register). This requires setting up the full kernel GDT and then loading %gs accordingly. We also need to make sure %gs is initialized when bringing up secondary cpus too. To keep things consistent, we do the full GDT/segment register setup on both architectures. Because we need to avoid -fstack-protected code before setting up the GDT and because there's no way to disable it on a per-function basis, several files need to have stack-protector inhibited. [ Impact: allow Xen booting with stack-protector enabled ] Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Diffstat (limited to 'arch/x86/mm/Makefile')
-rw-r--r--arch/x86/mm/Makefile4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index eefdeee8a871..72bb3a26c738 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -1,6 +1,10 @@
obj-y := init.o init_$(BITS).o fault.o ioremap.o extable.o pageattr.o mmap.o \
pat.o pgtable.o gup.o
+# Make sure __phys_addr has no stackprotector
+nostackp := $(call cc-option, -fno-stack-protector)
+CFLAGS_ioremap.o := $(nostackp)
+
obj-$(CONFIG_SMP) += tlb.o
obj-$(CONFIG_X86_32) += pgtable_32.o iomap_32.o