X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Fldmain.c;h=0579727289ba0be513bc3971ff05102dbfb67175;hb=3f965e60f6b747ff7d0052a823b7fa37e385bd8c;hp=ed0abd6639a08df0539275beb5e552958950750b;hpb=7333607edefaef9eb0e5f3de1f14574851f6d734;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/ldmain.c b/ld/ldmain.c index ed0abd6639..0579727289 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -1,5 +1,6 @@ /* Main program of GNU linker. - Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 + Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002 Free Software Foundation, Inc. Written by Steve Chamberlain steve@cygnus.com @@ -23,7 +24,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "bfd.h" #include "sysdep.h" #include -#include +#include "safe-ctype.h" #include "libiberty.h" #include "progress.h" #include "bfdlink.h" @@ -33,9 +34,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "ldmain.h" #include "ldmisc.h" #include "ldwrite.h" -#include "ldgram.h" #include "ldexp.h" #include "ldlang.h" +#include "ldgram.h" #include "ldlex.h" #include "ldfile.h" #include "ldemul.h" @@ -54,6 +55,8 @@ extern PTR sbrk (); #endif #endif +int main PARAMS ((int, char **)); + static char *get_emulation PARAMS ((int, char **)); static void set_scripts_dir PARAMS ((void)); @@ -168,6 +171,9 @@ main (argc, argv) #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES) setlocale (LC_MESSAGES, ""); +#endif +#if defined (HAVE_SETLOCALE) + setlocale (LC_CTYPE, ""); #endif bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); @@ -193,6 +199,13 @@ main (argc, argv) xexit (1); } +#if YYDEBUG + { + extern int yydebug; + yydebug = 1; + } +#endif + /* Initialize the data about options. */ trace_files = trace_file_tries = version_printed = false; whole_archive = false; @@ -202,6 +215,7 @@ main (argc, argv) config.split_by_reloc = (unsigned) -1; config.split_by_file = (bfd_size_type) -1; command_line.force_common_definition = false; + command_line.inhibit_common_definition = false; command_line.interpreter = NULL; command_line.rpath = NULL; command_line.warn_mismatch = true; @@ -241,8 +255,12 @@ main (argc, argv) link_info.init_function = "_init"; link_info.fini_function = "_fini"; link_info.new_dtags = false; + link_info.eh_frame_hdr = false; link_info.flags = (bfd_vma) 0; link_info.flags_1 = (bfd_vma) 0; + link_info.pei386_auto_import = false; + link_info.combreloc = false; + link_info.spare_dynamic_tags = 5; ldfile_add_arch (""); @@ -253,7 +271,7 @@ main (argc, argv) emulation = get_emulation (argc, argv); ldemul_choose_mode (emulation); - default_target = ldemul_choose_target (); + default_target = ldemul_choose_target (argc, argv); lang_init (); ldemul_before_parse (); lang_has_input_file = false; @@ -276,9 +294,9 @@ main (argc, argv) if (! link_info.shared) { if (command_line.filter_shlib) - einfo ("%P%F: -F may not be used without -shared\n")); + einfo (_("%P%F: -F may not be used without -shared\n")); if (command_line.auxiliary_filters) - einfo ("%P%F: -f may not be used without -shared\n")); + einfo (_("%P%F: -f may not be used without -shared\n")); } /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I @@ -295,23 +313,17 @@ main (argc, argv) the -L's in argv have been processed. */ set_scripts_dir (); - if (had_script == false) + /* If we have not already opened and parsed a linker script + read the emulation's appropriate default script. */ + if (saved_script_handle == NULL) { - /* Read the emulation's appropriate default script. */ int isfile; - char *s = ldemul_get_script (&isfile); + char *s = ldemul_get_script (& isfile); if (isfile) ldfile_open_command_file (s); else - { - if (trace_file_tries) - { - info_msg (_("using internal linker script:\n")); - info_msg ("==================================================\n"); - info_msg (s); - info_msg ("\n==================================================\n"); - } + { lex_string = s; lex_redirect (s); } @@ -320,6 +332,39 @@ main (argc, argv) lex_string = NULL; } + if (trace_file_tries) + { + if (saved_script_handle) + info_msg (_("using external linker script:")); + else + info_msg (_("using internal linker script:")); + info_msg ("\n==================================================\n"); + + if (saved_script_handle) + { + static const int ld_bufsz = 8193; + size_t n; + char *buf = xmalloc (ld_bufsz); + + rewind (saved_script_handle); + while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0) + { + buf [n] = 0; + info_msg (buf); + } + rewind (saved_script_handle); + free (buf); + } + else + { + int isfile; + + info_msg (ldemul_get_script (& isfile)); + } + + info_msg ("\n==================================================\n"); + } + lang_final (); if (lang_has_input_file == false) @@ -511,10 +556,12 @@ get_emulation (argc, argv) else if (strcmp (argv[i], "-mips1") == 0 || strcmp (argv[i], "-mips2") == 0 || strcmp (argv[i], "-mips3") == 0 + || strcmp (argv[i], "-mips32") == 0 + || strcmp (argv[i], "-mips64") == 0 || strcmp (argv[i], "-mips4") == 0 || strcmp (argv[i], "-mips5") == 0) { - /* FIXME: The arguments -mips1, -mips2 and -mips3 are + /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are passed to the linker by some MIPS compilers. They generally tell the linker to use a slightly different library path. Perhaps someday these should be @@ -691,14 +738,14 @@ add_keepsyms_file (filename) c = getc (file); while (c != EOF) { - while (isspace (c)) + while (ISSPACE (c)) c = getc (file); if (c != EOF) { size_t len = 0; - while (! isspace (c) && c != EOF) + while (! ISSPACE (c) && c != EOF) { buf[len] = c; ++len; @@ -795,8 +842,7 @@ add_archive_element (info, abfd, name) { char buf[100]; - sprintf (buf, "%-29s %s\n\n", _("Archive member included"), - _("because of file (symbol)")); + sprintf (buf, _("Archive member included because of file (symbol)\n\n")); minfo ("%s", buf); header_printed = true; }