- Copyright 2002, 2003, 2004, 2005, 2007
- Free Software Foundation, Inc.
+ Copyright (C) 2002-2020 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
(at your option) any later version.
This program is distributed in the hope that it will be useful,
(at your option) any later version.
This program is distributed in the hope that it will be useful,
#define USE_REL 1
#define bfd_elf32_bfd_reloc_type_lookup elf32_dlx_reloc_type_lookup
#define bfd_elf32_bfd_reloc_name_lookup elf32_dlx_reloc_name_lookup
#define USE_REL 1
#define bfd_elf32_bfd_reloc_type_lookup elf32_dlx_reloc_type_lookup
#define bfd_elf32_bfd_reloc_name_lookup elf32_dlx_reloc_name_lookup
-#define elf_info_to_howto elf32_dlx_info_to_howto
-#define elf_info_to_howto_rel elf32_dlx_info_to_howto_rel
-#define elf_backend_check_relocs elf32_dlx_check_relocs
+#define elf_info_to_howto elf32_dlx_info_to_howto
+#define elf_info_to_howto_rel elf32_dlx_info_to_howto_rel
+#define elf_backend_check_relocs elf32_dlx_check_relocs
/* The gas default behavior is not to preform the %hi modifier so that the
GNU assembler can have the lower 16 bits offset placed in the insn, BUT
/* The gas default behavior is not to preform the %hi modifier so that the
GNU assembler can have the lower 16 bits offset placed in the insn, BUT
fixup like mips gld did. */
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
fixup like mips gld did. */
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
return bfd_reloc_outofrange;
bfd_put_16 (abfd, (short)((relocation >> 16) & 0xFFFF),
return bfd_reloc_outofrange;
bfd_put_16 (abfd, (short)((relocation >> 16) & 0xFFFF),
char **error_message ATTRIBUTE_UNUSED)
{
unsigned long insn, vallo, allignment;
char **error_message ATTRIBUTE_UNUSED)
{
unsigned long insn, vallo, allignment;
/* HACK: I think this first condition is necessary when producing
relocatable output. After the end of HACK, the code is identical
/* HACK: I think this first condition is necessary when producing
relocatable output. After the end of HACK, the code is identical
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
/* Can not support a long jump to sections other then .text. */
if (strcmp (input_section->name, symbol->section->output_section->name) != 0)
{
/* Can not support a long jump to sections other then .text. */
if (strcmp (input_section->name, symbol->section->output_section->name) != 0)
{
- fprintf (stderr,
- "BFD Link Error: branch (PC rel16) to section (%s) not supported\n",
- symbol->section->output_section->name);
+ _bfd_error_handler
+ (_("branch (PC rel16) to section (%s) not supported"),
+ symbol->section->output_section->name);
/* vallo points to the vma of next instruction. */
vallo += (((unsigned long)(input_section->output_section->vma +
/* vallo points to the vma of next instruction. */
vallo += (((unsigned long)(input_section->output_section->vma +
/* val is the displacement (PC relative to next instruction). */
val = (symbol->section->output_offset +
/* val is the displacement (PC relative to next instruction). */
val = (symbol->section->output_offset +
char **error_message ATTRIBUTE_UNUSED)
{
unsigned long insn, vallo, allignment;
char **error_message ATTRIBUTE_UNUSED)
{
unsigned long insn, vallo, allignment;
/* HACK: I think this first condition is necessary when producing
relocatable output. After the end of HACK, the code is identical
/* HACK: I think this first condition is necessary when producing
relocatable output. After the end of HACK, the code is identical
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
if (skip_dlx_elf_hi16_reloc)
return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
/* Can not support a long jump to sections other then .text */
if (strcmp (input_section->name, symbol->section->output_section->name) != 0)
{
/* Can not support a long jump to sections other then .text */
if (strcmp (input_section->name, symbol->section->output_section->name) != 0)
{
- fprintf (stderr,
- "BFD Link Error: jump (PC rel26) to section (%s) not supported\n",
- symbol->section->output_section->name);
+ _bfd_error_handler
+ (_("jump (PC rel26) to section (%s) not supported"),
+ symbol->section->output_section->name);
- HOWTO (R_DLX_NONE, /* Type. */
- 0, /* Rightshift. */
- 0, /* size (0 = byte, 1 = short, 2 = long). */
- 0, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_NONE, /* Type. */
+ 0, /* Rightshift. */
+ 3, /* size (0 = byte, 1 = short, 2 = long). */
+ 0, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
- "R_DLX_NONE", /* Name. */
- FALSE, /* Partial_inplace. */
- 0, /* Src_mask. */
- 0, /* Dst_mask. */
- FALSE), /* PCrel_offset. */
+ "R_DLX_NONE", /* Name. */
+ FALSE, /* Partial_inplace. */
+ 0, /* Src_mask. */
+ 0, /* Dst_mask. */
+ FALSE), /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_8, /* Type. */
- 0, /* Rightshift. */
- 0, /* Size (0 = byte, 1 = short, 2 = long). */
- 8, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_8, /* Type. */
+ 0, /* Rightshift. */
+ 0, /* Size (0 = byte, 1 = short, 2 = long). */
+ 8, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
- "R_DLX_RELOC_8", /* Name. */
- TRUE, /* Partial_inplace. */
- 0xff, /* Src_mask. */
- 0xff, /* Dst_mask. */
- FALSE), /* PCrel_offset. */
+ "R_DLX_RELOC_8", /* Name. */
+ TRUE, /* Partial_inplace. */
+ 0xff, /* Src_mask. */
+ 0xff, /* Dst_mask. */
+ FALSE), /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_16, /* Type. */
- 0, /* Rightshift. */
- 1, /* Size (0 = byte, 1 = short, 2 = long). */
- 16, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_16, /* Type. */
+ 0, /* Rightshift. */
+ 1, /* Size (0 = byte, 1 = short, 2 = long). */
+ 16, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
- "R_DLX_RELOC_16", /* Name. */
- TRUE, /* Partial_inplace. */
- 0xffff, /* Src_mask. */
- 0xffff, /* Dst_mask. */
- FALSE), /* PCrel_offset. */
+ "R_DLX_RELOC_16", /* Name. */
+ TRUE, /* Partial_inplace. */
+ 0xffff, /* Src_mask. */
+ 0xffff, /* Dst_mask. */
+ FALSE), /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_32, /* Type. */
- 0, /* Rightshift. */
- 2, /* Size (0 = byte, 1 = short, 2 = long). */
- 32, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_32, /* Type. */
+ 0, /* Rightshift. */
+ 2, /* Size (0 = byte, 1 = short, 2 = long). */
+ 32, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
- "R_DLX_RELOC_32", /* Name. */
- TRUE, /* Partial_inplace. */
- 0xffffffff, /* Src_mask. */
- 0xffffffff, /* Dst_mask. */
- FALSE), /* PCrel_offset. */
+ "R_DLX_RELOC_32", /* Name. */
+ TRUE, /* Partial_inplace. */
+ 0xffffffff, /* Src_mask. */
+ 0xffffffff, /* Dst_mask. */
+ FALSE), /* PCrel_offset. */
0, /* Rightshift. */
2, /* Size (0 = byte, 1 = short, 2 = long). */
0, /* Bitsize. */
0, /* Rightshift. */
2, /* Size (0 = byte, 1 = short, 2 = long). */
0, /* Bitsize. */
FALSE), /* PCrel_offset. */
/* GNU extension to record C++ vtable member usage. */
FALSE), /* PCrel_offset. */
/* GNU extension to record C++ vtable member usage. */
0, /* Rightshift. */
2, /* Size (0 = byte, 1 = short, 2 = long). */
0, /* Bitsize. */
0, /* Rightshift. */
2, /* Size (0 = byte, 1 = short, 2 = long). */
0, /* Bitsize. */
complain_overflow_dont,/* Complain_on_overflow. */
_bfd_elf_rel_vtable_reloc_fn,/* Special_function. */
"R_DLX_GNU_VTENTRY", /* Name. */
complain_overflow_dont,/* Complain_on_overflow. */
_bfd_elf_rel_vtable_reloc_fn,/* Special_function. */
"R_DLX_GNU_VTENTRY", /* Name. */
- HOWTO (R_DLX_RELOC_16_PCREL, /* Type. */
- 0, /* Rightshift. */
- 1, /* Size (0 = byte, 1 = short, 2 = long). */
- 16, /* Bitsize. */
- TRUE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_16_PCREL, /* Type. */
+ 0, /* Rightshift. */
+ 1, /* Size (0 = byte, 1 = short, 2 = long). */
+ 16, /* Bitsize. */
+ TRUE, /* PC_relative. */
+ 0, /* Bitpos. */
- TRUE, /* Partial_inplace. */
- 0xffff, /* Src_mask. */
- 0xffff, /* Dst_mask. */
- TRUE); /* PCrel_offset. */
+ TRUE, /* Partial_inplace. */
+ 0xffff, /* Src_mask. */
+ 0xffff, /* Dst_mask. */
+ TRUE); /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_26_PCREL, /* Type. */
- 0, /* Rightshift. */
- 2, /* Size (0 = byte, 1 = short, 2 = long). */
- 26, /* Bitsize. */
- TRUE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_26_PCREL, /* Type. */
+ 0, /* Rightshift. */
+ 2, /* Size (0 = byte, 1 = short, 2 = long). */
+ 26, /* Bitsize. */
+ TRUE, /* PC_relative. */
+ 0, /* Bitpos. */
- TRUE, /* Partial_inplace. */
- 0xffff, /* Src_mask. */
- 0xffff, /* Dst_mask. */
- TRUE); /* PCrel_offset. */
+ TRUE, /* Partial_inplace. */
+ 0xffff, /* Src_mask. */
+ 0xffff, /* Dst_mask. */
+ TRUE); /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_16_HI, /* Type. */
- 16, /* Rightshift. */
- 2, /* Size (0 = byte, 1 = short, 2 = long). */
- 32, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_16_HI, /* Type. */
+ 16, /* Rightshift. */
+ 2, /* Size (0 = byte, 1 = short, 2 = long). */
+ 32, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
_bfd_dlx_elf_hi16_reloc,/* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
_bfd_dlx_elf_hi16_reloc,/* Special_function. */
- "R_DLX_RELOC_16_HI", /* Name. */
- TRUE, /* Partial_inplace. */
- 0xFFFF, /* Src_mask. */
- 0xffff, /* Dst_mask. */
- FALSE); /* PCrel_offset. */
+ "R_DLX_RELOC_16_HI", /* Name. */
+ TRUE, /* Partial_inplace. */
+ 0xFFFF, /* Src_mask. */
+ 0xffff, /* Dst_mask. */
+ FALSE); /* PCrel_offset. */
- HOWTO (R_DLX_RELOC_16_LO, /* Type. */
- 0, /* Rightshift. */
- 1, /* Size (0 = byte, 1 = short, 2 = long). */
- 16, /* Bitsize. */
- FALSE, /* PC_relative. */
- 0, /* Bitpos. */
+ HOWTO (R_DLX_RELOC_16_LO, /* Type. */
+ 0, /* Rightshift. */
+ 1, /* Size (0 = byte, 1 = short, 2 = long). */
+ 16, /* Bitsize. */
+ FALSE, /* PC_relative. */
+ 0, /* Bitpos. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
complain_overflow_dont,/* Complain_on_overflow. */
bfd_elf_generic_reloc, /* Special_function. */
- "R_DLX_RELOC_16_LO", /* Name. */
- TRUE, /* Partial_inplace. */
- 0xffff, /* Src_mask. */
- 0xffff, /* Dst_mask. */
- FALSE); /* PCrel_offset. */
+ "R_DLX_RELOC_16_LO", /* Name. */
+ TRUE, /* Partial_inplace. */
+ 0xffff, /* Src_mask. */
+ 0xffff, /* Dst_mask. */
+ FALSE); /* PCrel_offset. */
- { BFD_RELOC_NONE, R_DLX_NONE },
- { BFD_RELOC_16, R_DLX_RELOC_16 },
- { BFD_RELOC_32, R_DLX_RELOC_32 },
+ { BFD_RELOC_NONE, R_DLX_NONE },
+ { BFD_RELOC_16, R_DLX_RELOC_16 },
+ { BFD_RELOC_32, R_DLX_RELOC_32 },
{ BFD_RELOC_VTABLE_INHERIT, R_DLX_GNU_VTINHERIT },
{ BFD_RELOC_VTABLE_ENTRY, R_DLX_GNU_VTENTRY }
};
{ BFD_RELOC_VTABLE_INHERIT, R_DLX_GNU_VTINHERIT },
{ BFD_RELOC_VTABLE_ENTRY, R_DLX_GNU_VTENTRY }
};
- {
- /* This relocation describes the C++ object vtable hierarchy.
- Reconstruct it for later use during GC. */
- case R_DLX_GNU_VTINHERIT:
- if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
- return FALSE;
- break;
-
- /* This relocation describes which C++ vtable entries are actually
- used. Record for later use during GC. */
- case R_DLX_GNU_VTENTRY:
- if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
- return FALSE;
- break;
- }
+ {
+ /* This relocation describes the C++ object vtable hierarchy.
+ Reconstruct it for later use during GC. */
+ case R_DLX_GNU_VTINHERIT:
+ if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
+ return FALSE;
+ break;
+
+ /* This relocation describes which C++ vtable entries are actually
+ used. Record for later use during GC. */
+ case R_DLX_GNU_VTENTRY:
+ if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+ return FALSE;
+ break;
+ }
- BFD_ASSERT (r_type < (unsigned int) R_DLX_max);
+ if (r_type >= (unsigned int) R_DLX_max)
+ {
+ _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+ abfd, r_type);
+ bfd_set_error (bfd_error_bad_value);
+ return NULL;
+ }
elf32_dlx_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
arelent * cache_ptr ATTRIBUTE_UNUSED,
Elf_Internal_Rela * dst ATTRIBUTE_UNUSED)
{
elf32_dlx_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
arelent * cache_ptr ATTRIBUTE_UNUSED,
Elf_Internal_Rela * dst ATTRIBUTE_UNUSED)
{
-#define TARGET_BIG_SYM bfd_elf32_dlx_big_vec
-#define TARGET_BIG_NAME "elf32-dlx"
-#define ELF_ARCH bfd_arch_dlx
-#define ELF_MACHINE_CODE EM_DLX
-#define ELF_MAXPAGESIZE 1 /* FIXME: This number is wrong, It should be the page size in bytes. */
+#define TARGET_BIG_SYM dlx_elf32_be_vec
+#define TARGET_BIG_NAME "elf32-dlx"
+#define ELF_ARCH bfd_arch_dlx
+#define ELF_MACHINE_CODE EM_DLX
+#define ELF_MAXPAGESIZE 1 /* FIXME: This number is wrong, It should be the page size in bytes. */