diff options
author | Jeff Law <law@redhat.com> | 1994-03-26 18:28:29 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1994-03-26 18:28:29 +0000 |
commit | 250578363e45567f5168e913f58959dd10575ba8 (patch) | |
tree | ca1f77735e1ecb4169a578509949bffbe1499ebf /bfd/hp300hpux.c | |
parent | 649694ea87ae0cbd4355ac0d68f27e6052fc10e4 (diff) | |
download | gdb-250578363e45567f5168e913f58959dd10575ba8.zip gdb-250578363e45567f5168e913f58959dd10575ba8.tar.gz gdb-250578363e45567f5168e913f58959dd10575ba8.tar.bz2 |
* libbfd.c (bfd_read): Set bfd_error as appropriate for a short
read. (bfd_error_system_call or bfd_error_file_truncated).
* som.c: Do not blindly set bfd_error_system_call after a
failing bfd_read, bfd_write, or bfd_seek. In a few places
(like som_object_p) override the error status set by bfd_read.
* aix386-core.c, aout-encap,c archive.c, bout.c: Likewise.
* coff-rs6000.c, coffgen.c ecoff.c, elf.c: Likewise.
* elf32-hppa.c, elfcode.h, hp300hpux.c, i386lynx.c: Likewise.
* nlm32-alpha.c, nlm32-i386.c, nlm32-sparc.c: Likewise.
* som.c: Check return values from several bfd_{seek,read,write}
calls that we just assumed were not failing.
Diffstat (limited to 'bfd/hp300hpux.c')
-rw-r--r-- | bfd/hp300hpux.c | 717 |
1 files changed, 370 insertions, 347 deletions
diff --git a/bfd/hp300hpux.c b/bfd/hp300hpux.c index 08f7473..5be01e3 100644 --- a/bfd/hp300hpux.c +++ b/bfd/hp300hpux.c @@ -187,26 +187,26 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Set parameters about this a.out file that are machine-dependent. This routine is called from some_aout_object_p just before it returns. */ static bfd_target * -DEFUN(MY(callback),(abfd), - bfd *abfd) +MY (callback) (abfd) + bfd *abfd; { struct internal_exec *execp = exec_hdr (abfd); /* Calculate the file positions of the parts of a newly read aout header */ - obj_textsec (abfd)->_raw_size = N_TXTSIZE(*execp); + obj_textsec (abfd)->_raw_size = N_TXTSIZE (*execp); /* The virtual memory addresses of the sections */ - obj_textsec (abfd)->vma = N_TXTADDR(*execp); - obj_datasec (abfd)->vma = N_DATADDR(*execp); - obj_bsssec (abfd)->vma = N_BSSADDR(*execp); + obj_textsec (abfd)->vma = N_TXTADDR (*execp); + obj_datasec (abfd)->vma = N_DATADDR (*execp); + obj_bsssec (abfd)->vma = N_BSSADDR (*execp); /* The file offsets of the sections */ obj_textsec (abfd)->filepos = N_TXTOFF (*execp); obj_datasec (abfd)->filepos = N_DATOFF (*execp); /* The file offsets of the relocation info */ - obj_textsec (abfd)->rel_filepos = N_TRELOFF(*execp); - obj_datasec (abfd)->rel_filepos = N_DRELOFF(*execp); + obj_textsec (abfd)->rel_filepos = N_TRELOFF (*execp); + obj_datasec (abfd)->rel_filepos = N_DRELOFF (*execp); /* The file offsets of the string table and symbol table. */ obj_sym_filepos (abfd) = N_SYMOFF (*execp); @@ -214,161 +214,163 @@ DEFUN(MY(callback),(abfd), /* Determine the architecture and machine type of the object file. */ #ifdef SET_ARCH_MACH - SET_ARCH_MACH(abfd, *execp); + SET_ARCH_MACH (abfd, *execp); #else - bfd_default_set_arch_mach(abfd, DEFAULT_ARCH, 0); + bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0); #endif - if (obj_aout_subformat(abfd) == gnu_encap_format) - { + if (obj_aout_subformat (abfd) == gnu_encap_format) + { /* The file offsets of the relocation info */ - obj_textsec (abfd)->rel_filepos = N_GNU_TRELOFF(*execp); - obj_datasec (abfd)->rel_filepos = N_GNU_DRELOFF(*execp); + obj_textsec (abfd)->rel_filepos = N_GNU_TRELOFF (*execp); + obj_datasec (abfd)->rel_filepos = N_GNU_DRELOFF (*execp); /* The file offsets of the string table and symbol table. */ - obj_sym_filepos (abfd) = N_GNU_SYMOFF(*execp); + obj_sym_filepos (abfd) = N_GNU_SYMOFF (*execp); obj_str_filepos (abfd) = (obj_sym_filepos (abfd) + execp->a_syms); abfd->flags |= HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS; bfd_get_symcount (abfd) = execp->a_syms / 12; obj_symbol_entry_size (abfd) = 12; obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; - } + } return abfd->xvec; } -extern boolean aout_32_write_syms PARAMS ((bfd *abfd)); +extern boolean aout_32_write_syms PARAMS ((bfd * abfd)); static boolean -DEFUN(MY(write_object_contents),(abfd), - bfd *abfd) +MY (write_object_contents) (abfd) + bfd *abfd; { - struct external_exec exec_bytes; - struct internal_exec *execp = exec_hdr (abfd); - bfd_size_type text_size; /* dummy vars */ - file_ptr text_end; + struct external_exec exec_bytes; + struct internal_exec *execp = exec_hdr (abfd); + bfd_size_type text_size; /* dummy vars */ + file_ptr text_end; - memset (&exec_bytes, 0, sizeof (exec_bytes)); + memset (&exec_bytes, 0, sizeof (exec_bytes)); #if CHOOSE_RELOC_SIZE - CHOOSE_RELOC_SIZE(abfd); + CHOOSE_RELOC_SIZE (abfd); #else - obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; + obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; #endif - if (adata(abfd).magic == undecided_magic) - NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end); - execp->a_syms = 0; + if (adata (abfd).magic == undecided_magic) + NAME (aout, adjust_sizes_and_vmas) (abfd, &text_size, &text_end); + execp->a_syms = 0; - execp->a_entry = bfd_get_start_address (abfd); + execp->a_entry = bfd_get_start_address (abfd); - execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * - obj_reloc_entry_size (abfd)); - execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * - obj_reloc_entry_size (abfd)); + execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * + obj_reloc_entry_size (abfd)); + execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * + obj_reloc_entry_size (abfd)); - N_SET_MACHTYPE(*execp, 0xc); - N_SET_FLAGS (*execp, 0x2); + N_SET_MACHTYPE (*execp, 0xc); + N_SET_FLAGS (*execp, 0x2); - NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes); + NAME (aout, swap_exec_header_out) (abfd, execp, &exec_bytes); - /* update fields not covered by default swap_exec_header_out */ + /* update fields not covered by default swap_exec_header_out */ - /* this is really the sym table size but we store it in drelocs */ - bfd_h_put_32 (abfd, bfd_get_symcount (abfd) * 12, exec_bytes.e_drelocs); + /* this is really the sym table size but we store it in drelocs */ + bfd_h_put_32 (abfd, bfd_get_symcount (abfd) * 12, exec_bytes.e_drelocs); - bfd_seek (abfd, 0L, false); - bfd_write ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd); + bfd_seek (abfd, 0L, false); + bfd_write ((PTR) & exec_bytes, 1, EXEC_BYTES_SIZE, abfd); - /* Write out the symbols, and then the relocs. We must write out + /* Write out the symbols, and then the relocs. We must write out the symbols first so that we know the symbol indices. */ - if (bfd_get_symcount (abfd) != 0) - { - /* Skip the relocs to where we want to put the symbols. */ - if (bfd_seek (abfd, (file_ptr) N_DRELOFF (*execp) + execp->a_drsize, - SEEK_SET) != 0) - return false; - } + if (bfd_get_symcount (abfd) != 0) + { + /* Skip the relocs to where we want to put the symbols. */ + if (bfd_seek (abfd, (file_ptr) N_DRELOFF (*execp) + execp->a_drsize, + SEEK_SET) != 0) + return false; + } - if (! MY(write_syms) (abfd)) - return false; + if (!MY (write_syms) (abfd)) + return false; - if (bfd_get_symcount (abfd) != 0) - { - bfd_seek (abfd, (long)(N_TRELOFF(*execp)), false); + if (bfd_get_symcount (abfd) != 0) + { + bfd_seek (abfd, (long) (N_TRELOFF (*execp)), false); - if (!NAME(aout,squirt_out_relocs) (abfd, obj_textsec (abfd))) return false; - bfd_seek (abfd, (long)(N_DRELOFF(*execp)), false); + if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd))) + return false; + bfd_seek (abfd, (long) (N_DRELOFF (*execp)), false); - if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd))) return false; + if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd))) + return false; } - return true; -} + return true; +} /* convert the hp symbol type to be the same as aout64.h usage so we */ /* can piggyback routines in aoutx.h. */ static void -DEFUN(convert_sym_type,(sym_pointer, cache_ptr, abfd), - struct external_nlist *sym_pointer AND - aout_symbol_type *cache_ptr AND - bfd *abfd) +convert_sym_type (sym_pointer, cache_ptr, abfd) + struct external_nlist *sym_pointer; + aout_symbol_type *cache_ptr; + bfd *abfd; { - int name_type; - int new_type; + int name_type; + int new_type; - name_type = (cache_ptr->type); - new_type = 0; + name_type = (cache_ptr->type); + new_type = 0; - if ((name_type & HP_SYMTYPE_ALIGN) != 0) + if ((name_type & HP_SYMTYPE_ALIGN) != 0) { - /* iou_error ("aligned symbol encountered: %s", name);*/ - name_type = 0; + /* iou_error ("aligned symbol encountered: %s", name);*/ + name_type = 0; } - if (name_type == HP_SYMTYPE_FILENAME) - new_type = N_FN; - else - { - switch (name_type & HP_SYMTYPE_TYPE) - { - case HP_SYMTYPE_UNDEFINED: - new_type = N_UNDF; - break; - - case HP_SYMTYPE_ABSOLUTE: - new_type = N_ABS; - break; - - case HP_SYMTYPE_TEXT: - new_type = N_TEXT; - break; - - case HP_SYMTYPE_DATA: - new_type = N_DATA; - break; - - case HP_SYMTYPE_BSS: - new_type = N_BSS; - break; - - case HP_SYMTYPE_COMMON: - new_type = N_COMM; - break; - - default: - fprintf (stderr, "unknown symbol type encountered: %x", name_type); - } - if (name_type & HP_SYMTYPE_EXTERNAL) - new_type |= N_EXT; - - if (name_type & HP_SECONDARY_SYMBOL) - new_type = (new_type & ~N_TYPE) | N_INDR; - } - cache_ptr->type = new_type; + if (name_type == HP_SYMTYPE_FILENAME) + new_type = N_FN; + else + { + switch (name_type & HP_SYMTYPE_TYPE) + { + case HP_SYMTYPE_UNDEFINED: + new_type = N_UNDF; + break; + + case HP_SYMTYPE_ABSOLUTE: + new_type = N_ABS; + break; + + case HP_SYMTYPE_TEXT: + new_type = N_TEXT; + break; + + case HP_SYMTYPE_DATA: + new_type = N_DATA; + break; + + case HP_SYMTYPE_BSS: + new_type = N_BSS; + break; + + case HP_SYMTYPE_COMMON: + new_type = N_COMM; + break; + + default: + fprintf (stderr, "unknown symbol type encountered: %x", name_type); + } + if (name_type & HP_SYMTYPE_EXTERNAL) + new_type |= N_EXT; + + if (name_type & HP_SECONDARY_SYMBOL) + new_type = (new_type & ~N_TYPE) | N_INDR; + } + cache_ptr->type = new_type; } @@ -381,12 +383,12 @@ DESCRIPTION */ void -DEFUN(NAME(aout,swap_exec_header_in),(abfd, raw_bytes, execp), - bfd *abfd AND - struct external_exec *raw_bytes AND - struct internal_exec *execp) + NAME (aout, swap_exec_header_in) (abfd, raw_bytes, execp) + bfd *abfd; + struct external_exec *raw_bytes; + struct internal_exec *execp; { - struct external_exec *bytes = (struct external_exec *)raw_bytes; + struct external_exec *bytes = (struct external_exec *) raw_bytes; /* The internal_exec structure has some fields that are unused in this configuration (IE for i960), so ensure that all such uninitialized @@ -394,12 +396,12 @@ DEFUN(NAME(aout,swap_exec_header_in),(abfd, raw_bytes, execp), are memcmp'd, and thus the contents do matter. */ memset (execp, 0, sizeof (struct internal_exec)); /* Now fill in fields in the execp, from the bytes in the raw data. */ - execp->a_info = bfd_h_get_32 (abfd, bytes->e_info); - execp->a_text = GET_WORD (abfd, bytes->e_text); - execp->a_data = GET_WORD (abfd, bytes->e_data); - execp->a_bss = GET_WORD (abfd, bytes->e_bss); - execp->a_syms = GET_WORD (abfd, bytes->e_syms); - execp->a_entry = GET_WORD (abfd, bytes->e_entry); + execp->a_info = bfd_h_get_32 (abfd, bytes->e_info); + execp->a_text = GET_WORD (abfd, bytes->e_text); + execp->a_data = GET_WORD (abfd, bytes->e_data); + execp->a_bss = GET_WORD (abfd, bytes->e_bss); + execp->a_syms = GET_WORD (abfd, bytes->e_syms); + execp->a_entry = GET_WORD (abfd, bytes->e_entry); execp->a_trsize = GET_WORD (abfd, bytes->e_trsize); execp->a_drsize = GET_WORD (abfd, bytes->e_drsize); @@ -410,29 +412,35 @@ DEFUN(NAME(aout,swap_exec_header_in),(abfd, raw_bytes, execp), /* to be set. */ /***************************************************************/ do - { + { long syms; - struct aout_data_struct *rawptr; - if (bfd_h_get_32 (abfd, bytes->e_passize) != 0) break; - if (bfd_h_get_32 (abfd, bytes->e_syms) != 0) break; - if (bfd_h_get_32 (abfd, bytes->e_supsize) != 0) break; + struct aout_data_struct *rawptr; + if (bfd_h_get_32 (abfd, bytes->e_passize) != 0) + break; + if (bfd_h_get_32 (abfd, bytes->e_syms) != 0) + break; + if (bfd_h_get_32 (abfd, bytes->e_supsize) != 0) + break; syms = bfd_h_get_32 (abfd, bytes->e_drelocs); - if (syms == 0) break; + if (syms == 0) + break; /* OK, we've passed the test as best as we can determine */ execp->a_syms = syms; /* allocate storage for where we will store this result */ - rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, sizeof (*rawptr)); + rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, sizeof (*rawptr)); - if (rawptr == NULL) { - bfd_error = no_memory; - return; - } + if (rawptr == NULL) + { + bfd_set_error (bfd_error_no_memory); + return; + } abfd->tdata.aout_data = rawptr; - obj_aout_subformat(abfd) = gnu_encap_format; - } while (0); + obj_aout_subformat (abfd) = gnu_encap_format; + } + while (0); } @@ -460,8 +468,8 @@ DEFUN(NAME(aout,swap_exec_header_in),(abfd, raw_bytes, execp), */ boolean -DEFUN(MY(slurp_symbol_table),(abfd), - bfd *abfd) +MY (slurp_symbol_table) (abfd) + bfd *abfd; { bfd_size_type symbol_bytes; struct external_nlist *syms; @@ -473,50 +481,52 @@ DEFUN(MY(slurp_symbol_table),(abfd), unsigned num_secondary = 0; /* If there's no work to be done, don't do any */ - if (obj_aout_symbols (abfd) != (aout_symbol_type *)NULL) return true; - symbol_bytes = exec_hdr(abfd)->a_syms; - if (symbol_bytes == 0) { - bfd_error = no_symbols; - return false; - } + if (obj_aout_symbols (abfd) != (aout_symbol_type *) NULL) + return true; + symbol_bytes = exec_hdr (abfd)->a_syms; + if (symbol_bytes == 0) + { + bfd_set_error (bfd_error_no_symbols); + return false; + } - strings = (char *) bfd_alloc(abfd, - symbol_bytes + SYM_EXTRA_BYTES); + strings = (char *) bfd_alloc (abfd, + symbol_bytes + SYM_EXTRA_BYTES); if (!strings) { - bfd_error = no_memory; + bfd_set_error (bfd_error_no_memory); return false; } syms = (struct external_nlist *) (strings + SYM_EXTRA_BYTES); bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET); - if (bfd_read ((PTR)syms, symbol_bytes, 1, abfd) != symbol_bytes) - { + if (bfd_read ((PTR) syms, symbol_bytes, 1, abfd) != symbol_bytes) + { bfd_release (abfd, syms); return false; - } + } - sym_end = (struct external_nlist *) (((char *)syms) + symbol_bytes); + sym_end = (struct external_nlist *) (((char *) syms) + symbol_bytes); /* first, march thru the table and figure out how many symbols there are */ for (sym_pointer = syms; sym_pointer < sym_end; sym_pointer++, num_syms++) - { - if (bfd_get_8(abfd, sym_pointer->e_type) & HP_SECONDARY_SYMBOL) - num_secondary++; + { + if (bfd_get_8 (abfd, sym_pointer->e_type) & HP_SECONDARY_SYMBOL) + num_secondary++; /* skip over the embedded symbol. */ - sym_pointer = (struct external_nlist *) (((char *)sym_pointer) + - sym_pointer->e_length[0]); - } + sym_pointer = (struct external_nlist *) (((char *) sym_pointer) + + sym_pointer->e_length[0]); + } /* now that we know the symbol count, update the bfd header */ - bfd_get_symcount (abfd) = num_syms+num_secondary; + bfd_get_symcount (abfd) = num_syms + num_secondary; cached = (aout_symbol_type *) - bfd_zalloc(abfd, (bfd_size_type)(bfd_get_symcount (abfd) * - sizeof(aout_symbol_type))); + bfd_zalloc (abfd, (bfd_size_type) (bfd_get_symcount (abfd) * + sizeof (aout_symbol_type))); if (!cached) { - bfd_error = no_memory; + bfd_set_error (bfd_error_no_memory); return false; } @@ -527,82 +537,82 @@ DEFUN(MY(slurp_symbol_table),(abfd), num_secondary = 0; /* OK, now walk the new symtable, cacheing symbol properties */ - { - aout_symbol_type *cache_ptr = cached; - aout_symbol_type cache_save; - /* Run through table and copy values */ - for (sym_pointer = syms, cache_ptr = cached; - sym_pointer < sym_end; sym_pointer++, cache_ptr++) + { + aout_symbol_type *cache_ptr = cached; + aout_symbol_type cache_save; + /* Run through table and copy values */ + for (sym_pointer = syms, cache_ptr = cached; + sym_pointer < sym_end; sym_pointer++, cache_ptr++) + { + unsigned int length; + cache_ptr->symbol.the_bfd = abfd; + cache_ptr->symbol.value = GET_SWORD (abfd, sym_pointer->e_value); + cache_ptr->desc = bfd_get_16 (abfd, sym_pointer->e_almod); + cache_ptr->type = bfd_get_8 (abfd, sym_pointer->e_type); + cache_ptr->symbol.udata = 0; + length = bfd_get_8 (abfd, sym_pointer->e_length); + cache_ptr->other = length; /* other not used, save length here */ + + cache_save = *cache_ptr; + convert_sym_type (sym_pointer, cache_ptr, abfd); + if (!translate_from_native_sym_flags (sym_pointer, cache_ptr, abfd)) + return false; + + /********************************************************/ + /* for hpux, the 'lenght' value indicates the length of */ + /* the symbol name which follows the nlist entry. */ + /********************************************************/ + if (length) { - unsigned int length; - cache_ptr->symbol.the_bfd = abfd; - cache_ptr->symbol.value = GET_SWORD(abfd, sym_pointer->e_value); - cache_ptr->desc = bfd_get_16(abfd, sym_pointer->e_almod); - cache_ptr->type = bfd_get_8(abfd, sym_pointer->e_type); - cache_ptr->symbol.udata = 0; - length = bfd_get_8(abfd, sym_pointer->e_length); - cache_ptr->other = length; /* other not used, save length here */ - - cache_save = *cache_ptr; - convert_sym_type(sym_pointer, cache_ptr, abfd); - if (!translate_from_native_sym_flags (sym_pointer, cache_ptr, abfd)) + /**************************************************************/ + /* the hp string is not null terminated so we create a new one*/ + /* by copying the string to overlap the just vacated nlist */ + /* structure before it in memory. */ + /**************************************************************/ + cache_ptr->symbol.name = strings; + memcpy (strings, sym_pointer + 1, length); + strings[length] = '\0'; + strings += length + 1; + } + else + cache_ptr->symbol.name = (char *) NULL; + + /**********************************************************/ + /* this is a bit of a kludge, but a secondary hp symbol */ + /* gets translated into a gnu indirect symbol. When this */ + /* happens, we need to create a "dummy" record to which */ + /* we can point the indirect symbol to. */ + /**********************************************************/ + if ((cache_ptr->type | N_EXT) == (N_INDR | N_EXT)) + { + aout_symbol_type *cache_ptr2 = cached + num_syms + num_secondary; + + num_secondary++; + + /* aoutx.h assumes the "next" value is the indirect sym */ + /* since we don't want to disturb the order by inserting */ + /* a new symbol, we tack on the created secondary syms */ + /* at the end. */ + cache_ptr->symbol.value = (bfd_vma) (cache_ptr2); + *cache_ptr2 = cache_save; + cache_ptr2->symbol.name = strings; + memcpy (strings, cache_ptr->symbol.name, length); + strcpy (strings + length, ":secondry"); /* 9 max chars + null */ + strings += length + 10; + cache_ptr2->type &= ~HP_SECONDARY_SYMBOL; /* clear secondary */ + convert_sym_type (sym_pointer, cache_ptr2, abfd); + if (!translate_from_native_sym_flags (sym_pointer, cache_ptr2, + abfd)) return false; - - /********************************************************/ - /* for hpux, the 'lenght' value indicates the length of */ - /* the symbol name which follows the nlist entry. */ - /********************************************************/ - if (length) - { - /**************************************************************/ - /* the hp string is not null terminated so we create a new one*/ - /* by copying the string to overlap the just vacated nlist */ - /* structure before it in memory. */ - /**************************************************************/ - cache_ptr->symbol.name = strings; - memcpy(strings, sym_pointer+1, length); - strings[length] = '\0'; - strings += length + 1; - } - else - cache_ptr->symbol.name = (char *)NULL; - - /**********************************************************/ - /* this is a bit of a kludge, but a secondary hp symbol */ - /* gets translated into a gnu indirect symbol. When this */ - /* happens, we need to create a "dummy" record to which */ - /* we can point the indirect symbol to. */ - /**********************************************************/ - if ((cache_ptr->type | N_EXT) == (N_INDR | N_EXT)) - { - aout_symbol_type *cache_ptr2 = cached + num_syms+num_secondary; - - num_secondary++; - - /* aoutx.h assumes the "next" value is the indirect sym */ - /* since we don't want to disturb the order by inserting */ - /* a new symbol, we tack on the created secondary syms */ - /* at the end. */ - cache_ptr->symbol.value = (bfd_vma)(cache_ptr2); - *cache_ptr2 = cache_save; - cache_ptr2->symbol.name = strings; - memcpy(strings, cache_ptr->symbol.name, length); - strcpy(strings+length,":secondry"); /* 9 max chars + null */ - strings += length+10; - cache_ptr2->type &= ~HP_SECONDARY_SYMBOL; /* clear secondary */ - convert_sym_type(sym_pointer, cache_ptr2, abfd); - if (!translate_from_native_sym_flags (sym_pointer, cache_ptr2, - abfd)) - return false; - } - - /* skip over the embedded symbol. */ - sym_pointer = (struct external_nlist *) (((char *)sym_pointer) + - length); } - } - obj_aout_symbols (abfd) = cached; + /* skip over the embedded symbol. */ + sym_pointer = (struct external_nlist *) (((char *) sym_pointer) + + length); + } + } + + obj_aout_symbols (abfd) = cached; return true; } @@ -610,49 +620,49 @@ DEFUN(MY(slurp_symbol_table),(abfd), void -DEFUN(MY(swap_std_reloc_in), (abfd, bytes, cache_ptr, symbols), - bfd *abfd AND - struct hp300hpux_reloc *bytes AND - arelent *cache_ptr AND - asymbol **symbols) +MY (swap_std_reloc_in) (abfd, bytes, cache_ptr, symbols) + bfd *abfd; + struct hp300hpux_reloc *bytes; + arelent *cache_ptr; + asymbol **symbols; { int r_index; int r_extern = 0; unsigned int r_length; int r_pcrel = 0; - struct aoutdata *su = &(abfd->tdata.aout_data->a); + struct aoutdata *su = &(abfd->tdata.aout_data->a); cache_ptr->address = bfd_h_get_32 (abfd, bytes->r_address); - r_index = bfd_h_get_16(abfd, bytes->r_index); + r_index = bfd_h_get_16 (abfd, bytes->r_index); switch (bytes->r_type[0]) - { - case HP_RSEGMENT_TEXT: + { + case HP_RSEGMENT_TEXT: r_index = N_TEXT; break; - case HP_RSEGMENT_DATA: + case HP_RSEGMENT_DATA: r_index = N_DATA; break; - case HP_RSEGMENT_BSS: + case HP_RSEGMENT_BSS: r_index = N_BSS; break; - case HP_RSEGMENT_EXTERNAL: + case HP_RSEGMENT_EXTERNAL: r_extern = 1; break; - case HP_RSEGMENT_PCREL: + case HP_RSEGMENT_PCREL: r_extern = 1; r_pcrel = 1; break; - case HP_RSEGMENT_RDLT: + case HP_RSEGMENT_RDLT: break; - case HP_RSEGMENT_RPLT: + case HP_RSEGMENT_RPLT: break; - case HP_RSEGMENT_NOOP: + case HP_RSEGMENT_NOOP: break; - default: + default: fprintf (stderr, "illegal relocation segment type: %x\n", (bytes->r_type[0])); - } + } switch (bytes->r_length[0]) { @@ -666,32 +676,32 @@ DEFUN(MY(swap_std_reloc_in), (abfd, bytes, cache_ptr, symbols), r_length = 2; break; default: - fprintf (stderr, "illegal relocation length: %x\n",bytes->r_length[0] ); + fprintf (stderr, "illegal relocation length: %x\n", bytes->r_length[0]); r_length = 0; } - cache_ptr->howto = howto_table_std + r_length + 4 * r_pcrel; + cache_ptr->howto = howto_table_std + r_length + 4 * r_pcrel; /* FIXME-soon: Roll baserel, jmptable, relative bits into howto setting */ /* This macro uses the r_index value computed above */ if (r_pcrel && r_extern) - { - /* The GNU linker assumes any offset from beginning of section */ - /* is already incorporated into the image while the HP linker */ - /* adds this in later. Add it in now... */ - MOVE_ADDRESS( - cache_ptr->address); - } + { + /* The GNU linker assumes any offset from beginning of section */ + /* is already incorporated into the image while the HP linker */ + /* adds this in later. Add it in now... */ + MOVE_ADDRESS (-cache_ptr->address); + } else - { - MOVE_ADDRESS(0); - } + { + MOVE_ADDRESS (0); + } } boolean -DEFUN(MY(slurp_reloc_table),(abfd, asect, symbols), - bfd *abfd AND - sec_ptr asect AND - asymbol **symbols) +MY (slurp_reloc_table) (abfd, asect, symbols) + bfd *abfd; + sec_ptr asect; + asymbol **symbols; { unsigned int count; bfd_size_type reloc_size; @@ -702,61 +712,68 @@ DEFUN(MY(slurp_reloc_table),(abfd, asect, symbols), unsigned int counter; arelent *cache_ptr; - if (asect->relocation) return true; + if (asect->relocation) + return true; - if (asect->flags & SEC_CONSTRUCTOR) return true; + if (asect->flags & SEC_CONSTRUCTOR) + return true; - if (asect == obj_datasec (abfd)) { - reloc_size = exec_hdr(abfd)->a_drsize; - goto doit; - } + if (asect == obj_datasec (abfd)) + { + reloc_size = exec_hdr (abfd)->a_drsize; + goto doit; + } - if (asect == obj_textsec (abfd)) { - reloc_size = exec_hdr(abfd)->a_trsize; - goto doit; - } + if (asect == obj_textsec (abfd)) + { + reloc_size = exec_hdr (abfd)->a_trsize; + goto doit; + } - bfd_error = invalid_operation; + bfd_set_error (bfd_error_invalid_operation); return false; - doit: +doit: bfd_seek (abfd, asect->rel_filepos, SEEK_SET); each_size = obj_reloc_entry_size (abfd); count = reloc_size / each_size; - reloc_cache = (arelent *) bfd_zalloc (abfd, (size_t)(count * sizeof - (arelent))); - if (!reloc_cache) { -nomem: - bfd_error = no_memory; - return false; - } + reloc_cache = (arelent *) bfd_zalloc (abfd, (size_t) (count * sizeof + (arelent))); + if (!reloc_cache) + { + nomem: + bfd_set_error (bfd_error_no_memory); + return false; + } relocs = (PTR) bfd_alloc (abfd, reloc_size); - if (!relocs) { - bfd_release (abfd, reloc_cache); - goto nomem; - } + if (!relocs) + { + bfd_release (abfd, reloc_cache); + goto nomem; + } - if (bfd_read (relocs, 1, reloc_size, abfd) != reloc_size) { - bfd_release (abfd, relocs); - bfd_release (abfd, reloc_cache); - bfd_error = system_call_error; - return false; - } + if (bfd_read (relocs, 1, reloc_size, abfd) != reloc_size) + { + bfd_release (abfd, relocs); + bfd_release (abfd, reloc_cache); + return false; + } - rptr = (struct hp300hpux_reloc*) relocs; - counter = 0; - cache_ptr = reloc_cache; + rptr = (struct hp300hpux_reloc *) relocs; + counter = 0; + cache_ptr = reloc_cache; - for (; counter < count; counter++, rptr++, cache_ptr++) { - MY(swap_std_reloc_in)(abfd, rptr, cache_ptr, symbols); + for (; counter < count; counter++, rptr++, cache_ptr++) + { + MY (swap_std_reloc_in) (abfd, rptr, cache_ptr, symbols); } - bfd_release (abfd,relocs); + bfd_release (abfd, relocs); asect->relocation = reloc_cache; asect->reloc_count = count; return true; @@ -769,77 +786,83 @@ nomem: /* call aout_32 versions if the input file was generated by gcc */ /************************************************************************/ -unsigned int aout_32_get_symtab PARAMS((bfd *abfd, asymbol **location)); -unsigned int aout_32_get_symtab_upper_bound PARAMS ((bfd *abfd)); +unsigned int aout_32_get_symtab PARAMS ((bfd * abfd, asymbol ** location)); +unsigned int aout_32_get_symtab_upper_bound PARAMS ((bfd * abfd)); -unsigned int aout_32_canonicalize_reloc PARAMS((bfd *abfd, sec_ptr section, - arelent **relptr, - asymbol **symbols)); +unsigned int aout_32_canonicalize_reloc PARAMS ((bfd * abfd, sec_ptr section, + arelent ** relptr, + asymbol ** symbols)); unsigned int -DEFUN(MY(get_symtab),(abfd, location), - bfd *abfd AND - asymbol **location) +MY (get_symtab) (abfd, location) + bfd *abfd; + asymbol **location; { - unsigned int counter = 0; - aout_symbol_type *symbase; + unsigned int counter = 0; + aout_symbol_type *symbase; - if (obj_aout_subformat(abfd) == gnu_encap_format) - return aout_32_get_symtab(abfd,location); + if (obj_aout_subformat (abfd) == gnu_encap_format) + return aout_32_get_symtab (abfd, location); - if (!MY(slurp_symbol_table)(abfd)) return 0; + if (!MY (slurp_symbol_table) (abfd)) + return 0; - for (symbase = obj_aout_symbols(abfd); counter++ < bfd_get_symcount (abfd);) - *(location++) = (asymbol *)( symbase++); - *location++ =0; - return bfd_get_symcount (abfd); + for (symbase = obj_aout_symbols (abfd); counter++ < bfd_get_symcount (abfd);) + *(location++) = (asymbol *) (symbase++); + *location++ = 0; + return bfd_get_symcount (abfd); } - unsigned int -DEFUN(MY(get_symtab_upper_bound),(abfd), - bfd *abfd) +unsigned int +MY (get_symtab_upper_bound) (abfd) + bfd *abfd; { - if (obj_aout_subformat(abfd) == gnu_encap_format) - return aout_32_get_symtab_upper_bound(abfd); - if (!MY(slurp_symbol_table)(abfd)) return 0; + if (obj_aout_subformat (abfd) == gnu_encap_format) + return aout_32_get_symtab_upper_bound (abfd); + if (!MY (slurp_symbol_table) (abfd)) + return 0; - return (bfd_get_symcount (abfd)+1) * (sizeof (aout_symbol_type *)); + return (bfd_get_symcount (abfd) + 1) * (sizeof (aout_symbol_type *)); } unsigned int -DEFUN(MY(canonicalize_reloc),(abfd, section, relptr, symbols), - bfd *abfd AND - sec_ptr section AND - arelent **relptr AND - asymbol **symbols) +MY (canonicalize_reloc) (abfd, section, relptr, symbols) + bfd *abfd; + sec_ptr section; + arelent **relptr; + asymbol **symbols; { arelent *tblptr = section->relocation; unsigned int count; - if (obj_aout_subformat(abfd) == gnu_encap_format) - return aout_32_canonicalize_reloc(abfd,section,relptr,symbols); + if (obj_aout_subformat (abfd) == gnu_encap_format) + return aout_32_canonicalize_reloc (abfd, section, relptr, symbols); - if (!(tblptr || MY(slurp_reloc_table)(abfd, section, symbols))) + if (!(tblptr || MY (slurp_reloc_table) (abfd, section, symbols))) return 0; - if (section->flags & SEC_CONSTRUCTOR) { - arelent_chain *chain = section->constructor_chain; - for (count = 0; count < section->reloc_count; count ++) { - *relptr ++ = &chain->relent; - chain = chain->next; + if (section->flags & SEC_CONSTRUCTOR) + { + arelent_chain *chain = section->constructor_chain; + for (count = 0; count < section->reloc_count; count++) + { + *relptr++ = &chain->relent; + chain = chain->next; + } + } + else + { + tblptr = section->relocation; + if (!tblptr) + return 0; + + for (count = 0; count++ < section->reloc_count;) + { + *relptr++ = tblptr++; + } } - } - else { - tblptr = section->relocation; - if (!tblptr) return 0; - - for (count = 0; count++ < section->reloc_count;) - { - *relptr++ = tblptr++; - } - } *relptr = 0; return section->reloc_count; |