From 1f6e2499db7e6c1f491ce0716c6fb9001a2c9f77 Mon Sep 17 00:00:00 2001 From: David Karoly Date: Thu, 2 Dec 2021 14:36:39 +0100 Subject: [PATCH] ldscripts/x86: add ldscript for EFI loader Linker script is adapted from elf_ia32_efi.lds in GNU-EFI. see: https://sourceforge.net/p/gnu-efi/code/ci/master/tree/gnuefi/elf_ia32_efi.lds The only significant change is the additions of ctors. Change-Id: I1091f610129f806f124d714fd9a42cf932fa1c2d Reviewed-on: https://review.haiku-os.org/c/haiku/+/4746 Tested-by: Commit checker robot Reviewed-by: Fredrik Holmqvist --- src/system/ldscripts/x86/boot_loader_efi.ld | 118 ++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/system/ldscripts/x86/boot_loader_efi.ld diff --git a/src/system/ldscripts/x86/boot_loader_efi.ld b/src/system/ldscripts/x86/boot_loader_efi.ld new file mode 100644 index 0000000000..73b8e07580 --- /dev/null +++ b/src/system/ldscripts/x86/boot_loader_efi.ld @@ -0,0 +1,118 @@ +/* + Copyright (c) 1998-2000 Intel Corporation + + Redistribution and use in source and binary forms, with or without modification, are permitted + provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of conditions and + the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. THE EFI SPECIFICATION AND ALL OTHER INFORMATION + ON THIS WEB SITE ARE PROVIDED "AS IS" WITH NO WARRANTIES, AND ARE SUBJECT + TO CHANGE WITHOUT NOTICE. +*/ + +/* Same as elf_ia32_efi.lds, except for ctor support */ +OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") +OUTPUT_ARCH(i386) +ENTRY(_start) +SECTIONS +{ + . = 0; + ImageBase = .; + /* .hash and/or .gnu.hash MUST come first! */ + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + . = ALIGN(4096); + .text : + { + _text = .; + *(.text) + *(.text.*) + *(.gnu.linkonce.t.*) + . = ALIGN(16); + } + _etext = .; + _text_size = . - _text; + . = ALIGN(4096); + .sdata : + { + __ctor_list = .; + *(.ctors) + __ctor_end = .; + _data = .; + *(.got.plt) + *(.got) + *(.srodata) + *(.sdata) + *(.sbss) + *(.scommon) + } + . = ALIGN(4096); + .data : + { + *(.rodata*) + *(.data) + *(.data1) + *(.data.*) + *(.sdata) + *(.got.plt) + *(.got) + /* the EFI loader doesn't seem to like a .bss section, so we stick + it all into .data: */ + *(.sbss) + *(.scommon) + *(.dynbss) + *(.bss) + *(COMMON) + } + .note.gnu.build-id : { *(.note.gnu.build-id) } + + . = ALIGN(4096); + .dynamic : { *(.dynamic) } + . = ALIGN(4096); + .rel : + { + *(.rel.data) + *(.rel.data.*) + *(.rel.ctors) + *(.rel.got) + *(.rel.stab) + *(.data.rel.ro.local) + *(.data.rel.local) + *(.data.rel.ro) + *(.data.rel*) + } + _edata = .; + _data_size = . - _etext; + . = ALIGN(4096); + .reloc : /* This is the PECOFF .reloc section! */ + { + *(.reloc) + } + . = ALIGN(4096); + .dynsym : { *(.dynsym) } + . = ALIGN(4096); + .dynstr : { *(.dynstr) } + . = ALIGN(4096); + /DISCARD/ : + { + *(.rel.reloc) + *(.eh_frame) + *(.note.GNU-stack) + } + .comment 0 : { *(.comment) } +}