diff options
author | Alan Modra <amodra@gmail.com> | 2014-10-04 15:53:58 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2014-10-04 22:49:32 +0930 |
commit | c2aaac080c05369f6fb7009d85dcf9bb98a914e6 (patch) | |
tree | 2e32622b910a96f7831f1aaa73f590c3878653ac /ld | |
parent | 0661ae8e4d4a2cadcf04f8300540a723746cba6d (diff) | |
download | gdb-c2aaac080c05369f6fb7009d85dcf9bb98a914e6.zip gdb-c2aaac080c05369f6fb7009d85dcf9bb98a914e6.tar.gz gdb-c2aaac080c05369f6fb7009d85dcf9bb98a914e6.tar.bz2 |
Discard zero address range eh_frame FDEs
These are useless because they can't match any address. In fact,
worse than useless because the .eh_frame_hdr lookup table matching
addresses to FDEs does not contain information about the FDE range.
The table is sorted by address; Range is inferred by the address
delta from one entry to the next. So if a zero address range FDE is
followed by a normal non-zero range FDE for the same address,
everything is good. However, the qsort could just as easily sort the
FDEs in the other order, in which case the normal FDE would
effectively be seen to have a zero range.
bfd/
PR 17447
* elf-bfd.h (struct eh_cie_fde): Comment re NULL u.fde.cie_inf.
* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Mark zero address
range FDEs for discarding.
(vma_compare): Sort on range after address.
(_bfd_elf_gc_mark_fdes): Test for NULL u.fde.cie_inf.
(_bfd_elf_discard_section_eh_frame): Likewise. Write "FDE" in
error message rather than "fde".
(_bfd_elf_write_section_eh_frame_hdr): Write "PC" and "FDE" in
error message.
ld/testsuite/
* ld-elf/eh1.s: Don't create FDEs with zero address ranges.
* ld-elf/eh3.s: Likewise.
* ld-elf/eh1.d, * ld-elf/eh2.d, * ld-elf/eh3.d: Adjust.
* ld-mips-elf/eh-frame1-n32.d: Warning match update.
* ld-mips-elf/eh-frame1-n64.d: Likewise.
* ld-mips-elf/eh-frame2-n32.d: Likewise.
* ld-mips-elf/eh-frame2-n64.d: Likewise.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh1.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh1.s | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh2.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh3.d | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh3.s | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/eh-frame1-n32.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/eh-frame1-n64.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/eh-frame2-n32.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/eh-frame2-n64.d | 2 |
10 files changed, 30 insertions, 14 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index a03dd71..fd0c8ba 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2014-10-04 Alan Modra <amodra@gmail.com> + + * ld-elf/eh1.s: Don't create FDEs with zero address ranges. + * ld-elf/eh3.s: Likewise. + * ld-elf/eh1.d, * ld-elf/eh2.d, * ld-elf/eh3.d: Adjust. + * ld-mips-elf/eh-frame1-n32.d: Warning match update. + * ld-mips-elf/eh-frame1-n64.d: Likewise. + * ld-mips-elf/eh-frame2-n32.d: Likewise. + * ld-mips-elf/eh-frame2-n64.d: Likewise. + 2014-09-22 Alan Modra <amodra@gmail.com> * ld-plugin/lto.exp: Use both --print-file-name and --print-prog-name @@ -534,7 +544,7 @@ 2014-06-09 Ryan Mansfield <rmansfield@qnx.com> - * config/default.exp (GASP): Remove. + * config/default.exp (GASP): Remove. 2014-06-03 Alan Modra <amodra@gmail.com> diff --git a/ld/testsuite/ld-elf/eh1.d b/ld/testsuite/ld-elf/eh1.d index bdf84cc..f6841dc 100644 --- a/ld/testsuite/ld-elf/eh1.d +++ b/ld/testsuite/ld-elf/eh1.d @@ -23,11 +23,11 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078 - DW_CFA_advance_loc: 0 to 0+400078 +0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078\.\.0+400090 + DW_CFA_advance_loc: 8 to 0+400080 DW_CFA_def_cfa_offset: 16 DW_CFA_offset: r6 \(rbp\) at cfa-16 - DW_CFA_advance_loc: 0 to 0+400078 + DW_CFA_advance_loc: 8 to 0+400088 DW_CFA_def_cfa_register: r6 \(rbp\) 0+0038 ZERO terminator diff --git a/ld/testsuite/ld-elf/eh1.s b/ld/testsuite/ld-elf/eh1.s index a605209..73d715f 100644 --- a/ld/testsuite/ld-elf/eh1.s +++ b/ld/testsuite/ld-elf/eh1.s @@ -3,8 +3,11 @@ .type _start, %function _start: .LFB2: + .space 8 .LCFI0: + .space 8 .LCFI1: + .space 8 .LFE2: .size _start, .-_start .section .eh_frame,"a",%progbits diff --git a/ld/testsuite/ld-elf/eh2.d b/ld/testsuite/ld-elf/eh2.d index 65ad448..cb75a2d 100644 --- a/ld/testsuite/ld-elf/eh2.d +++ b/ld/testsuite/ld-elf/eh2.d @@ -23,11 +23,11 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078 - DW_CFA_advance_loc: 0 to 0+400078 +0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078\.\.0+400090 + DW_CFA_advance_loc: 8 to 0+400080 DW_CFA_def_cfa_offset: 16 DW_CFA_offset: r6 \(rbp\) at cfa-16 - DW_CFA_advance_loc: 0 to 0+400078 + DW_CFA_advance_loc: 8 to 0+400088 DW_CFA_def_cfa_register: r6 \(rbp\) 0+0038 ZERO terminator diff --git a/ld/testsuite/ld-elf/eh3.d b/ld/testsuite/ld-elf/eh3.d index 2d322dd..6ac584a 100644 --- a/ld/testsuite/ld-elf/eh3.d +++ b/ld/testsuite/ld-elf/eh3.d @@ -23,11 +23,11 @@ Contents of the .eh_frame section: DW_CFA_nop DW_CFA_nop -0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078 - DW_CFA_advance_loc: 0 to 0+400078 +0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078\.\.0+400090 + DW_CFA_advance_loc: 8 to 0+400080 DW_CFA_def_cfa_offset: 16 DW_CFA_offset: r6 \(rbp\) at cfa-16 - DW_CFA_advance_loc: 0 to 0+400078 + DW_CFA_advance_loc: 8 to 0+400088 DW_CFA_def_cfa_register: r6 \(rbp\) 0+0038 ZERO terminator diff --git a/ld/testsuite/ld-elf/eh3.s b/ld/testsuite/ld-elf/eh3.s index 24bd90d..e293c38 100644 --- a/ld/testsuite/ld-elf/eh3.s +++ b/ld/testsuite/ld-elf/eh3.s @@ -3,8 +3,11 @@ .type _start, %function _start: .LFB2: + .space 8 .LCFI0: + .space 8 .LCFI1: + .space 8 .LFE2: .size _start, .-_start .section .eh_frame,"a",%progbits diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n32.d b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d index 0542ebd..eafd022 100644 --- a/ld/testsuite/ld-mips-elf/eh-frame1-n32.d +++ b/ld/testsuite/ld-mips-elf/eh-frame1-n32.d @@ -4,7 +4,7 @@ #as: -march=from-abi -EB -n32 --defsym alignment=2 --defsym fill=0x40 #readelf: --relocs -wf #ld: -shared -melf32btsmipn32 -Teh-frame1.ld -#warning: fde encoding in.*prevents \.eh_frame_hdr table being created. +#warning: FDE encoding in.*prevents \.eh_frame_hdr table being created. Relocation section '\.rel\.dyn' .*: *Offset .* diff --git a/ld/testsuite/ld-mips-elf/eh-frame1-n64.d b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d index 2a7aa30..cdc43bc 100644 --- a/ld/testsuite/ld-mips-elf/eh-frame1-n64.d +++ b/ld/testsuite/ld-mips-elf/eh-frame1-n64.d @@ -4,7 +4,7 @@ #as: -march=from-abi -EB -64 --defsym alignment=3 --defsym fill=0x40 #readelf: --relocs -wf #ld: -shared -melf64btsmip -Teh-frame1.ld -#warning: fde encoding in.*prevents \.eh_frame_hdr table being created. +#warning: FDE encoding in.*prevents \.eh_frame_hdr table being created. Relocation section '\.rel\.dyn' .*: *Offset .* diff --git a/ld/testsuite/ld-mips-elf/eh-frame2-n32.d b/ld/testsuite/ld-mips-elf/eh-frame2-n32.d index cda4409..528be87 100644 --- a/ld/testsuite/ld-mips-elf/eh-frame2-n32.d +++ b/ld/testsuite/ld-mips-elf/eh-frame2-n32.d @@ -4,7 +4,7 @@ #as: -march=from-abi -EB -n32 --defsym alignment=2 --defsym fill=0 #readelf: --relocs -wf #ld: -shared -melf32btsmipn32 -Teh-frame1.ld -#warning: fde encoding in.*prevents \.eh_frame_hdr table being created. +#warning: FDE encoding in.*prevents \.eh_frame_hdr table being created. Relocation section '\.rel\.dyn' .*: *Offset .* diff --git a/ld/testsuite/ld-mips-elf/eh-frame2-n64.d b/ld/testsuite/ld-mips-elf/eh-frame2-n64.d index 05ba94f..add403e 100644 --- a/ld/testsuite/ld-mips-elf/eh-frame2-n64.d +++ b/ld/testsuite/ld-mips-elf/eh-frame2-n64.d @@ -4,7 +4,7 @@ #as: -march=from-abi -EB -64 --defsym alignment=3 --defsym fill=0 #readelf: --relocs -wf #ld: -shared -melf64btsmip -Teh-frame1.ld -#warning: fde encoding in.*prevents \.eh_frame_hdr table being created. +#warning: FDE encoding in.*prevents \.eh_frame_hdr table being created. Relocation section '\.rel\.dyn' .*: *Offset .* |