/* Renesas / SuperH SH specific support for 32-bit ELF
- Copyright (C) 1996-2016 Free Software Foundation, Inc.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
Contributed by Ian Lance Taylor, Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
if (laddr >= sec->size)
{
/* xgettext:c-format */
- _bfd_error_handler (_("%B: 0x%lx: warning: bad R_SH_USES offset"),
- abfd, (unsigned long) irel->r_offset);
+ _bfd_error_handler (_("%B: %#Lx: warning: bad R_SH_USES offset"),
+ abfd, irel->r_offset);
continue;
}
insn = bfd_get_16 (abfd, contents + laddr);
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x"),
- abfd, (unsigned long) irel->r_offset, insn);
+ (_("%B: %#Lx: warning: R_SH_USES points to unrecognized insn 0x%x"),
+ abfd, irel->r_offset, insn);
continue;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: warning: bad R_SH_USES load offset"),
- abfd, (unsigned long) irel->r_offset);
+ (_("%B: %#Lx: warning: bad R_SH_USES load offset"),
+ abfd, irel->r_offset);
continue;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: warning: could not find expected reloc"),
- abfd, (unsigned long) paddr);
+ (_("%B: %#Lx: warning: could not find expected reloc"),
+ abfd, paddr);
continue;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: warning: symbol in unexpected section"),
- abfd, (unsigned long) paddr);
+ (_("%B: %#Lx: warning: symbol in unexpected section"),
+ abfd, paddr);
continue;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: warning: could not find expected COUNT reloc"),
- abfd, (unsigned long) paddr);
+ (_("%B: %#Lx: warning: could not find expected COUNT reloc"),
+ abfd, paddr);
continue;
}
if (irelcount->r_addend == 0)
{
/* xgettext:c-format */
- _bfd_error_handler (_("%B: 0x%lx: warning: bad count"),
- abfd, (unsigned long) paddr);
+ _bfd_error_handler (_("%B: %#Lx: warning: bad count"),
+ abfd, paddr);
continue;
}
contents = elf_section_data (sec)->this_hdr.contents;
- /* The deletion must stop at the next ALIGN reloc for an aligment
+ /* The deletion must stop at the next ALIGN reloc for an alignment
power larger than the number of bytes we are deleting. */
irelalign = NULL;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: reloc overflow while relaxing"),
- abfd, (unsigned long) irel->r_offset);
+ (_("%B: %#Lx: fatal: reloc overflow while relaxing"),
+ abfd, irel->r_offset);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: reloc overflow while relaxing"),
- abfd, (unsigned long) irel->r_offset);
+ (_("%B: %#Lx: fatal: reloc overflow while relaxing"),
+ abfd, irel->r_offset);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (eh->dyn_relocs != NULL
&& h->root.type == bfd_link_hash_undefweak)
{
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
+ || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
eh->dyn_relocs = NULL;
/* Make sure undefined weak symbols are output as a dynamic
info->flags |= DF_TEXTREL;
+ info->callbacks->minfo (_("%B: dynamic relocation in read-only section `%A'\n"),
+ p->sec->owner, p->sec);
+
/* Not an error, just cut short the traversal. */
return FALSE;
}
srel = elf_section_data (p->sec)->sreloc;
srel->size += p->count * sizeof (Elf32_External_Rela);
if ((p->sec->output_section->flags & SEC_READONLY) != 0)
- info->flags |= DF_TEXTREL;
+ {
+ info->flags |= DF_TEXTREL;
+ info->callbacks->minfo (_("%B: dynamic relocation in read-only section `%A'\n"),
+ p->sec->owner, p->sec);
+ }
/* If we need relocations, we do not need fixups. */
if (htab->fdpic_p && !bfd_link_pic (info))
bfd_vma off;
enum got_type got_type;
const char *symname = NULL;
+ bfd_boolean resolved_to_zero;
r_symndx = ELF32_R_SYM (rel->r_info);
if (! howto->partial_inplace)
addend = rel->r_addend;
+ resolved_to_zero = FALSE;
h = NULL;
sym = NULL;
sec = NULL;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B(%A+0x%lx): %s relocation against SEC_MERGE section"),
+ (_("%B(%A+%#Lx): %s relocation against SEC_MERGE section"),
input_bfd, input_section,
- (long) rel->r_offset, howto->name);
+ rel->r_offset, howto->name);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
+ (_("%B(%A+%#Lx): unresolvable %s relocation against symbol `%s'"),
input_bfd,
input_section,
- (long) rel->r_offset,
+ rel->r_offset,
howto->name,
h->root.root.string);
return FALSE;
}
}
else if (h->root.type == bfd_link_hash_undefweak)
- ;
+ resolved_to_zero = UNDEFWEAK_NO_DYNAMIC_RELOC (info, h);
else if (info->unresolved_syms_in_objects == RM_IGNORE
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: unaligned branch target for relax-support relocation"),
+ (_("%B: %#Lx: fatal: unaligned branch target for relax-support relocation"),
input_section->owner,
- (unsigned long) rel->r_offset);
+ rel->r_offset);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: unaligned %s relocation 0x%lx"),
+ (_("%B: %#Lx: fatal: unaligned %s relocation %#Lx"),
input_section->owner,
- (unsigned long) rel->r_offset, howto->name,
- (unsigned long) relocation);
+ rel->r_offset, howto->name,
+ relocation);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: unaligned %s relocation 0x%lx"),
+ (_("%B: %#Lx: fatal: unaligned %s relocation %#Lx"),
input_section->owner,
- (unsigned long) rel->r_offset, howto->name,
- (unsigned long) relocation);
+ rel->r_offset, howto->name,
+ relocation);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32"),
+ (_("%B: %#Lx: fatal: R_SH_PSHA relocation %Ld not in range -32..32"),
input_section->owner,
- (unsigned long) rel->r_offset,
- (unsigned long) relocation);
+ rel->r_offset,
+ relocation);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32"),
+ (_("%B: %#Lx: fatal: R_SH_PSHL relocation %Ld not in range -32..32"),
input_section->owner,
- (unsigned long) rel->r_offset,
- (unsigned long) relocation);
+ rel->r_offset,
+ relocation);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
#endif
if (bfd_link_pic (info)
&& (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ && !resolved_to_zero)
|| h->root.type != bfd_link_hash_undefweak)
&& r_symndx != STN_UNDEF
&& (input_section->flags & SEC_ALLOC) != 0
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section"),
+ (_("%B(%A+%#Lx): cannot emit fixup to `%s' in read-only section"),
input_bfd,
input_section,
- (long) rel->r_offset,
+ rel->r_offset,
symname);
return FALSE;
}
h)
|| (bfd_link_pic (info)
&& SYMBOL_REFERENCES_LOCAL (info, h))
- || (ELF_ST_VISIBILITY (h->other)
+ || ((ELF_ST_VISIBILITY (h->other)
+ || resolved_to_zero)
&& h->root.type == bfd_link_hash_undefweak))
{
/* This is actually a static link, or it is a
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B(%A+0x%lx): cannot emit fixup to `%s' in read-only section"),
+ (_("%B(%A+%#Lx): cannot emit fixup to `%s' in read-only section"),
input_bfd,
input_section,
- (long) rel->r_offset,
+ rel->r_offset,
symname);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B(%A+0x%lx): %s relocation against external symbol \"%s\""),
- input_bfd, input_section, (long) rel->r_offset, howto->name,
+ (_("%B(%A+%#Lx): %s relocation against external symbol \"%s\""),
+ input_bfd, input_section, rel->r_offset, howto->name,
h->root.root.string);
return FALSE;
}
/* If called to transfer flags for a weakdef during processing
of elf_adjust_dynamic_symbol, don't copy non_got_ref.
We clear it ourselves for ELIMINATE_COPY_RELOCS. */
- dir->ref_dynamic |= ind->ref_dynamic;
+ if (dir->versioned != versioned_hidden)
+ dir->ref_dynamic |= ind->ref_dynamic;
dir->ref_regular |= ind->ref_regular;
dir->ref_regular_nonweak |= ind->ref_regular_nonweak;
dir->needs_plt |= ind->needs_plt;
/* PR15323, ref flags aren't set for references in the same
object. */
- h->root.non_ir_ref = 1;
+ h->root.non_ir_ref_regular = 1;
}
r_type = sh_elf_optimized_tls_reloc (info, r_type, h == NULL);
{
flagword flags = elf_elfheader (abfd)->e_flags & EF_SH_MACH_MASK;
- if (flags >= sizeof(sh_ef_bfd_table))
+ if (flags >= ARRAY_SIZE (sh_ef_bfd_table))
return FALSE;
if (sh_ef_bfd_table[flags] == 0)
#define elf_backend_got_header_size 12
#define elf_backend_dtrel_excludes_plt 1
+#define elf_backend_linux_prpsinfo32_ugid16 TRUE
+
#if !defined INCLUDE_SHMEDIA && !defined SH_TARGET_ALREADY_DEFINED
#include "elf32-target.h"