aboutsummaryrefslogtreecommitdiff
path: root/bfd/mipsbsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/mipsbsd.c')
-rw-r--r--bfd/mipsbsd.c135
1 files changed, 47 insertions, 88 deletions
diff --git a/bfd/mipsbsd.c b/bfd/mipsbsd.c
index 161e305..5d699aa 100644
--- a/bfd/mipsbsd.c
+++ b/bfd/mipsbsd.c
@@ -52,8 +52,14 @@ static void MY(choose_reloc_size) PARAMS ((bfd *abfd));
#define MY_write_object_contents MY(write_object_contents)
static boolean MY(write_object_contents) PARAMS ((bfd *abfd));
-#define MY_reloc_howto_type_lookup MY(reloc_howto_type_lookup)
-#define MY_canonicalize_reloc MY(canonicalize_reloc)
+/* We can't use MY(x) here because it leads to a recursive call to CAT
+ when expanded inside JUMP_TABLE. */
+#define MY_bfd_reloc_type_lookup mipsbsd_reloc_howto_type_lookup
+#define MY_canonicalize_reloc mipsbsd_canonicalize_reloc
+
+#define MY_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
+#define MY_bfd_link_add_symbols _bfd_generic_link_add_symbols
+#define MY_bfd_final_link _bfd_generic_final_link
#define MY_backend_data &MY(backend_data)
#define MY_BFD_TARGET
@@ -177,14 +183,20 @@ MY(write_object_contents) (abfd)
* 0x10000 and continue normally. This will compensate for the sign extension
* when the low bits are added at run time.
*/
-bfd_reloc_status_type
-mips_fix_hi16_s (abfd,reloc_entry,symbol,data,input_section,output_bfd)
+static bfd_reloc_status_type
+mips_fix_hi16_s PARAMS ((bfd *, arelent *, asymbol *, PTR,
+ asection *, bfd *, char **));
+
+static bfd_reloc_status_type
+mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
+ output_bfd, error_message)
bfd *abfd;
arelent *reloc_entry;
- struct symbol_cache_entry *symbol;
+ asymbol *symbol;
PTR data;
asection *input_section;
bfd *output_bfd;
+ char **error_message;
{
bfd_vma relocation;
@@ -212,21 +224,22 @@ mips_fix_hi16_s (abfd,reloc_entry,symbol,data,input_section,output_bfd)
}
static reloc_howto_type mips_howto_table_ext[] = {
- {MIPS_RELOC_32, 0, 2, 32, false, 0, true, true, 0,
+ {MIPS_RELOC_32, 0, 2, 32, false, 0, complain_overflow_bitfield, 0,
"32", false, 0, 0xffffffff, false},
- {MIPS_RELOC_JMP, 2, 2, 26, false, 0, false, true, 0,
+ {MIPS_RELOC_JMP, 2, 2, 26, false, 0, complain_overflow_bitfield, 0,
"MIPS_JMP", false, 0, 0x03ffffff, false},
- {MIPS_RELOC_WDISP16, 2, 1, 16, true, 0, false, true, 0,
+ {MIPS_RELOC_WDISP16, 2, 1, 16, true, 0, complain_overflow_signed, 0,
"WDISP16", false, 0, 0x0000ffff, false},
- {MIPS_RELOC_HI16, 16, 1, 16, false, 0, false, true, 0,
+ {MIPS_RELOC_HI16, 16, 1, 16, false, 0, complain_overflow_bitfield, 0,
"HI16", false, 0, 0x0000ffff, false},
- {MIPS_RELOC_HI16_S, 16, 1, 16, false, 0, false, true, mips_fix_hi16_s,
- "HI16_S", false, 0, 0x0000ffff, false},
- {MIPS_RELOC_LO16, 0, 1, 16, false, 0, false, true, 0,
+ {MIPS_RELOC_HI16_S, 16, 1, 16, false, 0, complain_overflow_bitfield,
+ mips_fix_hi16_s,
+ "HI16_S", false, 0, 0x0000ffff, false},
+ {MIPS_RELOC_LO16, 0, 1, 16, false, 0, complain_overflow_dont, 0,
"LO16", false, 0, 0x0000ffff, false},
};
-static reloc_howto_type *
+static const reloc_howto_type *
MY(reloc_howto_type_lookup) (abfd, code)
bfd *abfd;
bfd_reloc_code_real_type code;
@@ -258,7 +271,7 @@ MY(reloc_howto_type_lookup) (abfd, code)
* This is just like the standard aoutx.h version but we need to do our
* own mapping of external reloc type values to howto entries.
*/
-unsigned int
+long
MY(canonicalize_reloc)(abfd, section, relptr, symbols)
bfd *abfd;
sec_ptr section;
@@ -288,10 +301,10 @@ MY(canonicalize_reloc)(abfd, section, relptr, symbols)
}
if (!NAME(aout,slurp_reloc_table)(abfd, section, symbols))
- return 0;
+ return -1;
tblptr = section->relocation;
if (!tblptr)
- return 0;
+ return -1;
/* fix up howto entries */
for (count = 0; count++ < section->reloc_count;)
@@ -315,114 +328,60 @@ static CONST struct aout_backend_data MY(backend_data) = {
bfd_target aout_mips_little_vec =
{
- "aout-mips-little", /* name */
+ "a.out-mips-little", /* name */
bfd_target_aout_flavour,
false, /* target byte order (little) */
false, /* target headers byte order (little) */
(HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG |
- HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
+ HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
MY_symbol_leading_char,
' ', /* ar_pad_char */
15, /* ar_max_namelen */
1, /* minimum alignment */
- _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
- _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
bfd_generic_archive_p, MY_core_file_p},
{bfd_false, MY_mkobject, /* bfd_set_format */
_bfd_generic_mkarchive, bfd_false},
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
_bfd_write_archive_contents, bfd_false},
-
- MY_core_file_failing_command,
- MY_core_file_failing_signal,
- MY_core_file_matches_executable_p,
- MY_slurp_armap,
- MY_slurp_extended_name_table,
- MY_truncate_arname,
- MY_write_armap,
- MY_close_and_cleanup,
- MY_set_section_contents,
- MY_get_section_contents,
- MY_new_section_hook,
- MY_get_symtab_upper_bound,
- MY_get_symtab,
- MY_get_reloc_upper_bound,
- MY_canonicalize_reloc,
- MY_make_empty_symbol,
- MY_print_symbol,
- MY_get_lineno,
- MY_set_arch_mach,
- MY_openr_next_archived_file,
- MY_find_nearest_line,
- MY_generic_stat_arch_elt,
- MY_sizeof_headers,
- MY_bfd_debug_info_start,
- MY_bfd_debug_info_end,
- MY_bfd_debug_info_accumulate,
- bfd_generic_get_relocated_section_contents,
- bfd_generic_relax_section,
- bfd_generic_seclet_link,
- MY_reloc_howto_type_lookup,
- MY_make_debug_symbol,
+ JUMP_TABLE (MY),
(PTR) MY_backend_data,
};
bfd_target aout_mips_big_vec =
{
- "aout-mips-big", /* name */
+ "a.out-mips-big", /* name */
bfd_target_aout_flavour,
true, /* target byte order (big) */
true, /* target headers byte order (big) */
(HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG |
- HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
+ HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
MY_symbol_leading_char,
' ', /* ar_pad_char */
15, /* ar_max_namelen */
1, /* minimum alignment */
- _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */
- _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
+ bfd_getb64, bfd_getb_signed_64, bfd_putb64,
+ bfd_getb32, bfd_getb_signed_32, bfd_putb32,
+ bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
+ bfd_getb64, bfd_getb_signed_64, bfd_putb64,
+ bfd_getb32, bfd_getb_signed_32, bfd_putb32,
+ bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
bfd_generic_archive_p, MY_core_file_p},
{bfd_false, MY_mkobject, /* bfd_set_format */
_bfd_generic_mkarchive, bfd_false},
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
_bfd_write_archive_contents, bfd_false},
-
- MY_core_file_failing_command,
- MY_core_file_failing_signal,
- MY_core_file_matches_executable_p,
- MY_slurp_armap,
- MY_slurp_extended_name_table,
- MY_truncate_arname,
- MY_write_armap,
- MY_close_and_cleanup,
- MY_set_section_contents,
- MY_get_section_contents,
- MY_new_section_hook,
- MY_get_symtab_upper_bound,
- MY_get_symtab,
- MY_get_reloc_upper_bound,
- MY_canonicalize_reloc,
- MY_make_empty_symbol,
- MY_print_symbol,
- MY_get_lineno,
- MY_set_arch_mach,
- MY_openr_next_archived_file,
- MY_find_nearest_line,
- MY_generic_stat_arch_elt,
- MY_sizeof_headers,
- MY_bfd_debug_info_start,
- MY_bfd_debug_info_end,
- MY_bfd_debug_info_accumulate,
- bfd_generic_get_relocated_section_contents,
- bfd_generic_relax_section,
- bfd_generic_seclet_link,
- MY_reloc_howto_type_lookup,
- MY_make_debug_symbol,
+ JUMP_TABLE (MY),
(PTR) MY_backend_data,
};