2cc0b085fb
Gentoo has slightly modified linker defaults: --hash-style=gnu This means all ELF files in system have '.gnu.hash' section but no '.hash' section. gnuefi's ldscript did not account for it and as a result one symbol 'ImageBase' did not resolve locally for elilo.so and caused 'elilo' to fail to load by ia64 EFI: Loading.: Gentoo (try new elilo) ImageAddress: pointer is outside of image ImageAddress: pointer is outside of image Those two relocations come from crt0-efi-ia64.S PE32 entry point fdescr: ``` #define IMAGE_REL_BASED_DIR64<->10 .section .reloc, "a" data4 _start_plabel // Page RVA data4 12 // Block Size (2*4+2*2) data2 (IMAGE_REL_BASED_DIR64<<12) + 0 // reloc for plabel's entry point data2 (IMAGE_REL_BASED_DIR64<<12) + 8 // reloc for plabel's global pointer ``` These refer ImageBase. The change adds '.gnu.hash' collection (follows existing '.hash' collection). Tested on IA-64 by successfully booting elilo-3.16. Bug: https://bugs.gentoo.org/575300 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> |
||
---|---|---|
.. | ||
crt0-efi-aarch64.S | ||
crt0-efi-arm.S | ||
crt0-efi-ia32.S | ||
crt0-efi-ia64.S | ||
crt0-efi-mips64el.S | ||
crt0-efi-x86_64.S | ||
elf_aarch64_efi.lds | ||
elf_arm_efi.lds | ||
elf_ia32_efi.lds | ||
elf_ia32_fbsd_efi.lds | ||
elf_ia64_efi.lds | ||
elf_mips64el_efi.lds | ||
elf_x86_64_efi.lds | ||
elf_x86_64_fbsd_efi.lds | ||
Makefile | ||
reloc_aarch64.c | ||
reloc_arm.c | ||
reloc_ia32.c | ||
reloc_ia64.S | ||
reloc_mips64el.c | ||
reloc_x86_64.c |