{
if (r_type >= (unsigned int) R_X86_64_standard)
{
+ /* xgettext:c-format */
_bfd_error_handler (_("%B: invalid relocation type %d"),
abfd, (int) r_type);
r_type = R_X86_64_NONE;
}
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: TLS transition from %s to %s against `%s' at 0x%lx "
"in section `%A' failed"),
abfd, sec, from->name, to->name, name,
pic = _("; recompile with -fPIC");
}
+ /* xgettext:c-format */
_bfd_error_handler (_("%B: relocation %s against %s%s`%s' can "
"not be used when making a shared object%s"),
input_bfd, howto->name, und, v, name, pic);
bfd_elf_record_link_assignment. */
if (h->def_regular
&& (h->root.type == bfd_link_hash_new
- || h->root.type == bfd_link_hash_undefined))
+ || h->root.type == bfd_link_hash_undefined
+ || ((h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && h->root.u.def.section == bfd_und_section_ptr)))
{
/* Skip since R_X86_64_32/R_X86_64_32S may overflow. */
if (require_reloc_pc32)
if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
{
+ /* xgettext:c-format */
_bfd_error_handler (_("%B: bad symbol index: %d"),
abfd, r_symndx);
goto error_return;
name = bfd_elf_sym_name (abfd, symtab_hdr, isym,
NULL);
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: relocation %s against symbol `%s' isn't "
"supported in x32 mode"), abfd,
x86_64_elf_howto_table[r_type].name, name);
goto error_return;
}
}
+ /* Fall through. */
case R_X86_64_32S:
case R_X86_64_PC64:
name = bfd_elf_sym_name (abfd, symtab_hdr,
isym, NULL);
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: '%s' accessed both as normal and thread local symbol"),
abfd, name);
bfd_set_error (bfd_error_bad_value);
case R_X86_64_32:
if (!ABI_64_P (abfd))
goto pointer;
+ /* Fall through. */
case R_X86_64_8:
case R_X86_64_16:
case R_X86_64_32S:
if ((info->warn_shared_textrel && bfd_link_pic (info))
|| info->error_textrel)
+ /* xgettext:c-format */
info->callbacks->einfo (_("%P: %B: warning: relocation against `%s' in readonly section `%A'\n"),
p->sec->owner, h->root.root.string,
p->sec);
info->flags |= DF_TEXTREL;
if ((info->warn_shared_textrel && bfd_link_pic (info))
|| info->error_textrel)
+ /* xgettext:c-format */
info->callbacks->einfo (_("%P: %B: warning: relocation in readonly section `%A'\n"),
p->sec->owner, p->sec);
}
if (r_type >= (int) R_X86_64_standard)
{
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: unrecognized relocation (0x%x) in section `%A'"),
input_bfd, input_section, r_type);
bfd_set_error (bfd_error_bad_value);
name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
NULL);
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: relocation %s against STT_GNU_IFUNC "
"symbol `%s' isn't supported"), input_bfd,
howto->name, name);
name = bfd_elf_sym_name (input_bfd, symtab_hdr,
sym, NULL);
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: relocation %s against STT_GNU_IFUNC "
"symbol `%s' has non-zero addend: %d"),
input_bfd, howto->name, name, rel->r_addend);
}
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: relocation R_X86_64_GOTOFF64 against undefined %s `%s' can not be used when making a shared object"),
input_bfd, v, h->root.root.string);
bfd_set_error (bfd_error_bad_value);
&& ELF_ST_VISIBILITY (h->other) == STV_PROTECTED)
{
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"),
input_bfd,
h->type == STT_FUNC ? "function" : "data",
symbols it's the symbol itself relative to GOT. */
if (h != NULL
/* See PLT32 handling. */
- && h->plt.offset != (bfd_vma) -1
+ && (h->plt.offset != (bfd_vma) -1
+ || eh->plt_got.offset != (bfd_vma) -1)
&& htab->elf.splt != NULL)
{
- if (htab->plt_bnd != NULL)
+ if (eh->plt_got.offset != (bfd_vma) -1)
+ {
+ /* Use the GOT PLT. */
+ resolved_plt = htab->plt_got;
+ plt_offset = eh->plt_got.offset;
+ }
+ else if (htab->plt_bnd != NULL)
{
resolved_plt = htab->plt_bnd;
plt_offset = eh->plt_bnd.offset;
sym, NULL);
if (addend < 0)
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: addend -0x%x in relocation %s against "
"symbol `%s' at 0x%lx in section `%A' is "
"out of range"),
(unsigned long) rel->r_offset);
else
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B: addend 0x%x in relocation %s against "
"symbol `%s' at 0x%lx in section `%A' is "
"out of range"),
rel->r_offset) != (bfd_vma) -1)
{
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
input_bfd,
input_section,
else
{
_bfd_error_handler
+ /* xgettext:c-format */
(_("%B(%A+0x%lx): reloc against `%s': error %d"),
input_bfd, input_section,
(long) rel->r_offset, name, (int) r);
/* Check PC-relative offset overflow in PLT entry. */
if ((plt_got_pcrel_offset + 0x80000000) > 0xffffffff)
+ /* xgettext:c-format */
info->callbacks->einfo (_("%F%B: PC-relative offset overflow in PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
check relocation index for overflow since branch displacement
will overflow first. */
if (plt0_offset > 0x80000000)
+ /* xgettext:c-format */
info->callbacks->einfo (_("%F%B: branch displacement overflow in PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
bfd_put_32 (output_bfd, - plt0_offset,
got_after_plt = got->output_section->vma > plt->output_section->vma;
if ((got_after_plt && got_pcrel_offset < 0)
|| (!got_after_plt && got_pcrel_offset > 0))
+ /* xgettext:c-format */
info->callbacks->einfo (_("%F%B: PC-relative offset overflow in GOT PLT entry for `%s'\n"),
output_bfd, h->root.root.string);
dyn.d_un.d_val = s->size;
break;
- case DT_RELASZ:
- /* The procedure linkage table relocs (DT_JMPREL) should
- not be included in the overall relocs (DT_RELA).
- Therefore, we override the DT_RELASZ entry here to
- make it not include the JMPREL relocs. Since the
- linker script arranges for .rela.plt to follow all
- other relocation sections, we don't have to worry
- about changing the DT_RELA entry. */
- if (htab->elf.srelplt != NULL)
- {
- s = htab->elf.srelplt->output_section;
- dyn.d_un.d_val -= s->size;
- }
- break;
-
case DT_TLSDESC_PLT:
s = htab->elf.splt;
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
#define elf_backend_plt_alignment 4
#define elf_backend_extern_protected_data 1
#define elf_backend_caches_rawsize 1
+#define elf_backend_dtrel_excludes_plt 1
#define elf_info_to_howto elf_x86_64_info_to_howto