diff options
author | Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> | 2015-03-24 19:18:04 +0530 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2015-03-25 20:42:00 +1030 |
commit | d422d1c433073ba412287334a7ec3aa95e03c5e9 (patch) | |
tree | d2eef2aaca76a0e8f91d1ae04bae511d4380da08 /ld | |
parent | b422eb499be2858969fb7723b4e4e08cab20fcdc (diff) | |
download | gdb-d422d1c433073ba412287334a7ec3aa95e03c5e9.zip gdb-d422d1c433073ba412287334a7ec3aa95e03c5e9.tar.gz gdb-d422d1c433073ba412287334a7ec3aa95e03c5e9.tar.bz2 |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-gc/all-debug-sections.d | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-gc/all-debug-sections.s | 56 | ||||
-rw-r--r-- | ld/testsuite/ld-gc/gc.exp | 3 |
4 files changed, 75 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 6e13e9c..8eef67e 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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. diff --git a/ld/testsuite/ld-gc/all-debug-sections.d b/ld/testsuite/ld-gc/all-debug-sections.d new file mode 100644 index 0000000..5e3373a --- /dev/null +++ b/ld/testsuite/ld-gc/all-debug-sections.d @@ -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 +#... diff --git a/ld/testsuite/ld-gc/all-debug-sections.s b/ld/testsuite/ld-gc/all-debug-sections.s new file mode 100644 index 0000000..076f183 --- /dev/null +++ b/ld/testsuite/ld-gc/all-debug-sections.s @@ -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 + diff --git a/ld/testsuite/ld-gc/gc.exp b/ld/testsuite/ld-gc/gc.exp index 5ff6485..58f3a2a 100644 --- a/ld/testsuite/ld-gc/gc.exp +++ b/ld/testsuite/ld-gc/gc.exp @@ -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 "" |