/* BFD back-end for Intel i860 COFF files.
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2001, 2002,
- 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 1990-2018 Free Software Foundation, Inc.
Created mostly by substituting "860" for "386" in coff-i386.c
Harry Dolan <dolan@ssd.intel.com>, October 1995
-This file is part of BFD, the Binary File Descriptor library.
+ 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
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
#include "sysdep.h"
#include "bfd.h"
#include "coff/internal.h"
+#ifndef bfd_pe_print_pdata
+#define bfd_pe_print_pdata NULL
+#endif
+
#include "libcoff.h"
reloc_howto_type *howto = reloc_entry->howto;
unsigned char *addr = (unsigned char *) data + reloc_entry->address;
+ if (! bfd_reloc_offset_in_range (howto, abfd, input_section,
+ reloc_entry->address
+ * bfd_octets_per_byte (abfd)))
+ return bfd_reloc_outofrange;
+
switch (howto->size)
{
case 0:
return bfd_reloc_continue;
}
-/* This is just a temporary measure until we teach bfd to generate
+/* This is just a temporary measure until we teach bfd to generate
these relocations. */
static bfd_reloc_status_type
char **error_message ATTRIBUTE_UNUSED)
{
reloc_howto_type *howto = reloc_entry->howto;
- fprintf (stderr, _("Relocation `%s' not yet implemented\n"), howto->name);
+ _bfd_error_handler (_("relocation `%s' not yet implemented"), howto->name);
return bfd_reloc_notsupported;
}
EMPTY_HOWTO (3),
EMPTY_HOWTO (4),
EMPTY_HOWTO (5),
- HOWTO (R_DIR32, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
+ HOWTO (R_DIR32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- coff_i860_reloc, /* special_function */
- "dir32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- TRUE), /* pcrel_offset */
+ coff_i860_reloc, /* special_function */
+ "dir32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
/* {7}, */
- HOWTO (R_IMAGEBASE, /* type */
- 0, /* rightshift */
- 2, /* size (0 = byte, 1 = short, 2 = long) */
- 32, /* bitsize */
- FALSE, /* pc_relative */
- 0, /* bitpos */
+ HOWTO (R_IMAGEBASE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- coff_i860_reloc, /* special_function */
- "rva32", /* name */
- TRUE, /* partial_inplace */
- 0xffffffff, /* src_mask */
- 0xffffffff, /* dst_mask */
- FALSE), /* pcrel_offset */
+ coff_i860_reloc, /* special_function */
+ "rva32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
EMPTY_HOWTO (010),
EMPTY_HOWTO (011),
EMPTY_HOWTO (012),
FALSE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
+ FALSE), /* pcrel_offset */
EMPTY_HOWTO (0x1d),
HOWTO (COFF860_R_HIGH, /* type */
16, /* rightshift */
FALSE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_LOW0, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_LOW0, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_LOW1, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_LOW1, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xfffe, /* src_mask */
0xfffe, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_LOW2, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_LOW2, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xfffc, /* src_mask */
0xfffc, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_LOW3, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_LOW3, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xfff8, /* src_mask */
0xfff8, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_LOW4, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_LOW4, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xfff0, /* src_mask */
0xfff0, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_SPLIT0, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_SPLIT0, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0x1f07ff, /* src_mask */
0x1f07ff, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_SPLIT1, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_SPLIT1, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0x1f07fe, /* src_mask */
0x1f07fe, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_SPLIT2, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_SPLIT2, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0x1f07fc, /* src_mask */
0x1f07fc, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_HIGHADJ, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_HIGHADJ, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* partial_inplace */
0xffff, /* src_mask */
0xffff, /* dst_mask */
- FALSE), /* pcrel_offset */
- HOWTO (COFF860_R_BRADDR, /* type */
+ FALSE), /* pcrel_offset */
+ HOWTO (COFF860_R_BRADDR, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
26, /* bitsize */
FALSE, /* partial_inplace */
0x3ffffff, /* src_mask */
0x3ffffff, /* dst_mask */
- TRUE) /* pcrel_offset */
+ TRUE) /* pcrel_offset */
};
/* Turn a howto into a reloc number. */
FIXME: This macro refers to symbols and asect; these are from the
calling function, not the macro arguments. */
-#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr)
+/* PR 17512: file: 0a38fb7c
+ Set an addend value, even if it is not going to be used. A tool
+ like coffdump might be used to print out the contents of the reloc. */
+#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) (cache_ptr)->addend = 0
/* We use the special COFF backend linker. */
#define coff_relocate_section _bfd_coff_generic_relocate_section
else
{
/* For every other relocation, do exactly what coff_slurp_reloc_table
- would do (which this code is taken directly from). */
+ would do (which this code is taken directly from). */
asymbol *ptr = NULL;
cache_ptr->address = dst->r_vaddr;
{
if (dst->r_symndx < 0 || dst->r_symndx >= obj_conv_table_size (abfd))
{
- (*_bfd_error_handler)
+ _bfd_error_handler
+ /* xgettext: c-format */
(_("%B: warning: illegal symbol index %ld in relocs"),
abfd, dst->r_symndx);
cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
/* Calculate any reloc addend by looking at the symbol. */
CALC_ADDEND (abfd, ptr, (*dst), cache_ptr);
+ (void) ptr;
cache_ptr->address -= asect->vma;
#ifdef TARGET_SYM
TARGET_SYM =
#else
- i860coff_vec =
+ i860_coff_vec =
#endif
{
#ifdef TARGET_NAME
'_', /* leading underscore */
'/', /* ar_pad_char */
15, /* ar_max_namelen */
+ 0, /* match priority. */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,