Blob Blame History Raw
From 0587ab32cf5037fd759dfcec0e858a57372cb64f Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 15 Jul 2015 10:15:51 -0400
Subject: [PATCH 10/10] Explicitly place our build-id notes on all arches.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Apparently some linkers will just throw caution to the wind and decide
to stick stuff we don't explicitly mention at 0, no matter what else has
already explicitly been located there.  A debian/ubuntu builder noted:

gcc -O0 -g3 -fpic -Wall -fshort-wchar -fno-strict-aliasing \
	-fno-merge-constants -ffreestanding -fno-stack-protector \
	-fno-stack-check --std=c11 -DCONFIG_aarch64 -D__KERNEL__ \
	-I/usr/include/efi/ -I/usr/include/efi/aarch64/ \
	-iquote/«PKGBUILDDIR»/include "-DDEBUGDIR=L\"/\"" \
	-ffreestanding -I/usr/lib/gcc/aarch64-linux-gnu/4.9/include \
	-c -o fakeesrt2.o fakeesrt2.c
ld -nostdlib --warn-common --no-undefined --fatal-warnings -shared \
	-Bsymbolic -L/usr/lib -L/usr/lib --build-id=sha1 \
	/usr/lib/crt0-efi-aarch64.o --defsym=EFI_SUBSYSTEM=0xa \
	-o fakeesrt2.so fakeesrt2.o -lefi -lgnuefi \
	/usr/lib/gcc/aarch64-linux-gnu/4.9/libgcc.a \
	-T elf_aarch64_efi.lds
ld: section .note.gnu.build-id loaded at [00000000,00000023] overlaps section .text loaded at [00000000,0000668f]

This shouldn't be a problem if we explicitly tell it where to put them.

Ard added a patch to do this on Arm and aarch64 targets in 16409cad4cb,
but it needs to be everywhere.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 gnuefi/elf_ia32_efi.lds        | 2 ++
 gnuefi/elf_ia32_fbsd_efi.lds   | 2 ++
 gnuefi/elf_ia64_efi.lds        | 2 ++
 gnuefi/elf_x86_64_efi.lds      | 2 ++
 gnuefi/elf_x86_64_fbsd_efi.lds | 2 ++
 5 files changed, 10 insertions(+)

diff --git a/gnuefi/elf_ia32_efi.lds b/gnuefi/elf_ia32_efi.lds
index b164094..6cc4ce1 100644
--- a/gnuefi/elf_ia32_efi.lds
+++ b/gnuefi/elf_ia32_efi.lds
@@ -46,6 +46,8 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
   . = ALIGN(4096);
   .dynamic  : { *(.dynamic) }
   . = ALIGN(4096);
diff --git a/gnuefi/elf_ia32_fbsd_efi.lds b/gnuefi/elf_ia32_fbsd_efi.lds
index 1f56cd7..77d6fad 100644
--- a/gnuefi/elf_ia32_fbsd_efi.lds
+++ b/gnuefi/elf_ia32_fbsd_efi.lds
@@ -46,6 +46,8 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
   . = ALIGN(4096);
   .dynamic  : { *(.dynamic) }
   . = ALIGN(4096);
diff --git a/gnuefi/elf_ia64_efi.lds b/gnuefi/elf_ia64_efi.lds
index a6ec717..baca962 100644
--- a/gnuefi/elf_ia64_efi.lds
+++ b/gnuefi/elf_ia64_efi.lds
@@ -43,6 +43,8 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
   . = ALIGN(4096);
   .dynamic  : { *(.dynamic) }
   . = ALIGN(4096);
diff --git a/gnuefi/elf_x86_64_efi.lds b/gnuefi/elf_x86_64_efi.lds
index 3862d9f..942d1f3 100644
--- a/gnuefi/elf_x86_64_efi.lds
+++ b/gnuefi/elf_x86_64_efi.lds
@@ -46,6 +46,8 @@ SECTIONS
    *(COMMON)
    *(.rel.local)
   }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
   _edata = .;
   _data_size = . - _etext;
   . = ALIGN(4096);
diff --git a/gnuefi/elf_x86_64_fbsd_efi.lds b/gnuefi/elf_x86_64_fbsd_efi.lds
index 507fe43..6fd2031 100644
--- a/gnuefi/elf_x86_64_fbsd_efi.lds
+++ b/gnuefi/elf_x86_64_fbsd_efi.lds
@@ -43,6 +43,8 @@ SECTIONS
    *(COMMON)
    *(.rel.local)
   }
+  .note.gnu.build-id : { *(.note.gnu.build-id) }
+
   . = ALIGN(4096);
   .dynamic  : { *(.dynamic) }
   . = ALIGN(4096);
-- 
2.5.0