[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1124971: trixie-pu: package gnu-efi/3.0.18-1+deb13u1



Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: gnu-efi@packages.debian.org
Control: affects -1 + src:gnu-efi
User: release.debian.org@packages.debian.org
Usertags: pu

[ Reason ]
gnu-efi does not produce working UEFI binaries for armhf.
The details are in #1086705. This affects efibootguard but probably
other gnu-efi compiled binaries.

This stable update backports an upstream patch.

[ Impact ]
armhf-built EFI binaries, such as efibootguard's
/usr/lib/arm-linux-gnueabihf/efibootguard/efibootguardarm.efi
/usr/lib/arm-linux-gnueabihf/efibootguard/kernel-stubarm.efi
do not run, i.e. the armhf machine does not boot.

[ Tests ]
Two users have tested the backported patch with their armhf machines and
report it to work.

[ Risks ]
The patch only touches ARM 32 bit code, which is broken. The other archs
are not affected.

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in stable
  [x] the issue is verified as fixed in unstable

[ Changes ]
The patch changes the handling of the _start symbol in 32 bit ARM assembly.

[ Other info ]
After this, a stable binNMU should run for the reverse build
dependencies if we have such a process. Otherwise I am going to file a
stable update for efibootguard after this is accepted.
diff -Nru gnu-efi-3.0.18/debian/changelog gnu-efi-3.0.18/debian/changelog
--- gnu-efi-3.0.18/debian/changelog	2024-03-25 20:50:29.000000000 +0100
+++ gnu-efi-3.0.18/debian/changelog	2026-01-07 23:10:37.000000000 +0100
@@ -1,3 +1,9 @@
+gnu-efi (3.0.18-1+deb13u1) trixie; urgency=medium
+
+  * Backport "ARM32: Split headers and code" (Closes: #1086705)
+
+ -- Bastian Germann <bage@debian.org>  Wed, 07 Jan 2026 23:10:37 +0100
+
 gnu-efi (3.0.18-1) unstable; urgency=medium
 
   * Strip LDFLAGS before passing to the build
diff -Nru gnu-efi-3.0.18/debian/patches/ARM32-Split-headers-and-code.patch gnu-efi-3.0.18/debian/patches/ARM32-Split-headers-and-code.patch
--- gnu-efi-3.0.18/debian/patches/ARM32-Split-headers-and-code.patch	1970-01-01 01:00:00.000000000 +0100
+++ gnu-efi-3.0.18/debian/patches/ARM32-Split-headers-and-code.patch	2026-01-07 23:09:32.000000000 +0100
@@ -0,0 +1,90 @@
+Origin: upstream, 24a4cd0e5653fd84b004c00c808c45cc3fb7a7e2
+From: Callum Farmer <gmbr3@opensuse.org>
+Date: Mon, 23 Sep 2024 16:51:49 +0100
+Subject: ARM32: Split headers and code
+
+* Force code to be at known dest of 4096
+* Move _start into .text
+* Load the _start symbol address and then minus 4096 to get the load
+  address
+
+Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
+---
+ gnuefi/crt0-efi-arm.S  | 21 +++++++++++----------
+ gnuefi/elf_arm_efi.lds |  1 +
+ 2 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/gnuefi/crt0-efi-arm.S b/gnuefi/crt0-efi-arm.S
+index 9c2c467e..ad02ca10 100644
+--- a/gnuefi/crt0-efi-arm.S
++++ b/gnuefi/crt0-efi-arm.S
+@@ -45,11 +45,11 @@ optional_header:
+ 	.2byte	0x10b				// PE32+ format
+ 	.byte	0x02				// MajorLinkerVersion
+ 	.byte	0x14				// MinorLinkerVersion
+-	.4byte	_etext - _start		// SizeOfCode
++	.4byte	_text_size - ImageBase		// SizeOfCode
+ 	.4byte	_alldata_size - ImageBase		// SizeOfInitializedData
+ 	.4byte	0				// SizeOfUninitializedData
+-	.4byte	_start - ImageBase		// AddressOfEntryPoint
+-	.4byte	_start - ImageBase		// BaseOfCode
++	.4byte	_text - ImageBase		// AddressOfEntryPoint
++	.4byte	_text - ImageBase		// BaseOfCode
+ 	.4byte	_reloc - ImageBase		// BaseOfData
+ 
+ extra_header_fields:
+@@ -67,7 +67,7 @@ extra_header_fields:
+ 	.4byte	_image_end - ImageBase		// SizeOfImage
+ 
+ 	// Everything before the kernel image is considered part of the header
+-	.4byte	_start - ImageBase		// SizeOfHeaders
++	.4byte	_text - ImageBase		// SizeOfHeaders
+ 	.4byte	0				// CheckSum
+ 	.2byte	EFI_SUBSYSTEM			// Subsystem
+ 	.2byte	0				// DllCharacteristics
+@@ -100,10 +100,10 @@ extra_header_fields:
+ section_table:
+ 
+ 	.ascii	".text\0\0\0"
+-	.4byte	_evtext - _start // VirtualSize
+-	.4byte	_start - ImageBase	// VirtualAddress
+-	.4byte	_etext - _start		// SizeOfRawData
+-	.4byte	_start - ImageBase	// PointerToRawData
++	.4byte	_text_vsize - ImageBase // VirtualSize
++	.4byte	_text - ImageBase	// VirtualAddress
++	.4byte	_text_size - ImageBase		// SizeOfRawData
++	.4byte	_text - ImageBase	// PointerToRawData
+ 	.4byte	0		// PointerToRelocations (0 for executables)
+ 	.4byte	0		// PointerToLineNumbers (0 for executables)
+ 	.2byte	0		// NumberOfRelocations  (0 for executables)
+@@ -148,7 +148,7 @@ section_table:
+ 	.2byte	0			// NumberOfLineNumbers
+ 	.4byte	0x40000040		// Characteristics (section flags)
+ 
+-.balign 256
++.text
+ .globl	_start
+ .type _start,%function
+ _start:
+@@ -159,7 +159,8 @@ _start:
+ 	adr		r1, .L_DYNAMIC
+ 	ldr		r0, [r1]
+ 	add		r1, r0, r1
+-	adr		r0, ImageBase
++	adr		r0, _start
++	sub		r0, r0, #0x1000
+ 	bl		_relocate
+ 	teq		r0, #0
+ 	bne		0f
+diff --git a/gnuefi/elf_arm_efi.lds b/gnuefi/elf_arm_efi.lds
+index afe17af3..b7e3fb13 100644
+--- a/gnuefi/elf_arm_efi.lds
++++ b/gnuefi/elf_arm_efi.lds
+@@ -5,6 +5,7 @@ SECTIONS
+ {
+   .text 0 : {
+     *(.text.head)
++    . = 0x1000;
+     _text = .;
+     *(.text)
+     *(.text.*)
diff -Nru gnu-efi-3.0.18/debian/patches/series gnu-efi-3.0.18/debian/patches/series
--- gnu-efi-3.0.18/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ gnu-efi-3.0.18/debian/patches/series	2026-01-07 23:10:26.000000000 +0100
@@ -0,0 +1 @@
+ARM32-Split-headers-and-code.patch

Reply to: