/* Main program of GNU linker.
- Copyright (C) 1991-2016 Free Software Foundation, Inc.
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
Written by Steve Chamberlain steve@cygnus.com
This file is part of the GNU Binutils.
};
static bfd_assert_handler_type default_bfd_assert_handler;
+static bfd_error_handler_type default_bfd_error_handler;
struct bfd_link_info link_info;
\f
unlink_if_ordinary (output_filename);
}
-/* If there's a BFD assertion, we'll notice and exit with an error
- unless otherwise instructed. */
+/* Hook to notice BFD assertions. */
static void
ld_bfd_assert_handler (const char *fmt, const char *bfdver,
const char *file, int line)
{
- (*default_bfd_assert_handler) (fmt, bfdver, file, line);
config.make_executable = FALSE;
+ (*default_bfd_assert_handler) (fmt, bfdver, file, line);
+}
+
+/* Hook the bfd error/warning handler for --fatal-warnings. */
+
+static void
+ld_bfd_error_handler (const char *fmt, va_list ap)
+{
+ if (config.fatal_warnings)
+ config.make_executable = FALSE;
+ (*default_bfd_error_handler) (fmt, ap);
}
int
leave no trace. */
default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler);
+ /* Also hook the bfd error/warning handler for --fatal-warnings. */
+ default_bfd_error_handler = bfd_set_error_handler (ld_bfd_error_handler);
+
xatexit (ld_cleanup);
/* Set up the sysroot directory. */
while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
{
buf[n] = 0;
- info_msg (buf);
+ info_msg ("%s", buf);
}
rewind (saved_script_handle);
free (buf);
input = (lang_input_statement_type *)
xcalloc (1, sizeof (lang_input_statement_type));
+ input->header.type = lang_input_statement_enum;
input->filename = abfd->filename;
input->local_sym_name = abfd->filename;
input->the_bfd = abfd;