aboutsummaryrefslogtreecommitdiff
path: root/gold
AgeCommit message (Collapse)AuthorFilesLines
2009-06-24 PR 10156Ian Lance Taylor6-22/+83
* layout.cc (Layout::choose_output_section): If we find an existing section, update the flags. (Layout::create_notes): New function, broken out of Layout::finalize. (Layout::finalize): Don't create note sections. (Layout::create_note): Don't crash if linker script discards section. (Layout::create_gold_note): Likewise. (Layout::create_build_id): Likewise. Don't set after_input_sections on the section. (Layout::create_executable_stack_info): Remove target parameter. Change caller. * layout.h (class Layout): Declare create_notes. Update declaration of create_executable_stack_info. * gold.cc (queue_middle_tasks): Call create_notes. * output.cc (Output_section::update_flags_for_input_section): Move here from output.h. If SHF_ALLOC flag is newly set, mark address invalid. * output.h (Output_data::mark_address_invalid): New function. (class Output_section): Only declare, not define, update_flags_for_input_section. Remove set_flags.
2009-06-24 * script-sections.cc (Output_section_definition::Ian Lance Taylor2-4/+10
set_section_addresses): Rename shadowing local load_address to laddr.
2009-06-24 PR 10244Ian Lance Taylor2-1/+9
* reloc.cc (relocate_sections): Skip empty relocation sections.
2009-06-24 PR 10156Ian Lance Taylor2-8/+14
* layout.cc (Layout::create_note): Use choose_output_section rather than make_output_section.
2009-06-24 PR 10237Ian Lance Taylor4-4/+28
* options.cc (General_options::parse_V): Set printed_version_. (General_options::General_options): Initialize printed_version_. * options.h (class General_options): Add printed_version_ field. * gold.cc (queue_initial_tasks): If there are no input files, don't give a fatal error if we printed the version information. (queue_middle_tasks): If using -r with a shared object, give a fatal error rather than an ordinary error.
2009-06-24 PR 10219Ian Lance Taylor3-0/+61
* layout.cc (Layout::Layout): Initialize have_stabstr_section_. (Layout::make_output_section): Set have_stabstr_section_ if we see a .stab*str section. (Layout::finalize): Call link_stabs_sections. (Layout::link_stabs_sections): New file. * layout.h (class Layout): Add have_stabstr_section_ field. Declare link_stabs_sections.
2009-06-232009-06-23 Doug Kwan <dougkwan@google.com>Doug Kwan9-11/+677
* Makefile.am (libgold_a_LIBADD): New. (ld_new_DEPENDENCIES, ld_new_LDADD): Remove LIBOBJS * Makefile.in: Regenerate. * config.in (HAVE_DECL_MEMMEM, HAVE_DECL_STRNDUP): New. * configure: Regenerate. * configure.ac (AC_CHECK_DECLS): Add strndup and memmem. * fileread.cc: Include sys/state.h * gold.h: Declare memmem and strndup if found missing. * gold_reloc.h: Include byteswap.h if HAVE_BYTESWAP_H is defined.
2009-06-23 * configure.ac: Call AC_CHECK_DECLS using C, not C++.Ian Lance Taylor3-493/+504
* configure: Rebuild.
2009-06-23 PR 10147Ian Lance Taylor2-0/+19
* object.cc (Object::section_contents): Don't try to get a view if the section has length zero. (Object::handle_gnu_warning_section): If the section is empty, use the name of the section as the warning.
2009-06-23 PR 10133Ian Lance Taylor4-2/+28
* stringpool.h (class Stringpool_template): Add optimize_ field. (Stringpool_template::set_optimize): New function. * stringpool.cc (Stringpool_template::Stringpool_template): Initialize optimize_ field. (Stringpool_template::set_string_offsets): Test local optimize fild rather than parameter. * layout.cc (Layout::Layout): Call set_optimize on the section name stringpool.
2009-06-23 PR 10030Ian Lance Taylor6-26/+61
* yyscript.y: Parse TARGET. * script.cc (script_set_target): New function. * script-c.h (script_set_target): Declare. * options.cc (General_options::string_to_object_format): Rename from string_to_object_format in anonymous namespace. Change callers. * options.h (class General_options): Declare string_to_object_format.
2009-06-23 * script-sections.cc (Script_sections::create_segments): Don't putIan Lance Taylor2-1/+11
program headers in a PT_LOAD segment if -n or -N.
2009-06-22 PR 10141Ian Lance Taylor3-7/+24
* options.h (class General_options): Add -z lazy and -z now. Sort -z options into alphabetical order. * layout.cc (Layout::finish_dynamic_section): Handle -z now.
2009-06-22Fix ChangeLog e-mail address.Ian Lance Taylor1-1/+1
2009-06-22 * layout.cc (Layout::make_output_section): CallIan Lance Taylor22-98/+622
Target::new_output_section. (Layout::attach_allocated_section_to_segment): Put large section sections in a separate load segment with the large segment flag set. (Layout::segment_precedes): Sort large data segments after other load segments. (align_file_offset): New static function. (Layout::set_segment_offsets): Use align_file_offset. * output.h (class Output_section): Add is_small_section_ and is_large_section_ fields. (Output_section::is_small_section): New function. (Output_section::set_is_small_section): New function. (Output_section::is_large_section): New function. (Output_section::set_is_large_section): New function. (Output_section::is_large_data_section): New function. (class Output_segment): Add is_large_data_segment_ field. (Output_segment::is_large_data_segment): New function. (Output_segment::set_is_large_data_segment): New function. * output.cc (Output_section::Output_section): Initialize new fields. (Output_segment::Output_segment): Likewise. (Output_segment::add_output_section): Add assertion that large data sections always go in large data segments. Force small data sections to the end of the list of data sections. Force small BSS sections to the start of the list of BSS sections. For large BSS sections to the end of the list of BSS sections. * symtab.h (class Symbol): Declare is_common_shndx. (Symbol::is_defined): Check Symbol::is_common_shndx. (Symbol::is_common): Likewise. (class Symbol_table): Define enum Commons_section_type. Update declarations. Add small_commons_ and large_commons_ fields. * symtab.cc (Symbol::is_common_shndx): New function. (Symbol_table::Symbol_table): Initialize new fields. (Symbol_table::add_from_object): Put small and large common symbols in the right list. (Symbol_table::sized_finalized_symbol): Check Symbol::is_common_shndx. (Symbol_table::sized_write_globals): Likewise. * common.cc (Symbol_table::do_allocate_commons): Allocate new common symbol lists. Don't call do_allocate_commons_list if the list is empty. (Symbol_table::do_allocate_commons_list): Remove is_tls parameter. Add comons_section_type parameter. Change all callers. Handle small and large common symbols. * object.cc (Sized_relobj::do_finalize_local_symbols): Check Symbol::is_common_shndx. * resolve.cc (symbol_to_bits): Likewise. * target.h (Target::small_common_shndx): New function. (Target::small_common_section_flags): New function. (Target::large_common_shndx): New function. (Target::large_common_section_flags): New function. (Target::new_output_section): New function. (Target::Target_info): Add small_common_shndx, large_common_shndx, small_common_section_flags, and large_common_section_flags fields. (Target::do_new_output_section): New virtual function. * arm.cc (Target_arm::arm_info): Initialize new fields. * i386.cc (Target_i386::i386_info): Likewise. * powerpc.cc (Target_powerpc::powerpc_info) [all versions]: Likewise. * sparc.c (Target_sparc::sparc_info) [all versions]: Likewise. * x86_64.cc (Target_x86_64::x86_64_info): Likewise. (Target_x86_64::do_new_output_section): New function. * configure.ac: Define conditional MCMODEL_MEDIUM. * testsuite/Makefile.am (check_PROGRAMS): Add large. (large_SOURCES, large_CFLAGS, large_DEPENDENCIES): Define. (large_LDFLAGS): Define. * testsuite/large.c: New file. * testsuite/testfile.cc (Target_test::test_target_info): Initialize new fields. * configure, testsuite/Makefile.in: Rebuild.
2009-06-052009-06-05 Doug Kwan <dougkwan@google.com>Doug Kwan12-13/+267
* Makefile.am (CCFILES): Add target.cc. * Makefile.in: Regenerate. * i386.cc (class Target_i386): Define new virtual method to override do_is_local_label_name in parent. * object.cc (Sized_relobj::do_count_local_symbols): Discard local symbols if --discard-locals or -X is given. * options.h (class General_options): Declare new options '--discard-locals' and '-X' for discarding locals. * target.h (class Target): Define new methods is_local_label_name. Declare new virtual method do_is_local_label_name. * target.cc: New file. * testsuite/Makefile.am (check_PROGRAMS): Add discard_locals_test. (check_SCRIPTS): Add discard_locals_test.sh. (check_DATA): Add discard_local_tests.syms. (discard_locals_test_SOURCES, discard_locals_test_LDFLAGS): Define. (discard_local_tests.syms, discard_locals_test.o): New make rules. * testsuite/Makefile.in: Regenerate. * testsuite/discard_locals_test.c: New file. * testsuite/discard_locals_test.sh: Same.
2009-06-052009-06-05 Doug Kwan <dougkwan@google.com>Doug Kwan5-16/+77
* object.cc (Sized_relobj::Sized_relobj): Initialize discarded_eh_frame_shndx_ to -1U. (Sized_relobj::do_layout): Record index of a discard .eh_frame section. (Sized_relobj::do_count_local_symbols): Skip local symbols in a discarded .eh_frame section. (Sized_relobj::do_finalize_local_symbols): Ditto. * object.h (class Sized_relobj): Declare new member discarded_eh_frame_shndx_. * testsuite/Makefile.am (check_PROGRAMS): Add local_labels_test. (local_labels_test.o, local_labels_test): New rules. * testsuite/Makefile.in: Regenerate.
2009-06-042009-06-04 Doug Kwan <dougkwan@google.com>Doug Kwan2-0/+9
* layout.cc (Layout::section_name_mapping): Add mapping for special ARM sections.
2009-06-042009-06-03 Doug Kwan <dougkwan@google.com>Doug Kwan2-2/+7
* arm.cc (utils::sign_extend): Reverse test in gold_assert. (utils::has_overflow): Same.
2009-06-04 * layout.cc (Layout::section_name_mapping): New array, replacingIan Lance Taylor3-109/+78
Layout::linkonce_mapping. (Layout::section_name_mapping_count): New variable, replacing Layout::linkonce_mapping_count. (Layout::linkonce_output_name): Remove. (Layout::output_section_name): Rewrite. * layout.h (class Layout): Rename Linkonce_mapping to Section_name_mapping, linkonce_mapping to section_name_mapping, linkonce_mapping_count to section_name_mapping_count. Don't declare linkonce_output_name.
2009-06-032009-06-03 Doug Kwan <dougkwan@google.com>Doug Kwan2-10/+510
* gold/arm.cc (namespace utils): New. (Target_arm::reloc_is_non_pic): Define new method. (class Arm_relocate_functions): New. (Target_arm::Relocate::relocate): Handle relocation types used by Android.
2009-06-03 * arm.cc (Target_arm::scan::global): Use || instead of |.Ian Lance Taylor2-1/+5
2009-06-032009-06-02 Doug Kwan <dougkwan@google.com>Doug Kwan1-15/+354
* gold/arm.cc (Target_arm::Scan::Scan): Initialize issued_non_pic_error_. (class Target_arm::Scan): Declare new method check_non_pic. Define new method symbol_needs_plt_entry. Declare new data member issued_non_pic_error_. (class Target_arm::Relocate): Declare new method should_apply_static_reloc. (Target_arm::may_need_copy_reloc): Handle STT_ARM_TFUNC. (Target_arm::Scan::check_non_pic): Define new method. (Target_arm::Scan::local): Handle a small subset of reloc types used by Android. (Target_arm::Scan::local): Same. (Target_arm::Relocate::should_apply_statci_reloc): Define new method.
2009-05-31 * incremental.cc (Incremental_inputs::report_command_line): FilterIan Lance Taylor2-0/+11
out --incremental-* options.
2009-05-302009-05-29 Doug Kwan <dougkwan@google.com>Doug Kwan2-8/+457
* gold/arm.cc (Output_data_plt_arm): Forward declaration for new template class. (class Target_arm): Update comment. (Target_arm::Target_arm): Initialize new data members GOT_, PLT_, GOT_PLT_, REL_DYN_, COPY_RELOCS_ and DYNBSS_. Declare new methods Target_arm::got_section, Target_arm::make_plt_entry and Target_arm::rel_dyn_section. Declare new_enum Target_arm::Got_type. Declare new data members GOT_, PLT_, GOT_PLT_, REL_DYN_, COPY_RELOCS_ and DYNBSS_. Update commments for member do_dynsym_value. (Target_arm::got_size, Target_arm::plt_section, Target_arm::may_need_copy_reloc and Target_arm::copy_reloc): Define new methods inside class defintion. (Target_arm::got_section): Define new method. (Target_arm::rel_dyn_section): Same. (Output_data_plt_arm): New template class. (Output_data_plt_arm::Output_data_plt_arm): Define constructor. (Output_data_plt_arm:do_adjust_output_section): Define new method. (Output_data_plt_arm::add_entry): Same. (Output_data_plt_arm::first_plt_entry): Define new static data member for PLT instruction template. (Output_data_plt_arm::plt_entry): Same. (Output_data_plt_arm::do_write): Define new method. (Target_arm::make_plt_entry): Same. (Target_arm::do_finalize_sections): Same. (Target_arm::do_dynsym_value): Same.
2009-05-292009-05-28 Doug Kwan <dougkwan@google.com>Doug Kwan5-4/+700
* configure.ac: Support gold for target arm*-*-*. * configure: Regenerate. * gold/Makefile.am (TARGETSOURCES): Add arm.cc. (ALL_TARGETOBJECTS): Add arm.$(OBJEXT) * gold/Makefile.in: Regenerate. * gold/arm.cc: New file. * gold/configure.tgt: Add armbe*-*-*, armeb*-*-* and arm*-*-* targets.
2009-05-26Add missing ChangeLog entry in previous check-inDoug Kwan1-0/+18
2009-05-262009-05-26 Doug Kwan <dougkwan@google.com>Doug Kwan6-20/+62
* options.cc (General_options::parse_exclude_libs). Fix a comment. (General_options::check_excluded_libs): Strip off directories in archive name before matching like GNU ld does. * testsuite/Makefile.am (MOSTLYCLEANFILES, exclude_libs_test_DEPENDENCIES): Add alt/libexclude_libs_test_3.a (exclude_libs_test_LDFLAGS): Add linker option -Wl,--exclude-libs,libexclude_libs_test_3 (exclude_libs_test_LADD): Add alt/libexclude_libs_test_3.a as an explicit archive without using -l. (alt/libexclude_libs_test_3.a): New make rule. * testsuite/Makefile.in: Regenerate. * testsuite/exclude_libs_test.c : Declare lib3_default(). (main): Call it. * exclude_libs_test.sh: Add tests for alt/exclude_libs_test_3.a. * exclude_libs_test_3.c: New file.
2009-05-26Update Indonesian translations.Nick Clifton3-282/+2543
Update translation templates.
2009-05-22 * testsuite/Makefile.am: Add -ffunction-sections to compileSriraman Tallam4-7/+15
gc_comdat_test files. Add -Wl,--gc-sections to build gc_comdat_test. * testsuite/Makefile.in: Regenerate. * testsuite/gc_comdat_test.sh: Fix the condition around grep.
2009-05-22 * object.cc (Sized_relobj::map_to_kept_section): Return NULL if theSriraman Tallam7-44/+196
kept comdat section was garbage collected. * testsuite/Makefile.am: Add test gc_comdat_test.sh. * testsuite/Makefile.in: Regenerate. * testsuite/gc_comdat_test.sh: New file. * testsuite/gc_comdat_test_1.cc: New file. * testsuite/gc_comdat_test_2.cc: New file.
2009-05-192009-05-19 Doug Kwan <dougkwan@google.com>Cary Coutant13-17/+341
* archive.cc (Archive::Archive): Move constructor from archive.h to here. Initialize no_export_. (Archive::get_elf_object_for_member): Set no_export flag of object. * archive.h (Archive::Archive): Move constructor body to archive.cc. (Archive::no_export): New method. (Archive::no_export_): New field. * object.h (Object::Object): Initialize no_export_ to false. (Object::no_export, Object::set_no_export): New methods. (Object::no_export_): New field. * options.cc (General_options::parse_exclude_libs): New method. (General_options::check_excluded_libs) Same. * options.h (exclude_libs): New option. (General_options::check_excluded_libs): New method declaration. (General_options::excluded_libs_): New field. * symtab.cc (Symbol_table::add_from_relobj): Hide symbols with default or protected visibility if an object has no-export flag set. testsuite/Makefile.am (check_PROGRAMS): Add exclude_libs_test. (check_SCRIPTS): Add exclude_libs_test.sh. (check_DATA): Add exclude_libs_test.syms. (MOSTLYCLEANFILES): Add exclude_libs_test.syms, libexclude_libs_test_1.a and libexclude_libs_test_2.a. (exclude_libs_test_SOURCES, exclude_libs_test_DEPENDENCIES, exclude_libs_test_LDFLAGS and exclude_libs_test_LDADD): Define. (exclude_libs_test.syms, libexclude_libs_test_1.a, libexclude_libs_test_2.a): New rules. * testsuite/Makefile.in: Regenerate. * testsuite/exclude_libs_test.c: New file. * testsuite/exclude_libs_test.sh: Ditto. * testsuite/exclude_libs_test_1.c: Ditto. * testsuite/exclude_libs_test_2.c: Ditto.
2009-05-15 * configure.ac: Check for declarations for cases where libiberty.hIan Lance Taylor4-0/+526
checks HAVE_DECL_xxx. * configure, config.in: Rebuild.
2009-05-15 * gold.h (Incremental_argument_list): Remove (invalid) forwardIan Lance Taylor10-23/+317
declaration. * incremental.cc (Incremental_inputs::report_achive): New method. (Incremental_inputs::report_object): New method. (Incremental_inputs::report_script): New method. (Incremental_inputs::finalize_inputs): New method. (Incremental_inputs::finalize): Call finalize_inputs(). (Incremental_inputs::sized_create_incremental_inputs_section_data): Create inputs entries. * incremental.h (Incremental_input_type): New enum. (Incremental_inputs::Incremental_input): Initialize new fields. (Incremental_inputs::report_inputs): New method. (Incremental_inputs::report_achive): New method. (Incremental_inputs::report_object): New method. (Incremental_inputs::report_script): New method. (Incremental_inputs::finalize_inputs): New method. (Incremental_inputs::Input_info): New struct. (Incremental_inputs::Input_info_map): New typedef. (Incremental_inputs::lock_): New field. (Incremental_inputs::Inputs_): New field. (Incremental_inputs::Inputs_map): New field. * main.cc (main): Call Incremental_input::report_inputs. * options.h (Input_argument_list): Typedef moved from Input_arguments. (Input_file_group::Files): Remove, use ::Input_argument_list. (Input_file_group::Input_argument_list): Remove, use ::Input_argument_list. * plugin.cc (Plugin_manager::add_input_file): Add error in incremental build. * read_syms.cc (do_read_syms): Call Incremental_input::report_* functions. * script.cc (read_input_script): Call Incremental_input::report_script. * script.h (Script_info): New class.
2009-04-30Fix date in revision 1.220. (Was 2008-04-23, should have been 2009-04-23).Chris Demetriou1-1/+1
2009-04-27 * x86_64.cc (do_adjust_output_section): Set entsize toIan Lance Taylor2-3/+6
plt_entry_size.
2009-04-242008-04-23 Elliott Hughes <enh@google.com>Chris Demetriou2-2/+12
* output.cc (Output_file::close): After short writes, continue writing from the correct offset in the buffer being written.
2009-04-242009-04-23 Chris Demetriou <cgd@google.com>Chris Demetriou5-1/+93
* configure.ac (HAVE_TR1_UNORDERED_MAP_REHASH): New define. * configure: Regenerate. * config.in: Regenerate. * gold.h: Avoid std::tr1::unordered_map and std::tr1::unordered_set if HAVE_TR1_UNORDERED_MAP_REHASH is not defined.
2009-04-24 * incremental.cc (Incremental_inputs_header_data): Renamed fromIan Lance Taylor6-15/+284
Incremental_input_header_data. (Incremental_inputs_header_data::data_size): New field. (Incremental_inputs_header_data::put_input_file_count): Renamed from input_file_count. (Incremental_inputs_header_data::put_command_line_offset): Renamed from command_line_offset. (Incremental_inputs_header_data::put_reserved): Renamed from put_reserved. (Incremental_inputs_entry_data): Renamed from Incremental_input_entry_data. (Incremental_inputs_entry_data::data_size): New field. (Incremental_inputs::report_command_line): New method. (Incremental_inputs::finalize): New method. (Incremental_inputs::create_incremental_inputs_data): New method. (Incremental_inputs::sized_create_incremental_inputs_data): New method. * incremental.h: New file. * layout.cc (Layout::Layout): Handle new incremental_inputs_. (Layout::finalize): Create incremental inputs section in incremental builds. (Layout::create_incremental_info_sections): New method. * layout.h (Layout::incremental_inputs): New method. (Layout::create_incremental_info_sections): New method. (Layout::incremental_inputs_): New field. * main.cc (main): Notify Incremental_input of the command line.
2009-04-02 * gold.h (reserve_unordered_map): Define, three versions, one forIan Lance Taylor5-33/+85
each version of Unordered_map. * layout.cc (Layout::Layout): Remove options parameter. Add number_of_input_files parameter. Don't initialize options_. Initialize number_of_input_files_ and resized_signatures_. Move sections_are_attached_. (Layout::layout_group): Reserve space for group_signatures_. (Layout::find_or_add_kept_section): Change name parameter to be a reference. Resize signatures_ map when it gets large enough. (Layout::layout_eh_frame): Use parameters->options() instead of this->options_. (Layout::make_output_section): Likewise. (Layout::attach_allocated_section_to_segment): Likewise. (Layout::finalize, Layout::create_executable_stack): Likewise. (Layout::set_segment_offsets, Layout::create_interp): Likewise. (Layout::finish_dynamic_section, Layout::write_binary): Likewise. * layout.h (class Layout): Update declarations. Remove options_ field. Add number_of_input_files_ and resized_signatures_ fields. Move sections_are_attached_ field. * main.cc (main): Pass number of input files to Layout constructor. Don't pass options.
2009-03-30 * ffsll.c (ffsll): Correct implementation.Ian Lance Taylor2-3/+12
2009-03-28 * ffsll.c: New file.Ian Lance Taylor10-5/+72
* configure.ac: Call AC_REPLACE_FUNCS on ffsll. * gold.h (ffsll): Declare if HAVE_FFSLL is not defined. * ftruncate.c (ftruncate): Declare before definition. * mremap.c (mremap): Likewise. * pread.c (pread): Likewise. * configure, Makefile.in, config.in: Rebuild.
2009-03-27 * mremap.c: New file.Ian Lance Taylor7-3/+78
* configure.ac: Call AC_REPLACE_FUNCS on mremap. * gold.h (MREMAP_MAYMOVE): Define if HAVE_MREMAP is not defined. (mremap): Declare if HAVE_MREMAP is not defined. * configure, Makefile.in, config.in: Rebuild.
2009-03-27 * powerpc.cc (Target_powerpc::check_non_pic): Assert that output isCary Coutant4-1/+11
position independent. * sparc.cc (Target_sparc::check_non_pic): Likewise. * x86_64.cc (Target_x86_64::check_non_pic): Likewise.
2009-03-25 * symtab.h (needs_plt_entry): Check for unsatisfied reference fromCary Coutant2-2/+12
an executable. (needs_dynamic_reloc): Likewise.
2009-03-24 * yyscript.y (file_cmd): Recognize EXTERN.Ian Lance Taylor4-1/+47
(extern_name_list, extern_name_list_body): New nonterminals. * script.cc (script_add_extern): Define. * script-c.h (script_add_extern): Declare.
2009-03-24 * object.cc (is_elf_object): Define.Ian Lance Taylor5-81/+95
* object.h (is_elf_object): Declare. * archive.cc (Archive::get_elf_object_for_member): Call is_elf_object. * readsymc.cc (Read_symbols::do_read_symbols): Likewise.
2009-03-24 * output.cc (Output_file::map_anonymous): Define.Ian Lance Taylor3-7/+35
(Output_file::map): Use map_anonymous. If the regular mmap fails, try an anonymous one. Report the size if the mmap fails. * output.h (class Output_file): Declare map_anonymous.
2009-03-24 * target-select.cc (instantiate_target): Don't acquire the lock ifIan Lance Taylor3-4/+14
the instantiated_target_ field has already been set.
2009-03-242009-03-23 Ian Lance Taylor <iant@google.com>Ian Lance Taylor11-39/+220
* gold-threads.h (class Initialize_lock): Define. * gold-threads.cc (class Initialize_lock_once): Define. (initialize_lock_control): New static variable. (initialize_lock_pointer): New static variable. (initialize_lock_once): New static function. (Initialize_lock::Initialize_lock): Define. (Initialize_lock::initialize): Define. * target-select.h: Include "gold-threads.h". (class Target_selector): Add lock_ and initialize_lock_ fields. Don't define instantiate_target, just declare it. * target-select.cc (Target_selector::Target_selector): Initialize new fields. (Target_selector::instantiate_target): Define. * descriptors.h: Include "gold-threads.h". (class Descriptors): Add initialize_lock_ field. * descriptors.cc (Descriptors::Descriptors): Initialize new field. (Descriptors::open): Use initialize_lock_ field * errors.h (class Errors): Add initialize_lock_ field. * errors.cc (Errors::Errors): Initialize new field. (Errors::initialize_lock): Use initialize_lock_ field. * powerpc.cc (class Target_selector_powerpc): Remove instantiated_target_ field. In do_recognize call instantiate_target rather than do_instantiate_target. In do_instantiate_target just allocate a new target. * sparc.cc (class Target_selector_sparc): Likewise.