diff options
Diffstat (limited to 'bfd/elf-bfd.h')
-rw-r--r-- | bfd/elf-bfd.h | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 2bd855a..b791623 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -605,8 +605,7 @@ enum elf_target_os { is_normal, is_solaris, /* Solaris. */ - is_vxworks, /* VxWorks. */ - is_nacl /* Native Client. */ + is_vxworks /* VxWorks. */ }; /* Used by bfd_sym_from_r_symndx to cache a small number of local @@ -3273,42 +3272,39 @@ extern asection _bfd_elf_large_com_section; link, we remove such relocations. Otherwise, we just want the section contents zeroed and avoid any special processing. */ #define RELOC_AGAINST_DISCARDED_SECTION(info, input_bfd, input_section, \ - rel, count, relend, \ + rel, count, relend, rnone, \ howto, index, contents) \ { \ - int i_; \ _bfd_clear_contents (howto, input_bfd, input_section, \ contents, rel[index].r_offset); \ \ + /* For ld -r, remove relocations in debug and sframe sections \ + against symbols defined in discarded sections. Not done for \ + others. In particular the .eh_frame editing code expects \ + such relocs to be present. */ \ if (bfd_link_relocatable (info) \ - && (input_section->flags & SEC_DEBUGGING)) \ + && ((input_section->flags & SEC_DEBUGGING) != 0 \ + || elf_section_type (input_section) == SHT_GNU_SFRAME)) \ { \ - /* Only remove relocations in debug sections since other \ - sections may require relocations. */ \ - Elf_Internal_Shdr *rel_hdr; \ + Elf_Internal_Shdr *rel_hdr \ + = _bfd_elf_single_rel_hdr (input_section->output_section); \ \ - rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \ + rel_hdr->sh_size -= rel_hdr->sh_entsize; \ + rel_hdr = _bfd_elf_single_rel_hdr (input_section); \ + rel_hdr->sh_size -= rel_hdr->sh_entsize; \ \ - /* Avoid empty output section. */ \ - if (rel_hdr->sh_size > rel_hdr->sh_entsize) \ - { \ - rel_hdr->sh_size -= rel_hdr->sh_entsize; \ - rel_hdr = _bfd_elf_single_rel_hdr (input_section); \ - rel_hdr->sh_size -= rel_hdr->sh_entsize; \ + memmove (rel, rel + count, \ + (relend - rel - count) * sizeof (*rel)); \ \ - memmove (rel, rel + count, \ - (relend - rel - count) * sizeof (*rel)); \ - \ - input_section->reloc_count -= count; \ - relend -= count; \ - rel--; \ - continue; \ - } \ + input_section->reloc_count -= count; \ + relend -= count; \ + rel--; \ + continue; \ } \ \ - for (i_ = 0; i_ < count; i_++) \ + for (int i_ = 0; i_ < count; i_++) \ { \ - rel[i_].r_info = 0; \ + rel[i_].r_info = rnone; \ rel[i_].r_addend = 0; \ } \ rel += count - 1; \ |