Hello GRUB developers, i'am trying to boot a self developed kernel with grub in bochs. The kernel image is an x86_64 elf file. "readelf -h" output is:
ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x10000c Start of program headers: 64 (bytes into file) Start of section headers: 24784 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 2 Size of section headers: 64 (bytes) Number of section headers: 11 Section header string table index: 10 I'am using grub 1.99 compiled for i386-pc. The output after "multiboot /boot/kernel" is "error: invalid offset in section header.". I found out that grub uses the 32bit Elf_Shdr structure even if the file is 64bit. My patch proposal is to apply the same handling as Elf_Ehdr or Elf_Phdr to Elf_Shdr too. diff -ruN grub-1.99/grub-core/loader/multiboot_elfxx.c grub-1.99_new/grub-core/loader/multiboot_elfxx.c --- grub-1.99/grub-core/loader/multiboot_elfxx.c 2010-12-01 15:45:43.000000000 +0100 +++ grub-1.99_new/grub-core/loader/multiboot_elfxx.c 2011-09-20 15:57:02.000000000 +0200 @@ -22,12 +22,14 @@ # define ELFCLASSXX ELFCLASS32 # define Elf_Ehdr Elf32_Ehdr # define Elf_Phdr Elf32_Phdr +# define Elf_Shdr Elf32_Shdr #elif defined(MULTIBOOT_LOAD_ELF64) # define XX 64 # define E_MACHINE MULTIBOOT_ELF64_MACHINE # define ELFCLASSXX ELFCLASS64 # define Elf_Ehdr Elf64_Ehdr # define Elf_Phdr Elf64_Phdr +# define Elf_Shdr Elf64_Shdr #else #error "I'm confused" #endif @@ -223,3 +225,4 @@ #undef ELFCLASSXX #undef Elf_Ehdr #undef Elf_Phdr +#undef Elf_Shdr Thanks in advance, Thomas Haller _______________________________________________ Bug-grub mailing list [email protected] https://lists.gnu.org/mailman/listinfo/bug-grub
