/* Main program of GNU linker.
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+ 2002
Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
#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"
#endif
#endif
+int main PARAMS ((int, char **));
+
static char *get_emulation PARAMS ((int, char **));
static void set_scripts_dir PARAMS ((void));
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;
link_info.optimize = false;
link_info.no_undefined = false;
link_info.allow_shlib_undefined = false;
+ link_info.allow_multiple_definition = false;
+ link_info.allow_undefined_version = true;
link_info.strip = strip_none;
link_info.discard = discard_sec_merge;
link_info.keep_memory = true;
link_info.input_bfds = NULL;
link_info.create_object_symbols_section = NULL;
+ link_info.gc_sym_list = NULL;
link_info.hash = NULL;
link_info.keep_hash = NULL;
link_info.notice_all = false;
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.pei386_auto_import = -1;
+ link_info.combreloc = true;
link_info.spare_dynamic_tags = 5;
+ link_info.common_skip_ar_aymbols = bfd_link_common_skip_none;
ldfile_add_arch ("");
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;
if (saved_script_handle == NULL)
{
int isfile;
- char *s = ldemul_get_script (& isfile);
+ char *s = ldemul_get_script (&isfile);
if (isfile)
ldfile_open_command_file (s);
else
- {
+ {
lex_string = s;
lex_redirect (s);
}
if (trace_file_tries)
{
- info_msg (_("using %s linker script:\n"),
- saved_script_handle ? "external" : "internal");
- info_msg ("==================================================\n");
+ 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)
{
rewind (saved_script_handle);
while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
{
- buf [n] = 0;
+ buf[n] = 0;
info_msg (buf);
}
rewind (saved_script_handle);
{
int isfile;
- info_msg (ldemul_get_script (& isfile));
+ info_msg (ldemul_get_script (&isfile));
}
-
+
info_msg ("\n==================================================\n");
}
/* Print error messages for any missing symbols, for any warning
symbols, and possibly multiple definitions. */
- if (! link_info.relocateable)
- {
- /* Look for a text section and switch the readonly attribute in it. */
- asection *found = bfd_get_section_by_name (output_bfd, ".text");
-
- if (found != (asection *) NULL)
- {
- if (config.text_read_only)
- found->flags |= SEC_READONLY;
- else
- found->flags &= ~SEC_READONLY;
- }
- }
-
if (link_info.relocateable)
output_bfd->flags &= ~EXEC_P;
else
{
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;
}