From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:51882) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvUB3-00088C-L6 for qemu-devel@nongnu.org; Thu, 09 Feb 2012 08:36:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RvUAz-00088F-GV for qemu-devel@nongnu.org; Thu, 09 Feb 2012 08:36:45 -0500 Received: from relay1.mentorg.com ([192.94.38.131]:42079) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RvUAz-00087O-CA for qemu-devel@nongnu.org; Thu, 09 Feb 2012 08:36:41 -0500 From: Paul Brook Date: Thu, 9 Feb 2012 13:36:35 +0000 References: <201202090035.12216.paul@codesourcery.com> <87liocqhn7.fsf@frosties.localnet> In-Reply-To: <87liocqhn7.fsf@frosties.localnet> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201202091336.36127.paul@codesourcery.com> Subject: Re: [Qemu-devel] Support for multiboot images in elf64 (EM_X86_64) format List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Goswin von Brederlow Cc: Stefan Hajnoczi , qemu-devel@nongnu.org > Paul Brook writes: > >> > starting your own toy kernel is a fun thing to do and there are many > >> > tutorials out there on how to do it. Unfortunately when one wants to > >> > write a kernel in 64bit it becomes much harder because one can't > >> > compile 64bit code as elf32 image and converting a elf64 image to > >> > elf32 format is a major hassle and looses debug information and > >> > symbols. > > > > So just have two versions of your image: > > - The elf64 image that has debug info, symbols, etc. Point gdb at this. > > - An elf32 image that you give to the bootloader (in this case kvm) > > > > Generating the latter from the former is a trivial objcopy invocation. > > Is it? I tried for a while and couldn't figure it out. I checked how > linux does it and it does quite a dance to achieve it. "objcopy -I elf64-x86-64 -O elf32-i386 64.elf 32.elf" worked for me. Relocations get a bit confused, but you shouldn't have relocations in your multiboot images to start with. Linux is a bit special because it has its own boot protocol. AFAIK it can't be used as a regular multiboot image directly, you need to add a wrapper (i.e. a secondary bootloader). Paul