aboutsummaryrefslogtreecommitdiff
path: root/gold
AgeCommit message (Collapse)AuthorFilesLines
2010-01-112010-01-10 Doug Kwan <dougkwan@google.com>Doug Kwan2-1/+12
* options.h (DEFINE_var): Use parentheses around argument varname__ in macro body to avoid any unintended subsequent substitutions.
2010-01-11 * resolve.cc (Symbol_table::resolve): Add symbols to list of ODRIan Lance Taylor2-32/+35
candidates before doing symbol resolution.
2010-01-11 * resolve.cc (Symbol_table::resolve): Add symbols to the list ofIan Lance Taylor2-5/+12
ODR candidates if only one is weak.
2010-01-09 * script.cc (Version_script_info::build_expression_list_lookup):Ian Lance Taylor2-6/+24
Don't warn about ambiguous version, just record the ambiguity. (Version_script_info::get_symbol_version_helper): Give error if version is ambiguous.
2010-01-092010-01-08 Doug Kwan <dougkwan@google.com>Doug Kwan2-84/+326
* arm.cc (Stub_table::Stub_table): Initalize cortex_a8_stubs_, prev_data_size_ and prev_addralign_. Remove initializer for deleted data member has_been_changed_. (Stub_table::empty): Look at both reloc_stubs_ and cortex_a8_stubs_ to determine if the table is empty. (Stub_table::has_been_changed, Stub_table_set_has_been_changed): Remove. (Stub_table::add_reloc_stub): Define method in class definition instead of just declaring it there. (Stub_table::add_cortex_a8_stub): New method definition. (Stub_table::update_data_size_and_addralign): Ditto. (Stub_table::finalize_stubs): Ditto. (Stub_table::apply_cortex_a8_workaround_to_address_range): Ditto. (Stub_table::do_addralign_): Return address alignment in the (Stub_table::do_reset_address_and_file_offset): Define method in class definition instead of declaring it there. Set current data size to be the data size of the previous pass. (Stub_table::set_final_data_size): Use current data size as the final data size. (Stub_table::relocate_stub): Change parameter type of stub from Reloc_stub pointer to Stub pointer. (Stub_table::addralign_, Stub_table::has_been_changed_): Remove. (Stub_table::Cortex_a8_stub_list): New typedef. (Stub_table::cortex_a8_stubs_, Stub_table::prev_data_size_, Stub_table::prev_addralign_): New data member. (Arm_relobj::Arm_relobj): Initialize data member section_has_cortex_a8_workaround_. (Arm_relobj::section_has_cortex_a8_workaround, Arm_relobj::mark_section_for_cortex_a8_workaround): New method definitions. (Arm_relobj::section_has_cortex_a8_workaround_): New data member declarations. (Target_arm::relocate_stub): Change parameter type of stub from Reloc_stub pointer to Stub pointer. (Insn_template::size, Insn_template::alignment): Handle THUMB16_SPECIAL_TYPE. (Stub_table::remove_all_cortex_a8_stubs, Stub_table::finalize_stubs, Stub_table::update_data_size_and_addralign, Stub_table::apply_cortex_a8_workaround_to_address_range): New method definitions. (Stub_table::relocate_stubs): Handle Cortex-A8 stubs. (Stub_table::do_write): Ditto. (Target_arm::do_relax): Adjust code for changes in Stub_table.
2010-01-09 PR 11108Ian Lance Taylor5-67/+117
* symtab.h (class Symbol): Remove fields is_target_special_ and has_plt_offset_. Add field is_defined_in_discarded_section_. (Symbol::is_defined_in_discarded_section): New function. (Symbol::set_is_defined_in_discarded_section): New function. (Symbol::has_plt_offset): Rewrite. (Symbol::set_plt_offset): Verify that new offset is not -1U. * symtab.cc (Symbol::init_fields): Initialize plt_offset_ to -1U. Don't initialize is_target_special_ or has_plt_offset_. Initialize is_defined_in_discarded_section_. (Symbol_table::add_from_relobj): If appropriate, set is_defined_in_discarded_section. * resolve.cc (Symbol::override_base_with_special): Don't test is_target_special_. Change has_plt_offset_ to has_plt_offset(). * target-reloc.h (relocate_section): Do special handling for symbols defined in discarded sections for global symbols as well as local symbols.
2010-01-08 * dynobj.cc (big_endian>::find_dynsym_sections): Set pi to NULL inIan Lance Taylor2-0/+6
the SHT_SYMTAB case.
2010-01-08 * object.cc (Sized_relobj::do_layout): Don't get confused ifIan Lance Taylor2-2/+7
layout_eh_frame returns NULL.
2010-01-08 PR 11084Ian Lance Taylor2-1/+31
* dynobj.cc (Sized_dynobj::find_dynsym_sections): If there is no dynamic symbol table, use the normal symbol table. (Sized_dynobj::do_read_symbols): Remove assertion about type of symbol table.
2010-01-08 PR 11072Ian Lance Taylor2-0/+11
* layout.cc (Layout::include_section): Remove .gnu_debuglink sections.
2010-01-08Change to "Copyright 2010"H.J. Lu2-2/+7
2010-01-08 PR 10287Ian Lance Taylor7-47/+477
PR 11063 * i386.cc (class Target_i386): Change return type of plt_section to be non-const. (class Output_data_plt_i386): Add tls_desc_rel_ field. (Output_data_plt_i386::Output_data_plt_i386): Initialize tls_desc_rel_ field. (Output_data_plt_i386::rel_tls_desc): New function. (Target_i386::rel_tls_desc_section): New function. (Target_i386::Scan::local): Rewrite R_386_TLS_GOTDESC handling. (Target_i386::Scan::global): For R_386_TLS_GOTDESC put R_386_TLS_DESC reloc in rel_tls_desc_section. * x86_64.cc (class Target_x86_64): Add tlsdesc_reloc_info_ field. Define struct Tlsdesc_info. (Target_x86_64::Target_x86_64): Initialize tlsdesc_reloc_info_. (Target_x86_64::do_reloc_symbol_index): New function. (Target_x86_64::add_tlsdesc_info): New function. (class Output_data_plt_x86_64): Add tlsdesc_rel_ field. (Output_data_plt_x86_64::Output_data_plt_x86_64): Initialize tlsdesc_rel_ field. (Output_data_plt_x86_64::rela_plt): Rename from rel_plt. Change all callers. (Output_data_plt_x86_64::rela_tlsdesc): New function. (Target_x86_64::rela_tlsdesc_section): New function. (Target_x86_64::Scan::local): Rewrite R_X86_64_GOTPC32_TLSDESC handling. (Target_x86_64::Scan::global): For R_X86_64_GOTPC32_TLSDESC put (Target_x86_64::do_reloc_addend): New function. R_X86_64_TLSDESC reloc in rela_tlsdesc_section. * output.h (class Output_reloc) [SHT_REL]: Add new constructor declarations. Define TARGET_CODE. Add arg field to u1_ union. (Output_reloc::type): New function. (Output_reloc::is_local_section_symbol): Check for TARGET_CODE. (Output_reloc::is_target_specific): New function. (Output_reloc::target_arg): New function. (class Output_reloc) [SHT_RELA]: Add four new constructors for absolute relocs and target specific relocs. (class Output_data_reloc) [SHT_REL]: Add add_absolute and add_target_specific. (class Output_data_reloc) [SHT_RELA]: Likewise. * output.cc (Output_reloc::Output_reloc): Add four new versions for absolute relocs and target specific relocs. (Output_reloc::set_needs_dynsym_index): Add TARGET_CODE case. (Output_reloc::get_symbol_index): Likewise. (Output_reloc::local_section_offset): Check that local_sym_index_ is not TARGET_CODE or 0. (Output_reloc::symbol_value): Likewise. (Output_reloc::write) [SHT_RELA]: Call target for target specific reloc. * target.h (class Target): Add reloc_symbol_index and reloc_addend functions. Add do_reloc_symbol_index and do_reloc_addend virtual functions. * layout.cc (add_target_dynamic_tags): Use output section for DT_PLTRELSZ and DT_JMPREL.
2010-01-07 PR 11061Ian Lance Taylor5-9/+79
* output.h (class Output_reloc) [SHT_RELA]: Add is_relative function. (class Output_data_reloc_generic): Define. (class Output_data_reloc_base): Change base class to Output_data_reloc_generic. Change add() method to call bump_relative_reloc_count for a relative reloc. Remove sort_relocs_ field. * output.cc (Output_data_reloc_base::do_write): Change sort_reloc_ to sort_relocs(). * layout.cc (Layout::add_target_dynamic_tags): Change dyn_rel to Output_data_reloc_generic*. Add DT_RELCOUNT/DT_RELACOUNT tag if appropriate. * layout.h (class Layout): Update declaration.
2010-01-07 * output.h (class Output_data): Add const version ofIan Lance Taylor9-165/+151
output_section and do_output_section. (class Output_section_data): Add const version of do_output_section. (class Output_section): Likewise. * layout.cc (Layout::add_target_dynamic_tags): New function. * layout.h (class Layout): Update declarations. * arm.cc (Target_arm::do_finalize_sections): Use add_target_dynamic_tags. * i386.cc (Target_i386::do_finalize_sections): Likewise. * powerpc.cc (Target_powerpc::do_finalize_sections): Likewise. * sparc.cc (Target_sparc::do_finalize_sections): Likewise. * x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
2010-01-07 PR 11042Ian Lance Taylor2-0/+9
* copy-relocs.cc (Copy_relocs::emit_copy_reloc): Mark the dynamic object as needed.
2010-01-07 PR 11019Ian Lance Taylor2-0/+51
* object.cc: Instantiate Xindex::initialize_symtab_xindex and Xindex::read_symtab_xindex.
2010-01-072010-01-07 Doug Kwan <dougkwan@google.com>Doug Kwan2-66/+231
* arm.cc (Insn_template::Type): New enum value THUMB16_SPECIAL_TYPE. (Insn_template::thumb16_bcond_insn): New method declaration. (Insn_template): Fix spelling. (Stub::thumb16_special): New method declaration. (Stub::do_write): Define virtual method which was previously pure virtual. (Stub::do_thumb16_special): New method declaration. (Stub::do_fixed_endian_write): New template member. (Reloc_stub::do_write): Remove. (Reloc_stub::do_fixed_endian_write): Remove. (Cortex_a8_stub): New class definition. (Stub_factory::make_cortex_a8_stub): New method definition. (Stub_factory::Stub_factory): Add missing static storage class qualifier for elf32_arm_stub_a8_veneer_blx.
2010-01-07 PR 10980Ian Lance Taylor3-6/+32
* options.h (class General_options): Add --warn-unresolved-symbols and --error-unresolved-symbols. * errors.cc (Errors::undefined_symbol): Implement --warn-unresolved-symbols.
2010-01-07 * options.h (class General_options): Add -z text and -z textoff.Ian Lance Taylor3-2/+15
* layout.cc (Layout::finish_dynamic_section): Implement -z text.
2010-01-07 * gc.h (Garbage_collection::Cident_section_map): New typedef.Sriraman Tallam9-11/+198
(Garbage_collection::cident_sections): New function. (Garbage_collection::add_cident_section): New function. (Garbage_collection::cident_sections_): New member. (gc_process_relocs): Add references to sections whose names are C identifiers. * gold.h (cident_section_start_prefix): New constant. (cident_section_stop_prefix): New constant. (is_cident): New function. * layout.cc (Layout::define_section_symbols): Replace string constants with the newly defined constants. * object.cc (Sized_relobj::do_layout): Track sections whose names are C identifiers. * testsuite/Makefile.am: Add gc_orphan_section_test. * testsuite/Makefile.in: Regenerate. * testsuite/gc_orphan_section_test.cc: New file. * testsuite/gc_orphan_section_test.sh: New file.
2010-01-07 PR 10980Ian Lance Taylor3-0/+13
* options.h (class General_options): Add --warn-shared-textrel. * layout.cc (Layout::finish_dynamic_section): Implement --warn-shared-textrel.
2010-01-07 PR 10980Ian Lance Taylor2-0/+8
* options.h (class General_options): Add --warn-multiple-gp.
2010-01-07 * Makefile.am (incremental_dump_DEPENDENCIES): RemoveIan Lance Taylor3-5/+8
$(THREADSLIB) and $(LIBDL). * Makefile.in: Rebuild.
2010-01-06 PR 10980Ian Lance Taylor6-15/+141
* options.cc (General_options::parse_section_start): New function. (General_options::section_start): New function. (General_options::General_options): Initialize all members. * options.h: Include <map> (class General_options): Add --section-start. Add section_starts_ member. * layout.cc (Layout::attach_allocated_section_to_segment): If --section-start was used, set the address of the segment. Remove local sort_sections. (Layout::relaxation_loop_body): If the address of the load segment has been set by --section-start, don't use it. * output.h (Output_segment::update_flags_for_output_section): New function. * output.cc (Output_segment::add_output_section): Call update_flags_for_output_section.
2010-01-06 PR 10980Ian Lance Taylor5-8/+116
* options.h (class General_options): Add --undefined-version. * script.cc (struct Version_expression): Add was_matched_by_symbol field. (Version_script_info::matched_symbol): New function. (Version_script_info::get_symbol_version_helper): Call matched_symbol. (Version_script_info::check_unmatched_names): New function. * script.h (class Version_script_info): Update declarations. * gold.cc (queue_middle_tasks): Handle --no-undefined-version.
2010-01-05 * options.h (class General_options): Use DEFINE_bool_alias forIan Lance Taylor3-6/+10
allow_multiple_definition. * resolve.cc (Symbol_table::should_override): Don't test allow_multiple_definition.
2010-01-05 PR 10980Ian Lance Taylor12-21/+276
* options.h (class General_options): Add --cref. * main.cc (main): Print cref table if --cref. Don't close mapfile until after printing cref table. * cref.cc: Include "symtab.h". (class Cref_inputs): Define Cref_table_compare and Cref_table. (Cref_table_compare::operator()): New function. (Cref_inputs::gather_cref): New function. (filecol): New static const. (Cref_inputs::print_cref): New function. (Cref::print_cref): New function. * cref.h: Include <cstdio>. (class Cref): Update declarations. * mapfile.h (Mapfile::file): New function. * object.h (class Object): Define Symbols. Declare virtual do_get_global_symbols. (Object::get_global_symbols): New function. * object.cc (Input_objects::add_object): Pass object to cref_ if --cref. (Input_objects::archive_start): Likewise. (Input_objects::archive_stop): Likewise. (Input_objects::print_cref): New function. * dynobj.h (Sized_dynobj::do_get_global_symbols): New function. * dynobj.cc (big_endian>::do_add_symbols): Create symbols_ if --cref. * plugin.cc (Sized_pluginobj::do_get_global_symbols): New function. * plugin.h (class Sized_pluginobj): Update declarations.
2010-01-05 * symtab.cc (Symbol_table::add_from_object): Rename def parameterIan Lance Taylor2-53/+68
to is_default_version. Rename insdef to insdefault. (Symbol_table::add_from_relobj): Rename def to is_default_version and local to is_forced_local. (Symbol_table::add_from_pluginobj): Likewise. (Symbol_table::add_from_dynobj): Likewise. (Symbol_table::define_special_symbol): Rename insdef to insdefault.
2010-01-05 PR 10980Ian Lance Taylor3-3/+21
* options.h (class General_options): Add --allow-multiple-definition and -z muldefs. * resolve.cc (Symbol_table::should_override): Don't warn about a multiple symbol definition if --allow-multiple-definition or -z muldefs.
2010-01-05 PR 10980Ian Lance Taylor3-5/+39
* options.h (class General_options): Add --add-needed and --copy-dt-needed-entries. Tweak --as-needed help entry. * object.cc (Input_objects::check_dynamic_dependencies): Give an error if --copy-dt-needed-entries aka --add-needed is used and would cause a change in behaviour.
2010-01-04 PR 10980Ian Lance Taylor2-1/+17
* options.h (class General_options): Add -G as a short version of --shared. Add no-op options -assert, -g, and -i.
2010-01-04 * gc.h (gc_process_relocs): Call is_section_foldable_candidate toSriraman Tallam4-12/+35
check for .text or .gnu.linkonce.t sections. * icf.cc (Icf::find_identical_sections): Ditto. Change the detection for mangled function name within the section name. * icf.h (is_section_foldable_candidate): New function.
2009-12-31 PR 10980Ian Lance Taylor2-2/+8
* options.h (class General_options): Permit two dashes with --retain-symbols-file.
2009-12-31 PR 10979Ian Lance Taylor2-0/+11
* layout.cc (Layout::relaxation_loop_body): If -Ttext was used, don't put the file header and segment headers in the text segment.
2009-12-31 PR 10979Ian Lance Taylor7-7/+146
* common.cc (Sort_commons::operator()): Stabilize sort when both entries are NULL. (Symbol_table::do_allocate_commons_list): When allocating common symbols, skip a symbol which is no longer common. * symtab.h (Symbol::is_common): Test whether the symbol comes from an object before checking its type. * testsuite/common_test_2.c: New file. * testsuite/common_test_3.c: New file. * testsuite/Makefile.am (check_PROGRAMS): Add common_test_2. (common_test_2_SOURCES, common_test_2_DEPENDENCIES): Define. (common_test_2_LDFLAGS, common_test_2_LDADD): Define. (common_test_2_pic.o, common_test_2.so): New targets. (common_test_3_pic.o, common_test_3.so): New targets. * testsuite/Makefile.in: Rebuild.
2009-12-31 PR 10979Ian Lance Taylor4-0/+31
* script.cc (read_input_script): If we see a new SECTIONS clause, and we have added an input section, give an error. * layout.h (class Layout): Add have_added_input_section function. Add have_added_input_section_ field. * layout.cc (Layout::Layout): Initialize have_added_input_section_. (Layout::layout): Set have_added_input_section_. (Layout::layout_eh_frame): Likewise.
2009-12-31 PR 10931Ian Lance Taylor4-26/+104
* options.h (class General_options): Add --sort-common option. * symtab.h (class Symbol_table): Define Sort_commons_order enum. * common.cc (Sort_common): Add sort_order parameter to constructor. Add sort_order_ field. (Sort_commons::operator): Check sort_order_. (Symbol_table::allocate_commons): Determine the sort order. (Symbol_table::do_allocate_commons): Add sort_order parameter. Change all callers. (Symbol_table::do_allocate_commons_list): Likewise.
2009-12-31 PR 10916Ian Lance Taylor3-1/+18
* symtab.cc (Symbol_table::add_from_relobj): When not exporting symbols from this object, don't change the visibility of an undefined symbol. * testsuite/exclude_libs_test_1.c (lib1_ref): New function.
2009-12-30 PR 10861Ian Lance Taylor9-138/+351
* script.h (class Version_script_info): Define Language enum. Update declarations. Define Glob, Exact, and Lookup types. Add new fields globals_, locals_, and is_finalized_. * script.cc: Various formatting fixes. (class Parser_closure): Change language_stack_ from a vector of std::string to one of Version_script_info::Language. Adjust all uses accordingly. (class Lazy_demangler): Remove. (struct Version_expression): Change language from std::string to Version_script_info::Language. (Version_script_info::Version_script_info): New function. (Version_script_info::~Version_script_info): Don't call clear. (Version_script_info::finalize): New function. (Version_script_info::build_lookup_tables): New function. (Version_script_info::build_expression_list_lookup): New function. (Version_script_info::get_symbol_version_helper): Rewrite to use lookup tables. (Version_script_info::print_expression_list): Adjust to use Version_script_info::Language. (script_push_lex_into_version_mode): Check that the version script has not been finalized. (version_script_push_lang): Change language string to Version_script_info::Language. * options.cc (Command_line::version_script): New function. * options.h (class General_options): Add finalize_dynamic_list function. Change version_script from declaration to definition. * testsuite/ver_test_4.script: Remove duplicate def of t2_2. * testsuite/version_script.map: Remove duplicate def of foo. * testsuite/Makefile.am (ver_matching_def.so): Depend upon version_script.map. * testsuite/Makefile.in: Rebuild.
2009-12-30 PR 10843Ian Lance Taylor2-2/+13
* target-reloc.h (relocate_for_relocatable): When copying a reloc, if the input symbol index is 0, make the output symbol index 0.
2009-12-30 PR 10670Ian Lance Taylor3-9/+27
* options.h (class General_options): Add -x/--discard-all. * object.cc (Sized_relobj::do_count_local_symbols): Handle --discard-all. If the local symbol needs a dynamic entry, check that before handling --discard-locals.
2009-12-30 PR 10450Ian Lance Taylor2-2/+15
* output.cc (Output_segment::Output_segment): If PT_TLS, set the flags to PF_R. (Output_segment::add_output_section): Don't change the flags if the type is PT_TLS.
2009-12-30 PR 10450Ian Lance Taylor2-3/+11
* dynobj.cc (Dynobj::create_gnu_hash_table): Add symbols to the GNU hash table if they need a dynamic value. Otherwise, don't add them if they are defined in a dynamic object or are forced local.
2009-12-30 PR 10450Ian Lance Taylor2-1/+10
* layout.cc (Layout::create_dynamic_symtab): Only set entsize of .gnu.hash table for a 32-bit target.
2009-12-30 PR 10450Ian Lance Taylor2-1/+8
* symtab.h (Symbol::needs_dynsym_entry): A symbol in both a regular and a dynamic object only needs a dynamic symbol table entry if it is externally visible.
2009-12-30 PR 10450Ian Lance Taylor3-20/+56
* i386.cc (class Target_i386): Initialize global_offset_table_ in constructor. Add global_offset_table_ field. (Target_i386::got_section): Set global_offset_table_. (Target_i386::do_finalize_sections): Set global_offset_table_ size. * x86_64.cc (class Target_x86_64): Initialize global_offset_table_ in constructor. Add global_offset_table_ field. (Target_x86_64::got_section): Set global_offset_table_. (Target_x86_64::do_finalize_sections): Set global_offset_table_ size.
2009-12-30 * layout.cc (Layout::Layout): Initialize increase_relro_.Ian Lance Taylor13-159/+336
(Layout::get_output_section): Add is_relro, is_last_relro, and is_first_non_relro parameters. Change all callers. (Layout::choose_output_section): Likewise. (Layout::add_output_section_data): Likewise. (Layout::make_output_section): Likewise. (Layout::set_segment_offsets): Clear increase_relro when using a linker script. * layout.h (class Layout): Add increase_relro method. Add increase_relro_ field. Update declarations. * output.cc (Output_section::Output_section): Initialize is_last_relro_ and is_first_non_relro_. (Output_segment::add_output_section): Group relro sections is do_sort is true. Handle is_last_relro and is_first_non_relro. (Output_segment::maximum_alignment): Remove relro handling. (Output_segment::set_section_addresses): Add increase_relro parameter. Change all callers. Add initial alignment to align relro sections on separate page. Remove old relro handling. (Output_segment::set_section_list_addresses): Remove in_relro parameter. Change all callers. (Output_segment::set_offset): Add increase parameter. Change all callers. Remove old relro handling. * output.h (class Output_section): Add new methods: is_last_relro, set_is_last_relro, is_first_non_relro, set_is_first_non_relro. Add is_last_relro_ and is_first_non_relro_ fields. * i386.cc (Target_i386::got_section): Don't call set_is_relro. Create separate .got.plt section. Call increase_relro. * x86_64.cc (Target_x86_64::got_section): Likewise. * testsuite/relro_script_test.t: Add .got.plt.
2009-12-30 PR 10450Ian Lance Taylor3-4/+42
* layout.cc (Layout::Layout): Initialize dynamic_symbol_ field. (Layout::create_initial_dynamic_sections): Set dynamic_symbol_. (Layout::finalize): Call set_dynamic_symbol_size. (Layout::set_dynamic_symbol_size): New function. * layout.h (class Layout): Add dynamic_symbol_ field. Declare set_dynamic_symbol_size.
2009-12-30 PR 10450Ian Lance Taylor3-6/+45
* output.h (class Output_section): Add is_entsize_zero_ field. * output.cc (Output_section::Output_section): Initialize is_entsize_zero_. (Output_section::set_entsize): If two different entsizes are requested, force it to zero. (Output_section::add_input_section): Set flags for .debug_str before updating section flags. Set entsize. (Output_section::update_flags_for_input_section): Set SHF_MERGE and SHF_STRING if all input sections have those flags.
2009-12-292009-12-29 Rafael Espindola <espindola@google.com>Rafael Ávila de Espíndola3-2/+7
* main.cc (main): Fix the sys time reporting. * workqueue.cc (Workqueue::find_and_run_task): Fix the sys time reporting.