X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Felf32-v850.c;h=553cb4e0153022405d0b718e2f39cf45a9c41d16;hb=86fb1dece37497b267579ed4f062d280cd5760cd;hp=687f180a1ceffbe2f2d7b6cee914af56b0683fb1;hpb=435b1e90b1015d1457ac8d7a4efcce1c505b4fe8;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 687f180a1c..553cb4e015 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -1,5 +1,6 @@ /* V850-specific support for 32-bit ELF - Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -26,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)); @@ -44,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 @@ -62,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 @@ -79,10 +79,17 @@ static boolean v850_elf_link_output_symbol_hook PARAMS ((bfd *, struct bfd_link_info *, const char *, 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. */ + PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); +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. */ @@ -469,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[] = @@ -501,9 +508,9 @@ static const struct v850_elf_reloc_map v850_elf_reloc_map[] = { BFD_RELOC_VTABLE_ENTRY, R_V850_GNU_VTENTRY }, }; - -/* 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,23 +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; @@ -554,7 +559,6 @@ v850_elf_info_to_howto_rela (abfd, cache_ptr, dst) BFD_ASSERT (r_type < (unsigned int) R_V850_max); cache_ptr->howto = &v850_elf_howto_table[r_type]; } - /* Look through the relocs for a section during the first phase, and allocate space in the global offset table or procedure linkage @@ -584,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; @@ -628,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; @@ -664,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) { @@ -692,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; @@ -704,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; } @@ -721,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 { @@ -757,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; @@ -827,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; @@ -857,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: @@ -1031,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; @@ -1058,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 @@ -1124,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: @@ -1213,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: @@ -1240,12 +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; @@ -1261,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 @@ -1273,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. */ @@ -1304,20 +1308,33 @@ v850_elf_reloc (abfd, reloc, symbol, data, isection, obfd, err) relocation += symbol->section->output_offset; relocation += reloc->addend; +#if 0 /* Since this reloc is going to be processed later on, we should + not make it pc-relative here. To test this, try assembling and + linking this program: + + .text + .globl _start + nop + _start: + jr foo + + .section ".foo","ax" + nop + foo: + 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 reloc->addend = relocation; return bfd_reloc_ok; } - static boolean v850_elf_is_local_label_name (abfd, name) @@ -1327,9 +1344,9 @@ v850_elf_is_local_label_name (abfd, name) return ( (name[0] == '.' && (name[1] == 'L' || name[1] == '.')) || (name[0] == '_' && name[1] == '.' && name[2] == 'L' && name[3] == '_')); } - /* 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, @@ -1346,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. */ @@ -1367,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: @@ -1426,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 @@ -1445,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 @@ -1489,9 +1509,9 @@ v850_elf_final_link_relocate (howto, input_bfd, output_bfd, /* Perform the relocation. */ return v850_elf_perform_relocation (input_bfd, r_type, value + addend, hit_data); } - /* Relocate an V850 ELF section. */ + static boolean v850_elf_relocate_section (output_bfd, info, input_bfd, input_section, contents, relocs, local_syms, local_sections) @@ -1515,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; } @@ -1574,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) ? "" : 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 } @@ -1604,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; } @@ -1623,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, @@ -1716,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; } @@ -1753,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; @@ -1779,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; @@ -1799,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; @@ -1812,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; @@ -1865,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; } @@ -1879,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) @@ -1929,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; { @@ -1959,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. @@ -1969,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) @@ -2059,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. @@ -2067,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"); @@ -2110,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; @@ -2140,7 +2135,7 @@ static boolean v850_elf_section_from_shdr (abfd, hdr, name) bfd * abfd; Elf_Internal_Shdr * hdr; - char * name; + const char * name; { /* There ought to be a place to keep ELF backend specific flags, but at the moment there isn't one. We just keep track of the @@ -2164,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; @@ -2189,12 +2185,12 @@ v850_elf_fake_sections (abfd, hdr, sec) return true; } - #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 @@ -2217,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