/* Main program of GNU linker.
- Copyright (C) 1991, 92, 93, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 1999
+ Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of GLD, the Gnu Linker.
/* Nonzero means link in every member of an archive. */
boolean whole_archive;
+/* True if we should demangle symbol names. */
+boolean demangling;
+
args_type command_line;
ld_config_type config;
char *emulation;
long start_time = get_run_time ();
-#ifdef HAVE_SETLOCALE
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
setlocale (LC_MESSAGES, "");
#endif
bindtextdomain (PACKAGE, LOCALEDIR);
command_line.warn_mismatch = true;
command_line.check_section_addresses = true;
+ /* We initialize DEMANGLING based on the environment variable
+ COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
+ output of the linker, unless COLLECT_NO_DEMANGLE is set in the
+ environment. Acting the same way here lets us provide the same
+ interface by default. */
+ demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
+
link_info.callbacks = &link_callbacks;
link_info.relocateable = false;
link_info.shared = false;
link_info.static_link = false;
link_info.traditional_format = false;
link_info.optimize = false;
+ link_info.no_undefined = false;
link_info.strip = strip_none;
link_info.discard = discard_none;
link_info.keep_memory = true;
link_info.notice_all = false;
link_info.notice_hash = NULL;
link_info.wrap_hash = NULL;
-
+ link_info.mpc860c0 = 0;
+ /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
+ and _fini symbols. We are compatible. */
+ link_info.init_function = "_init";
+ link_info.fini_function = "_fini";
+
ldfile_add_arch ("");
config.make_executable = true;
{
if (command_line.gc_sections)
einfo ("%P%F: --gc-sections and -r may not be used together\n");
- if (command_line.relax)
+ if (link_info.mpc860c0)
+ einfo (_("%P%F: -r and --mpc860c0 may not be used together\n"));
+ else if (command_line.relax)
einfo (_("%P%F: --relax and -r may not be used together\n"));
if (link_info.shared)
einfo (_("%P%F: -r and -shared may not be used together\n"));
if (config.stats)
{
- extern char **environ;
#ifdef HAVE_SBRK
char *lim = (char *) sbrk (0);
#endif
/*ARGSUSED*/
static boolean
add_archive_element (info, abfd, name)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
bfd *abfd;
const char *name;
{
/*ARGSUSED*/
static boolean
multiple_definition (info, name, obfd, osec, oval, nbfd, nsec, nval)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
bfd *obfd;
asection *osec;
/*ARGSUSED*/
static boolean
multiple_common (info, name, obfd, otype, osize, nbfd, ntype, nsize)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
bfd *obfd;
enum bfd_link_hash_type otype;
/*ARGSUSED*/
static boolean
add_to_set (info, h, reloc, abfd, section, value)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
struct bfd_link_hash_entry *h;
bfd_reloc_code_real_type reloc;
bfd *abfd;
/*ARGSUSED*/
static boolean
warning_callback (info, warning, symbol, abfd, section, address)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *warning;
const char *symbol;
bfd *abfd;
/*ARGSUSED*/
static boolean
undefined_symbol (info, name, abfd, section, address)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
bfd *abfd;
asection *section;
/*ARGSUSED*/
static boolean
reloc_overflow (info, name, reloc_name, addend, abfd, section, address)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
const char *reloc_name;
bfd_vma addend;
/*ARGSUSED*/
static boolean
reloc_dangerous (info, message, abfd, section, address)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *message;
bfd *abfd;
asection *section;
/*ARGSUSED*/
static boolean
unattached_reloc (info, name, abfd, section, address)
- struct bfd_link_info *info;
+ struct bfd_link_info *info ATTRIBUTE_UNUSED;
const char *name;
bfd *abfd;
asection *section;