From d20f865e93057551e4ef2ca92c3aa12c1fd641d6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 23 Aug 2004 21:38:17 -0700 Subject: [PATCH] [PATCH] Centralize i386 Constants __FIXADDR_TOP and PAGE_OFFSET are hardcoded in various places. I had to change it to run the kernel under qemu-fast, so I wanted to centralize them. To do this, we rename vsyscall.lds to vsyscall.lds.s, and generate it from vsyscall.lds.S. Signed-off-by: Rusty Russell (created) Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- arch/i386/kernel/Makefile | 6 ++++-- arch/i386/kernel/vmlinux.lds.S | 3 ++- .../kernel/{vsyscall.lds => vsyscall.lds.S} | 4 ++-- include/asm-i386/fixmap.h | 19 ++++++++++++------- 4 files changed, 20 insertions(+), 12 deletions(-) rename arch/i386/kernel/{vsyscall.lds => vsyscall.lds.S} (96%) diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile index e03816e72f506..b68579f15729c 100644 --- a/arch/i386/kernel/Makefile +++ b/arch/i386/kernel/Makefile @@ -47,12 +47,14 @@ quiet_cmd_syscall = SYSCALL $@ cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \ -Wl,-T,$(filter-out FORCE,$^) -o $@ +export AFLAGS_vsyscall.lds.o += -P -C -U$(ARCH) + vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 SYSCFLAGS_vsyscall-sysenter.so = $(vsyscall-flags) SYSCFLAGS_vsyscall-int80.so = $(vsyscall-flags) $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \ -$(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE +$(obj)/vsyscall-%.so: $(src)/vsyscall.lds.s $(obj)/vsyscall-%.o FORCE $(call if_changed,syscall) # We also create a special relocatable object that should mirror the symbol @@ -63,5 +65,5 @@ $(obj)/built-in.o: $(obj)/vsyscall-syms.o $(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o SYSCFLAGS_vsyscall-syms.o = -r -$(obj)/vsyscall-syms.o: $(src)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE +$(obj)/vsyscall-syms.o: $(src)/vsyscall.lds.s $(obj)/vsyscall-sysenter.o FORCE $(call if_changed,syscall) diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S index 829f1c91d813a..7063c117bd5d8 100644 --- a/arch/i386/kernel/vmlinux.lds.S +++ b/arch/i386/kernel/vmlinux.lds.S @@ -4,6 +4,7 @@ #include #include +#include OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) @@ -11,7 +12,7 @@ ENTRY(startup_32) jiffies = jiffies_64; SECTIONS { - . = 0xC0000000 + 0x100000; + . = __PAGE_OFFSET + 0x100000; /* read-only */ _text = .; /* Text and read-only data */ .text : { diff --git a/arch/i386/kernel/vsyscall.lds b/arch/i386/kernel/vsyscall.lds.S similarity index 96% rename from arch/i386/kernel/vsyscall.lds rename to arch/i386/kernel/vsyscall.lds.S index 7ff7f8b9e67b0..a4421421e4001 100644 --- a/arch/i386/kernel/vsyscall.lds +++ b/arch/i386/kernel/vsyscall.lds.S @@ -3,9 +3,9 @@ * object prelinked to its virtual address, and with only one read-only * segment (that fits in one page). This script controls its layout. */ +#include -/* This must match . */ -VSYSCALL_BASE = 0xffffe000; +VSYSCALL_BASE = __FIXADDR_TOP - 0x1000; SECTIONS { diff --git a/include/asm-i386/fixmap.h b/include/asm-i386/fixmap.h index 791faa169b836..805a0dd16f052 100644 --- a/include/asm-i386/fixmap.h +++ b/include/asm-i386/fixmap.h @@ -14,6 +14,15 @@ #define _ASM_FIXMAP_H #include + +/* used by vmalloc.c, vsyscall.lds.S. + * + * Leave one empty page between vmalloc'ed areas and + * the start of the fixmap. + */ +#define __FIXADDR_TOP 0xfffff000 + +#ifndef __ASSEMBLY__ #include #include #include @@ -97,13 +106,8 @@ extern void __set_fixmap (enum fixed_addresses idx, #define clear_fixmap(idx) \ __set_fixmap(idx, 0, __pgprot(0)) -/* - * used by vmalloc.c. - * - * Leave one empty page between vmalloc'ed areas and - * the start of the fixmap. - */ -#define FIXADDR_TOP (0xfffff000UL) +#define FIXADDR_TOP ((unsigned long)__FIXADDR_TOP) + #define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) #define FIXADDR_START (FIXADDR_TOP - __FIXADDR_SIZE) @@ -148,4 +152,5 @@ static inline unsigned long virt_to_fix(const unsigned long vaddr) return __virt_to_fix(vaddr); } +#endif /* !__ASSEMBLY__ */ #endif -- 2.53.0