[PATCH 3/4] efi_loader: use INCLUDE in EFI linker scripts
Ilias Apalodimas
ilias.apalodimas at linaro.org
Wed Jan 15 09:03:43 CET 2025
On Tue, 14 Jan 2025 at 12:30, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> Except for the architecture specific lines ARM and RISC-V can use the same
> linker script. Move the common lines to an include.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> ---
> arch/arm/lib/elf_aarch64_efi.lds | 68 +--------------------------
> arch/riscv/lib/elf_riscv32_efi.lds | 68 +--------------------------
> arch/riscv/lib/elf_riscv64_efi.lds | 68 +--------------------------
> lib/efi_loader/elf_efi.ldsi | 74 ++++++++++++++++++++++++++++++
> 4 files changed, 77 insertions(+), 201 deletions(-)
> create mode 100644 lib/efi_loader/elf_efi.ldsi
>
> diff --git a/arch/arm/lib/elf_aarch64_efi.lds b/arch/arm/lib/elf_aarch64_efi.lds
> index e382254a6cf..453d3511c28 100644
> --- a/arch/arm/lib/elf_aarch64_efi.lds
> +++ b/arch/arm/lib/elf_aarch64_efi.lds
> @@ -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
> diff --git a/arch/riscv/lib/elf_riscv32_efi.lds b/arch/riscv/lib/elf_riscv32_efi.lds
> index 7b9bd7b7f15..e23521c4931 100644
> --- a/arch/riscv/lib/elf_riscv32_efi.lds
> +++ b/arch/riscv/lib/elf_riscv32_efi.lds
> @@ -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
> diff --git a/arch/riscv/lib/elf_riscv64_efi.lds b/arch/riscv/lib/elf_riscv64_efi.lds
> index d0b4f3d1d64..8e4844c2eea 100644
> --- a/arch/riscv/lib/elf_riscv64_efi.lds
> +++ b/arch/riscv/lib/elf_riscv64_efi.lds
> @@ -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
> index 00000000000..190a88fb69e
> --- /dev/null
> +++ b/lib/efi_loader/elf_efi.ldsi
> @@ -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) }
> +}
> --
> 2.47.1
>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list