0.6.1-alt1
[qemu] / qemu / linux-2.6-qemu-fast.patch
1 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
2 --- .32324-linux-2.6.0/arch/i386/Kconfig        2003-10-09 18:02:48.000000000 +1000
3 +++ .32324-linux-2.6.0.updated/arch/i386/Kconfig        2003-12-26 16:46:49.000000000 +1100
4 @@ -307,6 +307,14 @@ config X86_GENERIC
5           when it has moderate overhead. This is intended for generic 
6           distributions kernels.
7  
8 +config QEMU
9 +       bool "Kernel to run under QEMU"
10 +       depends on EXPERIMENTAL
11 +       help
12 +         Select this if you want to boot the kernel inside qemu-fast,
13 +         the non-mmu version of the x86 emulator.  See
14 +         <http://fabrice.bellard.free.fr/qemu/>.  Say N.
15 +
16  #
17  # Define implied options from the CPU selection here
18  #
19 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
20 --- .32324-linux-2.6.0/arch/i386/kernel/Makefile        2003-09-29 10:25:15.000000000 +1000
21 +++ .32324-linux-2.6.0.updated/arch/i386/kernel/Makefile        2003-12-26 16:46:49.000000000 +1100
22 @@ -46,12 +46,14 @@ quiet_cmd_syscall = SYSCALL $@
23        cmd_syscall = $(CC) -nostdlib $(SYSCFLAGS_$(@F)) \
24                           -Wl,-T,$(filter-out FORCE,$^) -o $@
25  
26 +export AFLAGS_vsyscall.lds.o += -P -C -U$(ARCH)
27 +
28  vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1
29  SYSCFLAGS_vsyscall-sysenter.so = $(vsyscall-flags)
30  SYSCFLAGS_vsyscall-int80.so    = $(vsyscall-flags)
31  
32  $(obj)/vsyscall-int80.so $(obj)/vsyscall-sysenter.so: \
33 -$(obj)/vsyscall-%.so: $(src)/vsyscall.lds $(obj)/vsyscall-%.o FORCE
34 +$(obj)/vsyscall-%.so: $(src)/vsyscall.lds.s $(obj)/vsyscall-%.o FORCE
35         $(call if_changed,syscall)
36  
37  # We also create a special relocatable object that should mirror the symbol
38 @@ -62,5 +64,5 @@ $(obj)/built-in.o: $(obj)/vsyscall-syms.
39  $(obj)/built-in.o: ld_flags += -R $(obj)/vsyscall-syms.o
40  
41  SYSCFLAGS_vsyscall-syms.o = -r
42 -$(obj)/vsyscall-syms.o: $(src)/vsyscall.lds $(obj)/vsyscall-sysenter.o FORCE
43 +$(obj)/vsyscall-syms.o: $(src)/vsyscall.lds.s $(obj)/vsyscall-sysenter.o FORCE
44         $(call if_changed,syscall)
45 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
46 --- .32324-linux-2.6.0/arch/i386/kernel/vmlinux.lds.S   2003-09-22 10:27:28.000000000 +1000
47 +++ .32324-linux-2.6.0.updated/arch/i386/kernel/vmlinux.lds.S   2003-12-26 16:46:49.000000000 +1100
48 @@ -3,6 +3,7 @@
49   */
50  
51  #include <asm-generic/vmlinux.lds.h>
52 +#include <asm/page.h>
53         
54  OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
55  OUTPUT_ARCH(i386)
56 @@ -10,7 +11,7 @@ ENTRY(startup_32)
57  jiffies = jiffies_64;
58  SECTIONS
59  {
60 -  . = 0xC0000000 + 0x100000;
61 +  . = __PAGE_OFFSET + 0x100000;
62    /* read-only */
63    _text = .;                   /* Text and read-only data */
64    .text : {
65 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
66 --- .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds    2003-09-22 10:07:26.000000000 +1000
67 +++ .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds    1970-01-01 10:00:00.000000000 +1000
68 @@ -1,67 +0,0 @@
69 -/*
70 - * Linker script for vsyscall DSO.  The vsyscall page is an ELF shared
71 - * object prelinked to its virtual address, and with only one read-only
72 - * segment (that fits in one page).  This script controls its layout.
73 - */
74 -
75 -/* This must match <asm/fixmap.h>.  */
76 -VSYSCALL_BASE = 0xffffe000;
77 -
78 -SECTIONS
79 -{
80 -  . = VSYSCALL_BASE + SIZEOF_HEADERS;
81 -
82 -  .hash           : { *(.hash) }               :text
83 -  .dynsym         : { *(.dynsym) }
84 -  .dynstr         : { *(.dynstr) }
85 -  .gnu.version    : { *(.gnu.version) }
86 -  .gnu.version_d  : { *(.gnu.version_d) }
87 -  .gnu.version_r  : { *(.gnu.version_r) }
88 -
89 -  /* This linker script is used both with -r and with -shared.
90 -     For the layouts to match, we need to skip more than enough
91 -     space for the dynamic symbol table et al.  If this amount
92 -     is insufficient, ld -shared will barf.  Just increase it here.  */
93 -  . = VSYSCALL_BASE + 0x400;
94 -
95 -  .text           : { *(.text) }               :text =0x90909090
96 -
97 -  .eh_frame_hdr   : { *(.eh_frame_hdr) }       :text :eh_frame_hdr
98 -  .eh_frame       : { KEEP (*(.eh_frame)) }    :text
99 -  .dynamic        : { *(.dynamic) }            :text :dynamic
100 -  .useless        : {
101 -       *(.got.plt) *(.got)
102 -       *(.data .data.* .gnu.linkonce.d.*)
103 -       *(.dynbss)
104 -       *(.bss .bss.* .gnu.linkonce.b.*)
105 -  }                                            :text
106 -}
107 -
108 -/*
109 - * We must supply the ELF program headers explicitly to get just one
110 - * PT_LOAD segment, and set the flags explicitly to make segments read-only.
111 - */
112 -PHDRS
113 -{
114 -  text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
115 -  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
116 -  eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */
117 -}
118 -
119 -/*
120 - * This controls what symbols we export from the DSO.
121 - */
122 -VERSION
123 -{
124 -  LINUX_2.5 {
125 -    global:
126 -       __kernel_vsyscall;
127 -       __kernel_sigreturn;
128 -       __kernel_rt_sigreturn;
129 -
130 -    local: *;
131 -  };
132 -}
133 -
134 -/* The ELF entry point can be used to set the AT_SYSINFO value.  */
135 -ENTRY(__kernel_vsyscall);
136 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
137 --- .32324-linux-2.6.0/arch/i386/kernel/vsyscall.lds.S  1970-01-01 10:00:00.000000000 +1000
138 +++ .32324-linux-2.6.0.updated/arch/i386/kernel/vsyscall.lds.S  2003-12-26 16:46:49.000000000 +1100
139 @@ -0,0 +1,67 @@
140 +/*
141 + * Linker script for vsyscall DSO.  The vsyscall page is an ELF shared
142 + * object prelinked to its virtual address, and with only one read-only
143 + * segment (that fits in one page).  This script controls its layout.
144 + */
145 +#include <asm/fixmap.h>
146 +       
147 +VSYSCALL_BASE = __FIXADDR_TOP - 0x1000;
148 +
149 +SECTIONS
150 +{
151 +  . = VSYSCALL_BASE + SIZEOF_HEADERS;
152 +
153 +  .hash           : { *(.hash) }               :text
154 +  .dynsym         : { *(.dynsym) }
155 +  .dynstr         : { *(.dynstr) }
156 +  .gnu.version    : { *(.gnu.version) }
157 +  .gnu.version_d  : { *(.gnu.version_d) }
158 +  .gnu.version_r  : { *(.gnu.version_r) }
159 +
160 +  /* This linker script is used both with -r and with -shared.
161 +     For the layouts to match, we need to skip more than enough
162 +     space for the dynamic symbol table et al.  If this amount
163 +     is insufficient, ld -shared will barf.  Just increase it here.  */
164 +  . = VSYSCALL_BASE + 0x400;
165 +
166 +  .text           : { *(.text) }               :text =0x90909090
167 +
168 +  .eh_frame_hdr   : { *(.eh_frame_hdr) }       :text :eh_frame_hdr
169 +  .eh_frame       : { KEEP (*(.eh_frame)) }    :text
170 +  .dynamic        : { *(.dynamic) }            :text :dynamic
171 +  .useless        : {
172 +       *(.got.plt) *(.got)
173 +       *(.data .data.* .gnu.linkonce.d.*)
174 +       *(.dynbss)
175 +       *(.bss .bss.* .gnu.linkonce.b.*)
176 +  }                                            :text
177 +}
178 +
179 +/*
180 + * We must supply the ELF program headers explicitly to get just one
181 + * PT_LOAD segment, and set the flags explicitly to make segments read-only.
182 + */
183 +PHDRS
184 +{
185 +  text PT_LOAD FILEHDR PHDRS FLAGS(5); /* PF_R|PF_X */
186 +  dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
187 +  eh_frame_hdr 0x6474e550; /* PT_GNU_EH_FRAME, but ld doesn't match the name */
188 +}
189 +
190 +/*
191 + * This controls what symbols we export from the DSO.
192 + */
193 +VERSION
194 +{
195 +  LINUX_2.5 {
196 +    global:
197 +       __kernel_vsyscall;
198 +       __kernel_sigreturn;
199 +       __kernel_rt_sigreturn;
200 +
201 +    local: *;
202 +  };
203 +}
204 +
205 +/* The ELF entry point can be used to set the AT_SYSINFO value.  */
206 +ENTRY(__kernel_vsyscall);
207 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
208 --- .32324-linux-2.6.0/include/asm-i386/fixmap.h        2003-09-22 10:09:12.000000000 +1000
209 +++ .32324-linux-2.6.0.updated/include/asm-i386/fixmap.h        2003-12-26 16:46:49.000000000 +1100
210 @@ -14,6 +14,19 @@
211  #define _ASM_FIXMAP_H
212  
213  #include <linux/config.h>
214 +
215 +/* used by vmalloc.c, vsyscall.lds.S.
216 + *
217 + * Leave one empty page between vmalloc'ed areas and
218 + * the start of the fixmap.
219 + */
220 +#ifdef CONFIG_QEMU
221 +#define __FIXADDR_TOP  0xa7fff000
222 +#else
223 +#define __FIXADDR_TOP  0xfffff000
224 +#endif
225 +
226 +#ifndef __ASSEMBLY__
227  #include <linux/kernel.h>
228  #include <asm/acpi.h>
229  #include <asm/apicdef.h>
230 @@ -94,13 +107,8 @@ extern void __set_fixmap (enum fixed_add
231  #define clear_fixmap(idx) \
232                 __set_fixmap(idx, 0, __pgprot(0))
233  
234 -/*
235 - * used by vmalloc.c.
236 - *
237 - * Leave one empty page between vmalloc'ed areas and
238 - * the start of the fixmap.
239 - */
240 -#define FIXADDR_TOP    (0xfffff000UL)
241 +#define FIXADDR_TOP    ((unsigned long)__FIXADDR_TOP)
242 +
243  #define __FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
244  #define FIXADDR_START  (FIXADDR_TOP - __FIXADDR_SIZE)
245  
246 @@ -145,4 +153,5 @@ static inline unsigned long virt_to_fix(
247         return __virt_to_fix(vaddr);
248  }
249  
250 +#endif /* !__ASSEMBLY__ */
251  #endif
252 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
253 --- .32324-linux-2.6.0/include/asm-i386/page.h  2003-09-22 10:06:42.000000000 +1000
254 +++ .32324-linux-2.6.0.updated/include/asm-i386/page.h  2003-12-26 16:46:49.000000000 +1100
255 @@ -10,10 +10,10 @@
256  #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
257  
258  #ifdef __KERNEL__
259 -#ifndef __ASSEMBLY__
260 -
261  #include <linux/config.h>
262  
263 +#ifndef __ASSEMBLY__
264 +
265  #ifdef CONFIG_X86_USE_3DNOW
266  
267  #include <asm/mmx.h>
268 @@ -115,12 +115,19 @@ static __inline__ int get_order(unsigned
269  #endif /* __ASSEMBLY__ */
270  
271  #ifdef __ASSEMBLY__
272 +#ifdef CONFIG_QEMU
273 +#define __PAGE_OFFSET          (0x90000000)
274 +#else
275  #define __PAGE_OFFSET          (0xC0000000)
276 +#endif /* QEMU */
277 +#else
278 +#ifdef CONFIG_QEMU
279 +#define __PAGE_OFFSET          (0x90000000UL)
280  #else
281  #define __PAGE_OFFSET          (0xC0000000UL)
282 +#endif /* QEMU */
283  #endif
284  
285 -
286  #define PAGE_OFFSET            ((unsigned long)__PAGE_OFFSET)
287  #define VMALLOC_RESERVE                ((unsigned long)__VMALLOC_RESERVE)
288  #define MAXMEM                 (-__PAGE_OFFSET-__VMALLOC_RESERVE)
289 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
290 --- .32324-linux-2.6.0/include/asm-i386/param.h 2003-09-21 17:26:06.000000000 +1000
291 +++ .32324-linux-2.6.0.updated/include/asm-i386/param.h 2003-12-26 16:46:49.000000000 +1100
292 @@ -2,7 +2,12 @@
293  #define _ASMi386_PARAM_H
294  
295  #ifdef __KERNEL__
296 -# define HZ            1000            /* Internal kernel timer frequency */
297 +# include <linux/config.h>
298 +# ifdef CONFIG_QEMU
299 +#  define HZ           100
300 +# else
301 +#  define HZ           1000            /* Internal kernel timer frequency */
302 +# endif
303  # define USER_HZ       100             /* .. some user interfaces are in "ticks" */
304  # define CLOCKS_PER_SEC        (USER_HZ)       /* like times() */
305  #endif