diff options
author | Nick Clifton <nickc@redhat.com> | 2010-01-21 10:31:32 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2010-01-21 10:31:32 +0000 |
commit | c4b7819565e41809d80f66febb0c89a6204e1ad8 (patch) | |
tree | 69c56b63429d8e387352f44b34a58337caa58b38 /ld/ldlang.c | |
parent | 95433b348df0563b42a4b4287d569fcd92e4ff24 (diff) | |
download | gdb-c4b7819565e41809d80f66febb0c89a6204e1ad8.zip gdb-c4b7819565e41809d80f66febb0c89a6204e1ad8.tar.gz gdb-c4b7819565e41809d80f66febb0c89a6204e1ad8.tar.bz2 |
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.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 2321ae2..fd75a5b 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. */ |