diff mbox series

[isar-cip-core,1/9] Provide recipe to rebuild gnu-efi 3.0.18 for fixing armhf bug

Message ID 49baabb6f460de97658e4d51c9d7006134f2581f.1730977077.git.jan.kiszka@siemens.com (mailing list archive)
State New
Headers show
Series Enable early Debian trixie support, drop sid | expand

Commit Message

Jan Kiszka Nov. 7, 2024, 10:57 a.m. UTC
From: Jan Kiszka <jan.kiszka@siemens.com>

This allows to rebuild gnu-efi from testing/unstable in order to address
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1086705. With this
version, the kernel stub of EFI Boot Guard is built correctly again, and
the system boots.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 .../efibootguard/efibootguard_0.18-1+cip.bb   |  4 +
 .../0001-ARM32-Split-headers-and-code.patch   | 93 +++++++++++++++++++
 recipes-devtools/gnu-efi/gnu-efi_latest.bb    | 25 +++++
 3 files changed, 122 insertions(+)
 create mode 100644 recipes-devtools/gnu-efi/files/0001-ARM32-Split-headers-and-code.patch
 create mode 100644 recipes-devtools/gnu-efi/gnu-efi_latest.bb
diff mbox series

Patch

diff --git a/recipes-bsp/efibootguard/efibootguard_0.18-1+cip.bb b/recipes-bsp/efibootguard/efibootguard_0.18-1+cip.bb
index 931bc8ea..63373119 100644
--- a/recipes-bsp/efibootguard/efibootguard_0.18-1+cip.bb
+++ b/recipes-bsp/efibootguard/efibootguard_0.18-1+cip.bb
@@ -35,6 +35,10 @@  PATCHTOOL = "git"
 inherit dpkg
 
 DEPENDS = "python-shtab"
+
+DEPENDS:trixie = "gnu-efi"
+DEPENDS:sid    = "gnu-efi"
+
 # needed for buster, bullseye could use compat >= 13
 python() {
     arch = d.getVar('DISTRO_ARCH')
diff --git a/recipes-devtools/gnu-efi/files/0001-ARM32-Split-headers-and-code.patch b/recipes-devtools/gnu-efi/files/0001-ARM32-Split-headers-and-code.patch
new file mode 100644
index 00000000..2f15d246
--- /dev/null
+++ b/recipes-devtools/gnu-efi/files/0001-ARM32-Split-headers-and-code.patch
@@ -0,0 +1,93 @@ 
+From 24a4cd0e5653fd84b004c00c808c45cc3fb7a7e2 Mon Sep 17 00:00:00 2001
+From: Callum Farmer <gmbr3@opensuse.org>
+Date: Mon, 23 Sep 2024 16:51:49 +0100
+Subject: [PATCH] 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 9c2c467..ad02ca1 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 afe17af..b7e3fb1 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.*)
+-- 
+2.43.0
+
diff --git a/recipes-devtools/gnu-efi/gnu-efi_latest.bb b/recipes-devtools/gnu-efi/gnu-efi_latest.bb
new file mode 100644
index 00000000..2272a2b9
--- /dev/null
+++ b/recipes-devtools/gnu-efi/gnu-efi_latest.bb
@@ -0,0 +1,25 @@ 
+#
+# CIP Core, generic profile
+#
+# Copyright (c) Siemens AG, 2023
+#
+# Authors:
+#  Jan Kiszka <jan.kiszka@siemens.com>
+#
+# SPDX-License-Identifier: MIT
+#
+
+inherit dpkg
+
+CHANGELOG_V="<orig-version>+cip"
+
+SRC_URI = "apt://${BPN}"
+SRC_URI += "file://0001-ARM32-Split-headers-and-code.patch;apply=no"
+
+do_prepare_build() {
+	deb_add_changelog
+
+	cd ${S}
+	quilt import -f ${WORKDIR}/*.patch
+	quilt push -a
+}