aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-hppa.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1993-11-09 21:08:58 +0000
committerIan Lance Taylor <ian@airs.com>1993-11-09 21:08:58 +0000
commita5ccdad1fcaacb2c0943ed562d2f9176bffe742d (patch)
tree66d01e8a39570658dae698a5886fe6419ebe842a /bfd/elf32-hppa.c
parente4d7f4c779f203d6e299c13038e5a54f23de963e (diff)
downloadgdb-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.c30
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"