diff mbox series

boot/syslinux: carry fix for build failures with binutils 2.31+

Message ID 20231223213800.348426-1-yann.morin.1998@free.fr
State Accepted
Headers show
Series boot/syslinux: carry fix for build failures with binutils 2.31+ | expand

Commit Message

Yann E. MORIN Dec. 23, 2023, 9:38 p.m. UTC
From a report on the syslinux mailing list [0]:

    The GNU linker now writes two segments of type PT_LOAD into the
    program header. However, this is not supported by the wrapper
    script that converts the shared object to an .efi executable.
    As per comment in that file:

        (...) Although there may be several LOAD program headers,
        only one is currently copied.

    A simple workaround I've found to work is to ask the linker to put
    everything into one PT_LOAD program header.

The issue is ackowledged in the syslinux wiki page about building
syslinux [1]. This page refers to various resources, of which a Debian
patch [2].

This information is also referenced in #11861.

Fixes: #11861

[0] https://www.syslinux.org/archives/2018-August/026167.html
[1] https://wiki.syslinux.org/wiki/index.php?title=Building
[2] https://salsa.debian.org/images-team/syslinux/-/blob/debian/master/debian/patches/0017-single-load-segment.patch

Reported-by: Sam Lancia <sam@gpsm.co.uk>
Reported-by: Meliodas <meliodasren01@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>

---
Sam, Meliodas: I have no test-case to validate this change, so it would
be nice if you could report on whether the above does indeed fixes the
issue you reported. Bonus point: it would be even better if we could
improve on the existing runtime test: support/testing/tests/boot/test_syslinux.py
It currently only does a test build, so it does not catch the issue; the
grub2 test we have does run, so we can catch failures. It would be nice
to also have a runtime test for syslinux...
---
 boot/syslinux/0018-single-load-segment.patch | 313 +++++++++++++++++++
 1 file changed, 313 insertions(+)
 create mode 100644 boot/syslinux/0018-single-load-segment.patch

Comments

Yann E. MORIN Jan. 27, 2024, 4:47 p.m. UTC | #1
All,

On 2023-12-23 22:38 +0100, Yann E. MORIN spake thusly:
> From a report on the syslinux mailing list [0]:
> 
>     The GNU linker now writes two segments of type PT_LOAD into the
>     program header. However, this is not supported by the wrapper
>     script that converts the shared object to an .efi executable.
>     As per comment in that file:
> 
>         (...) Although there may be several LOAD program headers,
>         only one is currently copied.
> 
>     A simple workaround I've found to work is to ask the linker to put
>     everything into one PT_LOAD program header.
> 
> The issue is ackowledged in the syslinux wiki page about building
> syslinux [1]. This page refers to various resources, of which a Debian
> patch [2].
> 
> This information is also referenced in #11861.
> 
> Fixes: #11861
> 
> [0] https://www.syslinux.org/archives/2018-August/026167.html
> [1] https://wiki.syslinux.org/wiki/index.php?title=Building
> [2] https://salsa.debian.org/images-team/syslinux/-/blob/debian/master/debian/patches/0017-single-load-segment.patch
> 
> Reported-by: Sam Lancia <sam@gpsm.co.uk>
> Reported-by: Meliodas <meliodasren01@gmail.com>
> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
> Sam, Meliodas: I have no test-case to validate this change, so it would
> be nice if you could report on whether the above does indeed fixes the
> issue you reported. Bonus point: it would be even better if we could
> improve on the existing runtime test: support/testing/tests/boot/test_syslinux.py
> It currently only does a test build, so it does not catch the issue; the
> grub2 test we have does run, so we can catch failures. It would be nice
> to also have a runtime test for syslinux...
> ---
>  boot/syslinux/0018-single-load-segment.patch | 313 +++++++++++++++++++
>  1 file changed, 313 insertions(+)
>  create mode 100644 boot/syslinux/0018-single-load-segment.patch
> 
> diff --git a/boot/syslinux/0018-single-load-segment.patch b/boot/syslinux/0018-single-load-segment.patch
> new file mode 100644
> index 0000000000..11d73c31a4
> --- /dev/null
> +++ b/boot/syslinux/0018-single-load-segment.patch
> @@ -0,0 +1,313 @@
> +From: Lukas Schwaighofer <lukas@schwaighofer.name>
> +Date: Sat, 18 Aug 2018 16:56:35 +0200
> +Subject: Force the linker to put all sections into a single PT_LOAD segment
> +
> +This is required when using binutils >= 2.31 which writes two PT_LOAD segments
> +by default. This is not supported by the wrapper.c script used to convert the
> +shared object into an elf binary.
> +
> +Forwarded: https://www.syslinux.org/archives/2018-August/026167.html
> +[yann.morin.1998@free.fr:
> +  - grab from the Debian package
> +  - https://salsa.debian.org/images-team/syslinux/-/blob/fa1349f1f8e5f5d6307e589f02c0a679031d1c7f/debian/patches/0017-single-load-segment.patch
> +]
> +Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
> +Upstream: reported https://www.syslinux.org/archives/2018-August/026167.html
> +Upstream: acknowledged https://wiki.syslinux.org/wiki/index.php?title=Building
> +---
> + efi/i386/syslinux.ld   | 37 +++++++++++++++++++++----------------
> + efi/x86_64/syslinux.ld | 37 +++++++++++++++++++++----------------
> + 2 files changed, 42 insertions(+), 32 deletions(-)
> +
> +diff --git a/efi/i386/syslinux.ld b/efi/i386/syslinux.ld
> +index bab3fc7..19c1647 100644
> +--- a/efi/i386/syslinux.ld
> ++++ b/efi/i386/syslinux.ld
> +@@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
> + OUTPUT_ARCH(i386)
> + ENTRY(_start)
> +
> ++PHDRS
> ++{
> ++	all PT_LOAD ;
> ++}
> ++
> + SECTIONS
> + {
> + 	. = 0;
> +@@ -31,7 +36,7 @@ SECTIONS
> + 		*(.text)
> + 		*(.text.*)
> + 		__text_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(16);
> +
> +@@ -40,7 +45,7 @@ SECTIONS
> + 		*(.rodata)
> + 		*(.rodata.*)
> + 		__rodata_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -49,14 +54,14 @@ SECTIONS
> + 		KEEP (*(SORT(.ctors.*)))
> + 		KEEP (*(.ctors))
> + 		__ctors_end = .;
> +-	}
> ++	} :all
> +
> + 	.dtors : {
> + 		__dtors_start = .;
> + 		KEEP (*(SORT(.dtors.*)))
> + 		KEEP (*(.dtors))
> + 		__dtors_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4096);
> + 	.rel : {
> +@@ -64,7 +69,7 @@ SECTIONS
> + 		*(.rel.data)
> + 		*(.rel.data.*)
> + 		*(.rel.ctors)
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -72,14 +77,14 @@ SECTIONS
> + 		__gnu_hash_start = .;
> + 		*(.gnu.hash)
> + 		__gnu_hash_end = .;
> +-	}
> ++	} :all
> +
> +
> + 	.dynsym : {
> + 		__dynsym_start = .;
> + 		*(.dynsym)
> + 		__dynsym_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -87,7 +92,7 @@ SECTIONS
> + 		__dynstr_start = .;
> + 		*(.dynstr)
> + 		__dynstr_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -104,7 +109,7 @@ SECTIONS
> + 		KEEP (*(.got.plt))
> + 		KEEP (*(.got))
> + 		__got_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -112,7 +117,7 @@ SECTIONS
> + 		__dynamic_start = .;
> + 		*(.dynamic)
> + 		__dynamic_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(16);
> +
> +@@ -122,19 +127,19 @@ SECTIONS
> + 		*(.data.*)
> + 		*(.lowmem)
> + 		__data_end = .;
> +-	}
> ++	} :all
> +
> + 	.reloc : {
> + 		*(.reloc)
> +-	}
> ++	} :all
> +
> + 	.symtab : {
> + 		*(.symtab)
> +-	}
> ++	} :all
> +
> + 	.strtab : {
> + 		*(.strtab)
> +-	}
> ++	} :all
> +
> + 	.bss (NOLOAD) : {
> + 		/* the EFI loader doesn't seem to like a .bss section,
> +@@ -148,7 +153,7 @@ SECTIONS
> + 		__bss_end = .;
> + 		*(.sbss)
> + 		*(.scommon)
> +-	}
> ++	} :all
> + 	__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
> + 	__bss_dwords = (__bss_len + 3) >> 2;
> +
> +@@ -161,7 +166,7 @@ SECTIONS
> + 		*(.hugebss)
> + 		*(.hugebss.*)
> + 		__hugebss_end = .;
> +-	}
> ++	} :all
> +
> + 	_end = .;
> +
> +diff --git a/efi/x86_64/syslinux.ld b/efi/x86_64/syslinux.ld
> +index 450641c..a2c124f 100644
> +--- a/efi/x86_64/syslinux.ld
> ++++ b/efi/x86_64/syslinux.ld
> +@@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
> + OUTPUT_ARCH(i386:x86-64)
> + ENTRY(_start)
> +
> ++PHDRS
> ++{
> ++	all PT_LOAD ;
> ++}
> ++
> + SECTIONS
> + {
> + 	. = 0;
> +@@ -31,7 +36,7 @@ SECTIONS
> + 		*(.text)
> + 		*(.text.*)
> + 		__text_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(16);
> +
> +@@ -40,7 +45,7 @@ SECTIONS
> + 		*(.rodata)
> + 		*(.rodata.*)
> + 		__rodata_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -49,14 +54,14 @@ SECTIONS
> + 		KEEP (*(SORT(.ctors.*)))
> + 		KEEP (*(.ctors))
> + 		__ctors_end = .;
> +-	}
> ++	} :all
> +
> + 	.dtors : {
> + 		__dtors_start = .;
> + 		KEEP (*(SORT(.dtors.*)))
> + 		KEEP (*(.dtors))
> + 		__dtors_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4096);
> + 	.rel : {
> +@@ -64,7 +69,7 @@ SECTIONS
> + 		*(.rel.data)
> + 		*(.rel.data.*)
> + 		*(.rel.ctors)
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -72,14 +77,14 @@ SECTIONS
> + 		__gnu_hash_start = .;
> + 		*(.gnu.hash)
> + 		__gnu_hash_end = .;
> +-	}
> ++	} :all
> +
> +
> + 	.dynsym : {
> + 		__dynsym_start = .;
> + 		*(.dynsym)
> + 		__dynsym_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -87,7 +92,7 @@ SECTIONS
> + 		__dynstr_start = .;
> + 		*(.dynstr)
> + 		__dynstr_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -104,7 +109,7 @@ SECTIONS
> + 		KEEP (*(.got.plt))
> + 		KEEP (*(.got))
> + 		__got_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(4);
> +
> +@@ -112,7 +117,7 @@ SECTIONS
> + 		__dynamic_start = .;
> + 		*(.dynamic)
> + 		__dynamic_end = .;
> +-	}
> ++	} :all
> +
> + 	. = ALIGN(16);
> +
> +@@ -122,19 +127,19 @@ SECTIONS
> + 		*(.data.*)
> + 		*(.lowmem)
> + 		__data_end = .;
> +-	}
> ++	} :all
> +
> + 	.reloc : {
> + 		*(.reloc)
> +-	}
> ++	} :all
> +
> + 	.symtab : {
> + 		*(.symtab)
> +-	}
> ++	} :all
> +
> + 	.strtab : {
> + 		*(.strtab)
> +-	}
> ++	} :all
> +
> + 	.bss (NOLOAD) : {
> + 		/* the EFI loader doesn't seem to like a .bss section,
> +@@ -148,7 +153,7 @@ SECTIONS
> + 		__bss_end = .;
> + 		*(.sbss)
> + 		*(.scommon)
> +-	}
> ++	} :all
> + 	__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
> + 	__bss_dwords = (__bss_len + 3) >> 2;
> +
> +@@ -161,7 +166,7 @@ SECTIONS
> + 		*(.hugebss)
> + 		*(.hugebss.*)
> + 		__hugebss_end = .;
> +-	}
> ++	} :all
> +
> + 	_end = .;
> +
> -- 
> 2.43.0
>
Peter Korsgaard Feb. 28, 2024, 4:38 p.m. UTC | #2
On 23/12/2023 22.38, Yann E. MORIN wrote:
>  From a report on the syslinux mailing list [0]:
> 
>      The GNU linker now writes two segments of type PT_LOAD into the
>      program header. However, this is not supported by the wrapper
>      script that converts the shared object to an .efi executable.
>      As per comment in that file:
> 
>          (...) Although there may be several LOAD program headers,
>          only one is currently copied.
> 
>      A simple workaround I've found to work is to ask the linker to put
>      everything into one PT_LOAD program header.
> 
> The issue is ackowledged in the syslinux wiki page about building
> syslinux [1]. This page refers to various resources, of which a Debian
> patch [2].
> 
> This information is also referenced in #11861.
> 
> Fixes: #11861
> 
> [0] https://www.syslinux.org/archives/2018-August/026167.html
> [1] https://wiki.syslinux.org/wiki/index.php?title=Building
> [2] https://salsa.debian.org/images-team/syslinux/-/blob/debian/master/debian/patches/0017-single-load-segment.patch
> 
> Reported-by: Sam Lancia <sam@gpsm.co.uk>
> Reported-by: Meliodas <meliodasren01@gmail.com>
> Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
> 
> ---
> Sam, Meliodas: I have no test-case to validate this change, so it would
> be nice if you could report on whether the above does indeed fixes the
> issue you reported. Bonus point: it would be even better if we could
> improve on the existing runtime test: support/testing/tests/boot/test_syslinux.py
> It currently only does a test build, so it does not catch the issue; the
> grub2 test we have does run, so we can catch failures. It would be nice
> to also have a runtime test for syslinux...

Committed to 2023.02.x and 2023.11.x, thanks
diff mbox series

Patch

diff --git a/boot/syslinux/0018-single-load-segment.patch b/boot/syslinux/0018-single-load-segment.patch
new file mode 100644
index 0000000000..11d73c31a4
--- /dev/null
+++ b/boot/syslinux/0018-single-load-segment.patch
@@ -0,0 +1,313 @@ 
+From: Lukas Schwaighofer <lukas@schwaighofer.name>
+Date: Sat, 18 Aug 2018 16:56:35 +0200
+Subject: Force the linker to put all sections into a single PT_LOAD segment
+
+This is required when using binutils >= 2.31 which writes two PT_LOAD segments
+by default. This is not supported by the wrapper.c script used to convert the
+shared object into an elf binary.
+
+Forwarded: https://www.syslinux.org/archives/2018-August/026167.html
+[yann.morin.1998@free.fr:
+  - grab from the Debian package
+  - https://salsa.debian.org/images-team/syslinux/-/blob/fa1349f1f8e5f5d6307e589f02c0a679031d1c7f/debian/patches/0017-single-load-segment.patch
+]
+Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
+Upstream: reported https://www.syslinux.org/archives/2018-August/026167.html
+Upstream: acknowledged https://wiki.syslinux.org/wiki/index.php?title=Building
+---
+ efi/i386/syslinux.ld   | 37 +++++++++++++++++++++----------------
+ efi/x86_64/syslinux.ld | 37 +++++++++++++++++++++----------------
+ 2 files changed, 42 insertions(+), 32 deletions(-)
+
+diff --git a/efi/i386/syslinux.ld b/efi/i386/syslinux.ld
+index bab3fc7..19c1647 100644
+--- a/efi/i386/syslinux.ld
++++ b/efi/i386/syslinux.ld
+@@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+ OUTPUT_ARCH(i386)
+ ENTRY(_start)
+
++PHDRS
++{
++	all PT_LOAD ;
++}
++
+ SECTIONS
+ {
+ 	. = 0;
+@@ -31,7 +36,7 @@ SECTIONS
+ 		*(.text)
+ 		*(.text.*)
+ 		__text_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(16);
+
+@@ -40,7 +45,7 @@ SECTIONS
+ 		*(.rodata)
+ 		*(.rodata.*)
+ 		__rodata_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -49,14 +54,14 @@ SECTIONS
+ 		KEEP (*(SORT(.ctors.*)))
+ 		KEEP (*(.ctors))
+ 		__ctors_end = .;
+-	}
++	} :all
+
+ 	.dtors : {
+ 		__dtors_start = .;
+ 		KEEP (*(SORT(.dtors.*)))
+ 		KEEP (*(.dtors))
+ 		__dtors_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4096);
+ 	.rel : {
+@@ -64,7 +69,7 @@ SECTIONS
+ 		*(.rel.data)
+ 		*(.rel.data.*)
+ 		*(.rel.ctors)
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -72,14 +77,14 @@ SECTIONS
+ 		__gnu_hash_start = .;
+ 		*(.gnu.hash)
+ 		__gnu_hash_end = .;
+-	}
++	} :all
+
+
+ 	.dynsym : {
+ 		__dynsym_start = .;
+ 		*(.dynsym)
+ 		__dynsym_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -87,7 +92,7 @@ SECTIONS
+ 		__dynstr_start = .;
+ 		*(.dynstr)
+ 		__dynstr_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -104,7 +109,7 @@ SECTIONS
+ 		KEEP (*(.got.plt))
+ 		KEEP (*(.got))
+ 		__got_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -112,7 +117,7 @@ SECTIONS
+ 		__dynamic_start = .;
+ 		*(.dynamic)
+ 		__dynamic_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(16);
+
+@@ -122,19 +127,19 @@ SECTIONS
+ 		*(.data.*)
+ 		*(.lowmem)
+ 		__data_end = .;
+-	}
++	} :all
+
+ 	.reloc : {
+ 		*(.reloc)
+-	}
++	} :all
+
+ 	.symtab : {
+ 		*(.symtab)
+-	}
++	} :all
+
+ 	.strtab : {
+ 		*(.strtab)
+-	}
++	} :all
+
+ 	.bss (NOLOAD) : {
+ 		/* the EFI loader doesn't seem to like a .bss section,
+@@ -148,7 +153,7 @@ SECTIONS
+ 		__bss_end = .;
+ 		*(.sbss)
+ 		*(.scommon)
+-	}
++	} :all
+ 	__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
+ 	__bss_dwords = (__bss_len + 3) >> 2;
+
+@@ -161,7 +166,7 @@ SECTIONS
+ 		*(.hugebss)
+ 		*(.hugebss.*)
+ 		__hugebss_end = .;
+-	}
++	} :all
+
+ 	_end = .;
+
+diff --git a/efi/x86_64/syslinux.ld b/efi/x86_64/syslinux.ld
+index 450641c..a2c124f 100644
+--- a/efi/x86_64/syslinux.ld
++++ b/efi/x86_64/syslinux.ld
+@@ -19,6 +19,11 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
+ OUTPUT_ARCH(i386:x86-64)
+ ENTRY(_start)
+
++PHDRS
++{
++	all PT_LOAD ;
++}
++
+ SECTIONS
+ {
+ 	. = 0;
+@@ -31,7 +36,7 @@ SECTIONS
+ 		*(.text)
+ 		*(.text.*)
+ 		__text_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(16);
+
+@@ -40,7 +45,7 @@ SECTIONS
+ 		*(.rodata)
+ 		*(.rodata.*)
+ 		__rodata_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -49,14 +54,14 @@ SECTIONS
+ 		KEEP (*(SORT(.ctors.*)))
+ 		KEEP (*(.ctors))
+ 		__ctors_end = .;
+-	}
++	} :all
+
+ 	.dtors : {
+ 		__dtors_start = .;
+ 		KEEP (*(SORT(.dtors.*)))
+ 		KEEP (*(.dtors))
+ 		__dtors_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4096);
+ 	.rel : {
+@@ -64,7 +69,7 @@ SECTIONS
+ 		*(.rel.data)
+ 		*(.rel.data.*)
+ 		*(.rel.ctors)
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -72,14 +77,14 @@ SECTIONS
+ 		__gnu_hash_start = .;
+ 		*(.gnu.hash)
+ 		__gnu_hash_end = .;
+-	}
++	} :all
+
+
+ 	.dynsym : {
+ 		__dynsym_start = .;
+ 		*(.dynsym)
+ 		__dynsym_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -87,7 +92,7 @@ SECTIONS
+ 		__dynstr_start = .;
+ 		*(.dynstr)
+ 		__dynstr_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -104,7 +109,7 @@ SECTIONS
+ 		KEEP (*(.got.plt))
+ 		KEEP (*(.got))
+ 		__got_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(4);
+
+@@ -112,7 +117,7 @@ SECTIONS
+ 		__dynamic_start = .;
+ 		*(.dynamic)
+ 		__dynamic_end = .;
+-	}
++	} :all
+
+ 	. = ALIGN(16);
+
+@@ -122,19 +127,19 @@ SECTIONS
+ 		*(.data.*)
+ 		*(.lowmem)
+ 		__data_end = .;
+-	}
++	} :all
+
+ 	.reloc : {
+ 		*(.reloc)
+-	}
++	} :all
+
+ 	.symtab : {
+ 		*(.symtab)
+-	}
++	} :all
+
+ 	.strtab : {
+ 		*(.strtab)
+-	}
++	} :all
+
+ 	.bss (NOLOAD) : {
+ 		/* the EFI loader doesn't seem to like a .bss section,
+@@ -148,7 +153,7 @@ SECTIONS
+ 		__bss_end = .;
+ 		*(.sbss)
+ 		*(.scommon)
+-	}
++	} :all
+ 	__bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
+ 	__bss_dwords = (__bss_len + 3) >> 2;
+
+@@ -161,7 +166,7 @@ SECTIONS
+ 		*(.hugebss)
+ 		*(.hugebss.*)
+ 		__hugebss_end = .;
+-	}
++	} :all
+
+ 	_end = .;
+