summaryrefslogtreecommitdiffstats
path: root/contrib/binutils/bfd/elf32-v850.c
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-04-12 19:33:52 +0000
committerobrien <obrien@FreeBSD.org>2002-04-12 19:33:52 +0000
commit18ff9f4f1bddd11c341a37177885ac89fcccedd9 (patch)
treeb6180daa6d6e558ce86214f98d103e01ff4e70ff /contrib/binutils/bfd/elf32-v850.c
parent1d1ccbf8e10277966ecf3c150370a50c9e184b35 (diff)
downloadFreeBSD-src-18ff9f4f1bddd11c341a37177885ac89fcccedd9.zip
FreeBSD-src-18ff9f4f1bddd11c341a37177885ac89fcccedd9.tar.gz
Import of Binutils from the FSF 2.12 branch.
(this fixes several linker problems and coredumps) These bits are taken from the FSF anoncvs repo on 10-April-2002 13:24 Zulu
Diffstat (limited to 'contrib/binutils/bfd/elf32-v850.c')
-rw-r--r--contrib/binutils/bfd/elf32-v850.c269
1 files changed, 128 insertions, 141 deletions
diff --git a/contrib/binutils/bfd/elf32-v850.c b/contrib/binutils/bfd/elf32-v850.c
index 3df0914..ae0a0c4 100644
--- a/contrib/binutils/bfd/elf32-v850.c
+++ b/contrib/binutils/bfd/elf32-v850.c
@@ -27,9 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/v850.h"
+#include "libiberty.h"
-/* sign-extend a 24-bit number */
-#define SEXT24(x) ((((x) & 0xffffff) ^ (~ 0x7fffff)) + 0x800000)
+/* Sign-extend a 24-bit number. */
+#define SEXT24(x) ((((x) & 0xffffff) ^ 0x800000) - 0x800000)
static reloc_howto_type *v850_elf_reloc_type_lookup
PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
@@ -45,7 +46,7 @@ static boolean v850_elf_relocate_section
PARAMS((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));
static bfd_reloc_status_type v850_elf_perform_relocation
- PARAMS ((bfd *, int, bfd_vma, bfd_byte *));
+ PARAMS ((bfd *, unsigned int, bfd_vma, bfd_byte *));
static boolean v850_elf_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *));
static void remember_hi16s_reloc
@@ -63,14 +64,12 @@ static void v850_elf_final_write_processing
PARAMS ((bfd *, boolean));
static boolean v850_elf_set_private_flags
PARAMS ((bfd *, flagword));
-static boolean v850_elf_copy_private_bfd_data
- PARAMS ((bfd *, bfd *));
static boolean v850_elf_merge_private_bfd_data
PARAMS ((bfd *, bfd *));
static boolean v850_elf_print_private_bfd_data
PARAMS ((bfd *, PTR));
static boolean v850_elf_section_from_bfd_section
- PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *));
+ PARAMS ((bfd *, asection *, int *));
static void v850_elf_symbol_processing
PARAMS ((bfd *, asymbol *));
static boolean v850_elf_add_symbol_hook
@@ -81,9 +80,16 @@ static boolean v850_elf_link_output_symbol_hook
Elf_Internal_Sym *, asection *));
static boolean v850_elf_section_from_shdr
PARAMS ((bfd *, Elf_Internal_Shdr *, char *));
-
-/* Note: It is REQUIRED that the 'type' value of each entry in this array
- match the index of the entry in the array. */
+static boolean v850_elf_gc_sweep_hook
+ PARAMS ((bfd *, struct bfd_link_info *, asection *,
+ const Elf_Internal_Rela *));
+static asection * v850_elf_gc_mark_hook
+ PARAMS ((bfd *, struct bfd_link_info *,
+ Elf_Internal_Rela *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *));
+
+/* Note: It is REQUIRED that the 'type' value of each entry
+ in this array match the index of the entry in the array. */
static reloc_howto_type v850_elf_howto_table[] =
{
/* This reloc does nothing. */
@@ -470,7 +476,7 @@ struct v850_elf_reloc_map
/* BFD_RELOC_V850_CALLT_16_16_OFFSET is 258, which will not fix in an
unsigned char. */
bfd_reloc_code_real_type bfd_reloc_val;
- unsigned char elf_reloc_val;
+ unsigned int elf_reloc_val;
};
static const struct v850_elf_reloc_map v850_elf_reloc_map[] =
@@ -503,7 +509,8 @@ static const struct v850_elf_reloc_map v850_elf_reloc_map[] =
};
-/* Map a bfd relocation into the appropriate howto structure */
+/* Map a bfd relocation into the appropriate howto structure. */
+
static reloc_howto_type *
v850_elf_reloc_type_lookup (abfd, code)
bfd * abfd ATTRIBUTE_UNUSED;
@@ -511,22 +518,21 @@ v850_elf_reloc_type_lookup (abfd, code)
{
unsigned int i;
- for (i = 0;
- i < sizeof (v850_elf_reloc_map) / sizeof (struct v850_elf_reloc_map);
- i++)
- {
- if (v850_elf_reloc_map[i].bfd_reloc_val == code)
- {
- BFD_ASSERT (v850_elf_howto_table[v850_elf_reloc_map[i].elf_reloc_val].type == v850_elf_reloc_map[i].elf_reloc_val);
+ for (i = ARRAY_SIZE (v850_elf_reloc_map); i --;)
+ if (v850_elf_reloc_map[i].bfd_reloc_val == code)
+ {
+ unsigned int elf_reloc_val = v850_elf_reloc_map[i].elf_reloc_val;
- return & v850_elf_howto_table[v850_elf_reloc_map[i].elf_reloc_val];
- }
- }
+ BFD_ASSERT (v850_elf_howto_table[elf_reloc_val].type == elf_reloc_val);
+
+ return v850_elf_howto_table + elf_reloc_val;
+ }
return NULL;
}
/* Set the howto pointer for an V850 ELF reloc. */
+
static void
v850_elf_info_to_howto_rel (abfd, cache_ptr, dst)
bfd * abfd ATTRIBUTE_UNUSED;
@@ -582,7 +588,7 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
#ifdef DEBUG
fprintf (stderr, "v850_elf_check_relocs called for section %s in %s\n",
bfd_get_section_name (abfd, sec),
- bfd_get_filename (abfd));
+ bfd_archive_filename (abfd));
#endif
dynobj = elf_hash_table (info)->dynobj;
@@ -626,8 +632,8 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
return false;
break;
- /* This relocation describes which C++ vtable entries are actually
- used. Record for later use during GC. */
+ /* This relocation describes which C++ vtable entries
+ are actually used. Record for later use during GC. */
case R_V850_GNU_VTENTRY:
if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
return false;
@@ -662,7 +668,8 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
small_data_common:
if (h)
{
- h->other |= other; /* flag which type of relocation was used */
+ /* Flag which type of relocation was used. */
+ h->other |= other;
if ((h->other & V850_OTHER_MASK) != (other & V850_OTHER_MASK)
&& (h->other & V850_OTHER_ERROR) == 0)
{
@@ -690,7 +697,8 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
sprintf (buff, msg, h->root.root.string);
info->callbacks->warning (info, buff, h->root.root.string,
- abfd, h->root.u.def.section, 0);
+ abfd, h->root.u.def.section,
+ (bfd_vma) 0);
bfd_set_error (bfd_error_bad_value);
h->other |= V850_OTHER_ERROR;
@@ -702,7 +710,9 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
&& h->root.u.c.p
&& !strcmp (bfd_get_section_name (abfd, h->root.u.c.p->section), "COMMON"))
{
- asection *section = h->root.u.c.p->section = bfd_make_section_old_way (abfd, common);
+ asection * section;
+
+ section = h->root.u.c.p->section = bfd_make_section_old_way (abfd, common);
section->flags |= SEC_IS_COMMON;
}
@@ -719,20 +729,18 @@ v850_elf_check_relocs (abfd, info, sec, relocs)
return ret;
}
-/*
- * In the old version, when an entry was checked out from the table,
- * it was deleted. This produced an error if the entry was needed
- * more than once, as the second attempted retry failed.
- *
- * In the current version, the entry is not deleted, instead we set
- * the field 'found' to true. If a second lookup matches the same
- * entry, then we know that the hi16s reloc has already been updated
- * and does not need to be updated a second time.
- *
- * TODO - TOFIX: If it is possible that we need to restore 2 different
- * addresses from the same table entry, where the first generates an
- * overflow, whilst the second do not, then this code will fail.
- */
+/* In the old version, when an entry was checked out from the table,
+ it was deleted. This produced an error if the entry was needed
+ more than once, as the second attempted retry failed.
+
+ In the current version, the entry is not deleted, instead we set
+ the field 'found' to true. If a second lookup matches the same
+ entry, then we know that the hi16s reloc has already been updated
+ and does not need to be updated a second time.
+
+ TODO - TOFIX: If it is possible that we need to restore 2 different
+ addresses from the same table entry, where the first generates an
+ overflow, whilst the second do not, then this code will fail. */
typedef struct hi16s_location
{
@@ -755,10 +763,11 @@ remember_hi16s_reloc (abfd, addend, address)
bfd_byte * address;
{
hi16s_location * entry = NULL;
+ bfd_size_type amt = sizeof (* free_hi16s);
/* Find a free structure. */
if (free_hi16s == NULL)
- free_hi16s = (hi16s_location *) bfd_zalloc (abfd, sizeof (* free_hi16s));
+ free_hi16s = (hi16s_location *) bfd_zalloc (abfd, amt);
entry = free_hi16s;
free_hi16s = free_hi16s->next;
@@ -825,12 +834,13 @@ find_remembered_hi16s_reloc (addend, already_found)
/* FIXME: The code here probably ought to be removed and the code in reloc.c
allowed to do its stuff instead. At least for most of the relocs, anwyay. */
+
static bfd_reloc_status_type
v850_elf_perform_relocation (abfd, r_type, addend, address)
- bfd * abfd;
- int r_type;
- bfd_vma addend;
- bfd_byte * address;
+ bfd *abfd;
+ unsigned int r_type;
+ bfd_vma addend;
+ bfd_byte *address;
{
unsigned long insn;
bfd_signed_vma saddend = (bfd_signed_vma) addend;
@@ -855,7 +865,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
insn = bfd_get_32 (abfd, address);
insn &= ~0xfffe003f;
insn |= (((addend & 0xfffe) << 16) | ((addend & 0x3f0000) >> 16));
- bfd_put_32 (abfd, insn, address);
+ bfd_put_32 (abfd, (bfd_vma) insn, address);
return bfd_reloc_ok;
case R_V850_9_PCREL:
@@ -1029,9 +1039,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
0x00000000
+ 0x00006fff (bit 15 not set, so the top half is zero)
------------
- 0x00006fff which is wrong (assuming that fred is at 0xffff)
- */
-
+ 0x00006fff which is wrong (assuming that fred is at 0xffff). */
{
long result;
@@ -1056,7 +1064,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
{
insn = bfd_get_16 (abfd, hi16s_address);
insn += 1;
- bfd_put_16 (abfd, insn, hi16s_address);
+ bfd_put_16 (abfd, (bfd_vma) insn, hi16s_address);
}
}
else
@@ -1122,7 +1130,7 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
if (addend & 1)
return bfd_reloc_dangerous;
- insn = (addend & ~1) | (insn & 1);
+ insn = (addend &~ (bfd_vma) 1) | (insn & 1);
break;
case R_V850_TDA_6_8_OFFSET:
@@ -1211,9 +1219,9 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
insn &= 0x0001ffdf;
insn |= (addend & 1) << 5;
- insn |= (addend & ~1) << 16;
+ insn |= (addend &~ (bfd_vma) 1) << 16;
- bfd_put_32 (abfd, insn, address);
+ bfd_put_32 (abfd, (bfd_vma) insn, address);
return bfd_reloc_ok;
case R_V850_CALLT_6_7_OFFSET:
@@ -1238,11 +1246,12 @@ v850_elf_perform_relocation (abfd, r_type, addend, address)
}
- bfd_put_16 (abfd, insn, address);
+ bfd_put_16 (abfd, (bfd_vma) insn, address);
return bfd_reloc_ok;
}
/* Insert the addend into the instruction. */
+
static bfd_reloc_status_type
v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err)
bfd * abfd ATTRIBUTE_UNUSED;
@@ -1258,7 +1267,7 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err)
/* If there is an output BFD,
and the symbol is not a section name (which is only defined at final link time),
and either we are not putting the addend into the instruction
- or the addend is zero, so there is nothing to add into the instruction
+ or the addend is zero, so there is nothing to add into the instruction
then just fixup the address and return. */
if (obfd != (bfd *) NULL
&& (symbol->flags & BSF_SECTION_SYM) == 0
@@ -1270,9 +1279,7 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err)
}
#if 0
else if (obfd != NULL)
- {
- return bfd_reloc_continue;
- }
+ return bfd_reloc_continue;
#endif
/* Catch relocs involving undefined symbols. */
@@ -1308,21 +1315,20 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err)
.text
.globl _start
nop
- _start:
+ _start:
jr foo
.section ".foo","ax"
nop
foo:
- nop
- */
+ nop */
if (reloc->howto->pc_relative == true)
{
/* Here the variable relocation holds the final address of the
symbol we are relocating against, plus any addend. */
relocation -= isection->output_section->vma + isection->output_offset;
- /* Deal with pcrel_offset */
+ /* Deal with pcrel_offset. */
relocation -= reloc->address;
}
#endif
@@ -1340,6 +1346,7 @@ v850_elf_is_local_label_name (abfd, name)
}
/* Perform a relocation as part of a final link. */
+
static bfd_reloc_status_type
v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section, contents, offset, value,
@@ -1356,7 +1363,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
asection * sym_sec;
int is_local ATTRIBUTE_UNUSED;
{
- unsigned long r_type = howto->type;
+ unsigned int r_type = howto->type;
bfd_byte * hit_data = contents + offset;
/* Adjust the value according to the relocation. */
@@ -1377,7 +1384,8 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
if (((value & 0xff000000) != 0x0) && ((value & 0xff000000) != 0xff000000))
return bfd_reloc_overflow;
- value = SEXT24 (value); /* Only the bottom 24 bits of the PC are valid */
+ /* Only the bottom 24 bits of the PC are valid */
+ value = SEXT24 (value);
break;
case R_V850_HI16_S:
@@ -1436,7 +1444,8 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
h = bfd_link_hash_lookup (info->hash, "__ep", false, false, true);
if (h == (struct bfd_link_hash_entry *) NULL
|| h->type != bfd_link_hash_defined)
- return bfd_reloc_continue; /* Actually this indicates that __ep could not be found. */
+ /* Actually this indicates that __ep could not be found. */
+ return bfd_reloc_continue;
ep = (h->u.def.value
+ h->u.def.section->output_section->vma
@@ -1455,7 +1464,8 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
h = bfd_link_hash_lookup (info->hash, "__ctbp", false, false, true);
if (h == (struct bfd_link_hash_entry *) NULL
|| h->type != bfd_link_hash_defined)
- return (bfd_reloc_dangerous + 1); /* Actually this indicates that __ctbp could not be found. */
+ /* Actually this indicates that __ctbp could not be found. */
+ return bfd_reloc_dangerous + 1;
ctbp = (h->u.def.value
+ h->u.def.section->output_section->vma
@@ -1501,6 +1511,7 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
}
/* Relocate an V850 ELF section. */
+
static boolean
v850_elf_relocate_section (output_bfd, info, input_bfd, input_section,
contents, relocs, local_syms, local_sections)
@@ -1524,7 +1535,8 @@ v850_elf_relocate_section (output_bfd, info, input_bfd, input_section,
if (sym_hashes == NULL)
{
info->callbacks->warning
- (info, "no hash table available", NULL, input_bfd, input_section, 0);
+ (info, "no hash table available",
+ NULL, input_bfd, input_section, (bfd_vma) 0);
return false;
}
@@ -1583,17 +1595,16 @@ v850_elf_relocate_section (output_bfd, info, input_bfd, input_section,
{
sym = local_syms + r_symndx;
sec = local_sections[r_symndx];
- relocation = (sec->output_section->vma
- + sec->output_offset
- + sym->st_value);
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, sec, rel);
#if 0
{
char * name;
+
name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, sym->st_name);
name = (name == NULL) ? "<none>" : name;
-fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n",
- sec->name, name, sym->st_name,
- sec->output_section->vma, sec->output_offset, sym->st_value, rel->r_addend);
+ fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n",
+ sec->name, name, sym->st_name,
+ sec->output_section->vma, sec->output_offset, sym->st_value, rel->r_addend);
}
#endif
}
@@ -1613,15 +1624,15 @@ fprintf (stderr, "local: sec: %s, sym: %s (%d), value: %x + %x + %x addend %x\n"
+ sec->output_section->vma
+ sec->output_offset);
#if 0
-fprintf (stderr, "defined: sec: %s, name: %s, value: %x + %x + %x gives: %x\n",
- sec->name, h->root.root.string, h->root.u.def.value, sec->output_section->vma, sec->output_offset, relocation);
+ fprintf (stderr, "defined: sec: %s, name: %s, value: %x + %x + %x gives: %x\n",
+ sec->name, h->root.root.string, h->root.u.def.value, sec->output_section->vma, sec->output_offset, relocation);
#endif
}
else if (h->root.type == bfd_link_hash_undefweak)
{
#if 0
-fprintf (stderr, "undefined: sec: %s, name: %s\n",
- sec->name, h->root.root.string);
+ fprintf (stderr, "undefined: sec: %s, name: %s\n",
+ sec->name, h->root.root.string);
#endif
relocation = 0;
}
@@ -1632,14 +1643,13 @@ fprintf (stderr, "undefined: sec: %s, name: %s\n",
input_section, rel->r_offset, true)))
return false;
#if 0
-fprintf (stderr, "unknown: name: %s\n", h->root.root.string);
+ fprintf (stderr, "unknown: name: %s\n", h->root.root.string);
#endif
relocation = 0;
}
}
- /* FIXME: We should use the addend, but the COFF relocations
- don't. */
+ /* FIXME: We should use the addend, but the COFF relocations don't. */
r = v850_elf_final_link_relocate (howto, input_bfd, output_bfd,
input_section,
contents, rel->r_offset,
@@ -1725,7 +1735,7 @@ v850_elf_gc_sweep_hook (abfd, info, sec, relocs)
asection *sec ATTRIBUTE_UNUSED;
const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
{
- /* No got and plt entries for v850-elf */
+ /* No got and plt entries for v850-elf. */
return true;
}
@@ -1762,17 +1772,14 @@ v850_elf_gc_mark_hook (abfd, info, rel, h, sym)
}
else
{
- if (!(elf_bad_symtab (abfd)
- && ELF_ST_BIND (sym->st_info) != STB_LOCAL)
- && ! ((sym->st_shndx <= 0 || sym->st_shndx >= SHN_LORESERVE)
- && sym->st_shndx != SHN_COMMON))
- {
- return bfd_section_from_elf_index (abfd, sym->st_shndx);
- }
- }
+ return bfd_section_from_elf_index (abfd, sym->st_shndx);
+ }
+
return NULL;
}
+
/* Set the right machine number. */
+
static boolean
v850_elf_object_p (abfd)
bfd *abfd;
@@ -1788,6 +1795,7 @@ v850_elf_object_p (abfd)
}
/* Store the machine number in the flags field. */
+
static void
v850_elf_final_write_processing (abfd, linker)
bfd * abfd;
@@ -1808,6 +1816,7 @@ v850_elf_final_write_processing (abfd, linker)
}
/* Function to keep V850 specific file flags. */
+
static boolean
v850_elf_set_private_flags (abfd, flags)
bfd * abfd;
@@ -1821,28 +1830,8 @@ v850_elf_set_private_flags (abfd, flags)
return true;
}
-/* Copy backend specific data from one object module to another */
-static boolean
-v850_elf_copy_private_bfd_data (ibfd, obfd)
- bfd * ibfd;
- bfd * obfd;
-{
- if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
- || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
- return true;
-
- BFD_ASSERT (!elf_flags_init (obfd)
- || (elf_elfheader (obfd)->e_flags
- == elf_elfheader (ibfd)->e_flags));
-
- elf_gp (obfd) = elf_gp (ibfd);
- elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
- elf_flags_init (obfd) = true;
- return true;
-}
-
-/* Merge backend specific data from an object file to the output
- object file when linking. */
+/* Merge backend specific data from an object file
+ to the output object file when linking. */
static boolean
v850_elf_merge_private_bfd_data (ibfd, obfd)
bfd * ibfd;
@@ -1874,9 +1863,7 @@ v850_elf_merge_private_bfd_data (ibfd, obfd)
if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
&& bfd_get_arch_info (obfd)->the_default)
- {
- return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
- }
+ return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
return true;
}
@@ -1888,11 +1875,12 @@ v850_elf_merge_private_bfd_data (ibfd, obfd)
if ((in_flags & EF_V850_ARCH) != (out_flags & EF_V850_ARCH)
&& (in_flags & EF_V850_ARCH) != E_V850_ARCH)
_bfd_error_handler (_("%s: Architecture mismatch with previous modules"),
- bfd_get_filename (ibfd));
+ bfd_archive_filename (ibfd));
return true;
}
-/* Display the flags field */
+
+/* Display the flags field. */
static boolean
v850_elf_print_private_bfd_data (abfd, ptr)
@@ -1938,13 +1926,12 @@ static asection v850_elf_zcom_section;
static asymbol v850_elf_zcom_symbol;
static asymbol * v850_elf_zcom_symbol_ptr;
-/* Given a BFD section, try to locate the corresponding ELF section
- index. */
+/* Given a BFD section, try to locate the
+ corresponding ELF section index. */
static boolean
-v850_elf_section_from_bfd_section (abfd, hdr, sec, retval)
+v850_elf_section_from_bfd_section (abfd, sec, retval)
bfd * abfd ATTRIBUTE_UNUSED;
- Elf32_Internal_Shdr * hdr ATTRIBUTE_UNUSED;
asection * sec;
int * retval;
{
@@ -1968,9 +1955,9 @@ v850_elf_symbol_processing (abfd, asym)
asymbol * asym;
{
elf_symbol_type * elfsym = (elf_symbol_type *) asym;
- unsigned short index;
+ unsigned int indx;
- index = elfsym->internal_elf_sym.st_shndx;
+ indx = elfsym->internal_elf_sym.st_shndx;
/* If the section index is an "ordinary" index, then it may
refer to a v850 specific section created by the assembler.
@@ -1978,26 +1965,26 @@ v850_elf_symbol_processing (abfd, asym)
FIXME: Should we alter the st_shndx field as well ? */
- if (index < elf_elfheader(abfd)[0].e_shnum)
- switch (elf_elfsections(abfd)[index]->sh_type)
+ if (indx < elf_numsections (abfd))
+ switch (elf_elfsections(abfd)[indx]->sh_type)
{
case SHT_V850_SCOMMON:
- index = SHN_V850_SCOMMON;
+ indx = SHN_V850_SCOMMON;
break;
case SHT_V850_TCOMMON:
- index = SHN_V850_TCOMMON;
+ indx = SHN_V850_TCOMMON;
break;
case SHT_V850_ZCOMMON:
- index = SHN_V850_ZCOMMON;
+ indx = SHN_V850_ZCOMMON;
break;
default:
break;
}
- switch (index)
+ switch (indx)
{
case SHN_V850_SCOMMON:
if (v850_elf_scom_section.name == NULL)
@@ -2068,7 +2055,7 @@ v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
asection ** secp;
bfd_vma * valp;
{
- int index = sym->st_shndx;
+ unsigned int indx = sym->st_shndx;
/* If the section index is an "ordinary" index, then it may
refer to a v850 specific section created by the assembler.
@@ -2076,26 +2063,26 @@ v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
FIXME: Should we alter the st_shndx field as well ? */
- if (index < elf_elfheader(abfd)[0].e_shnum)
- switch (elf_elfsections(abfd)[index]->sh_type)
+ if (indx < elf_numsections (abfd))
+ switch (elf_elfsections(abfd)[indx]->sh_type)
{
case SHT_V850_SCOMMON:
- index = SHN_V850_SCOMMON;
+ indx = SHN_V850_SCOMMON;
break;
case SHT_V850_TCOMMON:
- index = SHN_V850_TCOMMON;
+ indx = SHN_V850_TCOMMON;
break;
case SHT_V850_ZCOMMON:
- index = SHN_V850_ZCOMMON;
+ indx = SHN_V850_ZCOMMON;
break;
default:
break;
}
- switch (index)
+ switch (indx)
{
case SHN_V850_SCOMMON:
*secp = bfd_make_section_old_way (abfd, ".scommon");
@@ -2119,7 +2106,6 @@ v850_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
return true;
}
-/*ARGSIGNORED*/
static boolean
v850_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec)
bfd * abfd ATTRIBUTE_UNUSED;
@@ -2173,8 +2159,9 @@ v850_elf_section_from_shdr (abfd, hdr, name)
return true;
}
-/* Set the correct type for a V850 ELF section. We do this by the
- section name, which is a hack, but ought to work. */
+/* Set the correct type for a V850 ELF section. We do this
+ by the section name, which is a hack, but ought to work. */
+
static boolean
v850_elf_fake_sections (abfd, hdr, sec)
bfd * abfd ATTRIBUTE_UNUSED;
@@ -2202,7 +2189,8 @@ v850_elf_fake_sections (abfd, hdr, sec)
#define TARGET_LITTLE_SYM bfd_elf32_v850_vec
#define TARGET_LITTLE_NAME "elf32-v850"
#define ELF_ARCH bfd_arch_v850
-#define ELF_MACHINE_CODE EM_CYGNUS_V850
+#define ELF_MACHINE_CODE EM_V850
+#define ELF_MACHINE_ALT1 EM_CYGNUS_V850
#define ELF_MAXPAGESIZE 0x1000
#define elf_info_to_howto v850_elf_info_to_howto_rela
@@ -2225,7 +2213,6 @@ v850_elf_fake_sections (abfd, hdr, sec)
#define bfd_elf32_bfd_is_local_label_name v850_elf_is_local_label_name
#define bfd_elf32_bfd_reloc_type_lookup v850_elf_reloc_type_lookup
-#define bfd_elf32_bfd_copy_private_bfd_data v850_elf_copy_private_bfd_data
#define bfd_elf32_bfd_merge_private_bfd_data v850_elf_merge_private_bfd_data
#define bfd_elf32_bfd_set_private_flags v850_elf_set_private_flags
#define bfd_elf32_bfd_print_private_bfd_data v850_elf_print_private_bfd_data
OpenPOWER on IntegriCloud