/* IQ2000-specific support for 32-bit ELF.
- Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
return NULL;
}
+static reloc_howto_type *
+iq2000_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
+{
+ unsigned int i;
+
+ for (i = 0;
+ i < (sizeof (iq2000_elf_howto_table)
+ / sizeof (iq2000_elf_howto_table[0]));
+ i++)
+ if (iq2000_elf_howto_table[i].name != NULL
+ && strcasecmp (iq2000_elf_howto_table[i].name, r_name) == 0)
+ return &iq2000_elf_howto_table[i];
+
+ if (strcasecmp (iq2000_elf_vtinherit_howto.name, r_name) == 0)
+ return &iq2000_elf_vtinherit_howto;
+ if (strcasecmp (iq2000_elf_vtentry_howto.name, r_name) == 0)
+ return &iq2000_elf_vtentry_howto;
+
+ return NULL;
+}
\f
/* Perform a single relocation. By default we use the standard BFD
routines. */
Elf_Internal_Rela * rel;
Elf_Internal_Rela * relend;
- if (info->relocatable)
- return TRUE;
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
r_symndx = ELF32_R_SYM (rel->r_info);
- /* This is a final link. */
howto = iq2000_elf_howto_table + ELF32_R_TYPE (rel->r_info);
h = NULL;
sym = NULL;
name = h->root.root.string;
}
+ if (sec != NULL && elf_discarded_section (sec))
+ {
+ /* For relocs against symbols from removed linkonce sections,
+ or sections discarded by a linker script, we just want the
+ section contents zeroed. Avoid any special processing. */
+ _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset);
+ rel->r_info = 0;
+ rel->r_addend = 0;
+ continue;
+ }
+
+ if (info->relocatable)
+ continue;
+
switch (r_type)
{
case R_IQ2000_HI16:
#define elf_backend_can_gc_sections 1
#define bfd_elf32_bfd_reloc_type_lookup iq2000_reloc_type_lookup
+#define bfd_elf32_bfd_reloc_name_lookup iq2000_reloc_name_lookup
#define bfd_elf32_bfd_set_private_flags iq2000_elf_set_private_flags
#define bfd_elf32_bfd_copy_private_bfd_data iq2000_elf_copy_private_bfd_data
#define bfd_elf32_bfd_merge_private_bfd_data iq2000_elf_merge_private_bfd_data