diff options
Diffstat (limited to 'linux-2.6-qemu-fast.patch')
-rw-r--r-- | linux-2.6-qemu-fast.patch | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/linux-2.6-qemu-fast.patch b/linux-2.6-qemu-fast.patch new file mode 100644 index 0000000000..34ca5a232e --- /dev/null +++ b/linux-2.6-qemu-fast.patch @@ -0,0 +1,305 @@ +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/arch/i386/Kconfig .32324-linux-2.6.0.updated/arch/i386/Kconfig +--- .32324-linux-2.6.0/arch/i386/Kconfig 2003-10-09 18:02:48.000000000 +1000 ++++ .32324-linux-2.6.0.updated/arch/i386/Kconfig 2003-12-26 16:46:49.000000000 +1100 +@@ -307,6 +307,14 @@ config X86_GENERIC + when it has moderate overhead. This is intended for generic + distributions kernels. + ++config QEMU ++ bool "Kernel to run under QEMU" ++ depends on EXPERIMENTAL ++ help ++ Select this if you want to boot the kernel inside qemu-fast, ++ the non-mmu version of the x86 emulator. See ++ <http://fabrice.bellard.free.fr/qemu/>. Say N. ++ + # + # Define implied options from the CPU selection here + # +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/arch/i386/kernel/Makefile .32324-linux-2.6.0.updated/arch/i386/kernel/Makefile +--- .32324-linux-2.6.0/arch/i386/kernel/Makefile 2003-09-29 10:25:15.000000000 +1000 ++++ .32324-linux-2.6.0.updated/arch/i386/kernel/Makefile 2003-12-26 16:46:49.000000000 +1100 +@@ -46,12 +46,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 +@@ -62,5 +64,5 @@ $(obj)/built-in.o: $(obj)/vsyscall-syms. + $(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 -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/arch/i386/kernel/vmlinux.lds.S .32324-linux-2.6.0.updated/arch/i386/kernel/vmlinux.lds.S +--- .32324-linux-2.6.0/arch/i386/kernel/vmlinux.lds.S 2003-09-22 10:27:28.000000000 +1000 ++++ .32324-linux-2.6.0.updated/arch/i386/kernel/vmlinux.lds.S 2003-12-26 16:46:49.000000000 +1100 +@@ -3,6 +3,7 @@ + */ + + #include <asm-generic/vmlinux.lds.h> ++#include <asm/page.h> + + OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") + OUTPUT_ARCH(i386) +@@ -10,7 +11,7 @@ ENTRY(startup_32) + jiffies = jiffies_64; + SECTIONS + { +- . = 0xC0000000 + 0x100000; ++ . = __PAGE_OFFSET + 0x100000; + /* read-only */ + _text = .; /* Text and read-only data */ + .text : { +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds +--- .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds 2003-09-22 10:07:26.000000000 +1000 ++++ .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds 1970-01-01 10:00:00.000000000 +1000 +@@ -1,67 +0,0 @@ +-/* +- * Linker script for vsyscall DSO. The vsyscall page is an ELF shared +- * object prelinked to its virtual address, and with only one read-only +- * segment (that fits in one page). This script controls its layout. +- */ +- +-/* This must match <asm/fixmap.h>. */ +-VSYSCALL_BASE = 0xffffe000; +- +-SECTIONS +-{ +- . = VSYSCALL_BASE + SIZEOF_HEADERS; +- +- .hash : { *(.hash) } :text +- .dynsym : { *(.dynsym) } +- .dynstr : { *(.dynstr) } +- .gnu.version : { *(.gnu.version) } +- .gnu.version_d : { *(.gnu.version_d) } +- .gnu.version_r : { *(.gnu.version_r) } +- +- /* This linker script is used both with -r and with -shared. +- For the layouts to match, we need to skip more than enough +- space for the dynamic symbol table et al. If this amount +- is insufficient, ld -shared will barf. Just increase it here. */ +- . = VSYSCALL_BASE + 0x400; +- +- .text : { *(.text) } :text =0x90909090 +- +- .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr +- .eh_frame : { KEEP (*(.eh_frame)) } :text +- .dynamic : { *(.dynamic) } :text :dynamic +- .useless : { +- *(.got.plt) *(.got) +- *(.data .data.* .gnu.linkonce.d.*) +- *(.dynbss) +- *(.bss .bss.* .gnu.linkonce.b.*) +- } :text +-} +- +-/* +- * We must supply the ELF program headers explicitly to get just one +- * PT_LOAD segment, and set the flags explicitly to make segments read-only. +- */ +-PHDRS +-{ +- text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */ +- dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ +- eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */ +-} +- +-/* +- * This controls what symbols we export from the DSO. +- */ +-VERSION +-{ +- LINUX_2.5 { +- global: +- __kernel_vsyscall; +- __kernel_sigreturn; +- __kernel_rt_sigreturn; +- +- local: *; +- }; +-} +- +-/* The ELF entry point can be used to set the AT_SYSINFO value. */ +-ENTRY(__kernel_vsyscall); +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds.S .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds.S +--- .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds.S 1970-01-01 10:00:00.000000000 +1000 ++++ .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds.S 2003-12-26 16:46:49.000000000 +1100 +@@ -0,0 +1,67 @@ ++/* ++ * Linker script for vsyscall DSO. The vsyscall page is an ELF shared ++ * object prelinked to its virtual address, and with only one read-only ++ * segment (that fits in one page). This script controls its layout. ++ */ ++#include <asm/fixmap.h> ++ ++VSYSCALL_BASE = __FIXADDR_TOP - 0x1000; ++ ++SECTIONS ++{ ++ . = VSYSCALL_BASE + SIZEOF_HEADERS; ++ ++ .hash : { *(.hash) } :text ++ .dynsym : { *(.dynsym) } ++ .dynstr : { *(.dynstr) } ++ .gnu.version : { *(.gnu.version) } ++ .gnu.version_d : { *(.gnu.version_d) } ++ .gnu.version_r : { *(.gnu.version_r) } ++ ++ /* This linker script is used both with -r and with -shared. ++ For the layouts to match, we need to skip more than enough ++ space for the dynamic symbol table et al. If this amount ++ is insufficient, ld -shared will barf. Just increase it here. */ ++ . = VSYSCALL_BASE + 0x400; ++ ++ .text : { *(.text) } :text =0x90909090 ++ ++ .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr ++ .eh_frame : { KEEP (*(.eh_frame)) } :text ++ .dynamic : { *(.dynamic) } :text :dynamic ++ .useless : { ++ *(.got.plt) *(.got) ++ *(.data .data.* .gnu.linkonce.d.*) ++ *(.dynbss) ++ *(.bss .bss.* .gnu.linkonce.b.*) ++ } :text ++} ++ ++/* ++ * We must supply the ELF program headers explicitly to get just one ++ * PT_LOAD segment, and set the flags explicitly to make segments read-only. ++ */ ++PHDRS ++{ ++ text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */ ++ dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ ++ eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */ ++} ++ ++/* ++ * This controls what symbols we export from the DSO. ++ */ ++VERSION ++{ ++ LINUX_2.5 { ++ global: ++ __kernel_vsyscall; ++ __kernel_sigreturn; ++ __kernel_rt_sigreturn; ++ ++ local: *; ++ }; ++} ++ ++/* The ELF entry point can be used to set the AT_SYSINFO value. */ ++ENTRY(__kernel_vsyscall); +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/include/asm-i386/fixmap.h .32324-linux-2.6.0.updated/include/asm-i386/fixmap.h +--- .32324-linux-2.6.0/include/asm-i386/fixmap.h 2003-09-22 10:09:12.000000000 +1000 ++++ .32324-linux-2.6.0.updated/include/asm-i386/fixmap.h 2003-12-26 16:46:49.000000000 +1100 +@@ -14,6 +14,19 @@ + #define _ASM_FIXMAP_H + + #include <linux/config.h> ++ ++/* used by vmalloc.c, vsyscall.lds.S. ++ * ++ * Leave one empty page between vmalloc'ed areas and ++ * the start of the fixmap. ++ */ ++#ifdef CONFIG_QEMU ++#define __FIXADDR_TOP 0xa7fff000 ++#else ++#define __FIXADDR_TOP 0xfffff000 ++#endif ++ ++#ifndef __ASSEMBLY__ + #include <linux/kernel.h> + #include <asm/acpi.h> + #include <asm/apicdef.h> +@@ -94,13 +107,8 @@ extern void __set_fixmap (enum fixed_add + #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) + +@@ -145,4 +153,5 @@ static inline unsigned long virt_to_fix( + return __virt_to_fix(vaddr); + } + ++#endif /* !__ASSEMBLY__ */ + #endif +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/include/asm-i386/page.h .32324-linux-2.6.0.updated/include/asm-i386/page.h +--- .32324-linux-2.6.0/include/asm-i386/page.h 2003-09-22 10:06:42.000000000 +1000 ++++ .32324-linux-2.6.0.updated/include/asm-i386/page.h 2003-12-26 16:46:49.000000000 +1100 +@@ -10,10 +10,10 @@ + #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT) + + #ifdef __KERNEL__ +-#ifndef __ASSEMBLY__ +- + #include <linux/config.h> + ++#ifndef __ASSEMBLY__ ++ + #ifdef CONFIG_X86_USE_3DNOW + + #include <asm/mmx.h> +@@ -115,12 +115,19 @@ static __inline__ int get_order(unsigned + #endif /* __ASSEMBLY__ */ + + #ifdef __ASSEMBLY__ ++#ifdef CONFIG_QEMU ++#define __PAGE_OFFSET (0x90000000) ++#else + #define __PAGE_OFFSET (0xC0000000) ++#endif /* QEMU */ ++#else ++#ifdef CONFIG_QEMU ++#define __PAGE_OFFSET (0x90000000UL) + #else + #define __PAGE_OFFSET (0xC0000000UL) ++#endif /* QEMU */ + #endif + +- + #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) + #define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE) + #define MAXMEM (-__PAGE_OFFSET-__VMALLOC_RESERVE) +diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal .32324-linux-2.6.0/include/asm-i386/param.h .32324-linux-2.6.0.updated/include/asm-i386/param.h +--- .32324-linux-2.6.0/include/asm-i386/param.h 2003-09-21 17:26:06.000000000 +1000 ++++ .32324-linux-2.6.0.updated/include/asm-i386/param.h 2003-12-26 16:46:49.000000000 +1100 +@@ -2,7 +2,12 @@ + #define _ASMi386_PARAM_H + + #ifdef __KERNEL__ +-# define HZ 1000 /* Internal kernel timer frequency */ ++# include <linux/config.h> ++# ifdef CONFIG_QEMU ++# define HZ 100 ++# else ++# define HZ 1000 /* Internal kernel timer frequency */ ++# endif + # define USER_HZ 100 /* .. some user interfaces are in "ticks" */ + # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ + #endif |