diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-11-21 11:25:17 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2006-11-21 11:25:17 +0000 |
commit | bce613b9bfac3b56f4f9742776db11aeec875300 (patch) | |
tree | 490c241e7cc00ebc00c8c9e29fcc1babb3900ab0 /ld | |
parent | caac47b8c3968932a8090e94f979f9bb7eb70f9d (diff) | |
download | fsf-binutils-gdb-bce613b9bfac3b56f4f9742776db11aeec875300.zip fsf-binutils-gdb-bce613b9bfac3b56f4f9742776db11aeec875300.tar.gz fsf-binutils-gdb-bce613b9bfac3b56f4f9742776db11aeec875300.tar.bz2 |
* elf-eh-frame.c (struct cie): New type.
(cie_compare): Removed.
(cie_eq, cie_hash, cie_compute_hash): New functions.
(_bfd_elf_discard_section_eh_frame): Rewrite not to rely on FDEs
pointing only to last CIE and allow merging of any duplicate CIEs,
not just duplicate consecutive CIEs.
(_bfd_elf_discard_section_eh_frame_hdr): Delete cies hash table.
* elf-bfd.h (struct cie_header, struct cie): Removed.
(struct eh_frame_sec_info): Remove alloced field.
(struct eh_frame_hdr_info): Remove last_cie, last_cie_sec
and last_cie_inf fields. Add cies field.
* ld-elf/eh5.d: New test.
* ld-elf/eh5.s: New file.
* ld-elf/eh5a.s: New file.
* ld-elf/eh5b.s: New file.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh5.d | 161 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh5.s | 29 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh5a.s | 27 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/eh5b.s | 29 |
5 files changed, 253 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index ed48677..9b0a20f 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2006-11-21 Jakub Jelinek <jakub@redhat.com> + + * ld-elf/eh5.d: New test. + * ld-elf/eh5.s: New file. + * ld-elf/eh5a.s: New file. + * ld-elf/eh5b.s: New file. + 2006-11-13 Daniel Jacobowitz <dan@codesourcery.com> * ld-arm/arm-dyn.ld, ld-arm/arm-lib.ld: Remove .stack. diff --git a/ld/testsuite/ld-elf/eh5.d b/ld/testsuite/ld-elf/eh5.d new file mode 100644 index 0000000..c12562a --- /dev/null +++ b/ld/testsuite/ld-elf/eh5.d @@ -0,0 +1,161 @@ +#source: eh5.s +#source: eh5a.s +#source: eh5b.s +#ld: +#readelf: -wf +#target: x86_64-*-* i?86-*-* + +The section .eh_frame contains: + +00000000 0000001[04] 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 1b + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +#... +0000001[48] 00000014 0000001[8c] FDE cie=00000000 pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000000(2c|30) 00000014 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 03 .. .. .. .. 1b + + DW_CFA_nop + +0000004[48] 00000014 0000001c FDE cie=000000(2c|30) pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000000(5c|60) 00000014 0000006[04] FDE cie=00000000 pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +0000007[48] 0000001[8c] 00000000 CIE + Version: 1 + Augmentation: "zPLR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 03 .. .. .. .. 0c 1b + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +#... +0000009[08] 0000001c 0000002[04] FDE cie=0000007[48] pc=.* + Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef) + + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000000b[08] 0000001[04] 00000000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 1b + + DW_CFA_def_cfa: r0 ofs 16 +#... +000000(c4|d0) 0000001[04] 0000001[8c] FDE cie=000000b[08] pc=.* + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +#... +000000[de]8 00000014 00000000 CIE + Version: 1 + Augmentation: "zPR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 03 .. .. .. .. 1b + + DW_CFA_nop + +00000(0f|10)0 00000014 0000001c FDE cie=000000[de]8 pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001[01]8 0000001[04] 000000(5c|64) FDE cie=000000b[08] pc=.* + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +#... +000001(1c|30) 0000001[8c] 00000000 CIE + Version: 1 + Augmentation: "zPLR" + Code alignment factor: 1 + Data alignment factor: .* + Return address column: .* + Augmentation data: 03 .. .. .. .. 0c 1b + + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop +#... +000001(38|50) 0000001c 0000002[04] FDE cie=000001(1c|30) pc=.* + Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef) + + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001(58|70) 00000014 000001(5c|74) FDE cie=00000000 pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001(70|88) 00000014 000001(48|5c) FDE cie=000000(2c|30) pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001(88|a0) 00000014 000001(8c|a4) FDE cie=00000000 pc=.* + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + +000001(a0|b8) 0000001c 000001(30|44) FDE cie=0000007[48] pc=.* + Augmentation data: (ef be ad de 00 00 00 00|00 00 00 00 de ad be ef) + + DW_CFA_advance_loc: 4 to .* + DW_CFA_def_cfa: r0 ofs 16 + DW_CFA_nop + DW_CFA_nop + DW_CFA_nop + diff --git a/ld/testsuite/ld-elf/eh5.s b/ld/testsuite/ld-elf/eh5.s new file mode 100644 index 0000000..6af48c2 --- /dev/null +++ b/ld/testsuite/ld-elf/eh5.s @@ -0,0 +1,29 @@ + .text + .cfi_startproc simple + .long 0 + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v0 + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .cfi_startproc simple + .long 0 + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v0 + .cfi_lsda 12, 0xdeadbeef + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .globl my_personality_v0 +my_personality_v0: + .long 0 diff --git a/ld/testsuite/ld-elf/eh5a.s b/ld/testsuite/ld-elf/eh5a.s new file mode 100644 index 0000000..a74b2cc --- /dev/null +++ b/ld/testsuite/ld-elf/eh5a.s @@ -0,0 +1,27 @@ + .text + .cfi_startproc simple + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v1 + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .cfi_startproc simple + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v1 + .cfi_lsda 12, 0xdeadbeef + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .globl my_personality_v1 +my_personality_v1: + .long 0 diff --git a/ld/testsuite/ld-elf/eh5b.s b/ld/testsuite/ld-elf/eh5b.s new file mode 100644 index 0000000..3e5e010 --- /dev/null +++ b/ld/testsuite/ld-elf/eh5b.s @@ -0,0 +1,29 @@ + .text + .cfi_startproc simple + .long 0 + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v0 + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .cfi_startproc simple + .long 0 + .cfi_def_cfa 0, 16 + .long 0 + .cfi_endproc + + .cfi_startproc simple + .cfi_personality 3, my_personality_v0 + .cfi_lsda 12, 0xdeadbeef + .long 0 + .cfi_def_cfa 0, 16 + .cfi_endproc + + .globl _start +_start: + .long 0 |