[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