diff options
author | Ian Lance Taylor <ian@airs.com> | 1994-01-21 05:47:18 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1994-01-21 05:47:18 +0000 |
commit | 5e6cd559cfa7fd45d9f128903d1f42344bcfd03d (patch) | |
tree | 8c2bc8c2f21ca89521445694f7b7a2cecaa194a5 /ld/ldlang.c | |
parent | dc3da58f2ca3acb37293ec4b47fdcf3bc20ce7df (diff) | |
download | gdb-5e6cd559cfa7fd45d9f128903d1f42344bcfd03d.zip gdb-5e6cd559cfa7fd45d9f128903d1f42344bcfd03d.tar.gz gdb-5e6cd559cfa7fd45d9f128903d1f42344bcfd03d.tar.bz2 |
* ldlang.c (new_afile): Initialize loaded field to false.
(lookup_name): If file was already loaded, don't call the
add_symbols entry point again.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r-- | ld/ldlang.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c index 48db460..4c818cd 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -368,6 +368,7 @@ new_afile (name, file_type, target) p->next = (lang_statement_union_type *) NULL; p->symbol_count = 0; p->common_output_section = (asection *) NULL; + p->loaded = false; lang_statement_append (&input_file_chain, (lang_statement_union_type *) p, &p->next_real_file); @@ -775,10 +776,22 @@ lookup_name (name) search = new_afile (name, lang_input_file_is_file_enum, default_target); } + /* 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 + || ! search->real + || search->filename == (const char *) NULL) + return search; + ldfile_open_file (search); if (bfd_check_format (search->the_bfd, bfd_object)) - ldlang_add_file (search); + { + ldlang_add_file (search); + if (trace_files || trace_file_tries) + info_msg ("%I\n", search); + } else if (bfd_check_format (search->the_bfd, bfd_archive)) { /* There is nothing to do here; the add_symbols routine will @@ -791,6 +804,8 @@ lookup_name (name) if (bfd_link_add_symbols (search->the_bfd, &link_info) == false) einfo ("%F%B: could not read symbols: %E\n", search->the_bfd); + search->loaded = true; + return search; } @@ -2281,6 +2296,8 @@ void ldlang_add_file (entry) lang_input_statement_type * entry; { + bfd **pp; + lang_statement_append (&file_chain, (lang_statement_union_type *) entry, &entry->next); @@ -2289,8 +2306,11 @@ ldlang_add_file (entry) a link. */ ASSERT (entry->the_bfd->link_next == (bfd *) NULL); ASSERT (entry->the_bfd != output_bfd); - entry->the_bfd->link_next = link_info.input_bfds; - link_info.input_bfds = entry->the_bfd; + for (pp = &link_info.input_bfds; + *pp != (bfd *) NULL; + pp = &(*pp)->link_next) + ; + *pp = entry->the_bfd; entry->the_bfd->usrdata = (PTR) entry; } |