summaryrefslogtreecommitdiff
path: root/bfd/elf-eh-frame.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2009-02-01 12:05:25 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2009-02-01 12:05:25 +0000
commita27e45926cd5bc4e8b2760a1de31f5b6cad54c64 (patch)
tree35e16e2600bee4b1fb86a439c1ed162155848aa5 /bfd/elf-eh-frame.c
parentbdaa5c069b59e129edec5fb96e8c9ca110d89b72 (diff)
downloadbinutils-redhat-a27e45926cd5bc4e8b2760a1de31f5b6cad54c64.tar.gz
* elf-eh-frame.c (REQUIRE_CLEARED_RELOCS) Remove. (_bfd_elf_parse_eh_frame): Do not check relocations for removed FDEs. ld/testsuite/ * ld-elf/eh-group2.s: New `.cfi_lsda' referencing `.gcc_except_table'. * ld-elf/eh-group.exp: New test and conditional defininiton of `ELF64'.
Diffstat (limited to 'bfd/elf-eh-frame.c')
-rw-r--r--bfd/elf-eh-frame.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
index 579a6b8967..3567c24068 100644
--- a/bfd/elf-eh-frame.c
+++ b/bfd/elf-eh-frame.c
@@ -549,16 +549,6 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
< (bfd_size_type) ((buf) - ehbuf))) \
cookie->rel++
-#define REQUIRE_CLEARED_RELOCS(buf) \
- while (cookie->rel < cookie->relend \
- && (cookie->rel->r_offset \
- < (bfd_size_type) ((buf) - ehbuf))) \
- { \
- REQUIRE (cookie->rel->r_info == 0); \
- REQUIRE (cookie->rel->r_addend == 0); \
- cookie->rel++; \
- }
-
#define GET_RELOC(buf) \
((cookie->rel < cookie->relend \
&& (cookie->rel->r_offset \
@@ -817,16 +807,16 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
buf = last_fde + 4 + hdr_length;
- /* Cleared FDE? The instructions will not be cleared but verify all
- the relocation entries for them are cleared. */
- if (rsec == NULL)
- {
- REQUIRE_CLEARED_RELOCS (buf);
- }
- else
- {
- SKIP_RELOCS (buf);
- }
+ /* For NULL RSEC (cleared FDE belonging to a discarded section)
+ the relocations are commonly cleared. We do not sanity check if
+ all these relocations are cleared as (1) relocations to
+ .gcc_except_table will remain uncleared (they will get dropped
+ with the drop of this unused FDE) and (2) BFD already safely drops
+ relocations of any type to .eh_frame by
+ elf_section_ignore_discarded_relocs.
+ TODO: The .gcc_except_table entries should be also filtered as
+ .eh_frame entries; or GCC could rather use COMDAT for them. */
+ SKIP_RELOCS (buf);
}
/* Try to interpret the CFA instructions and find the first