[binutils-gdb/binutils-2_43-branch] ld: Don't explicitly add .note.gnu.build-id in elf.sc

H.J. Lu hjl@sourceware.org
Fri Sep 27 22:47:09 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0a71d78f6a6810db1816139e7a9af7d82bb8fb7a

commit 0a71d78f6a6810db1816139e7a9af7d82bb8fb7a
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Sun Sep 22 08:23:08 2024 +0800

    ld: Don't explicitly add .note.gnu.build-id in elf.sc
    
    The commit:
    
    e8e10743f7b Add --rosegment option to BFD linker to stop the '-z separate-code' from generating two read-only segments.
    
    places .note.gnu.property and text sections in the same PT_LOAD segment
    when --rosegment and -z separate-code are used together.  After
    
    commit f3e660db14a0a95f3953496d8beb7c58ef34c6d5
    Author: H.J. Lu <hjl.tools@gmail.com>
    Date:   Mon Oct 8 04:39:09 2018 -0700
    
        ELF: Properly group and place orphan note sections
    
        Properly group orphan note sections.  When placing orphan note section
        as the first note section, place it after the section before all note
        sections.
    
    ld properly groups and places orphan note sections.  If .note.gnu.build-id
    is added to elf.sc, the orphan .note.gnu.property section will be placed
    before the .note.gnu.build-id section due to the larger section alignment
    and may be placed in the same PT_LOAD segment with text sections.  Remove
    .note.gnu.build-id from elf.sc to let ld properly group and add all orphan
    note sections.
    
    Binutils 2.44 has been fixed by a different fix:
    
    commit 052940eba6fcd2b9f359f03ee205e9cd4dfb1575
    Author: H.J. Lu <hjl.tools@gmail.com>
    Date:   Fri Sep 20 11:32:26 2024 +0800
    
        ld: Ignore .note.gnu.build-id when placing orphaned notes
    
    since .note.gnu.build-id has been removed from emit_early_ro in elf.sc.
    
            PR ld/32191
            * scripttempl/elf.sc (emit_early_ro): Remove .note.gnu.build-id.
            * testsuite/ld-i386/i386.exp: Run PR ld/32191 test.
            * testsuite/ld-i386/pr32191.d: New file.
            * testsuite/ld-x86-64/pr32191-x32.d: New file.
            * testsuite/ld-x86-64/pr32191.d: Likewise.
            * testsuite/ld-x86-64/pr32191.s: Likewise.
            * testsuite/ld-x86-64/x86-64.exp: Run PR ld/32191 tests.
    
    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>

Diff:
---
 ld/scripttempl/elf.sc                | 1 -
 ld/testsuite/ld-i386/i386.exp        | 1 +
 ld/testsuite/ld-i386/pr32191.d       | 9 +++++++++
 ld/testsuite/ld-x86-64/pr32191-x32.d | 9 +++++++++
 ld/testsuite/ld-x86-64/pr32191.d     | 9 +++++++++
 ld/testsuite/ld-x86-64/pr32191.s     | 5 +++++
 ld/testsuite/ld-x86-64/x86-64.exp    | 2 ++
 7 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index 54716110b61..3fdbff52094 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -425,7 +425,6 @@ emit_early_ro()
 {
   cat <<EOF
   ${INITIAL_READONLY_SECTIONS}
-  .note.gnu.build-id ${RELOCATING-0}: { *(.note.gnu.build-id) }
 EOF
 }
 
diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
index 8dafb6261fb..7a8a7e438a1 100644
--- a/ld/testsuite/ld-i386/i386.exp
+++ b/ld/testsuite/ld-i386/i386.exp
@@ -513,6 +513,7 @@ run_dump_test "pr28870"
 run_dump_test "pr28894"
 run_dump_test "pr30787"
 run_dump_test "pr31047"
+run_dump_test "pr32191"
 
 if { !([istarget "i?86-*-linux*"]
        || [istarget "i?86-*-gnu*"]
diff --git a/ld/testsuite/ld-i386/pr32191.d b/ld/testsuite/ld-i386/pr32191.d
new file mode 100644
index 00000000000..d4a00bb92f4
--- /dev/null
+++ b/ld/testsuite/ld-i386/pr32191.d
@@ -0,0 +1,9 @@
+#source: ../ld-x86-64/pr32191.s
+#as: --32 -mx86-used-note=yes
+#ld: -shared -m elf_i386 -z separate-code --build-id --rosegment
+#readelf: -lW
+
+#...
+ +[0-9]+ +\.text 
+ +[0-9]+ +\..* \.note\.gnu\.property \.note\.gnu\.build-id .*
+#pass
diff --git a/ld/testsuite/ld-x86-64/pr32191-x32.d b/ld/testsuite/ld-x86-64/pr32191-x32.d
new file mode 100644
index 00000000000..13f38a21fa3
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr32191-x32.d
@@ -0,0 +1,9 @@
+#source: pr32191.s
+#as: --x32 -mx86-used-note=yes
+#ld: -shared -m elf32_x86_64 -z separate-code --build-id --rosegment
+#readelf: -lW
+
+#...
+ +[0-9]+ +\.text 
+ +[0-9]+ +\..* \.note\.gnu\.property \.note\.gnu\.build-id .*
+#pass
diff --git a/ld/testsuite/ld-x86-64/pr32191.d b/ld/testsuite/ld-x86-64/pr32191.d
new file mode 100644
index 00000000000..7f37f752541
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr32191.d
@@ -0,0 +1,9 @@
+#source: pr32191.s
+#as: --64 -mx86-used-note=yes
+#ld: -shared -m elf_x86_64 -z separate-code --build-id --rosegment
+#readelf: -lW
+
+#...
+ +[0-9]+ +\.text 
+ +[0-9]+ +\..* \.note\.gnu\.property \.note\.gnu\.build-id .*
+#pass
diff --git a/ld/testsuite/ld-x86-64/pr32191.s b/ld/testsuite/ld-x86-64/pr32191.s
new file mode 100644
index 00000000000..953f0de670f
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/pr32191.s
@@ -0,0 +1,5 @@
+	.text
+	.global foo
+foo:
+	.nops 4
+	.section	.note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 05556e830f3..89ce531a5a9 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -540,6 +540,8 @@ run_dump_test "pr31868c-x32"
 run_dump_test "tlsie5"
 run_dump_test "tlsdesc3"
 run_dump_test "tlsdesc4"
+run_dump_test "pr32191"
+run_dump_test "pr32191-x32"
 
 if { ![skip_sframe_tests] } {
     run_dump_test "sframe-simple-1"


More information about the Binutils-cvs mailing list