aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/elf32-hppa.c30
-rw-r--r--bfd/elf32-target.h5
-rw-r--r--bfd/elf64-target.h5
-rw-r--r--bfd/libelf.h19
4 files changed, 39 insertions, 20 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"
diff --git a/bfd/elf32-target.h b/bfd/elf32-target.h
index 9b1c832..2711fbd 100644
--- a/bfd/elf32-target.h
+++ b/bfd/elf32-target.h
@@ -61,6 +61,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ELF_MAXPAGESIZE 1
#endif
+#ifndef elf_backend_object_p
+#define elf_backend_object_p 0 /* elf_backend_object_p */
+#endif
#ifndef elf_backend_symbol_processing
#define elf_backend_symbol_processing 0 /* elf_backend_symbol_processing */
#endif
@@ -92,9 +95,11 @@ static CONST struct elf_backend_data elf32_bed =
#endif
0, /* elf_64_p */
ELF_ARCH, /* arch */
+ ELF_MACHINE_CODE, /* elf_machine_code */
ELF_MAXPAGESIZE, /* maxpagesize */
elf_info_to_howto, /* elf_info_to_howto */
elf_info_to_howto_rel, /* elf_info_to_howto_rel */
+ elf_backend_object_p, /* elf_backend_object_p */
elf_backend_symbol_processing, /* elf_backend_symbol_processing */
elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
elf_backend_section_processing, /* elf_backend_section_processing */
diff --git a/bfd/elf64-target.h b/bfd/elf64-target.h
index 790e4a6..8ada3b9 100644
--- a/bfd/elf64-target.h
+++ b/bfd/elf64-target.h
@@ -59,6 +59,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define ELF_MAXPAGESIZE 1
#endif
+#ifndef elf_backend_object_p
+#define elf_backend_object_p 0 /* elf_backend_object_p */
+#endif
#ifndef elf_backend_symbol_processing
#define elf_backend_symbol_processing 0 /* elf_backend_symbol_processing */
#endif
@@ -90,9 +93,11 @@ static CONST struct elf_backend_data elf64_bed =
#endif
1, /* elf_64_p */
ELF_ARCH, /* arch */
+ ELF_MACHINE_CODE, /* elf_machine_code */
ELF_MAXPAGESIZE, /* maxpagesize */
elf_info_to_howto, /* elf_info_to_howto */
elf_info_to_howto_rel, /* elf_info_to_howto_rel */
+ elf_backend_object_p, /* elf_backend_object_p */
elf_backend_symbol_processing, /* elf_backend_symbol_processing */
elf_backend_symbol_table_processing, /* elf_backend_symbol_table_processing */
elf_backend_section_processing, /* elf_backend_section_processing */
diff --git a/bfd/libelf.h b/bfd/libelf.h
index 2c0969a..4d58293 100644
--- a/bfd/libelf.h
+++ b/bfd/libelf.h
@@ -77,6 +77,9 @@ struct elf_backend_data
/* The architecture for this backend. */
enum bfd_architecture arch;
+ /* The ELF machine code (EM_xxxx) for this backend. */
+ int elf_machine_code;
+
/* The maximum page size for this backend. */
bfd_vma maxpagesize;
@@ -93,6 +96,14 @@ struct elf_backend_data
/* The remaining functions are hooks which are called only if they
are not NULL. */
+ /* A function to permit a backend specific check on whether a
+ particular BFD format is relevant for an object file, and to
+ permit the backend to set any global information it wishes. When
+ this is called elf_elfheader is set, but anything else should be
+ used with caution. If this returns false, the check_format
+ routine will return a wrong_format error. */
+ boolean (*elf_backend_object_p) PARAMS ((bfd *));
+
/* A function to do additional symbol processing when reading the
ELF symbol table. This is where any processor-specific special
section indices are handled. */
@@ -142,14 +153,6 @@ struct elf_sym_extra
typedef struct elf_sym_extra Elf_Sym_Extra;
-struct bfd_elf_arch_map {
- enum bfd_architecture bfd_arch;
- int elf_arch;
-};
-
-extern const struct bfd_elf_arch_map bfd_elf_arch_map[];
-extern const int bfd_elf_arch_map_size;
-
struct bfd_elf_section_data {
Elf_Internal_Shdr this_hdr;
Elf_Internal_Shdr rel_hdr;