summaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2010-01-21 10:31:32 +0000
committerNick Clifton <nickc@redhat.com>2010-01-21 10:31:32 +0000
commitc4b7819565e41809d80f66febb0c89a6204e1ad8 (patch)
tree69c56b63429d8e387352f44b34a58337caa58b38 /ld/ldlang.c
parent95433b348df0563b42a4b4287d569fcd92e4ff24 (diff)
downloadbinutils-gdb-c4b7819565e41809d80f66febb0c89a6204e1ad8.tar.gz
PR 4437
* ldfile.c: (ldfile_open_file): Do not stop link upon encountering a missing file or library. Instead mark the entry as missing and set the global flag to indicate that missing files were encountered. * ldlang.c (missing_files): New exported variable. (load_symbols): Skip loading if the file is missing. (open_input_bfds): Terminate link if any input files were missing. * ldlang.h (struct lang_input_statement_struct): Add missing_file field. Add export of missing_file variable.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r--ld/ldlang.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 2321ae2c8d3..fd75a5b971a 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -1,6 +1,6 @@
/* Linker command language support.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of the GNU Binutils.
@@ -64,6 +64,8 @@ static lang_statement_list_type statement_list;
static struct bfd_hash_table lang_definedness_table;
static lang_statement_list_type *stat_save[10];
static lang_statement_list_type **stat_save_ptr = &stat_save[0];
+static struct unique_sections *unique_section_list;
+static bfd_boolean ldlang_sysrooted_script = FALSE;
/* Forward declarations. */
static void exp_init_os (etree_type *);
@@ -101,8 +103,7 @@ bfd_boolean lang_float_flag = FALSE;
bfd_boolean delete_output_file_on_failure = FALSE;
struct lang_phdr *lang_phdr_list;
struct lang_nocrossrefs *nocrossref_list;
-static struct unique_sections *unique_section_list;
-static bfd_boolean ldlang_sysrooted_script = FALSE;
+bfd_boolean missing_file = FALSE;
/* Functions that traverse the linker script and might evaluate
DEFINED() need to increment this. */
@@ -1060,6 +1061,8 @@ new_afile (const char *name,
p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
p->whole_archive = whole_archive;
p->loaded = FALSE;
+ p->missing_file = FALSE;
+
lang_statement_append (&input_file_chain,
(lang_statement_union_type *) p,
&p->next_real_file);
@@ -2583,6 +2586,10 @@ load_symbols (lang_input_statement_type *entry,
ldfile_open_file (entry);
+ /* Do not process further if the file was missing. */
+ if (entry->missing_file)
+ return TRUE;
+
if (! bfd_check_format (entry->the_bfd, bfd_archive)
&& ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
{
@@ -3164,6 +3171,10 @@ open_input_bfds (lang_statement_union_type *s, bfd_boolean force)
break;
}
}
+
+ /* Exit if any of the files were missing. */
+ if (missing_file)
+ einfo ("%F");
}
/* Add a symbol to a hash of symbols used in DEFINED (NAME) expressions. */