efi_loader: use INCLUDE in EFI linker scripts
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 16 Jan 2025 11:39:07 +0000 (12:39 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 17 Jan 2025 19:31:26 +0000 (20:31 +0100)
Except for the architecture specific lines ARM and RISC-V can use the same
linker script. Move the common lines to an include.

Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
arch/arm/lib/elf_aarch64_efi.lds
arch/riscv/lib/elf_riscv32_efi.lds
arch/riscv/lib/elf_riscv64_efi.lds
lib/efi_loader/elf_efi.ldsi [new file with mode: 0644]

index e382254..453d351 100644 (file)
@@ -8,70 +8,4 @@
 OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
 OUTPUT_ARCH(aarch64)
 
-PHDRS
-{
-       data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
-}
-
-ENTRY(_start)
-SECTIONS
-{
-       .text 0x0 : {
-               _text = .;
-               *(.text.head)
-               *(.text)
-               *(.text.*)
-               *(.gnu.linkonce.t.*)
-               *(.srodata)
-               *(.rodata*)
-               . = ALIGN(16);
-               *(.dynamic);
-               . = ALIGN(512);
-       }
-       .rela.dyn : { *(.rela.dyn) }
-       .rela.plt : { *(.rela.plt) }
-       .rela.got : { *(.rela.got) }
-       .rela.data : { *(.rela.data) *(.rela.data*) }
-       . = ALIGN(4096);
-       _etext = .;
-       _text_size = . - _text;
-       .data : {
-               _data = .;
-               *(.sdata)
-               *(.data)
-               *(.data1)
-               *(.data.*)
-               *(.got.plt)
-               *(.got)
-
-               /*
-                * The EFI loader doesn't seem to like a .bss section, so we
-                * stick it all into .data:
-                */
-               . = ALIGN(16);
-               _bss = .;
-               *(.sbss)
-               *(.scommon)
-               *(.dynbss)
-               *(.bss)
-               *(.bss.*)
-               *(COMMON)
-               . = ALIGN(512);
-               _bss_end = .;
-               _edata = .;
-       } :data
-       _data_size = _edata - _data;
-
-       . = ALIGN(4096);
-       .dynsym   : { *(.dynsym) }
-       . = ALIGN(4096);
-       .dynstr   : { *(.dynstr) }
-       . = ALIGN(4096);
-       .note.gnu.build-id : { *(.note.gnu.build-id) }
-       /DISCARD/ : {
-               *(.rel.reloc)
-               *(.eh_frame)
-               *(.note.GNU-stack)
-       }
-       .comment 0 : { *(.comment) }
-}
+INCLUDE lib/efi_loader/elf_efi.ldsi
index 7b9bd7b..e23521c 100644 (file)
@@ -8,70 +8,4 @@
 OUTPUT_FORMAT("elf32-littleriscv", "elf32-littleriscv", "elf32-littleriscv")
 OUTPUT_ARCH(riscv)
 
-PHDRS
-{
-       data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
-}
-
-ENTRY(_start)
-SECTIONS
-{
-       .text 0x0 : {
-               _text = .;
-               *(.text.head)
-               *(.text)
-               *(.text.*)
-               *(.gnu.linkonce.t.*)
-               *(.srodata)
-               *(.rodata*)
-               . = ALIGN(16);
-               *(.dynamic);
-               . = ALIGN(512);
-       }
-       .rela.dyn : { *(.rela.dyn) }
-       .rela.plt : { *(.rela.plt) }
-       .rela.got : { *(.rela.got) }
-       .rela.data : { *(.rela.data) *(.rela.data*) }
-       _etext = .;
-       _text_size = . - _text;
-       . = ALIGN(4096);
-       .data : {
-               _data = .;
-               *(.sdata)
-               *(.data)
-               *(.data1)
-               *(.data.*)
-               *(.got.plt)
-               *(.got)
-
-               /*
-                * The EFI loader doesn't seem to like a .bss section, so we
-                * stick it all into .data:
-                */
-               . = ALIGN(16);
-               _bss = .;
-               *(.sbss)
-               *(.scommon)
-               *(.dynbss)
-               *(.bss)
-               *(.bss.*)
-               *(COMMON)
-               . = ALIGN(512);
-               _bss_end = .;
-               _edata = .;
-       } :data
-       _data_size = _edata - _data;
-
-       . = ALIGN(4096);
-       .dynsym   : { *(.dynsym) }
-       . = ALIGN(4096);
-       .dynstr   : { *(.dynstr) }
-       . = ALIGN(4096);
-       .note.gnu.build-id : { *(.note.gnu.build-id) }
-       /DISCARD/ : {
-               *(.rel.reloc)
-               *(.eh_frame)
-               *(.note.GNU-stack)
-       }
-       .comment 0 : { *(.comment) }
-}
+INCLUDE lib/efi_loader/elf_efi.ldsi
index d0b4f3d..8e4844c 100644 (file)
@@ -8,70 +8,4 @@
 OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
 OUTPUT_ARCH(riscv)
 
-PHDRS
-{
-       data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
-}
-
-ENTRY(_start)
-SECTIONS
-{
-       .text 0x0 : {
-               _text = .;
-               *(.text.head)
-               *(.text)
-               *(.text.*)
-               *(.gnu.linkonce.t.*)
-               *(.srodata)
-               *(.rodata*)
-               . = ALIGN(16);
-               *(.dynamic);
-               . = ALIGN(512);
-       }
-       .rela.dyn : { *(.rela.dyn) }
-       .rela.plt : { *(.rela.plt) }
-       .rela.got : { *(.rela.got) }
-       .rela.data : { *(.rela.data) *(.rela.data*) }
-       _etext = .;
-       _text_size = . - _text;
-       . = ALIGN(4096);
-       .data : {
-               _data = .;
-               *(.sdata)
-               *(.data)
-               *(.data1)
-               *(.data.*)
-               *(.got.plt)
-               *(.got)
-
-               /*
-                * The EFI loader doesn't seem to like a .bss section, so we
-                * stick it all into .data:
-                */
-               . = ALIGN(16);
-               _bss = .;
-               *(.sbss)
-               *(.scommon)
-               *(.dynbss)
-               *(.bss)
-               *(.bss.*)
-               *(COMMON)
-               . = ALIGN(512);
-               _bss_end = .;
-               _edata = .;
-       } :data
-       _data_size = _edata - _data;
-
-       . = ALIGN(4096);
-       .dynsym   : { *(.dynsym) }
-       . = ALIGN(4096);
-       .dynstr   : { *(.dynstr) }
-       . = ALIGN(4096);
-       .note.gnu.build-id : { *(.note.gnu.build-id) }
-       /DISCARD/ : {
-               *(.rel.reloc)
-               *(.eh_frame)
-               *(.note.GNU-stack)
-       }
-       .comment 0 : { *(.comment) }
-}
+INCLUDE lib/efi_loader/elf_efi.ldsi
diff --git a/lib/efi_loader/elf_efi.ldsi b/lib/efi_loader/elf_efi.ldsi
new file mode 100644 (file)
index 0000000..190a88f
--- /dev/null
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: BSD-2-Clause */
+/*
+ * U-Boot EFI linker script include
+ *
+ * Modified from elf_aarch64_efi.lds in gnu-efi
+ */
+
+PHDRS
+{
+       data PT_LOAD FLAGS(3); /* SHF_WRITE | SHF_ALLOC */
+}
+
+ENTRY(_start)
+SECTIONS
+{
+       .text 0x0 : {
+               _text = .;
+               *(.text.head)
+               *(.text)
+               *(.text.*)
+               *(.gnu.linkonce.t.*)
+               *(.srodata)
+               *(.rodata*)
+               . = ALIGN(16);
+               *(.dynamic);
+               . = ALIGN(512);
+       }
+       .rela.dyn : { *(.rela.dyn) }
+       .rela.plt : { *(.rela.plt) }
+       .rela.got : { *(.rela.got) }
+       .rela.data : { *(.rela.data) *(.rela.data*) }
+       . = ALIGN(4096);
+       _etext = .;
+       _text_size = . - _text;
+       .data : {
+               _data = .;
+               *(.sdata)
+               *(.data)
+               *(.data1)
+               *(.data.*)
+               *(.got.plt)
+               *(.got)
+
+               /*
+                * The EFI loader doesn't seem to like a .bss section, so we
+                * stick it all into .data:
+                */
+               . = ALIGN(16);
+               _bss = .;
+               *(.sbss)
+               *(.scommon)
+               *(.dynbss)
+               *(.bss)
+               *(.bss.*)
+               *(COMMON)
+               . = ALIGN(512);
+               _bss_end = .;
+               _edata = .;
+       } :data
+       _data_size = _edata - _data;
+
+       . = ALIGN(4096);
+       .dynsym   : { *(.dynsym) }
+       . = ALIGN(4096);
+       .dynstr   : { *(.dynstr) }
+       . = ALIGN(4096);
+       .note.gnu.build-id : { *(.note.gnu.build-id) }
+       /DISCARD/ : {
+               *(.rel.reloc)
+               *(.eh_frame)
+               *(.note.GNU-stack)
+       }
+       .comment 0 : { *(.comment) }
+}