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:
parent
b422eb499b
commit
d422d1c433
|
@ -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
|
||||
|
|
|
@ -12102,7 +12102,6 @@ _bfd_elf_gc_mark_extra_sections (struct bfd_link_info *info,
|
|||
isec->name, ilen) == 0)
|
||||
{
|
||||
dsec->gc_mark = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
#...
|
|
@ -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
|
||||
|
|
@ -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 ""
|
||||
|
|
Loading…
Reference in New Issue