Garbage collecting debug sections

I noticed that _bfd_elf_gc_mark_extra_sections attempts to unmark
related debug sections when it finds an unmarked code section.
When it finds .text.foo is unmarked, for example, it removes
.debug_line.text.foo as well (using the section name as a suffix
match check.

However, it bails out after finding one such section.

bfd/
	* elflink.c (_bfd_elf_gc_mark_extra_sections): Don't break on
	first matching debug section.
ld/testsuite/
	* ld-gc/all-debug-sections.d: New file.
	* ld-gc/all-debug-sections.s: Likewise.
	* ld-gc/gc.exp: Execute new testcase.
This commit is contained in:
Senthil Kumar Selvaraj 2015-03-24 19:18:04 +05:30 committed by Alan Modra
parent b422eb499b
commit d422d1c433
6 changed files with 80 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2015-03-25 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* elflink.c (_bfd_elf_gc_mark_extra_sections): Don't break on
first matching debug section.
2015-03-24 H.J. Lu <hongjiu.lu@intel.com>
PR gas/18087

View File

@ -12102,7 +12102,6 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
isec->name, ilen) == 0)
{
dsec->gc_mark = 0;
break;
}
}
}

View File

@ -1,3 +1,9 @@
2015-03-25 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
* ld-gc/all-debug-sections.d: New file.
* ld-gc/all-debug-sections.s: Likewise.
* ld-gc/gc.exp: Execute new testcase.
2015-03-11 Alan Modra <amodra@gmail.com>
* ld-powerpc/tls32.s: Add GOT pointer setup.

View File

@ -0,0 +1,10 @@
#name: --gc-sections with multiple debug sections for a function section
#as: -gdwarf-sections
#ld: --gc-sections -e _start
#PROG: nm
#...
[0-9a-f]+ N +debug_aranges_main
[0-9a-f]+ N +debug_info_main
[0-9a-f]+ N +debug_line_main
#...

View File

@ -0,0 +1,56 @@
.section .text.useless,"ax",%progbits
.globl useless
.type useless, %function
useless:
.long 1
.section .text.main,"ax",%progbits
.globl _start
_start:
.globl main
.type main, %function
main:
.long 2
.section .text,"ax",%progbits
.long main
.section .debug_info.text.main,"",%progbits
debug_info_main:
.long 0x3c
.long main
.section .debug_info.text.useless,"",%progbits
debug_info_useless:
.long 0x38
.long useless
.section .debug_info,"",%progbits
.long 0x49
.section .debug_aranges,"",%progbits
.long 0x3c
.section .debug_aranges.text.main,"",%progbits
debug_aranges_main:
.long 0x2c
.long main
.section .debug_aranges.text.useless,"",%progbits
debug_aranges_useless:
.long 0x2c
.long useless
.section .debug_line,"",%progbits
.long 0x3c
.section .debug_line.text.main,"",%progbits
debug_line_main:
.long 0x2c
.long main
.section .debug_line.text.useless,"",%progbits
debug_line_useless:
.long 0x2c
.long useless

View File

@ -101,6 +101,9 @@ test_gc "Check --gc-section/-r/-u" "gcrel" $ld "-r --gc-sections -u used_func"
run_dump_test "noent"
run_dump_test "abi-note"
run_dump_test "start"
if { [is_elf_format] } then {
run_dump_test "all-debug-sections"
}
if { [is_elf_format] && [check_shared_lib_support] } then {
set gasopt ""