Commit 4690764bba3a489d5180106d08970ced59113e22

Authored by bellard
1 parent 3c1cf9fa

update


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@312 c046a42c-6fe2-441c-8c8c-71466251a162
Changelog
  1 +version 0.4.2:
  2 +
  3 + - many exception handling fixes (can compile a Linux kernel inside vl)
  4 + - IDE emulation support
  5 + - initial GDB stub support
  6 + - deferred update support for disk images (Rusty Russell)
  7 + - accept user mode Linux Copy On Write disk images
  8 + - SMP kernels can at least be booted
  9 +
1 version 0.4.1: 10 version 0.4.1:
2 11
3 - more accurate timer support in vl. 12 - more accurate timer support in vl.
Makefile
@@ -141,7 +141,7 @@ endif @@ -141,7 +141,7 @@ endif
141 141
142 # must use static linking to avoid leaving stuff in virtual address space 142 # must use static linking to avoid leaving stuff in virtual address space
143 vl: vl.o block.o libqemu.a 143 vl: vl.o block.o libqemu.a
144 - $(CC) -pg -static -Wl,-T,i386-vl.ld -o $@ $^ $(LIBS) 144 + $(CC) -static -Wl,-T,i386-vl.ld -o $@ $^ $(LIBS)
145 145
146 vlmkcow: vlmkcow.o 146 vlmkcow: vlmkcow.o
147 $(CC) -o $@ $^ $(LIBS) 147 $(CC) -o $@ $^ $(LIBS)
@@ -213,11 +213,11 @@ dyngen.c dyngen.h dyngen-exec.h ioctls.h syscall_types.h \ @@ -213,11 +213,11 @@ dyngen.c dyngen.h dyngen-exec.h ioctls.h syscall_types.h \
213 Makefile elf.h elfload.c main.c signal.c qemu.h \ 213 Makefile elf.h elfload.c main.c signal.c qemu.h \
214 syscall.c syscall_defs.h vm86.c path.c mmap.c \ 214 syscall.c syscall_defs.h vm86.c path.c mmap.c \
215 i386.ld ppc.ld alpha.ld s390.ld sparc.ld arm.ld\ 215 i386.ld ppc.ld alpha.ld s390.ld sparc.ld arm.ld\
216 -vl.c i386-vl.ld vl.h block.c\ 216 +vl.c i386-vl.ld vl.h block.c vlmkcow.c\
217 thunk.c cpu-exec.c translate.c cpu-all.h thunk.h exec.h\ 217 thunk.c cpu-exec.c translate.c cpu-all.h thunk.h exec.h\
218 -exec.c cpu-exec.c\ 218 +exec.c cpu-exec.c gdbstub.c\
219 cpu-i386.h op-i386.c helper-i386.c syscall-i386.h translate-i386.c \ 219 cpu-i386.h op-i386.c helper-i386.c syscall-i386.h translate-i386.c \
220 -exec-i386.h ops_template.h op_string.h opreg_template.h \ 220 +exec-i386.h ops_template.h ops_template_mem.h op_string.h opreg_template.h \
221 cpu-arm.h syscall-arm.h exec-arm.h op-arm.c translate-arm.c op-arm-template.h \ 221 cpu-arm.h syscall-arm.h exec-arm.h op-arm.c translate-arm.c op-arm-template.h \
222 dis-asm.h disas.c disas.h alpha-dis.c ppc-dis.c i386-dis.c sparc-dis.c \ 222 dis-asm.h disas.c disas.h alpha-dis.c ppc-dis.c i386-dis.c sparc-dis.c \
223 arm-dis.c \ 223 arm-dis.c \
1 -  
2 -- finish segment ops (call far, ret far, load_seg suppressed)  
3 -- fix arm fpu rounding (at least for float->integer conversions) 1 +- optimize FPU operations (evaluate x87 stack pointer statically) and
  2 + fix cr0.TS emulation
4 - fix CCOP optimisation 3 - fix CCOP optimisation
5 -- optimize FPU operations (evaluate x87 stack pointer statically)  
6 -- fpush not before mem load restarting  
7 - fix all remaining thread lock issues (must put TBs in a specific invalid 4 - fix all remaining thread lock issues (must put TBs in a specific invalid
8 state, find a solution for tb_flush()). 5 state, find a solution for tb_flush()).
9 -- add gcc 2.96 test configure (some gcc3 flags are needed) 6 +- cpu loop optimisation (optimise ret case as the cpu state does not change)
  7 +- fix arm fpu rounding (at least for float->integer conversions)
10 - add IPC syscalls 8 - add IPC syscalls
11 9
12 lower priority: 10 lower priority:
13 -------------- 11 --------------
  12 +- sysenter/sysexit emulation
  13 +- SMP support
  14 +- finish segment ops (call far, ret far, load_seg suppressed)
14 - use -msoft-float on ARM 15 - use -msoft-float on ARM
15 - use kernel traps for unaligned accesses on ARM ? 16 - use kernel traps for unaligned accesses on ARM ?
16 - handle rare page fault cases (in particular if page fault in heplers or 17 - handle rare page fault cases (in particular if page fault in heplers or
1 -0.4.1  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +0.4.2
3 \ No newline at end of file 3 \ No newline at end of file
cpu-all.h
@@ -311,7 +311,7 @@ extern CPUState *cpu_single_env; @@ -311,7 +311,7 @@ extern CPUState *cpu_single_env;
311 311
312 #define CPU_INTERRUPT_EXIT 0x01 /* wants exit from main loop */ 312 #define CPU_INTERRUPT_EXIT 0x01 /* wants exit from main loop */
313 #define CPU_INTERRUPT_HARD 0x02 /* hardware interrupt pending */ 313 #define CPU_INTERRUPT_HARD 0x02 /* hardware interrupt pending */
314 -void cpu_interrupt(CPUX86State *s, int mask); 314 +void cpu_interrupt(CPUState *s, int mask);
315 315
316 /* gdb stub API */ 316 /* gdb stub API */
317 extern int gdbstub_fd; 317 extern int gdbstub_fd;
cpu-arm.h
@@ -49,7 +49,6 @@ typedef struct CPUARMState { @@ -49,7 +49,6 @@ typedef struct CPUARMState {
49 49
50 CPUARMState *cpu_arm_init(void); 50 CPUARMState *cpu_arm_init(void);
51 int cpu_arm_exec(CPUARMState *s); 51 int cpu_arm_exec(CPUARMState *s);
52 -void cpu_arm_interrupt(CPUARMState *s);  
53 void cpu_arm_close(CPUARMState *s); 52 void cpu_arm_close(CPUARMState *s);
54 /* you can call this signal handler from your SIGBUS and SIGSEGV 53 /* you can call this signal handler from your SIGBUS and SIGSEGV
55 signal handlers to inform the virtual CPU of exceptions. non zero 54 signal handlers to inform the virtual CPU of exceptions. non zero
qemu-doc.texi
@@ -240,9 +240,9 @@ This section explains how to launch a Linux kernel inside QEMU. @@ -240,9 +240,9 @@ This section explains how to launch a Linux kernel inside QEMU.
240 240
241 @enumerate 241 @enumerate
242 @item 242 @item
243 -Download the archive @file{vl-test-xxx.tar.gz} containing a Linux kernel  
244 -and an initrd (initial Ram Disk). The archive also contains a  
245 -precompiled version of @file{vl}, the QEMU System emulator. 243 +Download the archive @file{vl-test-xxx.tar.gz} containing a Linux
  244 +kernel and a disk image. The archive also contains a precompiled
  245 +version of @file{vl}, the QEMU System emulator.
246 246
247 @item Optional: If you want network support (for example to launch X11 examples), you 247 @item Optional: If you want network support (for example to launch X11 examples), you
248 must copy the script @file{vl-ifup} in @file{/etc} and configure 248 must copy the script @file{vl-ifup} in @file{/etc} and configure
@@ -262,20 +262,25 @@ seen from the emulated kernel at IP address 172.20.0.1. @@ -262,20 +262,25 @@ seen from the emulated kernel at IP address 172.20.0.1.
262 > ./vl.sh 262 > ./vl.sh
263 connected to host network interface: tun0 263 connected to host network interface: tun0
264 Uncompressing Linux... Ok, booting the kernel. 264 Uncompressing Linux... Ok, booting the kernel.
265 -Linux version 2.4.20 (bellard@voyager) (gcc version 2.95.2 20000220 (Debian GNU/Linux)) #42 Wed Jun 25 14:16:12 CEST 2003 265 +Linux version 2.4.20 (fabrice@localhost.localdomain) (gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)) #22 lun jui 7 13:37:41 CEST 2003
266 BIOS-provided physical RAM map: 266 BIOS-provided physical RAM map:
267 - BIOS-88: 0000000000000000 - 000000000009f000 (usable)  
268 - BIOS-88: 0000000000100000 - 0000000002000000 (usable) 267 + BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
  268 + BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
269 32MB LOWMEM available. 269 32MB LOWMEM available.
270 On node 0 totalpages: 8192 270 On node 0 totalpages: 8192
271 zone(0): 4096 pages. 271 zone(0): 4096 pages.
272 zone(1): 4096 pages. 272 zone(1): 4096 pages.
273 zone(2): 0 pages. 273 zone(2): 0 pages.
274 -Kernel command line: root=/dev/ram ramdisk_size=6144 274 +Kernel command line: root=/dev/hda ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
  275 +ide_setup: ide1=noprobe
  276 +ide_setup: ide2=noprobe
  277 +ide_setup: ide3=noprobe
  278 +ide_setup: ide4=noprobe
  279 +ide_setup: ide5=noprobe
275 Initializing CPU#0 280 Initializing CPU#0
276 -Detected 501.785 MHz processor.  
277 -Calibrating delay loop... 973.20 BogoMIPS  
278 -Memory: 24776k/32768k available (725k kernel code, 7604k reserved, 151k data, 48k init, 0k highmem) 281 +Detected 501.285 MHz processor.
  282 +Calibrating delay loop... 989.59 BogoMIPS
  283 +Memory: 29268k/32768k available (907k kernel code, 3112k reserved, 212k data, 52k init, 0k highmem)
279 Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) 284 Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
280 Inode cache hash table entries: 2048 (order: 2, 16384 bytes) 285 Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
281 Mount-cache hash table entries: 512 (order: 0, 4096 bytes) 286 Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
@@ -289,24 +294,30 @@ Based upon Swansea University Computer Society NET3.039 @@ -289,24 +294,30 @@ Based upon Swansea University Computer Society NET3.039
289 Initializing RT netlink socket 294 Initializing RT netlink socket
290 apm: BIOS not found. 295 apm: BIOS not found.
291 Starting kswapd 296 Starting kswapd
  297 +Journalled Block Device driver loaded
292 pty: 256 Unix98 ptys configured 298 pty: 256 Unix98 ptys configured
293 Serial driver version 5.05c (2001-07-08) with no serial options enabled 299 Serial driver version 5.05c (2001-07-08) with no serial options enabled
294 ttyS00 at 0x03f8 (irq = 4) is a 16450 300 ttyS00 at 0x03f8 (irq = 4) is a 16450
  301 +Uniform Multi-Platform E-IDE driver Revision: 6.31
  302 +ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
  303 +hda: QEMU HARDDISK, ATA DISK drive
  304 +ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
  305 +hda: 12288 sectors (6 MB) w/256KiB Cache, CHS=12/16/63
  306 +Partition check:
  307 + hda: unknown partition table
295 ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com) 308 ne.c:v1.10 9/23/94 Donald Becker (becker@scyld.com)
296 Last modified Nov 1, 2000 by Paul Gortmaker 309 Last modified Nov 1, 2000 by Paul Gortmaker
297 NE*000 ethercard probe at 0x300: 52 54 00 12 34 56 310 NE*000 ethercard probe at 0x300: 52 54 00 12 34 56
298 eth0: NE2000 found at 0x300, using IRQ 9. 311 eth0: NE2000 found at 0x300, using IRQ 9.
299 -RAMDISK driver initialized: 16 RAM disks of 6144K size 1024 blocksize 312 +RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
300 NET4: Linux TCP/IP 1.0 for NET4.0 313 NET4: Linux TCP/IP 1.0 for NET4.0
301 IP Protocols: ICMP, UDP, TCP, IGMP 314 IP Protocols: ICMP, UDP, TCP, IGMP
302 IP: routing cache hash table of 512 buckets, 4Kbytes 315 IP: routing cache hash table of 512 buckets, 4Kbytes
303 -TCP: Hash tables configured (established 2048 bind 2048) 316 +TCP: Hash tables configured (established 2048 bind 4096)
304 NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. 317 NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
305 -RAMDISK: ext2 filesystem found at block 0  
306 -RAMDISK: Loading 6144 blocks [1 disk] into ram disk... done.  
307 -Freeing initrd memory: 6144k freed 318 +EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
308 VFS: Mounted root (ext2 filesystem). 319 VFS: Mounted root (ext2 filesystem).
309 -Freeing unused kernel memory: 48k freed 320 +Freeing unused kernel memory: 52k freed
310 sh: can't access tty; job control turned off 321 sh: can't access tty; job control turned off
311 # 322 #
312 @end example 323 @end example
@@ -338,7 +349,7 @@ a real Virtual Linux system ! @@ -338,7 +349,7 @@ a real Virtual Linux system !
338 NOTES: 349 NOTES:
339 @enumerate 350 @enumerate
340 @item 351 @item
341 -A 2.5.66 kernel is also included in the vl-test archive. Just 352 +A 2.5.74 kernel is also included in the vl-test archive. Just
342 replace the bzImage in vl.sh to try it. 353 replace the bzImage in vl.sh to try it.
343 354
344 @item 355 @item
@@ -348,7 +359,19 @@ a temporary directory using the tmpfs filesystem to avoid too many @@ -348,7 +359,19 @@ a temporary directory using the tmpfs filesystem to avoid too many
348 unnecessary disk accesses. 359 unnecessary disk accesses.
349 360
350 @item 361 @item
351 -The example initrd is a modified version of the one made by Kevin 362 +In order to exit cleanly for vl, you can do a @emph{shutdown} inside
  363 +vl. vl will automatically exit when the Linux shutdown is done.
  364 +
  365 +@item
  366 +You can boot slightly faster by disabling the probe of non present IDE
  367 +interfaces. To do so, add the following options on the kernel command
  368 +line:
  369 +@example
  370 +ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
  371 +@end example
  372 +
  373 +@item
  374 +The example disk image is a modified version of the one made by Kevin
352 Lawton for the plex86 Project (@url{www.plex86.org}). 375 Lawton for the plex86 Project (@url{www.plex86.org}).
353 376
354 @end enumerate 377 @end enumerate
@@ -363,9 +386,6 @@ usage: vl [options] bzImage [kernel parameters...] @@ -363,9 +386,6 @@ usage: vl [options] bzImage [kernel parameters...]
363 386
364 General options: 387 General options:
365 @table @option 388 @table @option
366 -@item -initrd file  
367 -Use 'file' as initial ram disk.  
368 -  
369 @item -hda file 389 @item -hda file
370 @item -hdb file 390 @item -hdb file
371 Use 'file' as hard disk 0 or 1 image (@xref{disk_images}). 391 Use 'file' as hard disk 0 or 1 image (@xref{disk_images}).
@@ -383,6 +403,9 @@ Set virtual RAM size to @var{megs} megabytes. @@ -383,6 +403,9 @@ Set virtual RAM size to @var{megs} megabytes.
383 Set network init script [default=/etc/vl-ifup]. This script is 403 Set network init script [default=/etc/vl-ifup]. This script is
384 launched to configure the host network interface (usually tun0) 404 launched to configure the host network interface (usually tun0)
385 corresponding to the virtual NE2000 card. 405 corresponding to the virtual NE2000 card.
  406 +
  407 +@item -initrd file
  408 +Use 'file' as initial ram disk.
386 @end table 409 @end table
387 410
388 Debug options: 411 Debug options:
@@ -481,13 +504,17 @@ Since holes are used, the displayed size of the COW disk image is not @@ -481,13 +504,17 @@ Since holes are used, the displayed size of the COW disk image is not
481 the real one. To know it, use the @code{ls -ls} command. 504 the real one. To know it, use the @code{ls -ls} command.
482 @end enumerate 505 @end enumerate
483 506
484 -@section Kernel Compilation 507 +@section Linux Kernel Compilation
  508 +
  509 +You should be able to use any kernel with QEMU provided you make the
  510 +following changes (only 2.4.x and 2.5.x were tested):
485 511
486 -You can use any Linux kernel within QEMU provided it is mapped at  
487 -address 0x90000000 (the default is 0xc0000000). You must modify only two  
488 -lines in the kernel source: 512 +@enumerate
  513 +@item
  514 +The kernel must be mapped at 0x90000000 (the default is
  515 +0xc0000000). You must modify only two lines in the kernel source:
489 516
490 -In asm/page.h, replace 517 +In @file{include/asm/page.h}, replace
491 @example 518 @example
492 #define __PAGE_OFFSET (0xc0000000) 519 #define __PAGE_OFFSET (0xc0000000)
493 @end example 520 @end example
@@ -496,7 +523,7 @@ by @@ -496,7 +523,7 @@ by
496 #define __PAGE_OFFSET (0x90000000) 523 #define __PAGE_OFFSET (0x90000000)
497 @end example 524 @end example
498 525
499 -And in arch/i386/vmlinux.lds, replace 526 +And in @file{arch/i386/vmlinux.lds}, replace
500 @example 527 @example
501 . = 0xc0000000 + 0x100000; 528 . = 0xc0000000 + 0x100000;
502 @end example 529 @end example
@@ -505,22 +532,25 @@ by @@ -505,22 +532,25 @@ by
505 . = 0x90000000 + 0x100000; 532 . = 0x90000000 + 0x100000;
506 @end example 533 @end example
507 534
508 -The file config-2.4.20 gives the configuration of the example kernel.  
509 -  
510 -Just type 535 +@item
  536 +If you want to enable SMP (Symmetric Multi-Processing) support, you
  537 +must make the following change in @file{include/asm/fixmap.h}. Replace
511 @example 538 @example
512 -make bzImage 539 +#define FIXADDR_TOP (0xffffX000UL)
513 @end example 540 @end example
  541 +by
  542 +@example
  543 +#define FIXADDR_TOP (0xa7ffX000UL)
  544 +@end example
  545 +(X is 'e' or 'f' depending on the kernel version). Although you can
  546 +use an SMP kernel with QEMU, it only supports one CPU.
514 547
515 -As you would do to make a real kernel. Then you can use with QEMU  
516 -exactly the same kernel as you would boot on your PC (in  
517 -@file{arch/i386/boot/bzImage}).  
518 - 548 +@item
519 If you are not using a 2.5 kernel as host kernel but if you use a target 549 If you are not using a 2.5 kernel as host kernel but if you use a target
520 2.5 kernel, you must also ensure that the 'HZ' define is set to 100 550 2.5 kernel, you must also ensure that the 'HZ' define is set to 100
521 (1000 is the default) as QEMU cannot currently emulate timers at 551 (1000 is the default) as QEMU cannot currently emulate timers at
522 frequencies greater than 100 Hz on host Linux systems < 2.5. In 552 frequencies greater than 100 Hz on host Linux systems < 2.5. In
523 -asm/param.h, replace: 553 +@file{include/asm/param.h}, replace:
524 554
525 @example 555 @example
526 # define HZ 1000 /* Internal kernel timer frequency */ 556 # define HZ 1000 /* Internal kernel timer frequency */
@@ -530,8 +560,18 @@ by @@ -530,8 +560,18 @@ by
530 # define HZ 100 /* Internal kernel timer frequency */ 560 # define HZ 100 /* Internal kernel timer frequency */
531 @end example 561 @end example
532 562
533 -If you have problems running your kernel, verify that neither the SMP nor  
534 -HIGHMEM configuration options are activated. 563 +@end enumerate
  564 +
  565 +The file config-2.x.x gives the configuration of the example kernels.
  566 +
  567 +Just type
  568 +@example
  569 +make bzImage
  570 +@end example
  571 +
  572 +As you would do to make a real kernel. Then you can use with QEMU
  573 +exactly the same kernel as you would boot on your PC (in
  574 +@file{arch/i386/boot/bzImage}).
535 575
536 @section PC Emulation 576 @section PC Emulation
537 577
@@ -733,7 +773,7 @@ Correct translated code invalidation is done efficiently by maintaining @@ -733,7 +773,7 @@ Correct translated code invalidation is done efficiently by maintaining
733 a linked list of every translated block contained in a given page. Other 773 a linked list of every translated block contained in a given page. Other
734 linked lists are also maintained to undo direct block chaining. 774 linked lists are also maintained to undo direct block chaining.
735 775
736 -Althought the overhead of doing @code{mprotect()} calls is important, 776 +Although the overhead of doing @code{mprotect()} calls is important,
737 most MSDOS programs can be emulated at reasonnable speed with QEMU and 777 most MSDOS programs can be emulated at reasonnable speed with QEMU and
738 DOSEMU. 778 DOSEMU.
739 779
@@ -802,7 +842,7 @@ reentrancy. @@ -802,7 +842,7 @@ reentrancy.
802 842
803 @section Self-virtualization 843 @section Self-virtualization
804 844
805 -QEMU was conceived so that ultimately it can emulate itself. Althought 845 +QEMU was conceived so that ultimately it can emulate itself. Although
806 it is not very useful, it is an important test to show the power of the 846 it is not very useful, it is an important test to show the power of the
807 emulator. 847 emulator.
808 848
vlmkcow.c
@@ -85,7 +85,8 @@ int cow_create(int cow_fd, const char *image_filename, @@ -85,7 +85,8 @@ int cow_create(int cow_fd, const char *image_filename,
85 85
86 void help(void) 86 void help(void)
87 { 87 {
88 - printf("usage vlmkcow [-h] [-f disk_image] cow_image [cow_size]\n" 88 + printf("vlmkcow version " QEMU_VERSION ", Copyright (c) 2003 Fabrice Bellard\n"
  89 + "usage: vlmkcow [-h] [-f disk_image] cow_image [cow_size]\n"
89 "Create a Copy On Write disk image from an optional raw disk image\n" 90 "Create a Copy On Write disk image from an optional raw disk image\n"
90 "\n" 91 "\n"
91 "-f disk_image set the raw disk image name\n" 92 "-f disk_image set the raw disk image name\n"