From a9a4c53eccf5a5e8ed2d6edb75054ad7ff7990fc Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 31 May 2007 15:04:52 +0000 Subject: [PATCH] include/ * bfdlink.h (struct bfd_link_info): Add input_bfds_tail. bfd/ * simple.c (bfd_simple_get_relocated_section_content): Init input_bfds_tail. ld/ * ldlang.c (ldlang_add_file): Use input_bfds_tail. * ldmain.c (main): Init input_bfds_tail. Sort link_info initialization. --- bfd/ChangeLog | 5 +++++ bfd/simple.c | 1 + include/ChangeLog | 5 +++++ include/bfdlink.h | 1 + ld/ChangeLog | 7 +++++++ ld/ldlang.c | 8 +++----- ld/ldmain.c | 5 +++-- 7 files changed, 25 insertions(+), 7 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a75421305b..e291ff153a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2007-06-01 Alan Modra + + * simple.c (bfd_simple_get_relocated_section_contents): Init + input_bfds_tail. + 2007-05-30 Alan Modra * elf.c (elf_fake_sections): Adjust test for SHT_NOBITS sections diff --git a/bfd/simple.c b/bfd/simple.c index fd2fca5d85..8ebc47e059 100644 --- a/bfd/simple.c +++ b/bfd/simple.c @@ -183,6 +183,7 @@ bfd_simple_get_relocated_section_contents (bfd *abfd, /* Fill in the bare minimum number of fields for our purposes. */ memset (&link_info, 0, sizeof (link_info)); link_info.input_bfds = abfd; + link_info.input_bfds_tail = &abfd->link_next; link_info.hash = _bfd_generic_link_hash_table_create (abfd); link_info.callbacks = &callbacks; diff --git a/include/ChangeLog b/include/ChangeLog index 297e8b36fb..8ab2717282 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2007-06-01 Noah Misch + Alan Modra + + * bfdlink.h (struct bfd_link_info): Add input_bfds_tail. + 2007-05-07 Nathan Froyd * libiberty.h (writeargv): Declare. diff --git a/include/bfdlink.h b/include/bfdlink.h index 82fdc5c2e4..a373225a33 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -395,6 +395,7 @@ struct bfd_link_info /* The list of input BFD's involved in the link. These are chained together via the link_next field. */ bfd *input_bfds; + bfd **input_bfds_tail; /* If a symbol should be created for each input BFD, this is section where those symbols should be placed. It must be a section in diff --git a/ld/ChangeLog b/ld/ChangeLog index c2a14708dd..17cec6597a 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2007-06-01 Noah Misch + Alan Modra + + * ldlang.c (ldlang_add_file): Use input_bfds_tail. + * ldmain.c (main): Init input_bfds_tail. Sort link_info + initialization. + 2007-05-29 Alan Modra * emultempl/spuelf.em (base_name): New function, split out from.. diff --git a/ld/ldlang.c b/ld/ldlang.c index dfaf19bf6b..a732525b0b 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -5435,8 +5435,6 @@ lang_for_each_file (void (*func) (lang_input_statement_type *)) void ldlang_add_file (lang_input_statement_type *entry) { - bfd **pp; - lang_statement_append (&file_chain, (lang_statement_union_type *) entry, &entry->next); @@ -5445,9 +5443,9 @@ ldlang_add_file (lang_input_statement_type *entry) a link. */ ASSERT (entry->the_bfd->link_next == NULL); ASSERT (entry->the_bfd != output_bfd); - for (pp = &link_info.input_bfds; *pp != NULL; pp = &(*pp)->link_next) - ; - *pp = entry->the_bfd; + + *link_info.input_bfds_tail = entry->the_bfd; + link_info.input_bfds_tail = &entry->the_bfd->link_next; entry->the_bfd->usrdata = entry; bfd_set_gp_size (entry->the_bfd, g_switch_value); diff --git a/ld/ldmain.c b/ld/ldmain.c index bbd769fff2..354c41aecc 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -265,15 +265,16 @@ main (int argc, char **argv) link_info.keep_memory = TRUE; link_info.combreloc = TRUE; link_info.strip_discarded = TRUE; - link_info.callbacks = &link_callbacks; link_info.emit_hash = TRUE; + link_info.callbacks = &link_callbacks; + link_info.input_bfds_tail = &link_info.input_bfds; /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init and _fini symbols. We are compatible. */ link_info.init_function = "_init"; link_info.fini_function = "_fini"; + link_info.relax_pass = 1; link_info.pei386_auto_import = -1; link_info.spare_dynamic_tags = 5; - link_info.relax_pass = 1; ldfile_add_arch (""); emulation = get_emulation (argc, argv); -- 2.34.1