/* MeP-specific support for 32-bit ELF.
- Copyright (C) 2001-2014 Free Software Foundation, Inc.
+ Copyright (C) 2001-2017 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
/* Private relocation functions. */
\f
#define MEPREL(type, size, bits, right, left, pcrel, overflow, mask) \
- {(unsigned)type, right, size, bits, pcrel, left, overflow, mep_reloc, #type, FALSE, 0, mask, 0 }
+ {(unsigned)type, right, size, bits, pcrel, left, overflow, bfd_elf_generic_reloc, #type, FALSE, 0, mask, 0 }
#define N complain_overflow_dont
#define S complain_overflow_signed
#define U complain_overflow_unsigned
-static bfd_reloc_status_type mep_reloc (bfd *, arelent *, struct bfd_symbol *,
- void *, asection *, bfd *, char **);
-
static reloc_howto_type mep_elf_howto_table [] =
{
/* type, size, bits, leftshift, rightshift, pcrel, OD/OS/OU, mask. */
- MEPREL (R_MEP_NONE, 0, 0, 0, 0, 0, N, 0),
+ MEPREL (R_MEP_NONE, 3, 0, 0, 0, 0, N, 0),
MEPREL (R_RELC, 0, 0, 0, 0, 0, N, 0),
/* MEPRELOC:HOWTO */
/* This section generated from bfd/mep-relocs.pl from include/elf/mep.h. */
#undef N
#undef S
#undef U
-
-static bfd_reloc_status_type
-mep_reloc
- (bfd * abfd ATTRIBUTE_UNUSED,
- arelent * reloc_entry ATTRIBUTE_UNUSED,
- struct bfd_symbol * symbol ATTRIBUTE_UNUSED,
- void * data ATTRIBUTE_UNUSED,
- asection * input_section ATTRIBUTE_UNUSED,
- bfd * output_bfd ATTRIBUTE_UNUSED,
- char ** error_message ATTRIBUTE_UNUSED)
-{
- return bfd_reloc_ok;
-}
-
\f
#define BFD_RELOC_MEP_NONE BFD_RELOC_NONE
default:
/* Pacify gcc -Wall. */
- (*_bfd_error_handler) (_("mep: no reloc for code %d"), code);
+ _bfd_error_handler (_("mep: no reloc for code %d"), code);
return NULL;
}
if (mep_elf_howto_table[type].type != type)
{
- (*_bfd_error_handler) (_("MeP: howto %d has type %d"),
- type, mep_elf_howto_table[type].type);
+ /* xgettext:c-format */
+ _bfd_error_handler (_("MeP: howto %d has type %d"),
+ type, mep_elf_howto_table[type].type);
abort ();
}
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
+ if (r_type >= R_MEP_max)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%B: invalid MEP reloc number: %d"), abfd, r_type);
+ r_type = 0;
+ }
cache_ptr->howto = & mep_elf_howto_table [r_type];
}
\f
RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
rel, 1, relend, howto, 0, contents);
- if (info->relocatable)
+ if (bfd_link_relocatable (info))
continue;
if (r_type == R_RELC)
switch (r)
{
case bfd_reloc_overflow:
- r = info->callbacks->reloc_overflow
+ (*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:
- r = info->callbacks->undefined_symbol
+ (*info->callbacks->undefined_symbol)
(info, name, input_bfd, input_section, rel->r_offset, TRUE);
break;
}
if (msg)
- r = info->callbacks->warning
- (info, msg, name, input_bfd, input_section, rel->r_offset);
-
- if (! r)
- return FALSE;
+ (*info->callbacks->warning) (info, msg, name, input_bfd,
+ input_section, rel->r_offset);
}
}
object file when linking. */
static bfd_boolean
-mep_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
+mep_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
{
+ bfd *obfd = info->output_bfd;
static bfd *last_ibfd = 0;
flagword old_flags, new_flags;
flagword old_partial, new_partial;
/* Check if we have the same endianness. */
- if (_bfd_generic_verify_endian_match (ibfd, obfd) == FALSE)
+ if (!_bfd_generic_verify_endian_match (ibfd, info))
return FALSE;
new_flags = elf_elfheader (ibfd)->e_flags;
old_flags = (old_flags & ~EF_MEP_CPU_MASK) | new_partial;
else
{
+ /* xgettext:c-format */
_bfd_error_handler (_("%B and %B are for different cores"), last_ibfd, ibfd);
bfd_set_error (bfd_error_invalid_target);
return FALSE;
old_flags = (old_flags & ~EF_MEP_INDEX_MASK) | new_partial;
else
{
+ /* xgettext:c-format */
_bfd_error_handler (_("%B and %B are for different configurations"), last_ibfd, ibfd);
bfd_set_error (bfd_error_invalid_target);
return FALSE;