aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-02-02 17:07:51 -0800
committerH.J. Lu <hjl.tools@gmail.com>2020-02-02 17:08:01 -0800
commita8c4d40b578378be3b12575d127d4c7bd9972f32 (patch)
treefa3a722b3b535806f0f535a4c81c30f97da6b7ba /ld
parent0f8b5e560e43ca0148162d30b83411b2107b27e5 (diff)
downloadfsf-binutils-gdb-a8c4d40b578378be3b12575d127d4c7bd9972f32.zip
fsf-binutils-gdb-a8c4d40b578378be3b12575d127d4c7bd9972f32.tar.gz
fsf-binutils-gdb-a8c4d40b578378be3b12575d127d4c7bd9972f32.tar.bz2
ELF: Add support for unique section ID to assembler
Clang's integrated assembler supports multiple section with the same name: .section .text,"ax",@progbits,unique,1 nop .section .text,"ax",@progbits,unique,2 nop "unique,N" assigns the number, N, as the section ID, to a section. The valid values of the section ID are between 0 and 4294967295. It can be used to distinguish different sections with the same section name. This is useful with -fno-unique-section-names -ffunction-sections. -ffunction-sections by default generates .text.foo, .text.bar, etc. Using the same string can save lots of space in .strtab. This patch adds section_id to bfd_section and reuses the linker internal bit in BFD section flags, SEC_LINKER_CREATED, for assmebler internal use to mark valid section_id. It also updates objdump to compare section pointers if 2 sections comes from the same file since 2 different sections can have the same section name. bfd/ PR gas/25380 * bfd-in2.h: Regenerated. * ecoff.c (bfd_debug_section): Add section_id. * section.c (bfd_section): Add section_id. (SEC_ASSEMBLER_SECTION_ID): New. (BFD_FAKE_SECTION): Add section_id. binutils/ PR gas/25380 * objdump.c (sym_ok): Return FALSE if 2 sections are in the same file with different section pointers. gas/ PR gas/25380 * config/obj-elf.c (section_match): Removed. (get_section): Also match SEC_ASSEMBLER_SECTION_ID and section_id. (obj_elf_change_section): Replace info and group_name arguments with match_p. Also update the section ID and flags from match_p. (obj_elf_section): Handle "unique,N". Update call to obj_elf_change_section. * config/obj-elf.h (elf_section_match): New. (obj_elf_change_section): Updated. * config/tc-arm.c (start_unwind_section): Update call to obj_elf_change_section. * config/tc-ia64.c (obj_elf_vms_common): Likewise. * config/tc-microblaze.c (microblaze_s_data): Likewise. (microblaze_s_sdata): Likewise. (microblaze_s_rdata): Likewise. (microblaze_s_bss): Likewise. * config/tc-mips.c (s_change_section): Likewise. * config/tc-msp430.c (msp430_profiler): Likewise. * config/tc-rx.c (parse_rx_section): Likewise. * config/tc-tic6x.c (tic6x_start_unwind_section): Likewise. * doc/as.texi: Document "unique,N" in .section directive. * testsuite/gas/elf/elf.exp: Run "unique,N" tests. * testsuite/gas/elf/section15.d: New file. * testsuite/gas/elf/section15.s: Likewise. * testsuite/gas/elf/section16.s: Likewise. * testsuite/gas/elf/section16a.d: Likewise. * testsuite/gas/elf/section16b.d: Likewise. * testsuite/gas/elf/section17.d: Likewise. * testsuite/gas/elf/section17.l: Likewise. * testsuite/gas/elf/section17.s: Likewise. * testsuite/gas/i386/unique.d: Likewise. * testsuite/gas/i386/unique.s: Likewise. * testsuite/gas/i386/x86-64-unique.d: Likewise. * testsuite/gas/i386/i386.exp: Run unique and x86-64-unique. ld/ PR gas/25380 * testsuite/ld-i386/pr22001-1c.S: Use "unique,N" in .section directives. * testsuite/ld-i386/tls-gd1.S: Likewise. * testsuite/ld-x86-64/pr21481b.S: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-i386/pr22001-1c.S4
-rw-r--r--ld/testsuite/ld-i386/tls-gd1.S5
-rw-r--r--ld/testsuite/ld-x86-64/pr21481b.S4
4 files changed, 14 insertions, 7 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index d97c635..2b885b5 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2020-02-02 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/25380
+ * testsuite/ld-i386/pr22001-1c.S: Use "unique,N" in .section
+ directives.
+ * testsuite/ld-i386/tls-gd1.S: Likewise.
+ * testsuite/ld-x86-64/pr21481b.S: Likewise.
+
2020-01-30 Jan Beulich <jbeulich@suse.com>
* ld.texi: Remove space between @option and brace.
diff --git a/ld/testsuite/ld-i386/pr22001-1c.S b/ld/testsuite/ld-i386/pr22001-1c.S
index 2c1041d..51094ef 100644
--- a/ld/testsuite/ld-i386/pr22001-1c.S
+++ b/ld/testsuite/ld-i386/pr22001-1c.S
@@ -1,7 +1,7 @@
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "PASS"
- .section .text.startup,"ax",@progbits
+ .section .text,"ax",@progbits,unique,1
.p2align 4,,15
.globl main
.type main, @function
@@ -41,7 +41,7 @@ main:
addl $16, %esp
jmp .L3
.size main, .-main
- .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
+ .section .text,"axG",@progbits,__x86.get_pc_thunk.bx,comdat,unique,2
.globl __x86.get_pc_thunk.bx
.hidden __x86.get_pc_thunk.bx
.type __x86.get_pc_thunk.bx, @function
diff --git a/ld/testsuite/ld-i386/tls-gd1.S b/ld/testsuite/ld-i386/tls-gd1.S
index 3b16eab..cf5c913 100644
--- a/ld/testsuite/ld-i386/tls-gd1.S
+++ b/ld/testsuite/ld-i386/tls-gd1.S
@@ -47,15 +47,14 @@ test_gd:
movzbl %al, %eax
ret
.size test_gd, .-test_gd
- .section .text.unlikely
- .section .text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
+ .section .text,"axG",@progbits,__x86.get_pc_thunk.bx,comdat,unique,1
.globl __x86.get_pc_thunk.bx
.hidden __x86.get_pc_thunk.bx
.type __x86.get_pc_thunk.bx, @function
__x86.get_pc_thunk.bx:
movl (%esp), %ebx
ret
- .section .text.__x86.get_pc_thunk.cx,"axG",@progbits,__x86.get_pc_thunk.cx,comdat
+ .section .text,"axG",@progbits,__x86.get_pc_thunk.cx,comdat,unique,2
.globl __x86.get_pc_thunk.cx
.hidden __x86.get_pc_thunk.cx
.type __x86.get_pc_thunk.cx, @function
diff --git a/ld/testsuite/ld-x86-64/pr21481b.S b/ld/testsuite/ld-x86-64/pr21481b.S
index 583ec77..d66c86f 100644
--- a/ld/testsuite/ld-x86-64/pr21481b.S
+++ b/ld/testsuite/ld-x86-64/pr21481b.S
@@ -1,4 +1,4 @@
- .section .rodata.str1.1,"aMS",@progbits,1
+ .section .rodata.foo,"aMS",@progbits,1,unique,1
.LC0:
.string "PASS"
.text
@@ -40,7 +40,7 @@ call_func1:
jmp *func1@GOTPCREL(%rip)
.size call_func1, .-call_func1
.globl func1_p
- .section .rodata,"a",@progbits
+ .section .rodata.foo,"a",@progbits,unique,2
.align 8
.size func1_p, 8
.type func1_p, @object