From: Jakub Jelinek Date: Mon, 22 Apr 2002 21:37:48 +0000 (+0000) Subject: * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't build X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=af40ce3c79bb7be880e2a25706f74675f92b79ff;p=binutils-gdb.git * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't build search table if some FDE is DW_EH_PE_aligned encoded either. (_bfd_elf_write_section_eh_frame): Handle terminating FDE specially. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 78eec86852b..bc5543a26e1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2002-04-22 Jakub Jelinek + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't build + search table if some FDE is DW_EH_PE_aligned encoded either. + (_bfd_elf_write_section_eh_frame): Handle terminating FDE specially. + 2002-04-22 Richard Smith Jakub Jelinek diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 83ccfe9c54e..6a23edb2c42 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -636,8 +636,9 @@ _bfd_elf_discard_section_eh_frame (abfd, info, sec, ehdrsec, else { if (info->shared - && (cie.fde_encoding & 0xf0) == DW_EH_PE_absptr - && cie.make_relative == 0) + && (((cie.fde_encoding & 0xf0) == DW_EH_PE_absptr + && cie.make_relative == 0) + || (cie.fde_encoding & 0xf0) == DW_EH_PE_aligned)) { /* If shared library uses absolute pointers which we cannot turn into PC relative, @@ -1026,7 +1027,7 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents) } } } - else + else if (sec_info->entry[i].size > 4) { /* FDE */ bfd_vma value = 0, address; @@ -1099,6 +1100,9 @@ _bfd_elf_write_section_eh_frame (abfd, sec, ehdrsec, contents) } } } + else + /* Terminating FDE must be at the end of .eh_frame section only. */ + BFD_ASSERT (i == sec_info->count - 1); BFD_ASSERT (p == contents + sec_info->entry[i].new_offset); memmove (p, contents + sec_info->entry[i].offset,