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,
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));
*/
static
lang_input_statement_type *
-lookup_name (name)
+lookup_name (name, force_load)
CONST char *name;
+ int force_load;
{
lang_input_statement_type *search;
/* 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;
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
/* 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:
print_nl ();
}
}
+
+ return true;
}
static void
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 =