aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-04-23 16:37:44 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-04-23 16:37:56 -0700
commit3e19fb8f990e4ce8a08f9cf2817cd9e9398648d5 (patch)
tree9e22ba6ecd1bc3533550524049c4fbde9ae57331 /ld
parentece794d9c43addc2a347c01f5cd753b9171d028a (diff)
downloadbinutils-3e19fb8f990e4ce8a08f9cf2817cd9e9398648d5.zip
binutils-3e19fb8f990e4ce8a08f9cf2817cd9e9398648d5.tar.gz
binutils-3e19fb8f990e4ce8a08f9cf2817cd9e9398648d5.tar.bz2
Delay setting up compressed debug section names
When we set up st_name for output section name in elf_fake_sections, we don't know if the compressed DWARF debug section will be smaller. We may end up with compressed DWARF debug sections which are bigger than the uncompressed ones. This patch delays setting up st_name for output DWARF debug section to _bfd_elf_assign_file_positions_for_non_load which will compress the output debug section. We also postpone placement of shstrtab section after DWARF debug sections have been compressed. The net effect is .shstrtab section is now placed after .symtab and .strtab sections. bfd/ PR ld/18277 * compress.c (bfd_compress_section_contents): Remove the write_compress argument. (bfd_init_section_compress_status): Updated. (bfd_compress_section): Likewise. * elf.c (_bfd_elf_set_reloc_sh_name): New. (_bfd_elf_init_reloc_shdr): Add delay_st_name_p. Set sh_name to (unsigned int) -1 if delay_st_name_p is TRUE. Use _bfd_elf_set_reloc_sh_name. (elf_fake_sections): Don't rename DWARF debug section for linker output if it will be compressed. Instead, set delay_st_name_p to TRUE and pass it to _bfd_elf_init_reloc_shdr. (assign_section_numbers): Call _bfd_elf_strtab_addref only if sh_name != (unsigned int) -1. Don't finalize nor assign shstrtab section here. Delay setting output section names to _bfd_elf_write_object_contents. (_bfd_elf_compute_section_file_positions): Update comments on sh_offset for shstrtab section. (assign_file_positions_for_non_load_sections): Set sh_offset to -1 for shstrtab section. (assign_file_positions_except_relocs): Likewise. (_bfd_elf_assign_file_positions_for_non_load): Set up sh_name when compressing DWARF debug sections. Place shstrtab section after DWARF debug sections have been compressed. (_bfd_elf_write_object_contents): Setting sh_name for output sections. ld/testsuite/ PR ld/18277 * ld-elf/compressed1d.d: New. * ld-elf/compressed1e.d: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-elf/compressed1d.d9
-rw-r--r--ld/testsuite/ld-elf/compressed1e.d9
3 files changed, 24 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 356a134..15cbf24 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-04-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/18277
+ * ld-elf/compressed1d.d: New.
+ * ld-elf/compressed1e.d: Likewise.
+
2015-04-23 Alan Modra <amodra@gmail.com>
* ld-powerpc/ambiguousv1b.d: Update for aligned .got.
diff --git a/ld/testsuite/ld-elf/compressed1d.d b/ld/testsuite/ld-elf/compressed1d.d
new file mode 100644
index 0000000..cd6042c
--- /dev/null
+++ b/ld/testsuite/ld-elf/compressed1d.d
@@ -0,0 +1,9 @@
+#source: compress1.s
+#as: --compress-debug-sections=none
+#ld: -r --compress-debug-sections=zlib-gnu
+#readelf: -SW
+
+#failif
+#...
+ \[[ 0-9]+\] \.zdebug_aranges[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ .*
+#...
diff --git a/ld/testsuite/ld-elf/compressed1e.d b/ld/testsuite/ld-elf/compressed1e.d
new file mode 100644
index 0000000..8f23347
--- /dev/null
+++ b/ld/testsuite/ld-elf/compressed1e.d
@@ -0,0 +1,9 @@
+#source: compress1.s
+#as: --compress-debug-sections=none
+#ld: -shared --compress-debug-sections=zlib-gnu
+#readelf: -SW
+
+#failif
+#...
+ \[[ 0-9]+\] \.zdebug_aranges[ ]+(PROGBITS|MIPS_DWARF)[ 0-9a-z]+ .*
+#...