diff --git a/contrib/binutils/bfd/config.bfd b/contrib/binutils/bfd/config.bfd index 5f115f0..e985d3d 100755 --- a/contrib/binutils/bfd/config.bfd +++ b/contrib/binutils/bfd/config.bfd @@ -768,14 +768,18 @@ case "${targ}" in targ_defvec=ecoff_big_vec targ_selvecs=ecoff_little_vec ;; - mips*el-*-netbsd*) - targ_defvec=bfd_elf32_littlemips_vec - targ_selvecs="bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec ecoff_little_vec ecoff_big_vec" + mips*el-*-freebsd*) + targ_defvec=bfd_elf32_tradlittlemips_vec + targ_selvecs="bfd_elf32_tradbigmips_vec bfd_elf32_ntradbigmisp_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec ecoff_big_vec ecoff_little_vec" ;; mips*-*-freebsd*) targ_defvec=bfd_elf32_tradbigmips_vec targ_selvecs="bfd_elf32_tradlittlemips_vec bfd_elf32_ntradbigmisp_vec bfd_elf32_ntradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec ecoff_big_vec ecoff_little_vec" ;; + mips*el-*-netbsd*) + targ_defvec=bfd_elf32_littlemips_vec + targ_selvecs="bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec ecoff_little_vec ecoff_big_vec" + ;; mips*-*-netbsd*) targ_defvec=bfd_elf32_bigmips_vec targ_selvecs="bfd_elf32_littlemips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec ecoff_big_vec ecoff_little_vec" diff --git a/contrib/binutils/bfd/elflink.c b/contrib/binutils/bfd/elflink.c index 6628db3..1f6dd02 100644 --- a/contrib/binutils/bfd/elflink.c +++ b/contrib/binutils/bfd/elflink.c @@ -2849,6 +2849,10 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) /* Add symbols from an ELF object file to the linker hash table. */ +extern void +einfo (const char *fmt, ...); +#pragma weak einfo + static bfd_boolean elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { @@ -2889,6 +2893,19 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { dynamic = TRUE; + if (!is_elf_hash_table (hash_table)) + { + if (&einfo != NULL) + einfo (_("%F%B: not elf hash table\n"), abfd); + } + + if ( hash_table->root.creator != abfd->xvec) + { + if (&einfo != NULL) + einfo (_("%F%B: wrong creator %s != %s\n"), abfd, + hash_table->root.creator->name, abfd->xvec->name); + } + /* You can't use -r against a dynamic object. Also, there's no hope of using a dynamic object which does not exactly match the format of the output file. */ diff --git a/contrib/binutils/ld/ldcref.c b/contrib/binutils/ld/ldcref.c index 3094735..84143ec 100644 --- a/contrib/binutils/ld/ldcref.c +++ b/contrib/binutils/ld/ldcref.c @@ -445,11 +445,11 @@ check_refs (const char *name, symsize = bfd_get_symtab_upper_bound (abfd); if (symsize < 0) - einfo (_("%B%F: could not read symbols; %E\n"), abfd); + einfo (_("%B%F: could not read symbols1; %E\n"), abfd); asymbols = xmalloc (symsize); symbol_count = bfd_canonicalize_symtab (abfd, asymbols); if (symbol_count < 0) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); + einfo (_("%B%F: could not read symbols2: %E\n"), abfd); if (li != NULL) { li->asymbols = asymbols; diff --git a/contrib/binutils/ld/ldlang.c b/contrib/binutils/ld/ldlang.c index 0c08601..8d7cd42 100644 --- a/contrib/binutils/ld/ldlang.c +++ b/contrib/binutils/ld/ldlang.c @@ -1461,7 +1461,7 @@ load_symbols (lang_input_statement_type *entry, if (! bfd_link_add_symbols (member, &link_info)) { - einfo (_("%F%B: could not read symbols: %E\n"), member); + einfo (_("%F%B: could not read symbols3: %E\n"), member); loaded = FALSE; } } @@ -1475,7 +1475,7 @@ load_symbols (lang_input_statement_type *entry, if (bfd_link_add_symbols (entry->the_bfd, &link_info)) entry->loaded = TRUE; else - einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd); + einfo (_("%F%B: could not read symbols4: %E\n"), entry->the_bfd); return entry->loaded; } @@ -1665,19 +1665,29 @@ lang_get_output_target (void) /* Has the user told us which output format to use? */ if (output_target != NULL) + { + einfo (_("XXXKAN: output target is %s\n"), output_target); return output_target; + } /* No - has the current target been set to something other than the default? */ if (current_target != default_target) + { + einfo (_("XXXKAN: current output target is %s\n"), current_target); return current_target; + } /* No - can we determine the format of the first input file? */ target = get_first_input_target (); if (target != NULL) + { + einfo (_("XXXKAN: first input target is %s\n"), target); return target; + } /* Failed - use the default output target. */ + einfo (_("XXXKAN: default output target is %s\n"), default_target); return default_target; } @@ -1690,6 +1700,7 @@ open_output (const char *name) output_target = lang_get_output_target (); + /* Has the user requested a particular endianness on the command line? */ if (command_line.endian != ENDIAN_UNSET) @@ -1738,6 +1749,7 @@ open_output (const char *name) } } + einfo (_("%P: Using output format: %s\n"), output_target); output = bfd_openw (name, output_target); if (output == NULL) @@ -4630,6 +4642,7 @@ lang_add_output_format (const char *format, && little != NULL) format = little; + einfo("Setting output format to %s\n", format); output_target = format; } } diff --git a/contrib/binutils/ld/ldmain.c b/contrib/binutils/ld/ldmain.c index d0e0b12..ca77ad7 100644 --- a/contrib/binutils/ld/ldmain.c +++ b/contrib/binutils/ld/ldmain.c @@ -252,6 +252,10 @@ main (int argc, char **argv) xexit (1); } + extern const bfd_target *bfd_default_vector[]; + einfo("%P: bfd default target for %s is %s\n", TARGET, + bfd_default_vector[0]->name); + #if YYDEBUG { extern int yydebug; @@ -337,6 +341,7 @@ main (int argc, char **argv) emulation = get_emulation (argc, argv); ldemul_choose_mode (emulation); default_target = ldemul_choose_target (argc, argv); + einfo ("%P: ldemul_choose_target choose %s\n", default_target); lang_init (); ldemul_before_parse (); lang_has_input_file = FALSE; @@ -1186,11 +1191,11 @@ warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED, symsize = bfd_get_symtab_upper_bound (abfd); if (symsize < 0) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); + einfo (_("%B%F: could not read symbols5: %E\n"), abfd); asymbols = xmalloc (symsize); symbol_count = bfd_canonicalize_symtab (abfd, asymbols); if (symbol_count < 0) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); + einfo (_("%B%F: could not read symbols6: %E\n"), abfd); if (entry != NULL) { entry->asymbols = asymbols; diff --git a/sys/conf/ldscript.mips b/sys/conf/ldscript.mips index 0736fd1..cba81a8 100644 --- a/sys/conf/ldscript.mips +++ b/sys/conf/ldscript.mips @@ -30,8 +30,10 @@ * $FreeBSD$ */ +/* OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradlittlemips") +*/ OUTPUT_ARCH(mips) ENTRY(_start)