diff options
author | Ian Lance Taylor <ian@airs.com> | 1993-11-09 21:08:58 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1993-11-09 21:08:58 +0000 |
commit | a5ccdad1fcaacb2c0943ed562d2f9176bffe742d (patch) | |
tree | 66d01e8a39570658dae698a5886fe6419ebe842a /bfd/elf32-hppa.c | |
parent | e4d7f4c779f203d6e299c13038e5a54f23de963e (diff) | |
download | gdb-a5ccdad1fcaacb2c0943ed562d2f9176bffe742d.zip gdb-a5ccdad1fcaacb2c0943ed562d2f9176bffe742d.tar.gz gdb-a5ccdad1fcaacb2c0943ed562d2f9176bffe742d.tar.bz2 |
* elfcode.h (elf_object_p): Rather than looking through an array
of architectures, get the ELF EM_xxx code from the backend
information. Let the generic ELF target match any EM_xxx code not
matched by another ELF target. Call elf_backend_object_p to let
the backend do more checks and set global information.
* libelf.h (struct elf_backend_data): Added elf_machine_code and
elf_backend_object_p fields.
(struct bfd_elf_arch_map): Removed.
(bfd_elf_arch_map, bfd_elf_arch_map_size): Don't declare.
* elf32-target.h, elf64-target.h: Initialize elf_machine_code
field with ELF_MACHINE_CODE. Initialize elf_backend_object_p
field with elf_backend_object_p (if it is defined).
* elf32-gen.c, elf32-hppa.c, elf32-i386.c, elf32-i860.c,
elf32-m68k.c, elf32-m88k.c, elf32-mips.c, elf32-sparc.c,
elf64-gen.c (ELF_MACHINE_CODE): Defined.
* elf32-mips.c: Include ecoffswap.h to get ECOFF swapping
routines.
(mips_elf_object_p): Set the right machine number.
(mips_elf_ecoff_debug_swap): Defined.
(elf_backend_object_p): Defined to be mips_elf_object_p.
(elf_backend_ecoff_debug_swap): Defined to be
mips_elf_ecoff_debug_swap.
* elf.c (bfd_elf_arch_map, bfd_elf_arch_map_size): Removed.
* elf32-mips.c (elf_mips_howto_table): Don't complain on overflow
for R_MIPS_26. Correct overflow detection requires matching the
upper four bits of the destination against the PC. From Ted Lemon
<mellon@pepper.ncd.com>.
* elf32-hppa.c (elf_hppa_reloc_type_lookup): Return type
should point to const data.
Diffstat (limited to 'bfd/elf32-hppa.c')
-rw-r--r-- | bfd/elf32-hppa.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index 68c85fd..87cc948 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -1585,7 +1585,7 @@ DEFUN (hppa_elf_reloc, (abfd, reloc_entry, symbol_in, data, input_section, outpu } -static reloc_howto_type * +static const reloc_howto_type * elf_hppa_reloc_type_lookup (arch, code) bfd_arch_info_type *arch; bfd_reloc_code_real_type code; @@ -2236,13 +2236,15 @@ hppa_elf_build_arg_reloc_stub (abfd, output_bfd, reloc_entry, stub_types) if (!stub_desc->stub_contents) { stub_desc->allocated_size = STUB_BUFFER_INCR; - stub_desc->stub_contents = (char *) xmalloc (STUB_BUFFER_INCR); + stub_desc->stub_contents = (char *) bfd_xmalloc (STUB_BUFFER_INCR); } else if ((stub_desc->allocated_size - stub_desc->real_size) < STUB_MAX_SIZE) { stub_desc->allocated_size = stub_desc->allocated_size + STUB_BUFFER_INCR; - stub_desc->stub_contents = (char *) xrealloc (stub_desc->stub_contents, - stub_desc->allocated_size); + stub_desc->stub_contents = (char *) realloc (stub_desc->stub_contents, + stub_desc->allocated_size); + if (stub_desc->stub_contents == NULL) + abort (); } stub_desc->stub_secp = (int *) (stub_desc->stub_contents + stub_desc->real_size); @@ -3148,12 +3150,10 @@ hppa_elf_get_section_contents (abfd, section, location, offset, count) be generated. */ else if (strcmp (section->name, ".hppa_symextn") == 0) { - /* If this is the first time through and there are no output - sections, then read the contents of the symbol extension section - from disk. */ - if (! symext_chain_built - || ((section->output_section == NULL) - && (abfd->direction == read_direction))) + /* If there are no output sections, then read the contents of the + symbol extension section from disk. */ + if (section->output_section == NULL + && abfd->direction == read_direction) { return bfd_generic_get_section_contents (abfd, section, location, offset, count); @@ -3165,17 +3165,22 @@ hppa_elf_get_section_contents (abfd, section, location, offset, count) else if (! symext_chain_built) { int i; - int *symtab_map = elf_sym_extra(section->output_section->owner); + int *symtab_map = + (int *) elf_sym_extra(section->output_section->owner); for (i = 0; i < section->output_section->owner->symcount; i++ ) { elf_hppa_tc_symbol(section->output_section->owner, - section->output_section->owner->outsymbols[i], + ((elf_symbol_type *) + section->output_section->owner->outsymbols[i]), symtab_map[i]); } symext_chain_built++; elf_hppa_tc_make_sections (section->output_section->owner, NULL); } + + /* At this point we know that the symbol extension section has been + built. We just need to copy it into the user's buffer. */ if (count == 0) return true; @@ -3501,6 +3506,7 @@ DEFUN (elf32_hppa_backend_section_from_bfd_section, (abfd, hdr, asect, retval), #define TARGET_BIG_SYM bfd_elf32_hppa_vec #define TARGET_BIG_NAME "elf32-hppa" #define ELF_ARCH bfd_arch_hppa +#define ELF_MACHINE_CODE EM_HPPA #define ELF_MAXPAGESIZE 0x1000 #include "elf32-target.h" |