Package: qemu-kvm Version: 0.14.0+dfsg-1~tls Severity: wishlist File: /usr/bin/kvm
Hi, thanks to multiboot specs and many examples on the internet building your own toy kernel is quite simple. In 32bit that is. Building a 64bit kernel suddenly becomes quite complicated as one can't compile 64bit C code into a 32bit elf format as required by kvm. One can't link 64bit object files together with a 32bit object containing startup code either. So one needs to mangle stuff around to fit loosing symbol information and debug functionality. Overall not a satisfactory thing. Luckily kvm allready knows all about loading a elf64 binary and it is simple to create a little 32bit asm startup code in elf64 format as entry point for the bootloader. All that is required for kvm to support this is not to reject the elf64 format. Patch attached. MfG Goswin -- Package-specific info: /proc/cpuinfo: processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 28 model name : Intel(R) Atom(TM) CPU 330 @ 1.60GHz stepping : 2 cpu MHz : 1599.996 cache size : 512 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm bogomips : 3199.76 clflush size : 64 cache_alignment : 64 address sizes : 32 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 28 model name : Intel(R) Atom(TM) CPU 330 @ 1.60GHz stepping : 2 cpu MHz : 1599.996 cache size : 512 KB physical id : 0 siblings : 4 core id : 1 cpu cores : 2 apicid : 2 initial apicid : 2 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm bogomips : 3199.96 clflush size : 64 cache_alignment : 64 address sizes : 32 bits physical, 48 bits virtual power management: processor : 2 vendor_id : GenuineIntel cpu family : 6 model : 28 model name : Intel(R) Atom(TM) CPU 330 @ 1.60GHz stepping : 2 cpu MHz : 1599.996 cache size : 512 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 2 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm bogomips : 3199.97 clflush size : 64 cache_alignment : 64 address sizes : 32 bits physical, 48 bits virtual power management: processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 28 model name : Intel(R) Atom(TM) CPU 330 @ 1.60GHz stepping : 2 cpu MHz : 1599.996 cache size : 512 KB physical id : 0 siblings : 4 core id : 1 cpu cores : 2 apicid : 3 initial apicid : 3 fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm bogomips : 3199.94 clflush size : 64 cache_alignment : 64 address sizes : 32 bits physical, 48 bits virtual power management: -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (666, 'unstable'), (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-debian-xen-1 (SMP w/4 CPU cores) Locale: LANG=C, LC_CTYPE=de_DE (charmap=ISO-8859-1) Shell: /bin/sh linked to /bin/dash Versions of packages qemu-kvm depends on: ii adduser 3.112 add and remove users and groups ii etherboot-qemu 5.4.4-7 Bootstrapping for various network ii libaio1 0.3.107-7 Linux kernel AIO access library - ii libasound2 1.0.23-1 shared library for ALSA applicatio ii libattr1 1:2.4.44-2 Extended attribute shared library ii libbluetooth3 4.89-1 Library to use the BlueZ Linux Blu ii libbrlapi0.5 4.2-7 braille display access via BRLTTY ii libc6 2.11.2-13 Embedded GNU C Library: Shared lib ii libcurl3-gnutls 7.21.1-1 Multi-protocol file transfer libra ii libgnutls26 2.10.5-1 the GNU TLS library - runtime libr ii libjpeg62 6b1-1 The Independent JPEG Group's JPEG ii libncurses5 5.7+20100313-3 shared libraries for terminal hand ii libpng12-0 1.2.44-1 PNG library - runtime ii libpulse0 0.9.21-3+b1 PulseAudio client libraries ii libsasl2-2 2.1.23.dfsg1-6 Cyrus SASL - authentication abstra ii libsdl1.2debian 1.2.14-6 Simple DirectMedia Layer ii libuuid1 2.17.2-3.1 Universally Unique ID library ii libvdeplug2 2.2.3-3 Virtual Distributed Ethernet - Plu ii libx11-6 2:1.3.3-3 X11 client-side library ii python 2.6.6-12 interactive high-level object-orie ii qemu-keymaps 0.14.0+dfsg-5 QEMU keyboard maps ii qemu-utils 0.14.0+dfsg-5 QEMU utilities ii seabios 0.6.1.2-2 Legacy BIOS implementation ii zlib1g 1:1.2.3.4.dfsg-3 compression library - runtime Versions of packages qemu-kvm recommends: ii bridge-utils 1.4-5 Utilities for configuring the Linu ii iproute 20100519-3 networking and traffic control too Versions of packages qemu-kvm suggests: ii debootstrap 1.0.23 Bootstrap a basic Debian system pn samba <none> (no description available) pn vde2 <none> (no description available) -- no debconf information
Description: Allow 64bit elf binaries in multiboot format This patch allows 64bit elf files with multiboot header to be loaded. The entry point will still be called in 32bit mode and the kernel must switch to 64bit mode on its own. The image and all modules must also be located in the lower 2GB of ram. All the restrictions of a 32bit image still apply. Author: Goswin von Brederlow <goswin-...@web.de> Last-Updated: 2011-04-08 --- --- qemu-kvm-0.14.0+dfsg.orig/hw/multiboot.c +++ qemu-kvm-0.14.0+dfsg/hw/multiboot.c @@ -173,8 +173,7 @@ int load_multiboot(void *fw_cfg, fclose(f); if (((struct elf64_hdr*)header)->e_machine == EM_X86_64) { - fprintf(stderr, "Cannot load x86-64 image, give a 32bit one.\n"); - exit(1); + mb_debug("qemu: 64bit elf, I hope you know what you are doing\n"); } kernel_size = load_elf(kernel_filename, NULL, NULL, &elf_entry,