X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Faoutx.h;h=9385a98570d9abc6e7faa35b7a906d9e6c6d149b;hb=ee2cdb502ce49f7ac3dbf2ba84f99293f95eb37c;hp=1244510981f9e49c3c9dc7a54d3fb2357fa654a1;hpb=20c6e70e8d514109c569b17a279c2dcd70b229fc;p=platform%2Fupstream%2Fbinutils.git diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 1244510..9385a98 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -1,7 +1,5 @@ /* BFD semi-generic back-end for a.out binaries. - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright (C) 1990-2014 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -68,12 +66,12 @@ DESCRIPTION from @file{sunos.c}: | #define TARGET_NAME "a.out-sunos-big" -| #define VECNAME sunos_big_vec +| #define VECNAME sparc_aout_sunos_be_vec | #include "aoutf1.h" requires all the names from @file{aout32.c}, and produces the jump vector -| sunos_big_vec +| sparc_aout_sunos_be_vec The file @file{host-aout.c} is a special case. It is for a large set of hosts that use ``more or less standard'' a.out files, and @@ -103,7 +101,7 @@ DESCRIPTION | TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec | TDEPFILES= host-aout.o trad-core.o - in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in} + in the @file{config/@var{XXX}.mt} file, and modify @file{configure.ac} to use the @file{@var{XXX}.mt} file (by setting "<>") when your configuration is selected. */ @@ -269,7 +267,7 @@ NAME (aout, reloc_type_lookup) (bfd *abfd, bfd_reloc_code_real_type code) int ext = obj_reloc_entry_size (abfd) == RELOC_EXT_SIZE; if (code == BFD_RELOC_CTOR) - switch (bfd_get_arch_info (abfd)->bits_per_address) + switch (bfd_arch_bits_per_address (abfd)) { case 32: code = BFD_RELOC_32; @@ -464,7 +462,7 @@ NAME (aout, some_aout_object_p) (bfd *abfd, const bfd_target *result; bfd_size_type amt = sizeof (* rawptr); - rawptr = bfd_zalloc (abfd, amt); + rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt); if (rawptr == NULL) return NULL; @@ -629,7 +627,9 @@ NAME (aout, some_aout_object_p) (bfd *abfd, if (execp->a_entry != 0 || (execp->a_entry >= obj_textsec (abfd)->vma && execp->a_entry < (obj_textsec (abfd)->vma - + obj_textsec (abfd)->size))) + + obj_textsec (abfd)->size) + && execp->a_trsize == 0 + && execp->a_drsize == 0)) abfd->flags |= EXEC_P; #ifdef STAT_FOR_EXEC else @@ -679,7 +679,7 @@ NAME (aout, mkobject) (bfd *abfd) bfd_set_error (bfd_error_system_call); - rawptr = bfd_zalloc (abfd, amt); + rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt); if (rawptr == NULL) return FALSE; @@ -786,13 +786,22 @@ NAME (aout, machine_type) (enum bfd_architecture arch, case bfd_mach_mips9000: case bfd_mach_mips10000: case bfd_mach_mips12000: + case bfd_mach_mips14000: + case bfd_mach_mips16000: case bfd_mach_mips16: case bfd_mach_mipsisa32: case bfd_mach_mipsisa32r2: + case bfd_mach_mipsisa32r3: + case bfd_mach_mipsisa32r5: + case bfd_mach_mipsisa32r6: case bfd_mach_mips5: case bfd_mach_mipsisa64: case bfd_mach_mipsisa64r2: + case bfd_mach_mipsisa64r3: + case bfd_mach_mipsisa64r5: + case bfd_mach_mipsisa64r6: case bfd_mach_mips_sb1: + case bfd_mach_mips_xlr: /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc. */ arch_flags = M_MIPS2; break; @@ -1291,13 +1300,14 @@ aout_get_external_symbols (bfd *abfd) { bfd_size_type count; struct external_nlist *syms; - bfd_size_type amt; + bfd_size_type amt = exec_hdr (abfd)->a_syms; - count = exec_hdr (abfd)->a_syms / EXTERNAL_NLIST_SIZE; + count = amt / EXTERNAL_NLIST_SIZE; + if (count == 0) + return TRUE; /* Nothing to do. */ #ifdef USE_MMAP - if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd), - exec_hdr (abfd)->a_syms, + if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd), amt, &obj_aout_sym_window (abfd), TRUE)) return FALSE; syms = (struct external_nlist *) obj_aout_sym_window (abfd).data; @@ -1305,11 +1315,10 @@ aout_get_external_symbols (bfd *abfd) /* We allocate using malloc to make the values easy to free later on. If we put them on the objalloc it might not be possible to free them. */ - syms = bfd_malloc (count * EXTERNAL_NLIST_SIZE); - if (syms == NULL && count != 0) + syms = (struct external_nlist *) bfd_malloc (amt); + if (syms == NULL) return FALSE; - amt = exec_hdr (abfd)->a_syms; if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 || bfd_bread (syms, amt, abfd) != amt) { @@ -1342,7 +1351,7 @@ aout_get_external_symbols (bfd *abfd) return FALSE; strings = (char *) obj_aout_string_window (abfd).data; #else - strings = bfd_malloc (stringsize + 1); + strings = (char *) bfd_malloc (stringsize + 1); if (strings == NULL) return FALSE; @@ -1661,12 +1670,12 @@ NAME (aout, make_empty_symbol) (bfd *abfd) { bfd_size_type amt = sizeof (aout_symbol_type); - aout_symbol_type *new = bfd_zalloc (abfd, amt); - if (!new) + aout_symbol_type *new_symbol = (aout_symbol_type *) bfd_zalloc (abfd, amt); + if (!new_symbol) return NULL; - new->symbol.the_bfd = abfd; + new_symbol->symbol.the_bfd = abfd; - return &new->symbol; + return &new_symbol->symbol; } /* Translate a set of internal symbols into external symbols. */ @@ -1743,7 +1752,7 @@ NAME (aout, slurp_symbol_table) (bfd *abfd) return TRUE; /* Nothing to do. */ cached_size *= sizeof (aout_symbol_type); - cached = bfd_zmalloc (cached_size); + cached = (aout_symbol_type *) bfd_zmalloc (cached_size); if (cached == NULL) return FALSE; @@ -1801,7 +1810,7 @@ add_to_stringtab (bfd *abfd, bfd_boolean copy) { bfd_boolean hash; - bfd_size_type index; + bfd_size_type str_index; /* An index of 0 always means the empty string. */ if (str == 0 || *str == '\0') @@ -1813,14 +1822,14 @@ add_to_stringtab (bfd *abfd, if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0) hash = FALSE; - index = _bfd_stringtab_add (tab, str, hash, copy); + str_index = _bfd_stringtab_add (tab, str, hash, copy); - if (index != (bfd_size_type) -1) + if (str_index != (bfd_size_type) -1) /* Add BYTES_IN_WORD to the return value to account for the space taken up by the string table size. */ - index += BYTES_IN_WORD; + str_index += BYTES_IN_WORD; - return index; + return str_index; } /* Write out a strtab. ABFD is already at the right location in the @@ -2304,7 +2313,7 @@ NAME (aout, slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols) return TRUE; /* Nothing to be done. */ amt = count * sizeof (arelent); - reloc_cache = bfd_zmalloc (amt); + reloc_cache = (arelent *) bfd_zmalloc (amt); if (reloc_cache == NULL) return FALSE; @@ -2365,7 +2374,7 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section) each_size = obj_reloc_entry_size (abfd); natsize = (bfd_size_type) each_size * count; - native = bfd_zalloc (abfd, natsize); + native = (unsigned char *) bfd_zalloc (abfd, natsize); if (!native) return FALSE; @@ -2627,12 +2636,13 @@ NAME (aout, minisymbol_to_symbol) (bfd *abfd, bfd_boolean NAME (aout, find_nearest_line) (bfd *abfd, - asection *section, asymbol **symbols, + asection *section, bfd_vma offset, const char **filename_ptr, const char **functionname_ptr, - unsigned int *line_ptr) + unsigned int *line_ptr, + unsigned int *disriminator_ptr) { /* Run down the file looking for the filename, function and linenumber. */ asymbol **p; @@ -2650,6 +2660,8 @@ NAME (aout, find_nearest_line) (bfd *abfd, *filename_ptr = abfd->filename; *functionname_ptr = 0; *line_ptr = 0; + if (disriminator_ptr) + *disriminator_ptr = 0; if (symbols != NULL) { @@ -2779,7 +2791,7 @@ NAME (aout, find_nearest_line) (bfd *abfd, adata (abfd).line_buf = buf = NULL; else { - buf = bfd_malloc (filelen + funclen + 3); + buf = (char *) bfd_malloc (filelen + funclen + 3); adata (abfd).line_buf = buf; if (buf == NULL) return FALSE; @@ -2873,7 +2885,8 @@ NAME (aout, link_hash_newfunc) (struct bfd_hash_entry *entry, /* Allocate the structure if it has not already been allocated by a subclass. */ if (ret == NULL) - ret = bfd_hash_allocate (table, sizeof (* ret)); + ret = (struct aout_link_hash_entry *) bfd_hash_allocate (table, + sizeof (* ret)); if (ret == NULL) return NULL; @@ -2912,7 +2925,7 @@ NAME (aout, link_hash_table_create) (bfd *abfd) struct aout_link_hash_table *ret; bfd_size_type amt = sizeof (* ret); - ret = bfd_malloc (amt); + ret = (struct aout_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; @@ -2967,7 +2980,7 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info) table, but keeping the list is more efficient. Perhaps this should be conditional on info->keep_memory. */ amt = sym_count * sizeof (struct aout_link_hash_entry *); - sym_hash = bfd_alloc (abfd, amt); + sym_hash = (struct aout_link_hash_entry **) bfd_alloc (abfd, amt); if (sym_hash == NULL) return FALSE; obj_aout_sym_hashes (abfd) = sym_hash; @@ -3200,7 +3213,8 @@ aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) static bfd_boolean aout_link_check_ar_symbols (bfd *abfd, struct bfd_link_info *info, - bfd_boolean *pneeded) + bfd_boolean *pneeded, + bfd **subsbfd) { struct external_nlist *p; struct external_nlist *pend; @@ -3276,7 +3290,7 @@ aout_link_check_ar_symbols (bfd *abfd, { int skip = 0; - switch (info->common_skip_ar_aymbols) + switch (info->common_skip_ar_symbols) { case bfd_link_common_skip_text: skip = (type == (N_TEXT | N_EXT)); @@ -3294,7 +3308,8 @@ aout_link_check_ar_symbols (bfd *abfd, continue; } - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (!(*info->callbacks + ->add_archive_element) (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3321,9 +3336,8 @@ aout_link_check_ar_symbols (bfd *abfd, outside BFD. We assume that we should link in the object file. This is done for the -u option in the linker. */ - if (! (*info->callbacks->add_archive_element) (info, - abfd, - name)) + if (!(*info->callbacks + ->add_archive_element) (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3331,8 +3345,9 @@ aout_link_check_ar_symbols (bfd *abfd, /* Turn the current link symbol into a common symbol. It is already on the undefs list. */ h->type = bfd_link_hash_common; - h->u.c.p = bfd_hash_allocate (&info->hash->table, - sizeof (struct bfd_link_hash_common_entry)); + h->u.c.p = (struct bfd_link_hash_common_entry *) + bfd_hash_allocate (&info->hash->table, + sizeof (struct bfd_link_hash_common_entry)); if (h->u.c.p == NULL) return FALSE; @@ -3370,7 +3385,8 @@ aout_link_check_ar_symbols (bfd *abfd, it if the current link symbol is common. */ if (h->type == bfd_link_hash_undefined) { - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (!(*info->callbacks + ->add_archive_element) (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3389,23 +3405,40 @@ aout_link_check_ar_symbols (bfd *abfd, static bfd_boolean aout_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, + struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED, + const char *name ATTRIBUTE_UNUSED, bfd_boolean *pneeded) { - if (! aout_get_external_symbols (abfd)) + bfd *oldbfd; + bfd_boolean needed; + + if (!aout_get_external_symbols (abfd)) return FALSE; - if (! aout_link_check_ar_symbols (abfd, info, pneeded)) + oldbfd = abfd; + if (!aout_link_check_ar_symbols (abfd, info, pneeded, &abfd)) return FALSE; - if (*pneeded) + needed = *pneeded; + if (needed) { - if (! aout_link_add_symbols (abfd, info)) + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (abfd != oldbfd) + { + if (!info->keep_memory + && !aout_link_free_symbols (oldbfd)) + return FALSE; + if (!aout_get_external_symbols (abfd)) + return FALSE; + } + if (!aout_link_add_symbols (abfd, info)) return FALSE; } - if (! info->keep_memory || ! *pneeded) + if (!info->keep_memory || !needed) { - if (! aout_link_free_symbols (abfd)) + if (!aout_link_free_symbols (abfd)) return FALSE; } @@ -3502,7 +3535,8 @@ aout_link_includes_newfunc (struct bfd_hash_entry *entry, /* Allocate the structure if it has not already been allocated by a subclass. */ if (ret == NULL) - ret = bfd_hash_allocate (table, sizeof (* ret)); + ret = (struct aout_link_includes_entry *) + bfd_hash_allocate (table, sizeof (* ret)); if (ret == NULL) return NULL; @@ -3522,9 +3556,10 @@ aout_link_includes_newfunc (struct bfd_hash_entry *entry, object. */ static bfd_boolean -aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) +aout_link_write_other_symbol (struct bfd_hash_entry *bh, void *data) { - struct aout_final_link_info *finfo = (struct aout_final_link_info *) data; + struct aout_link_hash_entry *h = (struct aout_link_hash_entry *) bh; + struct aout_final_link_info *flaginfo = (struct aout_final_link_info *) data; bfd *output_bfd; int type; bfd_vma val; @@ -3539,12 +3574,12 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) return TRUE; } - output_bfd = finfo->output_bfd; + output_bfd = flaginfo->output_bfd; if (aout_backend_info (output_bfd)->write_dynamic_symbol != NULL) { if (! ((*aout_backend_info (output_bfd)->write_dynamic_symbol) - (output_bfd, finfo->info, h))) + (output_bfd, flaginfo->info, h))) { /* FIXME: No way to handle errors. */ abort (); @@ -3558,9 +3593,9 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) /* An indx of -2 means the symbol must be written. */ if (h->indx != -2 - && (finfo->info->strip == strip_all - || (finfo->info->strip == strip_some - && bfd_hash_lookup (finfo->info->keep_hash, h->root.root.string, + && (flaginfo->info->strip == strip_all + || (flaginfo->info->strip == strip_some + && bfd_hash_lookup (flaginfo->info->keep_hash, h->root.root.string, FALSE, FALSE) == NULL))) return TRUE; @@ -3608,6 +3643,7 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) case bfd_link_hash_undefweak: type = N_WEAKU; val = 0; + break; case bfd_link_hash_indirect: /* We ignore these symbols, since the indirected symbol is already in the hash table. */ @@ -3617,7 +3653,7 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) H_PUT_8 (output_bfd, type, outsym.e_type); H_PUT_8 (output_bfd, 0, outsym.e_other); H_PUT_16 (output_bfd, 0, outsym.e_desc); - indx = add_to_stringtab (output_bfd, finfo->strtab, h->root.root.string, + indx = add_to_stringtab (output_bfd, flaginfo->strtab, h->root.root.string, FALSE); if (indx == - (bfd_size_type) 1) /* FIXME: No way to handle errors. */ @@ -3627,12 +3663,12 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) PUT_WORD (output_bfd, val, outsym.e_value); amt = EXTERNAL_NLIST_SIZE; - if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0 + if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0 || bfd_bwrite ((void *) &outsym, amt, output_bfd) != amt) /* FIXME: No way to handle errors. */ abort (); - finfo->symoff += EXTERNAL_NLIST_SIZE; + flaginfo->symoff += EXTERNAL_NLIST_SIZE; h->indx = obj_aout_external_sym_count (output_bfd); ++obj_aout_external_sym_count (output_bfd); @@ -3642,7 +3678,7 @@ aout_link_write_other_symbol (struct aout_link_hash_entry *h, void * data) /* Handle a link order which is supposed to generate a reloc. */ static bfd_boolean -aout_link_reloc_link_order (struct aout_final_link_info *finfo, +aout_link_reloc_link_order (struct aout_final_link_info *flaginfo, asection *o, struct bfd_link_order *p) { @@ -3665,7 +3701,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, r_index = N_ABS | N_EXT; else { - BFD_ASSERT (pr->u.section->owner == finfo->output_bfd); + BFD_ASSERT (pr->u.section->owner == flaginfo->output_bfd); r_index = pr->u.section->target_index; } } @@ -3676,7 +3712,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, BFD_ASSERT (p->type == bfd_symbol_reloc_link_order); r_extern = 1; h = ((struct aout_link_hash_entry *) - bfd_wrapped_link_hash_lookup (finfo->output_bfd, finfo->info, + bfd_wrapped_link_hash_lookup (flaginfo->output_bfd, flaginfo->info, pr->u.name, FALSE, FALSE, TRUE)); if (h != NULL && h->indx >= 0) @@ -3689,37 +3725,37 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, symbol. */ h->indx = -2; h->written = FALSE; - if (! aout_link_write_other_symbol (h, (void *) finfo)) + if (!aout_link_write_other_symbol (&h->root.root, flaginfo)) return FALSE; r_index = h->indx; } else { - if (! ((*finfo->info->callbacks->unattached_reloc) - (finfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0))) + if (! ((*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, pr->u.name, NULL, NULL, (bfd_vma) 0))) return FALSE; r_index = 0; } } - howto = bfd_reloc_type_lookup (finfo->output_bfd, pr->reloc); + howto = bfd_reloc_type_lookup (flaginfo->output_bfd, pr->reloc); if (howto == 0) { bfd_set_error (bfd_error_bad_value); return FALSE; } - if (o == obj_textsec (finfo->output_bfd)) - reloff_ptr = &finfo->treloff; - else if (o == obj_datasec (finfo->output_bfd)) - reloff_ptr = &finfo->dreloff; + if (o == obj_textsec (flaginfo->output_bfd)) + reloff_ptr = &flaginfo->treloff; + else if (o == obj_datasec (flaginfo->output_bfd)) + reloff_ptr = &flaginfo->dreloff; else abort (); - if (obj_reloc_entry_size (finfo->output_bfd) == RELOC_STD_SIZE) + if (obj_reloc_entry_size (flaginfo->output_bfd) == RELOC_STD_SIZE) { #ifdef MY_put_reloc - MY_put_reloc (finfo->output_bfd, r_extern, r_index, p->offset, howto, + MY_put_reloc (flaginfo->output_bfd, r_extern, r_index, p->offset, howto, &srel); #else { @@ -3735,8 +3771,8 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, r_relative = (howto->type & 32) != 0; r_length = howto->size; - PUT_WORD (finfo->output_bfd, p->offset, srel.r_address); - if (bfd_header_big_endian (finfo->output_bfd)) + PUT_WORD (flaginfo->output_bfd, p->offset, srel.r_address); + if (bfd_header_big_endian (flaginfo->output_bfd)) { srel.r_index[0] = r_index >> 16; srel.r_index[1] = r_index >> 8; @@ -3779,10 +3815,10 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, bfd_boolean ok; size = bfd_get_reloc_size (howto); - buf = bfd_zmalloc (size); + buf = (bfd_byte *) bfd_zmalloc (size); if (buf == NULL) return FALSE; - r = MY_relocate_contents (howto, finfo->output_bfd, + r = MY_relocate_contents (howto, flaginfo->output_bfd, (bfd_vma) pr->addend, buf); switch (r) { @@ -3792,10 +3828,10 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, case bfd_reloc_outofrange: abort (); case bfd_reloc_overflow: - if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, NULL, + if (! ((*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, NULL, (p->type == bfd_section_reloc_link_order - ? bfd_section_name (finfo->output_bfd, + ? bfd_section_name (flaginfo->output_bfd, pr->u.section) : pr->u.name), howto->name, pr->addend, NULL, NULL, (bfd_vma) 0))) @@ -3805,7 +3841,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, } break; } - ok = bfd_set_section_contents (finfo->output_bfd, o, (void *) buf, + ok = bfd_set_section_contents (flaginfo->output_bfd, o, (void *) buf, (file_ptr) p->offset, size); free (buf); if (! ok) @@ -3815,12 +3851,12 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, else { #ifdef MY_put_ext_reloc - MY_put_ext_reloc (finfo->output_bfd, r_extern, r_index, p->offset, + MY_put_ext_reloc (flaginfo->output_bfd, r_extern, r_index, p->offset, howto, &erel, pr->addend); #else - PUT_WORD (finfo->output_bfd, p->offset, erel.r_address); + PUT_WORD (flaginfo->output_bfd, p->offset, erel.r_address); - if (bfd_header_big_endian (finfo->output_bfd)) + if (bfd_header_big_endian (flaginfo->output_bfd)) { erel.r_index[0] = r_index >> 16; erel.r_index[1] = r_index >> 8; @@ -3839,25 +3875,25 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, | (howto->type << RELOC_EXT_BITS_TYPE_SH_LITTLE); } - PUT_WORD (finfo->output_bfd, (bfd_vma) pr->addend, erel.r_addend); + PUT_WORD (flaginfo->output_bfd, (bfd_vma) pr->addend, erel.r_addend); #endif /* MY_put_ext_reloc */ rel_ptr = (void *) &erel; } - amt = obj_reloc_entry_size (finfo->output_bfd); - if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0 - || bfd_bwrite (rel_ptr, amt, finfo->output_bfd) != amt) + amt = obj_reloc_entry_size (flaginfo->output_bfd); + if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0 + || bfd_bwrite (rel_ptr, amt, flaginfo->output_bfd) != amt) return FALSE; - *reloff_ptr += obj_reloc_entry_size (finfo->output_bfd); + *reloff_ptr += obj_reloc_entry_size (flaginfo->output_bfd); /* Assert that the relocs have not run into the symbols, and that n the text relocs have not run into the data relocs. */ - BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd) - && (reloff_ptr != &finfo->treloff + BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd) + && (reloff_ptr != &flaginfo->treloff || (*reloff_ptr - <= obj_datasec (finfo->output_bfd)->rel_filepos))); + <= obj_datasec (flaginfo->output_bfd)->rel_filepos))); return TRUE; } @@ -3882,7 +3918,7 @@ aout_reloc_index_to_section (bfd *abfd, int indx) /* Relocate an a.out section using standard a.out relocs. */ static bfd_boolean -aout_link_input_section_std (struct aout_final_link_info *finfo, +aout_link_input_section_std (struct aout_final_link_info *flaginfo, bfd *input_bfd, asection *input_section, struct reloc_std_external *relocs, @@ -3903,18 +3939,18 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, struct reloc_std_external *rel; struct reloc_std_external *rel_end; - output_bfd = finfo->output_bfd; + output_bfd = flaginfo->output_bfd; check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc; BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_STD_SIZE); BFD_ASSERT (input_bfd->xvec->header_byteorder == output_bfd->xvec->header_byteorder); - relocatable = finfo->info->relocatable; + relocatable = flaginfo->info->relocatable; syms = obj_aout_external_syms (input_bfd); strings = obj_aout_external_strings (input_bfd); sym_hashes = obj_aout_sym_hashes (input_bfd); - symbol_map = finfo->symbol_map; + symbol_map = flaginfo->symbol_map; reloc_count = rel_size / RELOC_STD_SIZE; rel = relocs; @@ -3983,7 +4019,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, if (howto == NULL) { - (*finfo->info->callbacks->einfo) + (*flaginfo->info->callbacks->einfo) (_("%P: %B: unexpected relocation type\n"), input_bfd); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -4047,8 +4083,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, { h->indx = -2; h->written = FALSE; - if (! aout_link_write_other_symbol (h, - (void *) finfo)) + if (!aout_link_write_other_symbol (&h->root.root, + flaginfo)) return FALSE; } r_index = h->indx; @@ -4059,8 +4095,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*finfo->info->callbacks->unattached_reloc) - (finfo->info, name, input_bfd, input_section, + if (! ((*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, input_bfd, input_section, r_addr))) return FALSE; r_index = 0; @@ -4166,7 +4202,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, bfd_boolean skip; if (! ((*check_dynamic_reloc) - (finfo->info, input_bfd, input_section, h, + (flaginfo->info, input_bfd, input_section, h, (void *) rel, contents, &skip, &relocation))) return FALSE; if (skip) @@ -4176,7 +4212,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, /* Now warn if a global symbol is undefined. We could not do this earlier, because check_dynamic_reloc might want to skip this reloc. */ - if (hundef && ! finfo->info->shared && ! r_baserel) + if (hundef && ! flaginfo->info->shared && ! r_baserel) { const char *name; @@ -4184,8 +4220,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, name = h->root.root.string; else name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*finfo->info->callbacks->undefined_symbol) - (finfo->info, name, input_bfd, input_section, + if (! ((*flaginfo->info->callbacks->undefined_symbol) + (flaginfo->info, name, input_bfd, input_section, r_addr, TRUE))) return FALSE; } @@ -4219,8 +4255,8 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, s = aout_reloc_index_to_section (input_bfd, r_index); name = bfd_section_name (input_bfd, s); } - if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, (h ? &h->root : NULL), name, + if (! ((*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, input_bfd, input_section, r_addr))) return FALSE; @@ -4236,7 +4272,7 @@ aout_link_input_section_std (struct aout_final_link_info *finfo, /* Relocate an a.out section using extended a.out relocs. */ static bfd_boolean -aout_link_input_section_ext (struct aout_final_link_info *finfo, +aout_link_input_section_ext (struct aout_final_link_info *flaginfo, bfd *input_bfd, asection *input_section, struct reloc_ext_external *relocs, @@ -4257,18 +4293,18 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, struct reloc_ext_external *rel; struct reloc_ext_external *rel_end; - output_bfd = finfo->output_bfd; + output_bfd = flaginfo->output_bfd; check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc; BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_EXT_SIZE); BFD_ASSERT (input_bfd->xvec->header_byteorder == output_bfd->xvec->header_byteorder); - relocatable = finfo->info->relocatable; + relocatable = flaginfo->info->relocatable; syms = obj_aout_external_syms (input_bfd); strings = obj_aout_external_strings (input_bfd); sym_hashes = obj_aout_sym_hashes (input_bfd); - symbol_map = finfo->symbol_map; + symbol_map = flaginfo->symbol_map; reloc_count = rel_size / RELOC_EXT_SIZE; rel = relocs; @@ -4309,7 +4345,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, if (r_type >= TABLE_SIZE (howto_table_ext)) { - (*finfo->info->callbacks->einfo) + (*flaginfo->info->callbacks->einfo) (_("%P: %B: unexpected relocation type\n"), input_bfd); bfd_set_error (bfd_error_bad_value); return FALSE; @@ -4389,8 +4425,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, { h->indx = -2; h->written = FALSE; - if (! aout_link_write_other_symbol (h, - (void *) finfo)) + if (!aout_link_write_other_symbol (&h->root.root, + flaginfo)) return FALSE; } r_index = h->indx; @@ -4401,8 +4437,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*finfo->info->callbacks->unattached_reloc) - (finfo->info, name, input_bfd, input_section, + if (! ((*flaginfo->info->callbacks->unattached_reloc) + (flaginfo->info, name, input_bfd, input_section, r_addr))) return FALSE; r_index = 0; @@ -4569,7 +4605,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, bfd_boolean skip; if (! ((*check_dynamic_reloc) - (finfo->info, input_bfd, input_section, h, + (flaginfo->info, input_bfd, input_section, h, (void *) rel, contents, &skip, &relocation))) return FALSE; if (skip) @@ -4580,7 +4616,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, do this earlier, because check_dynamic_reloc might want to skip this reloc. */ if (hundef - && ! finfo->info->shared + && ! flaginfo->info->shared && r_type != (unsigned int) RELOC_BASE10 && r_type != (unsigned int) RELOC_BASE13 && r_type != (unsigned int) RELOC_BASE22) @@ -4591,8 +4627,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, name = h->root.root.string; else name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); - if (! ((*finfo->info->callbacks->undefined_symbol) - (finfo->info, name, input_bfd, input_section, + if (! ((*flaginfo->info->callbacks->undefined_symbol) + (flaginfo->info, name, input_bfd, input_section, r_addr, TRUE))) return FALSE; } @@ -4638,8 +4674,8 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, s = aout_reloc_index_to_section (input_bfd, r_index); name = bfd_section_name (input_bfd, s); } - if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, (h ? &h->root : NULL), name, + if (! ((*flaginfo->info->callbacks->reloc_overflow) + (flaginfo->info, (h ? &h->root : NULL), name, howto_table_ext[r_type].name, r_addend, input_bfd, input_section, r_addr))) return FALSE; @@ -4656,7 +4692,7 @@ aout_link_input_section_ext (struct aout_final_link_info *finfo, /* Link an a.out section into the output file. */ static bfd_boolean -aout_link_input_section (struct aout_final_link_info *finfo, +aout_link_input_section (struct aout_final_link_info *flaginfo, bfd *input_bfd, asection *input_section, file_ptr *reloff_ptr, @@ -4668,7 +4704,7 @@ aout_link_input_section (struct aout_final_link_info *finfo, /* Get the section contents. */ input_size = input_section->size; if (! bfd_get_section_contents (input_bfd, input_section, - (void *) finfo->contents, + (void *) flaginfo->contents, (file_ptr) 0, input_size)) return FALSE; @@ -4678,7 +4714,7 @@ aout_link_input_section (struct aout_final_link_info *finfo, relocs = aout_section_data (input_section)->relocs; else { - relocs = finfo->relocs; + relocs = flaginfo->relocs; if (rel_size > 0) { if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0 @@ -4690,44 +4726,44 @@ aout_link_input_section (struct aout_final_link_info *finfo, /* Relocate the section contents. */ if (obj_reloc_entry_size (input_bfd) == RELOC_STD_SIZE) { - if (! aout_link_input_section_std (finfo, input_bfd, input_section, + if (! aout_link_input_section_std (flaginfo, input_bfd, input_section, (struct reloc_std_external *) relocs, - rel_size, finfo->contents)) + rel_size, flaginfo->contents)) return FALSE; } else { - if (! aout_link_input_section_ext (finfo, input_bfd, input_section, + if (! aout_link_input_section_ext (flaginfo, input_bfd, input_section, (struct reloc_ext_external *) relocs, - rel_size, finfo->contents)) + rel_size, flaginfo->contents)) return FALSE; } /* Write out the section contents. */ - if (! bfd_set_section_contents (finfo->output_bfd, + if (! bfd_set_section_contents (flaginfo->output_bfd, input_section->output_section, - (void *) finfo->contents, + (void *) flaginfo->contents, (file_ptr) input_section->output_offset, input_size)) return FALSE; /* If we are producing relocatable output, the relocs were modified, and we now write them out. */ - if (finfo->info->relocatable && rel_size > 0) + if (flaginfo->info->relocatable && rel_size > 0) { - if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0) + if (bfd_seek (flaginfo->output_bfd, *reloff_ptr, SEEK_SET) != 0) return FALSE; - if (bfd_bwrite (relocs, rel_size, finfo->output_bfd) != rel_size) + if (bfd_bwrite (relocs, rel_size, flaginfo->output_bfd) != rel_size) return FALSE; *reloff_ptr += rel_size; /* Assert that the relocs have not run into the symbols, and that if these are the text relocs they have not run into the data relocs. */ - BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd) - && (reloff_ptr != &finfo->treloff + BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (flaginfo->output_bfd) + && (reloff_ptr != &flaginfo->treloff || (*reloff_ptr - <= obj_datasec (finfo->output_bfd)->rel_filepos))); + <= obj_datasec (flaginfo->output_bfd)->rel_filepos))); } return TRUE; @@ -4737,7 +4773,7 @@ aout_link_input_section (struct aout_final_link_info *finfo, symbol indices into a symbol_map. */ static bfd_boolean -aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) +aout_link_write_symbols (struct aout_final_link_info *flaginfo, bfd *input_bfd) { bfd *output_bfd; bfd_size_type sym_count; @@ -4753,25 +4789,25 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) bfd_boolean pass; bfd_boolean skip_next; - output_bfd = finfo->output_bfd; + output_bfd = flaginfo->output_bfd; sym_count = obj_aout_external_sym_count (input_bfd); strings = obj_aout_external_strings (input_bfd); - strip = finfo->info->strip; - discard = finfo->info->discard; - outsym = finfo->output_syms; + strip = flaginfo->info->strip; + discard = flaginfo->info->discard; + outsym = flaginfo->output_syms; /* First write out a symbol for this object file, unless we are discarding such symbols. */ if (strip != strip_all && (strip != strip_some - || bfd_hash_lookup (finfo->info->keep_hash, input_bfd->filename, + || bfd_hash_lookup (flaginfo->info->keep_hash, input_bfd->filename, FALSE, FALSE) != NULL) && discard != discard_all) { H_PUT_8 (output_bfd, N_TEXT, outsym->e_type); H_PUT_8 (output_bfd, 0, outsym->e_other); H_PUT_16 (output_bfd, 0, outsym->e_desc); - strtab_index = add_to_stringtab (output_bfd, finfo->strtab, + strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab, input_bfd->filename, FALSE); if (strtab_index == (bfd_size_type) -1) return FALSE; @@ -4790,7 +4826,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) sym = obj_aout_external_syms (input_bfd); sym_end = sym + sym_count; sym_hash = obj_aout_sym_hashes (input_bfd); - symbol_map = finfo->symbol_map; + symbol_map = flaginfo->symbol_map; memset (symbol_map, 0, (size_t) sym_count * sizeof *symbol_map); for (; sym < sym_end; sym++, sym_hash++, symbol_map++) { @@ -4889,7 +4925,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) skip = TRUE; break; case strip_some: - if (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, FALSE) + if (bfd_hash_lookup (flaginfo->info->keep_hash, name, FALSE, FALSE) == NULL) skip = TRUE; break; @@ -5117,8 +5153,8 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) /* If we have already included a header file with the same value, then replace this one with an N_EXCL symbol. */ - copy = (bfd_boolean) (! finfo->info->keep_memory); - incl_entry = aout_link_includes_lookup (&finfo->includes, + copy = (bfd_boolean) (! flaginfo->info->keep_memory); + incl_entry = aout_link_includes_lookup (&flaginfo->includes, name, TRUE, copy); if (incl_entry == NULL) return FALSE; @@ -5129,7 +5165,8 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) { /* This is the first time we have seen this header file with this set of stabs strings. */ - t = bfd_hash_allocate (&finfo->includes.root, + t = (struct aout_link_includes_totals *) + bfd_hash_allocate (&flaginfo->includes.root, sizeof *t); if (t == NULL) return FALSE; @@ -5178,7 +5215,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) H_PUT_8 (output_bfd, H_GET_8 (input_bfd, sym->e_other), outsym->e_other); H_PUT_16 (output_bfd, H_GET_16 (input_bfd, sym->e_desc), outsym->e_desc); copy = FALSE; - if (! finfo->info->keep_memory) + if (! flaginfo->info->keep_memory) { /* name points into a string table which we are going to free. If there is a hash table entry, use that string. @@ -5188,7 +5225,7 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) else copy = TRUE; } - strtab_index = add_to_stringtab (output_bfd, finfo->strtab, + strtab_index = add_to_stringtab (output_bfd, flaginfo->strtab, name, copy); if (strtab_index == (bfd_size_type) -1) return FALSE; @@ -5200,18 +5237,18 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) } /* Write out the output symbols we have just constructed. */ - if (outsym > finfo->output_syms) + if (outsym > flaginfo->output_syms) { bfd_size_type outsym_size; - if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0) + if (bfd_seek (output_bfd, flaginfo->symoff, SEEK_SET) != 0) return FALSE; - outsym_size = outsym - finfo->output_syms; + outsym_size = outsym - flaginfo->output_syms; outsym_size *= EXTERNAL_NLIST_SIZE; - if (bfd_bwrite ((void *) finfo->output_syms, outsym_size, output_bfd) + if (bfd_bwrite ((void *) flaginfo->output_syms, outsym_size, output_bfd) != outsym_size) return FALSE; - finfo->symoff += outsym_size; + flaginfo->symoff += outsym_size; } return TRUE; @@ -5220,28 +5257,24 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) /* Link an a.out input BFD into the output file. */ static bfd_boolean -aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd) +aout_link_input_bfd (struct aout_final_link_info *flaginfo, bfd *input_bfd) { - bfd_size_type sym_count; - BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object); /* If this is a dynamic object, it may need special handling. */ if ((input_bfd->flags & DYNAMIC) != 0 && aout_backend_info (input_bfd)->link_dynamic_object != NULL) return ((*aout_backend_info (input_bfd)->link_dynamic_object) - (finfo->info, input_bfd)); + (flaginfo->info, input_bfd)); /* Get the symbols. We probably have them already, unless - finfo->info->keep_memory is FALSE. */ + flaginfo->info->keep_memory is FALSE. */ if (! aout_get_external_symbols (input_bfd)) return FALSE; - sym_count = obj_aout_external_sym_count (input_bfd); - /* Write out the symbols and get a map of the new indices. The map - is placed into finfo->symbol_map. */ - if (! aout_link_write_symbols (finfo, input_bfd)) + is placed into flaginfo->symbol_map. */ + if (! aout_link_write_symbols (flaginfo, input_bfd)) return FALSE; /* Relocate and write out the sections. These functions use the @@ -5250,17 +5283,17 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd) link, which will normally be the case. */ if (obj_textsec (input_bfd)->linker_mark) { - if (! aout_link_input_section (finfo, input_bfd, + if (! aout_link_input_section (flaginfo, input_bfd, obj_textsec (input_bfd), - &finfo->treloff, + &flaginfo->treloff, exec_hdr (input_bfd)->a_trsize)) return FALSE; } if (obj_datasec (input_bfd)->linker_mark) { - if (! aout_link_input_section (finfo, input_bfd, + if (! aout_link_input_section (flaginfo, input_bfd, obj_datasec (input_bfd), - &finfo->dreloff, + &flaginfo->dreloff, exec_hdr (input_bfd)->a_drsize)) return FALSE; } @@ -5268,7 +5301,7 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd) /* If we are not keeping memory, we don't need the symbols any longer. We still need them if we are keeping memory, because the strings in the hash table point into them. */ - if (! finfo->info->keep_memory) + if (! flaginfo->info->keep_memory) { if (! aout_link_free_symbols (input_bfd)) return FALSE; @@ -5279,7 +5312,7 @@ aout_link_input_bfd (struct aout_final_link_info *finfo, bfd *input_bfd) /* Do the final link step. This is called on the output BFD. The INFO structure should point to a list of BFDs linked through the - link_next field which can be used to find each BFD which takes part + link.next field which can be used to find each BFD which takes part in the output. Also, each section in ABFD should point to a list of bfd_link_order structures which list all the input sections for the output section. */ @@ -5326,7 +5359,7 @@ NAME (aout, final_link) (bfd *abfd, max_contents_size = 0; max_relocs_size = 0; max_sym_count = 0; - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) + for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) { bfd_size_type sz; @@ -5420,11 +5453,11 @@ NAME (aout, final_link) (bfd *abfd, goto error_return; /* Allocate buffers to hold section contents and relocs. */ - aout_info.contents = bfd_malloc (max_contents_size); + aout_info.contents = (bfd_byte *) bfd_malloc (max_contents_size); aout_info.relocs = bfd_malloc (max_relocs_size); - aout_info.symbol_map = bfd_malloc (max_sym_count * sizeof (int *)); - aout_info.output_syms = bfd_malloc ((max_sym_count + 1) - * sizeof (struct external_nlist)); + aout_info.symbol_map = (int *) bfd_malloc (max_sym_count * sizeof (int)); + aout_info.output_syms = (struct external_nlist *) + bfd_malloc ((max_sym_count + 1) * sizeof (struct external_nlist)); if ((aout_info.contents == NULL && max_contents_size != 0) || (aout_info.relocs == NULL && max_relocs_size != 0) || (aout_info.symbol_map == NULL && max_sym_count != 0) @@ -5441,7 +5474,7 @@ NAME (aout, final_link) (bfd *abfd, h = aout_link_hash_lookup (aout_hash_table (info), "__DYNAMIC", FALSE, FALSE, FALSE); if (h != NULL) - aout_link_write_other_symbol (h, &aout_info); + aout_link_write_other_symbol (&h->root.root, &aout_info); } /* The most time efficient way to do the link would be to read all @@ -5465,7 +5498,7 @@ NAME (aout, final_link) (bfd *abfd, We use the output_has_begun field of the input BFDs to see whether we have already handled it. */ - for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) + for (sub = info->input_bfds; sub != NULL; sub = sub->link.next) sub->output_has_begun = FALSE; /* Mark all sections which are to be included in the link. This @@ -5515,9 +5548,9 @@ NAME (aout, final_link) (bfd *abfd, } /* Write out any symbols that we have not already written out. */ - aout_link_hash_traverse (aout_hash_table (info), - aout_link_write_other_symbol, - (void *) &aout_info); + bfd_hash_traverse (&info->hash->table, + aout_link_write_other_symbol, + &aout_info); /* Now handle any relocs we were asked to create by the linker. These did not come from any input file. We must do these after