OSDN Git Service

bfd/
authorRichard Sandiford <rsandifo@nildram.co.uk>
Wed, 9 Jan 2008 09:36:11 +0000 (09:36 +0000)
committerRichard Sandiford <rsandifo@nildram.co.uk>
Wed, 9 Jan 2008 09:36:11 +0000 (09:36 +0000)
commitd128e9d22c161df3d1a7b8c59e7b749799a536b2
treefc8b7ef98856c82574a66f4cb6702fee40f8f6b4
parent34555c772c8bad8ef2f729b57a375f224cf0a45c
bfd/
PR ld/5526
* elf-bfd.h (eh_cie_fde): Add u.cie.u.full_cie and u.cie.merged
fields.  Rename u.cie.u.merged to u.cie.u.merged_with.
(eh_frame_sec_info): Add a cies field.
(eh_frame_hdr_info): Add a merge_cies field.
* elf-eh-frame.c (cie): Add a reloc_index member to the personality
union.
(_bfd_elf_begin_eh_frame_parsing): Set hdr_info->merge_cies instead
of hdr_info->cies.
(_bfd_elf_parse_eh_frame): Remove tmp_cie.  Ccreate an array of
cie structures in all cases and use it instead of extended_cies.
If merging, store the cie array in sec_info->cies and point each
CIE's eh_fde_cie at the associated element.  Do not try to
calculate the value of the personality routine here; record the
offset of the relocation instead.  Do not merge CIEs here.
(_bfd_elf_end_eh_frame_parsing): Do not free hdr_info->cies here...
(_bfd_elf_discard_section_eh_frame_hdr): ...do it here instead.
(_bfd_elf_gc_mark_fdes): Mark the original (unmerged) CIE.
(find_merged_cie): New function.
(_bfd_elf_gc_mark_fdes): Use it.  Free sec_info->cies.

ld/testsuite/
PR ld/5526
* ld-elf/eh6.s, ld-elf/eh6.d: New test.
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf-eh-frame.c