aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1994-02-16 01:18:32 +0000
committerKen Raeburn <raeburn@cygnus>1994-02-16 01:18:32 +0000
commit09a5aa5eee0dc937623425962921caef78f79d33 (patch)
treef383bd6f065d5d9e5b01b9b50cd33e5641fc8ef8 /ld/ldlang.c
parentdb0a7149be9df04e65fe5cdf5fde315bb27ac710 (diff)
downloadgdb-09a5aa5eee0dc937623425962921caef78f79d33.zip
gdb-09a5aa5eee0dc937623425962921caef78f79d33.tar.gz
gdb-09a5aa5eee0dc937623425962921caef78f79d33.tar.bz2
(lang_size_sections): Clear bfd_error before calling bfd_relax_section, in case
it returns false but doesn't flag an error. If an error is returned, indicate which one it is in the error message.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r--ld/ldlang.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index f967baa..52f371a 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -86,7 +86,8 @@ static void wild_section PARAMS ((lang_wild_statement_type *ptr,
const char *section,
lang_input_statement_type *file,
lang_output_section_statement_type *output));
-static lang_input_statement_type *lookup_name PARAMS ((const char *name));
+static lang_input_statement_type *lookup_name PARAMS ((const char *name,
+ int force_load));
static void wild PARAMS ((lang_wild_statement_type *s,
const char *section, const char *file,
const char *target,
@@ -107,7 +108,6 @@ static void print_assignment
PARAMS ((lang_assignment_statement_type *assignment,
lang_output_section_statement_type *output_section));
static void print_input_statement PARAMS ((lang_input_statement_type *statm));
-static void print_symbol PARAMS ((asymbol *q));
static void print_input_section PARAMS ((lang_input_section_type *in));
static void print_fill_statement PARAMS ((lang_fill_statement_type *fill));
static void print_data_statement PARAMS ((lang_data_statement_type *data));
@@ -750,8 +750,9 @@ wild_section (ptr, section, file, output)
*/
static
lang_input_statement_type *
-lookup_name (name)
+lookup_name (name, force_load)
CONST char *name;
+ int force_load;
{
lang_input_statement_type *search;
@@ -778,7 +779,7 @@ lookup_name (name)
/* If we have already added this file, or this file is not real
(FIXME: can that ever actually happen?) or the name is NULL
(FIXME: can that ever actually happen?) don't add this file. */
- if (search->loaded
+ if ((search->loaded && ! force_load)
|| ! search->real
|| search->filename == (const char *) NULL)
return search;
@@ -833,7 +834,7 @@ wild (s, section, file, target, output)
else
{
/* Perform the iteration over a single file */
- wild_section (s, section, lookup_name (file), output);
+ wild_section (s, section, lookup_name (file, 0), output);
}
if (section != (char *) NULL
&& strcmp (section, "COMMON") == 0
@@ -936,14 +937,14 @@ open_input_bfds (statement)
/* Maybe we should load the file's symbols */
if (statement->wild_statement.filename)
{
- (void) lookup_name (statement->wild_statement.filename);
+ (void) lookup_name (statement->wild_statement.filename, 1);
}
break;
case lang_input_statement_enum:
if (statement->input_statement.real == true)
{
statement->input_statement.target = current_target;
- lookup_name (statement->input_statement.filename);
+ lookup_name (statement->input_statement.filename, 1);
}
break;
default:
@@ -1253,6 +1254,8 @@ PTR ptr;
print_nl ();
}
}
+
+ return true;
}
static void
@@ -1789,8 +1792,11 @@ lang_size_sections (s, output_section_statement, prev, fill, dot, relax)
i->owner->symcount = is->ifile->symbol_count;
}
+ bfd_error = no_error;
if (bfd_relax_section (i->owner, i, &link_info, is->ifile->asymbols))
had_relax = true;
+ else if (bfd_error != no_error)
+ einfo ("%P%F: can't relax section: %E");
}
else {
(*prev)->input_section.section->_cooked_size =