/* V850-specific support for 32-bit ELF
- Copyright (C) 1996-2015 Free Software Foundation, Inc.
+ Copyright (C) 1996-2016 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
int other = 0;
const char *common = NULL;
- if (info->relocatable)
+ if (bfd_link_relocatable (info))
return TRUE;
#ifdef DEBUG
RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
rel, 1, relend, howto, 0, contents);
- if (info->relocatable)
+ if (bfd_link_relocatable (info))
continue;
/* FIXME: We should use the addend, but the COFF relocations don't. */
switch ((int) r)
{
case bfd_reloc_overflow:
- if (! ((*info->callbacks->reloc_overflow)
- (info, (h ? &h->root : NULL), name, howto->name,
- (bfd_vma) 0, input_bfd, input_section,
- rel->r_offset)))
- return FALSE;
+ (*info->callbacks->reloc_overflow)
+ (info, (h ? &h->root : NULL), name, howto->name,
+ (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
break;
case bfd_reloc_undefined:
- if (! ((*info->callbacks->undefined_symbol)
- (info, name, input_bfd, input_section,
- rel->r_offset, TRUE)))
- return FALSE;
+ (*info->callbacks->undefined_symbol)
+ (info, name, input_bfd, input_section, rel->r_offset, TRUE);
break;
case bfd_reloc_outofrange:
/* fall through */
common_error:
- if (!((*info->callbacks->warning)
- (info, msg, name, input_bfd, input_section,
- rel->r_offset)))
- return FALSE;
+ (*info->callbacks->warning) (info, msg, name, input_bfd,
+ input_section, rel->r_offset);
break;
}
}
static asection *
v850_elf_make_note_section (bfd * abfd)
-{
+{
asection *s;
bfd_byte *data;
flagword flags;
return TRUE;
}
-/* Copy backend specific data from one object module to another. */
+/* Copy a v850 note section from one object module to another. */
-static bfd_boolean
-v850_elf_copy_private_bfd_data (bfd * ibfd, bfd * obfd)
+static void
+v850_elf_copy_notes (bfd *ibfd, bfd *obfd)
{
asection * onotes;
asection * inotes;
skip the merge. The normal input to output section
copying will take care of everythng for us. */
if ((onotes = bfd_get_section_by_name (obfd, V850_NOTE_SECNAME)) == NULL)
- return TRUE;
+ return;
- if ((inotes = bfd_get_section_by_name (ibfd, V850_NOTE_SECNAME)) != NULL)
+ if ((inotes = bfd_get_section_by_name (ibfd, V850_NOTE_SECNAME)) == NULL)
+ return;
+
+ if (bfd_section_size (ibfd, inotes) == bfd_section_size (obfd, onotes))
{
bfd_byte * icont;
bfd_byte * ocont;
- BFD_ASSERT (bfd_section_size (ibfd, inotes) == bfd_section_size (obfd, onotes));
-
if ((icont = elf_section_data (inotes)->this_hdr.contents) == NULL)
BFD_ASSERT (bfd_malloc_and_get_section (ibfd, inotes, & icont));
/* Copy/overwrite notes from the input to the output. */
memcpy (ocont, icont, bfd_section_size (obfd, onotes));
}
+}
- return TRUE;
+/* Copy backend specific data from one object module to another. */
+
+static bfd_boolean
+v850_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
+{
+ v850_elf_copy_notes (ibfd, obfd);
+ return _bfd_elf_copy_private_bfd_data (ibfd, obfd);
}
#define bfd_elf32_bfd_copy_private_bfd_data v850_elf_copy_private_bfd_data
-static bfd_boolean
+static bfd_boolean
v850_elf_merge_notes (bfd * ibfd, bfd *obfd)
{
asection * onotes;
if (ival == 0 || ival == oval)
continue;
-
+
if (oval == 0)
{
bfd_put_32 (obfd, ival, odata);
}
fputc ('\n', file);
break;
-
+
case V850_NOTE_DATA_SIZE:
fprintf (file, _(" size of doubles: "));
switch (value)
}
fputc ('\n', file);
break;
-
+
case V850_NOTE_FPU_INFO:
fprintf (file, _(" FPU support required: "));
switch (value)
}
fputc ('\n', file);
break;
-
+
case V850_NOTE_SIMD_INFO:
fprintf (file, _("SIMD use: "));
switch (value)
}
fputc ('\n', file);
break;
-
+
case V850_NOTE_CACHE_INFO:
fprintf (file, _("CACHE use: "));
switch (value)
}
fputc ('\n', file);
break;
-
+
case V850_NOTE_MMU_INFO:
fprintf (file, _("MMU use: "));
switch (value)
}
fputc ('\n', file);
break;
-
+
default:
BFD_ASSERT (0);
}
Elf_Internal_Rela *irel;
Elf_Internal_Rela *irelend;
struct elf_link_hash_entry *sym_hash;
- Elf_Internal_Shdr *shndx_hdr;
Elf_External_Sym_Shndx *shndx;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
/* Adjust all the relocs. */
irel = elf_section_data (sec)->relocs;
irelend = irel + sec->reloc_count;
- shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr;
- shndx = (Elf_External_Sym_Shndx *) shndx_hdr->contents;
+ if (elf_symtab_shndx_list (abfd))
+ {
+ Elf_Internal_Shdr *shndx_hdr;
+
+ shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr;
+ shndx = (Elf_External_Sym_Shndx *) shndx_hdr->contents;
+ }
+ else
+ {
+ shndx = NULL;
+ }
for (; irel < irelend; irel++)
{
*again = FALSE;
- if (link_info->relocatable
+ if (bfd_link_relocatable (link_info)
|| (sec->flags & SEC_RELOC) == 0
|| sec->reloc_count == 0)
return TRUE;