]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
ld: Move note sections after .rodata section
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 7 Nov 2024 04:39:19 +0000 (12:39 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 11 Nov 2024 11:47:44 +0000 (19:47 +0800)
Move note sections after .rodata section so that note sections are
placed in the same PT_LOAD segment together with .rodata section,
instead of a separate PT_LOAD segment.

PR ld/32341
* scripttempl/misc-sections.sc: Move note sections to ...
* scripttempl/elf.sc: Here, after .rodata section.
* testsuite/ld-elf/pr32341.d: New file.
* testsuite/ld-elf/pr32341.s: Likewise.

Co-Authored-By: Nick Clifton <nickc@redhat.com>
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
ld/scripttempl/elf.sc
ld/scripttempl/misc-sections.sc
ld/testsuite/ld-elf/pr32341.d [new file with mode: 0644]
ld/testsuite/ld-elf/pr32341.s [new file with mode: 0644]

index 6ef93dcc90665f622a6877739bb74eed1a2e227d..84b433256a6f5d9250fbfb3ea99689a21ce394fb 100644 (file)
@@ -668,6 +668,17 @@ cat <<EOF
   .exception_ranges ${RELOCATING-0} : ONLY_IF_RO { *(.exception_ranges${RELOCATING+*}) }
   ${TEXT_PLT+${PLT_NEXT_DATA+${PLT} ${OTHER_PLT_SECTIONS}}}
 
+  /* Various note sections.  Placed here so that they are included in the
+     read-only segment, and so that they are not treated as orphan sections.  */
+  .note.build-id :      { *(.note.build-id) } ${RELOCATING+${REGION}}
+  .note.GNU-stack :     { *(.note.GNU-stack) } ${RELOCATING+${REGION}}
+  .note.gnu-property :  { *(.note.gnu-property) } ${RELOCATING+${REGION}}
+  .note.ABI-tag :       { *(.note.ABI-tag) } ${RELOCATING+${REGION}}
+  .note.package :       { *(.note.package) } ${RELOCATING+${REGION}}
+  .note.dlopen :        { *(.note.dlopen) } ${RELOCATING+${REGION}}
+  .note.netbsd.ident :  { *(.note.netbsd.ident) } ${RELOCATING+${REGION}}
+  .note.openbsd.ident : { *(.note.openbsd.ident) } ${RELOCATING+${REGION}}
+
   ${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (__${ETEXT_NAME} = .);}}
   ${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (_${ETEXT_NAME} = .);}}
   ${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (${ETEXT_NAME} = .);}}
index 71b1a6ba643e71d684775fdf8ed1662b5f2947f0..93ce9b2871c2367be2adc914ebf1969cd96e3072 100644 (file)
@@ -30,15 +30,4 @@ cat <<EOF
 
   .gnu.build.attributes : { *(.gnu.build.attributes${RELOCATING+ .gnu.build.attributes.*}) }
 
-  /* Various note sections.  Placed here so that they do not get
-     treated as orphan sections.  */
-  .note.build-id :      { *(.note.build-id) } ${RELOCATING+${REGION}}
-  .note.GNU-stack :     { *(.note.GNU-stack) } ${RELOCATING+${REGION}}
-  .note.gnu-property :  { *(.note.gnu-property) } ${RELOCATING+${REGION}}
-  .note.ABI-tag :       { *(.note.ABI-tag) } ${RELOCATING+${REGION}}
-  .note.package :       { *(.note.package) } ${RELOCATING+${REGION}}
-  .note.dlopen :        { *(.note.dlopen) } ${RELOCATING+${REGION}}
-  .note.netbsd.ident :  { *(.note.netbsd.ident) } ${RELOCATING+${REGION}}
-  .note.openbsd.ident : { *(.note.openbsd.ident) } ${RELOCATING+${REGION}}
-
 EOF
diff --git a/ld/testsuite/ld-elf/pr32341.d b/ld/testsuite/ld-elf/pr32341.d
new file mode 100644 (file)
index 0000000..eb76c3a
--- /dev/null
@@ -0,0 +1,15 @@
+#ld: --build-id -z separate-code -z relro --rosegment
+#readelf: -l --wide
+#target: *-*-linux-gnu *-*-gnu* *-*-nacl* arm*-*-uclinuxfdpiceabi
+#xfail: ![check_relro_support]
+
+#failif
+#...
+[ ]+LOAD[      ]+0x[0-9a-f x]+.*
+#...
+[ ]+LOAD[      ]+0x[0-9a-f x]+.*
+#...
+[ ]+LOAD[      ]+0x[0-9a-f x]+.*
+#...
+[ ]+LOAD[      ]+0x[0-9a-f x]+.*
+#...
diff --git a/ld/testsuite/ld-elf/pr32341.s b/ld/testsuite/ld-elf/pr32341.s
new file mode 100644 (file)
index 0000000..11f31b7
--- /dev/null
@@ -0,0 +1,26 @@
+       .text
+       .type start,"function"
+       .global start
+start:
+       .type _start,"function"
+       .global _start
+_start:
+       .type __start,"function"
+       .global __start
+__start:
+       .type main,"function"
+       .global main
+main:
+       .type _main,"function"
+       .global _main
+_main:
+       .dc.a 0
+       .section .rodata,"a"
+       .zero 8
+       .bss
+       .zero 8
+       .section        .note.ABI-tag,"a"
+       .align 4
+       .zero 32
+       .ident  "GCC: (GNU) 14.2.1"
+       .section        .note.GNU-stack,"",%progbits