Commit Graph

1186 Commits

Author SHA1 Message Date
Doug Kwan 131687b4ad 2010-07-13 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_input_section::Arm_input_section): For a
	SHT_ARM_EXIDX section, always keeps the input sections.
	(Arm_input_section::set_exidx_section_link): New method.
	(Arm_exidx_input_section::Arm_exidx_input_section): Initialize
	has_errors_ to false.
	(Arm_exidx_input_section::has_errors,
	Arm_exidx_input_section::set_has_errors): New methods.
	(Arm_exidx_input_section::has_errors_): New data member.
	(Arm_relobj::get_exidx_shndx_list): New method.
	(Arm_output_section::append_text_sections_to_list): Do not skip
	section without SHF_EXECINSTR.
	(Arm_output_section::fix_exidx_coverage): Skip input sections with
	errors.
 	(Arm_relobj::make_exidx_input_section): Add new parameter for text
	section header.  Make error messages more verbose.  Check for
	a non-executable section linked to an EXIDX section.
	(Arm_relobj::do_read_symbols): Remove error checking, which has been
	moved to Arm_relobj::make_exidx_input_section.  Add an assertion to
	check that there is no deferred EXIDX section if we exit early.
	Instead of not making an EXIDX section in case of an error, make one
	and set the has_errors flag of it.
	(Target_arm::do_finalize_sections): Fix up links of EXIDX sections
	in a relocatable link.
	(Target_arm::do_relax): Look for the EXIDX output section instead of
	assuming that it is called .ARM.exidx.
 	(Target_arm::fix_exidx_coverage): Add a new parameter for input
	section list.  Do not check for SHF_EXECINSTR section flags but
	skip any input section with errors.
	* output.cc (Output_section::Output_section): Initialize
	always_keeps_input_sections_ to false.
	(Output_section::add_input_section): Check for
	always_keeps_input_sections_.
	*  output.h (Output_section::always_keeps_input_sections,
	Output_section::set_always_keeps_input_sections): New methods.
	(Output_section::always_keeps_input_sections): New data member.
2010-07-13 20:07:08 +00:00
Rafael Ávila de Espíndola 6951728764 2010-07-13 Rafael Espindola <espindola@google.com>
* fileread.cc (try_extra_search_path, find_file): Move to Input_file.
	* fileread.h (Input_file): Add try_extra_search_path and find_file.
2010-07-13 14:59:02 +00:00
Ian Lance Taylor 8274239589 * output.h (Output_section_lookup_maps::add_merge_section):
Correct check of whether value was inserted.
	(Output_section_lookup_maps::add_merge_input_section): Likewise.
	(Output_section_lookup_maps::add_relaxed_input_section):
	Likewise.
	* arm.cc (Target_arm::got_section): Remove used local os.
	* i386.cc (Target_i386::got_section): Likewise.
	* x86_64.cc (Target_x86_64::got_section): Likewise.
	* sparc.cc (Target_sparc::got_section): Likewise.
	(Target_sparc::relocate): Remove unused local have_got_offset.
	* powerpc.cc (Target_powerpc::relocate): Likewise.
2010-07-13 12:04:03 +00:00
Ian Lance Taylor 241531d62d * compressed_output.cc (zlib_decompress): Fix signature in
!HAVE_ZLIB_H case.
2010-07-13 11:59:02 +00:00
Ian Lance Taylor f2d707b5bb * archive.cc (Archive::include_member): Unlock an external member
of a thin archive.  Don't bother to delete an object we know is
	NULL.
2010-07-13 07:56:08 +00:00
Cary Coutant a2e4736229 * compressed_output.cc (zlib_decompress): New function.
(get_uncompressed_size): New function.
	(decompress_input_section): New function.
	* compressed_output.h (get_uncompressed_size): New function.
	(decompress_input_section): New function.
	* dwarf_reader.cc (Sized_dwarf_line_info::Sized_dwarf_line_info)
	Handle compressed debug sections.
	* layout.cc (is_compressed_debug_section): New function.
	(Layout::output_section_name): Map compressed section names to
	canonical names.
	* layout.h (is_compressed_debug_section): New function.
	(is_debug_info_section): Recognize compressed debug sections.
	* merge.cc: Include compressed_output.h.
	(Output_merge_data::do_add_input_section): Handle compressed
	debug sections.
	(Output_merge_string::do_add_input_section): Handle compressed
	debug sections.
	* object.cc: Include compressed_output.h.
	(Sized_relobj::Sized_relobj): Initialize new data members.
	(build_compressed_section_map): New function.
	(Sized_relobj::do_read_symbols): Handle compressed debug sections.
	* object.h (Object::section_is_compressed): New method.
	(Object::do_section_is_compressed): New method.
	(Sized_relobj::Compressed_section_map): New type.
	(Sized_relobj::do_section_is_compressed): New method.
	(Sized_relobj::compressed_sections_): New data member.
	* output.cc (Output_section::add_input_section): Handle compressed
	debug sections.
	* reloc.cc: Include compressed_output.h.
	(Sized_relobj::write_sections): Handle compressed debug sections.
2010-07-12 17:59:58 +00:00
Cary Coutant ce279a62c4 * resolve.cc (Symbol_table::resolve): Remember whether undef was
weak when resolving to a dynamic def.
	(Symbol_table::should_override): Add adjust_dyndef flag; set it
	for weak undef/dynamic def cases. Adjust callers.
	* symtab.cc (Symbol::init_fields): Initialize undef_binding_set_ and
	undef_binding_weak_.
	(Symbol_table::sized_write_globals): Adjust symbol binding.
	(Symbol_table::sized_write_symbol): Add binding parameter.
	* symtab.h (Symbol::set_undef_binding): New method.
	(Symbol::is_undef_binding_weak): New method.
	(Symbol::undef_binding_set_, Symbol::undef_binding_weak_): New members.
	(Symbol_table::should_override): Add new parameter.
	(Symbol_table::sized_write_symbol): Add new parameter.

	* testsuite/weak_undef_file1.cc: Add new test case.
	* testsuite/weak_undef_file2.cc: Fix header comment.
	* testsuite/weak_undef_test.cc: Add new test case.
2010-07-09 01:34:31 +00:00
Doug Kwan b2286c10fe 2010-06-29 Doug Kwan <dougkwan@google.com>
* arm-reloc-property.cc (Arm_reloc_property::Arm_reloc_property):
	Initialize USE_SYMBOL_.
	* arm-reloc-property.h (Arm_reloc_property::uses_symbol): New method
	definition.
	(Arm_reloc_property::uses_symbol_): New data member declaration.
	* arm.cc (Target_arm::Relocate::relocate): Exit early if relocation
	uses symbol value and symbol is undefined but not weakly undefined.
2010-06-30 06:41:09 +00:00
Rafael Ávila de Espíndola 4802450ac9 2010-06-28 Rafael Espindola <espindola@google.com>
* plugin.cc (Plugin::load): Use dlerror.
2010-06-28 21:03:49 +00:00
Ian Lance Taylor e5ca47baff * symtab.cc (detect_odr_violations): When reporting an ODR
violation, report an object where the symbol is defined.
2010-06-27 06:17:36 +00:00
Doug Kwan 8a75a161b2 2010-06-25 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::can_check_for_functions_pointers): Return true.
	(Target_arm::section_may_have_icf_unsafe_pointers): New method
	definition.
	(Target_arm::Scan::local_reloc_may_be_function_pointer,
	Target_arm::Scan::global_reloc_may_be_function_pointer): Implement
	target hook to detect function points.
	(Target_arm::Scan::possible_function_pointer_reloc): New method.
	* icf.h (Icf::check_section_for_function_pointers): Change type of
	parameter SECTION_NAME to const reference to std::string.  Use
	target hook to determine if section may have unsafe pointers.
	* target.h (Target::section_may_have_icf_unsafe_pointers): New
	method definition.
2010-06-25 00:37:40 +00:00
Rafael Ávila de Espíndola 42218b9f16 2010-06-21 Rafael Espindola <espindola@google.com>
* fileread.cc (Input_file::find_fie): New
	(Input_file::open): Use Input_file::find_fie.
	* fileread.h (Input_file::find_fie): New
	* plugin.cc (set_extra_library_path): New.
	(Plugin::load): Add set_extra_library_path to the transfer vector.
	(Plugin_manager::set_extra_library_path): New.
	(Plugin_manager::add_input_file): Use the extra search path if set.
	(set_extra_library_path(): New.
	* plugin.h (Plugin_manager): Add set_extra_library_path and
	extra_search_path_.
2010-06-21  Rafael Espindola  <espindola@google.com>

	* plugin-api.h (ld_plugin_set_extra_library_path): New.
	(ld_plugin_tag): Add LDPT_SET_EXTRA_LIBRARY_PATH.
	(ld_plugin_tv): Add tv_set_extra_library_path.
2010-06-21 21:21:25 +00:00
Cary Coutant a0506ccaf2 * layout.cc (gdb_sections): Add .debug_types.
(lines_only_debug_sections): Likewise.
2010-06-19 21:11:55 +00:00
Rafael Ávila de Espíndola 6508b958ff 2010-06-18 Rafael Espindola <espindola@google.com>
* plugin.h (ld_plugin_add_input_file, ld_plugin_add_input_library):
	Make argument const.

2010-06-18  Rafael Espindola  <espindola@google.com>

	* plugin.cc (add_input_file,add_input_library)
	(Plugin_manager::add_input_file): Make filename arguments const.
	* plugin.h (Plugin_manager::add_input_file): Make filename arguments
	const.
2010-06-18 16:53:23 +00:00
Doug Kwan 3e23530232 2010-06-16 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_finalize_sections): Do not emit an
	.ARM.attributes section if we have not merged any input
	attributes sections.
2010-06-16 18:19:18 +00:00
Doug Kwan 106e8a6ca6 2010-06-15 Viktor Kutuzov <vkutuzov@accesssoftek.com>
* arm.cc: Allow combining objects with no EABI version
        information.
2010-06-15 23:51:51 +00:00
Rafael Ávila de Espíndola 91ff43fe2d 2010-06-15 Rafael Espindola <espindola@google.com>
* plugin.cc (Plugin_hook::run): Set in_real_elf for the start symbol.
2010-06-15 19:22:25 +00:00
Ian Lance Taylor 68ed838c0d * fileread.cc: Only #include <sys/uio.h> if HAVE_READV.
(struct iovec): Correct !HAVE_READV definition.
2010-06-15 16:54:26 +00:00
Cary Coutant f3a2388fc9 * object.cc (Sized_relobj::do_layout): Defer layout for reloc sections.
(Sized_relobj::do_layout_deferred_sections): Do layout for deferred
	reloc sections.
	* object.h (Sized_relobj::deferred_layout_relocs_): New data member.

	PR 11683
	* symtab.h (Symbol::is_placeholder): New member function.
	* target-reloc.h (relocate_section): Check for placeholder symbols.

	* testsuite/Makefile.am (plugin_test_8): New test.
	(plugin_test_9): New test.
	* testsuite/Makefile.in: Regenerate.
2010-06-10 17:20:27 +00:00
Nick Clifton e1df38aad4 * yyscript.y (input_list_element): Allow strings prefixed with
the '-' character.  Treat these as libraries.
        * script.cc (script_add_library): New function.  Adds a library
        specified by "-l<name>" found in an input script.
        * script-c.h: Add prototype for script_add_library.
2010-06-09 14:14:18 +00:00
Doug Kwan 25bbe950ab 2010-06-07 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_relax): Reserve more space for stubs.
	Restrict stub-group size to be within long conditional branch
	range when working around cortex-A8 erratum.
2010-06-08 00:33:41 +00:00
Ian Lance Taylor 0f32ea4ce3 * gold-threads.cc (Lock_impl_threads::Lock_impl_threads): Correct
#ifdef typo.
2010-06-07 15:00:44 +00:00
Sriraman Tallam 8fe2a3694d PR gold/11658
* output.cc
	(Output_section::Input_section_sort_entry::compare_section_ordering):
	Change to return non-zero correctly.
	(Output_section::Input_section_sort_section_order_index_compare
	::operator()): Change to fix ambiguity in comparisons.
2010-06-03 18:01:19 +00:00
Sriraman Tallam 6e9ba2ca9c * gold.h (is_wildcard_string): New function.
* layout.cc (Layout::layout): Pass this pointer to add_input_section.
	(Layout::layout_eh_frame): Ditto.
	(Layout::find_section_order_index): New method.
	(Layout::read_layout_from_file): New method.
	* layout.h (Layout::find_section_order_index): New method.
	(Layout::read_layout_from_file): New method.
	(Layout::input_section_position_): New private member.
	(Layout::input_section_glob_): New private member.
	* main.cc (main): Call read_layout_from_file here.
	* options.h (--section-ordering-file): New option.
	* output.cc (Output_section::input_section_order_specified_): New
	member.
	(Output_section::Output_section): Initialize new member.
	(Output_section::add_input_section): Add new parameter.
	Keep input sections when --section-ordering-file is used.
	(Output_section::set_final_data_size): Sort input sections when
	section ordering file is specified.
	(Output_section::Input_section_sort_entry): Add new parameter.
	Check sorting type.
	(Output_section::Input_section_sort_entry::compare_section_ordering):
	New method.
	(Output_section::Input_section_sort_compare::operator()): Change to
	consider section_order_index.
	(Output_section::Input_section_sort_init_fini_compare::operator()):
	Change to consider section_order_index.
	(Output_section::Input_section_sort_section_order_index_compare
	::operator()): New method.
	(Output_section::sort_attached_input_sections): Change to sort
	according to section order when specified.
	(Output_section::add_input_section<32, true>): Add new parameter.
	(Output_section::add_input_section<64, true>): Add new parameter.
	(Output_section::add_input_section<32, false>): Add new parameter.
	(Output_section::add_input_section<64, false>): Add new parameter.
	* output.h (Output_section::add_input_section): Add new parameter.
	(Output_section::input_section_order_specified): New
	method.
	(Output_section::set_input_section_order_specified): New method.
	(Input_section::Input_section): Initialize section_order_index_.
	(Input_section::section_order_index): New method.
	(Input_section::set_section_order_index): New method.
	(Input_section::section_order_index_): New member.
	(Input_section::Input_section_sort_section_order_index_compare): New
	struct.
	(Output_section::input_section_order_specified_): New member.
	* script-sections.cc (is_wildcard_string): Delete and move modified
	method to gold.h.
	(Output_section_element_input::Output_section_element_input): Modify
	call to is_wildcard_string.
	(Output_section_element_input::Input_section_pattern
	::Input_section_pattern): Ditto.
	(Output_section_element_input::Output_section_element_input): Ditto.
	* testsuite/Makefile.am (final_layout): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/final_layout.cc: New file.
	* testsuite/final_layout.sh: New file.
2010-06-01 23:37:58 +00:00
Rafael Ávila de Espíndola 3537c84bf4 2010-06-01 Rafael Espindola <espindola@google.com>
* plugin-api.h (ld_plugin_tag): Add LDPT_OUTPUT_NAME.

2010-06-01  Rafael Espindola  <espindola@google.com>

	* plugin.cc (Plugin::load): Pass the output name to the plugin.
2010-06-01 19:32:27 +00:00
Rafael Ávila de Espíndola 105b6afd92 2010-06-01 Rafael Espindola <espindola@google.com>
* plugin.cc (Sized_pluginobj::::do_add_symbols): Correctly set the
	visibility of symbols.
2010-06-01 19:17:43 +00:00
Doug Kwan 29e1142177 2010-05-27 Doug Kwan <dougkwan@google.com>
* object.cc (Sized_relobj::do_finalize_local_symbols): Use offset
	from start of output section instead of address for a local symbol
	in a merged or relaxed section when doing a relocatable link.
2010-05-26 18:53:46 +00:00
Rafael Ávila de Espíndola 5e0f337e8c 2010-05-26 Rafael Espindola <espindola@google.com>
PR 11604
	* gold/object.cc(Sized_relobj::do_layout_deferred_sections): Avoid
	adding sections the garbage collector removed.
	* gold/testsuite/Makefile.am: Add test.
	* gold/testsuite/Makefile.in: Regenerate.
	* gold/testsuite/plugin_test_7.sh: New.
	* gold/testsuite/plugin_test_7_1.c: New.
	* gold/testsuite/plugin_test_7_2.c: New.
2010-05-26 15:47:39 +00:00
Rafael Ávila de Espíndola f418727792 2010-05-26 Rafael Espindola <espindola@google.com>
* script-sections.cc (Output_section_definition::set_section_addresses):
	Check for --section-start.
2010-05-26 15:15:05 +00:00
Doug Kwan 5c3885291f 2010-05-26 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_scan_relocatable_relocs): New class.
	(Target_arm::relocate_special_relocatable): New method.
	(Arm_relocate_functions::arm_branch_common): Handle relocatable link.
	(Arm_relocate_functions::thumb_branch_common): Same.
	(Target_arm::scan_relocatable_relocs): Use Arm_scan_relocatable_relocs
	instead of Default_scan_relocatable_relocs.
	* target-reloc.h (relocate_for_relocatable): Let target handle
	relocation strategy Relocatable_relocs::RELOC_SPECIAL.
	* target.h (Sized_target::relocate_special_relocatable): New method.
2010-05-26 03:33:59 +00:00
Ian Lance Taylor bca1c3ae45 * timer.cc: Only #include <sys/times.h> if HAVE_TIMES is defined. 2010-05-26 00:13:05 +00:00
Doug Kwan 0439c7962a 2010-05-23 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_input_section::do_output_offset): Use convert_types
	instead of a cast.
	(Target_arm::apply_cortex_a8_workaround): Rewrite a conditional branch
	with a direct branch, not a conditional branch, to a stub.
	* merge.cc (Output_merge_base::record_input_section): New method
	defintion.
	(Output_merge_data::do_add_input_section): Record input section if
	keeps-input-sections flag is set.
	(Output_merge_string::do_add_input_section): Ditto.
	* merge.h (Output_merge_base::Output_merge_base): Initialize new data
	members KEEPS_INPUT_SECTIONS_, FIRST_RELOBJ_, FIRST_SHNDX_ and
	INPUT_SECTIONS_.
	(Output_merge_base::keeps_input_sections,
	Output_merge_base::set_keeps_input_sections,
	Output_merge_base::first_relobj, Output_merge_base::first_shndx): New
	method definitions.
	(Output_merge_base::Input_sections): New type declaration.
	(Output_merge_base::input_sections_begin,
	Output_merge_base::input_sections_end,
	Output_merge_base::do_set_keeps_input_sections): New method definitions.
	(Output_merge_base::bool keeps_input_sections_,
	Output_merge_base::first_relobj_, Output_merge_base::first_shndx_,
	Output_merge_base::input_sections_): New data members.
	(Output_merge_data::do_set_keeps_input_sections): New method
	defintion.
	(Output_merge_string::do_set_keeps_input_sections): Ditto.
	* output.cc (Output_section::Input_section::relobj): Move method
	defintion from class declaration to here and handle merge sections.
	(Output_section::Input_section::shndx): Ditto.
	(Output_section::Output_section): Remove initializations of removed
	data members and initialize new data member LOOKUP_MAPS_.
	(Output_section::add_input_section): Set keeps-input-sections flag
	for a newly created merge output section as appropriate.  Adjust code
	to use Output_section_lookup_maps class.
	(Output_section::add_relaxed_input_section): Adjst code for lookup
	maps code refactoring.
 	(Output_section::add_merge_input_section): Add a new parameter
	KEEPS_INPUT_SECTION.  Adjust code to use Output_section_lookup_maps
	class.  If adding input section to a newly created merge output
	section fails, remove the new merge section.
	(Output_section::convert_input_sections_in_list_to_relaxed_input_sections):
	Adjust code for use of the Output_section_lookup_maps class.
 	(Output_section::find_merge_section): Ditto.
	(Output_section::build_lookup_maps): New method defintion.
 	(Output_section::find_relaxed_input_section): Adjust code to use
	Output_section_lookup_maps class.
	(Output_section::get_input_sections): Export merge sections.  Adjust
	code to use Output_section_lookup_maps class.
	(Output_section:::add_script_input_section): Adjust code to use
	Output_section_lookup_maps class.  Update lookup maps for merge
	sections also.
	(Output_section::discard_states): Use Output_section_lookup_maps.
	(Output_section::restore_states): Same.
	* output.h (Merge_section_properties): Move class defintion out of
	Output_section.
	(Output_section_lookup_maps): New class.
	(Output_section::Input_section::is_merge_section): New method
	defintion.
	(Output_section::Input_section::relobj): Move defintion out of class
	defintion.  Declare method only.
	(Output_section::Input_section::shndx): Ditto.
	(Output_section::Input_section::output_merge_base): New method defintion.
     	(Output_section::Input_section::u2_.pomb): New union field.
	(Output_section::Merge_section_by_properties_map,
	Output_section::Output_section_data_by_input_section_map,
	Output_section::Ouptut_relaxed_input_section_by_input_section_map):
	Remove types.
   	(Output_section::add_merge_input_section): Add new parameter
	KEEPS_INPUT_SECTIONS.
	(Output_section::build_lookup_maps): New method declaration.
	(Output_section::merge_section_map_,
	Output_section::merge_section_by_properties_map_,
	Output_section::relaxed_input_section_map_,
	Output_section::is_relaxed_input_section_map_valid_): Remove data
	members.
	(Output_section::lookup_maps_): New data member.
2010-05-23 07:43:39 +00:00
H.J. Lu 7629558884 Add a cast to avoid a compilation error.
2010-05-21  Doug Kwan  <dougkwan@google.com>

	PR gold/11619
	* arm.cc (Arm_input_section::do_output_offset): Add a cast to
	avoid a compilation error.
2010-05-22 01:06:49 +00:00
Rafael Ávila de Espíndola d103a984a7 2010-05-19 Rafael Espindola <espindola@google.com>
* script-sections.cc (Output_section_definition::allocate_to_segment):
	Update the phdrs_list even when the output section is NULL.
	* testsuite/Makefile.am: Add test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/script_test_9.cc: New.
	* testsuite/script_test_9.sh: New.
	* testsuite/script_test_9.t: New.
2010-05-19 17:49:19 +00:00
Doug Kwan 6625d24e23 2010-05-14 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_input_section::original_size): New method.
	(Arm_input_section::do_addralign): Add a cast.
	(Arm_input_section::do_output_offset): Remove static cast.
	(Arm_input_section::original_addralign,
	 Arm_input_section::original_size_): Change type to uint32_t.
	(Arm_input_section::init): Add safe casts for section alignment
	and size.
	(Arm_input_section::set_final_data_size): Do not set address and
	offset of stub table.
	(Arm_output_section::fix_exidx_coverage): Change use of of
	Output_section::Simple_input_section to that of
	Output_section::Input_section.
	(Target_arm::do_relax): Set addresses and file offsets of Stub_tables
	except for the first pass.
	* output.cc (Output_section::get_input_sections): Change type of
	input_sections to std::list<Input_section>.
	(Output_section::add_script_input_section): Rename from
	Output_section::add_simple_input_section.  Change type of SIS
	parameter from Simple_input_section to Input_section.
	* output.h (Output_section::Simple_input_section): Remove class.
	(Output_section::Input_section): Change class visibility to public.
	(Output_section::Input_section::addralign): Use stored alignments
	for special input sections if set.
	(Output_section::Input_section::set_addralign): New method.
	(Output_section::get_input_sections): Change parameter type from
	list of Simple_input_section to list of Input_section.
	(Output_section::add_script_input_section): Rename from
	Output_section::add_simple_input_section. Change first parameter's
	type from Simple_input_section to Input_section and remove the
	second and third parameters.
	* script-sections.cc (Input_section::Input_section_list): Change
	type to list of Output_section::Input_section/
	(Input_section_info::Input_section_info): Change parameter type of
	INPUT_SECTION to Output_section::Input_section.
	(Input_section_info::input_section): Change return type.
	(Input_section_info::input_section_): Change type to
	Output_section::Input_section.
	(Output_section_element_input::set_section_addresses): Adjust code
	to use Output_section::Input_section instead of
	Output_section::Simple_input_section.  Adjust code for renaming
	of Output_section::add_simple_input_section.
	(Orphan_output_section::set_section_addresses): Ditto.
2010-05-19 07:09:36 +00:00
Ralf Wildenhues e1e82ea4dc Fix define in gold.h
gold/:
	* gold.h (Unordered_multimap, Unordered_map): Fix defines for
	when neither HAVE_TR1_UNORDERED_MAP nor HAVE_EXT_HASH_MAP are set.
2010-05-18 19:18:31 +00:00
Rafael Ávila de Espíndola 91e75c8a9c 2010-05-18 Rafael Espindola <espindola@google.com>
* options.cc (General_options::finalize): Handle -nostdlib.
	* options.h (nostdlib): New option.
	* script.cc (script_add_search_dir): Handle -nostdlib.
2010-05-18 18:08:03 +00:00
Doug Kwan da59ad79a2 2010-05-12 Doug Kwan <dougkwan@google.com>
elfcpp/ChangeLog

	* arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,
	Tag_FP_HP_extension, Tag_MPextension_use_legacy): Rename from
	existing tags.
	(Tag_undefined40, Tag_undefined41, Tag_MPextension_use,
	Tag_undefined43): New tags.
	(Targ_VFP_arch, Tag_ABI_align8_needed, TAG_ABI_align8_preserved,
	Tag_VFP_HP_extension): Define aliases for backward compatiblity.

gold/ChangeLog

	* arm.cc (Target_arm::do_finalize_sections): Create an empty
	attributes section only if there no attributes section after merging.
	(Target_arm::merge_object_attributes): Move value of
	Tag_MPextension_use_legacy to that of Tag_MPextension_use.
	Handle Tag_DIV_use and Tag_MPextension_use_legacy.
	* testsuite/Makefile.am (check_SCRIPTS): Add arm_attr_merge.sh
	(check_DATA): Add arm_attr_merge_6.stdout, arm_attr_merge_6r_stdout
	and arm_attr_merge_7.stdout.
	(arm_attr_merge_6.stdout, arm_attr_merge_6 arm_attr_merge_6a.o
	arm_attr_merge_6b.o, arm_attr_merge_6r.stdout, arm_attr_merge_6r,
	arm_attr_merge_7.stdout, arm_attr_merge_7, arm_attr_merge_7a.o,
	arm_attr_merge_7b.o): New rules.
	(MOSTLYCLEANFILES): Add arm_attr_merge_6, arm_attr_merge_6r and
	arm_attr_merge_7
	* testsuite/Makefile.in: Regenerate.
	* testsuite/arm_attr_merge.sh: New file.
	* testsuite/arm_attr_merge_[67][ab].s: Same.
2010-05-13 02:41:15 +00:00
Nick Clifton 3e01a7fd46 Updated Spanish translations. 2010-05-05 15:28:26 +00:00
H.J. Lu 7ad2014ac5 Properly install gold/ld as default cross linker.
gold/

2010-04-27  H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.am (install-exec-local): Properly install gold as
	default cross linker.
	* Makefile.in: Regenerated.

ld/

2010-04-27  H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.am (install-exec-local): Properly install ld as
	default cross linker.
	* Makefile.in: Regenerated.
2010-04-27 16:05:54 +00:00
Nick Clifton 4fda8867e9 gold:
* configure.ac (install_as_default): Define and set to false
        unless --enable-gold or --enable-gold=both/gold has been
        specified.
        * configure: Regenerate.

        * Makefile.am (install-exec-local): Install the executable as
        'ld.gold'.  If install_as_default is true then also install it as
        'ld'.
        * Makefile.in: Regenerated.
ld:
        * configure.in (install_as_default): Define and set to true
        unless --enable-gold=both/gold has been specified.
        * configure: Regenerate.

        * Makefile.am (transform): Use ld.bfd as the default name of
        the linker.
        (install-exec-local): Also install the executable as a binary
        named 'ld' if install_as_default is true.
        * Makefile.in: Regenerate.
2010-04-27 14:12:32 +00:00
Ian Lance Taylor bd288ea21b * layout.cc (Layout::layout_reloc): In relocatable link don't
combine reloc sections for grouped sections.
2010-04-24 14:32:23 +00:00
Sriraman Tallam ef38fd8a0b 2010-04-23 Sriraman Tallam <tmsriram@google.com>
* gc.h (gc_process_relocs): Pass information on relocs pointing to
	sections that are not ordinary to icf.
	* icf.cc (get_section_contents): Handle relocation pointing to section
	with no object or shndx information.
	* testsuite/Makefile.am: Remove icf_virtual_function_folding_test.sh
	* testsuite/Makefile.in: Regenerate.
	* testsuite/icf_virtual_function_folding_test.cc: Remove printf.
	* testsuite/icf_virtual_function_folding_test.sh: Delete file.
2010-04-23 18:49:23 +00:00
Ian Lance Taylor f6973bdcb7 * expression.cc (Expression::Expression_eval_info): Add
result_alignment_pointer field.
	(Expression::eval_with_dot): Add result_alignment_pointer
	parameter.  Change all callers.
	(Expression::eval_maybe_dot): Likewise.
	(class Binary_expression): Add alignment_pointer parameter to
	left_value and right_value.  Change all callers.
	(BINARY_EXPRESSION): Set result alignment.
	(class Trinary_expression): Add alignment_pointer parameter to
	arg2_value and arg3_value.  Change all callers.
	(Trinary_cond::value): Set result alignment.
	(Max_expression::value, Min_expression::value): Likewise.
	(Align_expression::value): Likewise.
	* script-sections.cc (class Sections_element): Add dot_alignment
	parameter to set_section_addresses virtual function.  Update
	instantiations.
	(class Output_section_element): Likewise.
	(Script_sections::create_segments): Add dot_alignment parameter.
	Change all callers.
	(Script_sections::create_segments_from_phdrs_clause): Likewise.
	(Script_sections::set_phdrs_clause_addresses): Likewise.
	* script-sections.h: Update declarations.
	* script.h: Update declarations.
	* output.h (Output_segment::set_minimum_p_align): Don't decrease
	min_p_align.
	* testsuite/script_test_3.t: Set large alignment.
	* testsuite/script_test_3.sh: Make sure that at least one LOAD
	segment has expected alignment.
2010-04-23 04:47:33 +00:00
Nick Clifton 9c9c98a59d Updated translation templates.
Updated Bulgarian translation.
Updated Finnish translations.
Updated French translations.
Updated Vietnamese translations.
2010-04-22 14:37:16 +00:00
H.J. Lu 2253bfba80 Add icf_virtual_function_folding_test to check_PROGRAMS.
2010-04-22  H.J. Lu  <hongjiu.lu@intel.com>

	* testsuite/Makefile.am (check_PROGRAMS): Add
	icf_virtual_function_folding_test.
	* testsuite/Makefile.in: Regenerated.
2010-04-22 14:12:42 +00:00
Andrew Haley 85fdf9067f 2010-04-15 Andrew Haley <aph@redhat.com>
* emultempl/armelf.em (merge_exidx_entries): New variable.
	(OPTION_NO_MERGE_EXIDX_ENTRIES): New definition.
	("no-merge-exidx-entries"): New option.
	* ld.texinfo (merge-exidx-entries): Document this option.

2010-04-15  Andrew Haley  <aph@redhat.com>

	* bfd-in.h (elf32_arm_fix_exidx_coverage): Add new flag:
	merge_exidx_entries.
	* bfd-in2.h: Likewise.
	* elf32-arm.c (elf32_arm_fix_exidx_coverage): Likewise.  Use it to
	control merging of exidx entries.

2010-04-15  Andrew Haley  <aph@redhat.com>

	* options.h (merge_exidx_entries): New option.
	* arm.cc (class Arm_exidx_fixup): Add new arg, merge_exidx_entries.
	(class Arm_exidx_fixup::merge_exidx_entries_): New member.
	(Output_section::fix_exidx_coverage): Add new arg, merge_exidx_entries.
	(Target_arm::merge_exidx_entries): New function.
	(process_exidx_entry): Don't merge if merge_exidx_entries_ is false.
	(Arm_output_section::fix_exidx_coverage): Pass merge_exidx_entries
	to Arm_exidx_fixup constructor.
	Add new arg, merge_exidx_entries.
	(Target_arm::fix_exidx_coverage): pass merge_exidx_entries to
	Arm_output_section::fix_exidx_coverage.
2010-04-21 16:32:31 +00:00
Sriraman Tallam ce97fa81e0 2010-04-18 Sriraman Tallam <tmsriram@google.com>
* icf.cc (get_section_contents): Check for preemptible functions.
	Ignore addend when appropriate.
	* symtab.cc (should_add_dynsym_entry): Add new parameter.  Check for
	section folded.
	(add_from_relobj): Check for section folded.
	(set_dynsym_indexes): Fix call to should_add_dynsym_entry.
	* symtab.h (should_add_dynsym_entry): Add new parameter.
	* target-reloc.h (scan_relocs): Check for section folded.
	* x86_64.cc (Target_x86_64::Scan::possible_function_pointer_reloc):
	Check reloc types for function pointers in shared objects.
	* testsuite/Makefile.am (icf_virtual_function_folding_test): New test
	case.
	(icf_preemptible_functions_test): New test case.
	(icf_string_merge_test): New test case.
	* testsuite.Makefile.in: Regenerate.
	* testsuite/icf_safe_so_test.sh: Change to not fold foo_glob and
	bar_glob.  Refactor code.
	* testsuite/icf_preemptible_functions_test.cc: New file.
	* testsuite/icf_preemptible_functions_test.sh: New file.
	* testsuite/icf_string_merge_test.cc: New file.
	* testsuite/icf_string_merge_test.sh: New file.
	* testsuite/icf_virtual_function_folding_test.cc: New file.
	* testsuite/icf_virtual_function_folding_test.sh: New file.
2010-04-20 21:13:30 +00:00
Doug Kwan 04ceb17cc3 2010-04-14 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_output_section::fix_exidx_coverage): Mark object
	for local symbol recounting if we remove a section due to ICF.
	* gold.cc (queue_middle_gc_tasks): Create a dummy blocker if
	there are no regular objects in input.
2010-04-15 00:42:15 +00:00
Doug Kwan 153e7da4fc 2010-04-13 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_input_section::set_final_data_size): Compute
	accurate final data size instead of using current data size.
2010-04-13 20:37:55 +00:00
Doug Kwan 4dbd9faf85 Add back missing change log.
2010-04-09  Doug Kwan  <dougkwan@google.com>

	* layout.cc (Layout::choose_output_section): Handle script section
	types.
	(Layout::make_output_section_for_script): Add section type parameter.
	Handle script section types.
	* layout.h (Layout::make_output_section_for_script): Add section
	type parameter.
	* output.cc (Output_section::Output_section): Initialize data member
	is_noload_.
	(Output_section::do_reset_address_and_file_offset): Do not set address
	to 0 if section is a NOLOAD section.
	* output.h (Output_section::is_noload): New method.
	(Output_section::set_is_noload): Ditto.
	(Output_section::is_noload_): New data member.
	* script-c.h (Script_section_type): New enum type.
	(struct Parser_output_section_header): Add new file section_type.
	* script-sections.cc (Sections_element::output_section_name): Add
	parameter for returning script section type.
	(Output_section_definition::output_section_name): Ditto.
	(Output_section_definition::section_type)P; New method.
	(Output_section_definiton::script_section_type_name): Ditto.
	(Output_section_definition::script_section_type_): New data member.
	(Output_section_definition::Output_section_definition): Initialize
	data member Output_section_definition::script_section_type_.
	(Output_section_definition::create_sections): Pass script section type
	to Layout::make_output_section_for_script.
	(Output_section_definition::output_section_name): Return script
	section type to caller.
	(Output_section_definition::set_section_address): Do not advance
	dot value and load address if section type is NOLOAD.  Set address
	of NOLOAD sections regardless of section flags.
	(Output_section_definition::print): Print section type if it is
	not SCRIPT_SECTION_TYPE_NONE.
	(Output_section_definition::section_type): New method.
	(Output_section_definition::script_section_type_name): Ditto.
	(Script_sections::output_section_name): Add new parameter
	PSECTION_TYPE for returning script section type.  Pass it to
	section elements.  Handle discard sections.
	(Sort_output_sections::operator()): Handle NOLOAD sections.
	* script-sections.h (Script_sections::Section_type): New enum type.
   	(Script_sections::output_section_name): Add a new parameter for
	returning script section type.
	* script.cc (script_keyword_parsecodes): Add keywords COPY, DSECT,
	INFO and NOLOAD.
	* yyscript.y (union): Add new field SECTION_TYPE.
	(COPY, DSECT, INFO, NOLOAD): New tokens.
	(opt_address_and_section_type): Change type to output_section_header.
	(section_type): New non-terminal
	(section_header): Handle section type.
 	(opt_address_and_section_type): Return section type value.
2010-04-09 23:51:37 +00:00
H.J. Lu 721ea635af Add prototype to gold tests.
2010-04-09  H.J. Lu  <hongjiu.lu@intel.com>

	* testsuite/plugin_common_test_1.c (foo): Add prototype.
	* testsuite/plugin_common_test_2.c (foo): Likewise.
2010-04-09 18:05:43 +00:00
Doug Kwan 1e5d2fb127 2010-04-09 Doug Kwan <dougkwan@google.com>
* layout.cc (Layout::choose_output_section): Handle script section
	types.
	(Layout::make_output_section_for_script): Add section type parameter.
	Handle script section types.
	* layout.h (Layout::make_output_section_for_script): Add section
	type parameter.
	* output.cc (Output_section::Output_section): Initialize data member
	is_noload_.
	(Output_section::do_reset_address_and_file_offset): Do not set address
	to 0 if section is a NOLOAD section.
	* output.h (Output_section::is_noload): New method.
	(Output_section::set_is_noload): Ditto.
	(Output_section::is_noload_): New data member.
	* script-c.h (Script_section_type): New enum type.
	(struct Parser_output_section_header): Add new file section_type.
	* script-sections.cc (Sections_element::output_section_name): Add
	parameter for returning script section type.
	(Output_section_definition::output_section_name): Ditto.
	(Output_section_definition::section_type)P; New method.
	(Output_section_definiton::script_section_type_name): Ditto.
	(Output_section_definition::script_section_type_): New data member.
	(Output_section_definition::Output_section_definition): Initialize
	data member Output_section_definition::script_section_type_.
	(Output_section_definition::create_sections): Pass script section type
	to Layout::make_output_section_for_script.
	(Output_section_definition::output_section_name): Return script
	section type to caller.
	(Output_section_definition::set_section_address): Do not advance
	dot value and load address if section type is NOLOAD.  Set address
	of NOLOAD sections regardless of section flags.
	(Output_section_definition::print): Print section type if it is
	not SCRIPT_SECTION_TYPE_NONE.
	(Output_section_definition::section_type): New method.
	(Output_section_definition::script_section_type_name): Ditto.
	(Script_sections::output_section_name): Add new parameter
	PSECTION_TYPE for returning script section type.  Pass it to
	section elements.  Handle discard sections.
	(Sort_output_sections::operator()): Handle NOLOAD sections.
	* script-sections.h (Script_sections::Section_type): New enum type.
   	(Script_sections::output_section_name): Add a new parameter for
	returning script section type.
	* script.cc (script_keyword_parsecodes): Add keywords COPY, DSECT,
	INFO and NOLOAD.
	* yyscript.y (union): Add new field SECTION_TYPE.
	(COPY, DSECT, INFO, NOLOAD): New tokens.
	(opt_address_and_section_type): Change type to output_section_header.
	(section_type): New non-terminal
	(section_header): Handle section type.
 	(opt_address_and_section_type): Return section type value.
2010-04-09 17:32:58 +00:00
Doug Kwan 6bf924b0ab 2010-04-08 Doug Kwan <dougkwan@google.com>
* merge.cc (Output_merge_data::set_final_data_size): Handle empty
	Output_merge_data.
	* output.cc (Output_section::add_merge_input_section): Simplify
	code and return status of Output_merge_base::add_input_section.
	Update merge section map only if Output_merge_base::add_input_section
	returns true.
2010-04-09 00:04:30 +00:00
Doug Kwan 24af6f9228 2010-04-07 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::scan_section_for_cortex_a8_erratum): Warn
	if section is marked as containing instructions but has no mapping
	symbols.
	(Arm_relobj::do_count_local_symbols): Call adjust_sym_shndx to get
	correct section index.
	(Arm_relobj::find_linked_text_section): Ditto.
2010-04-08 06:56:15 +00:00
Cary Coutant 00698fc57c * archive.cc (include_member): Destroy Read_symbols_data object before
releasing file.
	* object.cc (Read_symbols_data::~Read_symbols_data) New destructor.
	* object.h (Read_symbols_data::Read_symbols_data) New constructor.
	(Read_symbols_data::~Read_symbols_data) New destructor.
	(Section_relocs::Section_relocs) New constructor.
	(Section_relocs::~Section_relocs) New destructor.
	(Read_relocs_data::Read_relocs_data) New constructor.
	(Read_relocs_data::~Read_relocs_data) New destructor.
	* testsuite/binary_unittest.cc (Sized_binary_test): Set sd member
	pointers to NULL after deleting.
2010-04-07 22:58:23 +00:00
Doug Kwan 7296d93387 2010-04-07 Doug Kwan <dougkwan@google.com>
* arm.cc: Replace "endianity" with "endianness" in comments.
	(Arm_exidx_cantunwind): Ditto.
	(Arm_relobj::Arm_relobj): Initialize merge_flags_and_attribures.
	(Arm_relobj::merge_flags_and_attributes): New method.
	(Arm_relobj::merge_flags_and_attributes_): New data member.
	(Arm_exidx_cantunwind::do_fixed_endian_write): Fix formatting.
	(Arm_relobj::scan_sections_for_stubs): Ditto.
	(Arm_relobj::do_read_symbols): Check to see if we really want to
	merge processor-specific flags and attributes.  Exit early if
	an object is empty except for section names and the undefined symbol.
	(Target_arm::do_finalize_sections): Move check for ELF format to
	Arm_relobj::do_read_symbols.  Merge processor specific flags and
	attributes from a regular object only when we have determined that
	it is aapropriate.  Do not create an .ARM.attributes section in
	output if there is no regular input object.
	(Target_arm::merge_processor_specific_flags): Check
	--warn-mismatch before printing any error.
	(Target_arm::merge_object_attributes): Ditto.
	* gold.cc (queue_middle_tasks): Handle the case in which there is
	no regular object in input.
	* options.cc (General_options::parse_EB): New method.
	(General_options::parse_EL): Same.
	(General_options::General_options): Initialize endianness_.
	* options.h (-EB, -EL, -no-pipeline-knowledge, -p, --warn-mismatch):
	New options.
	(General_options::Endianness): New enum.
	(General_options::endianness): New method.
	(General_options::endianness_): New data member.
	* parameters.cc (Parameters::set_options): Check target endianness.
	(Parameters::set_target_once): Ditto.
	(Parameters::check_target_endianness): New method.
	(parameters_force_valid_target): If either -EL or -EB is specified,
	use it to define endianness of default target.
	* parameters.h (Parameters::check_target_endianness): New method
	declaration.
	* target.h (class Target): Change "endianity" to "endianness"
	in comments.
2010-04-07 21:42:22 +00:00
Ralf Wildenhues efc8d4f25f Use Automake option no-dist in gold.
gold/:
	* configure.ac (AM_INIT_AUTOMAKE): Add option no-dist.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.
2010-04-07 21:08:01 +00:00
Cary Coutant be234d887e gcc PR lto/42757
* plugin.cc (Pluginobj::get_symbol_resolution_info): Check for
	prevailing definitions of common symbols.
	* testsuite/plugin_test_6.sh: New test case.
	* testsuite/plugin_common_test_1.c: New test case.
	* testsuite/plugin_common_test_2.c: New test case.
	* testsuite/Makefile.am (plugin_test_6): New test case.
	* testsuite/Makefile.in: Regenerate.
2010-04-06 21:56:24 +00:00
Nick Clifton bd32c6bd4c Updated binutils Vietnamese translation.
New gold Vietnamese translation.
New gas Russian translation.
2010-04-06 16:12:17 +00:00
Doug Kwan 323c532fae 2010-03-30 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::using_thumb_only): Handle v6-M
2010-03-31 06:05:37 +00:00
Doug Kwan 4fcd97eb15 2010-03-25 Doug Kwan <dougkwan@google.com>
* gold/arm.cc (Arm_exidx_fixup::update_offset_map): Rearrange code
	to avoid a conversion warning on a 32-bit host.
2010-03-26 04:53:34 +00:00
Ian Lance Taylor 4ebf39dbf4 * testsuite/script_test_3.t: Add a TLS segment.
* testsuite/Makefile.am (check_PROGRAMS): Add
	tls_phdrs_script_test.
	(tls_phdrs_script_test_SOURCES): Define.
	(tls_phdrs_script_test_DEPENDENCIES): Define.
	(tls_phdrs_script_test_LDFLAGS): Define.
	(tls_phdrs_script_test_LDADD): Define.
	* testsuite/Makefile.in: Rebuild.
2010-03-24 18:12:48 +00:00
Cary Coutant 4a599bdd83 * fileread.cc (find_or_make_view): Fix comment. 2010-03-24 01:27:57 +00:00
Ian Lance Taylor 6c93b22ce4 * script-sections.cc (class Orphan_section_placement): Define
PLACE_TLS and PLACE_TLS_BSS.
	(Orphan_section_placement::Orphan_section_placement): Initialize
	new places.
	(Orphan_section_placement::find_place): Handle SHF_TLS sections.
	* testsuite/Makefile.am (check_PROGRAMS): Add tls_script_test.
	(tls_script_test_SOURCES): Define.
	(tls_script_test_DEPENDENCIES): Define.
	(tls_script_test_LDFLAGS): Define.
	(tls_script_test_LDADD): Define.
	* testsuite/Makefile.in: Rebuild.
2010-03-23 21:06:10 +00:00
Doug Kwan a2c7281b72 2010-03-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::abs8,
	Arm_relocate_functions::abs16): Use correct check for overflow
	specified in the ARM ELF specs.
	(Arm_relocate_functions): thumb_branch_common.  Handle bit 1 of branch
	target of a BLX instruction specially.
	(Reloc_stub::stub_type_for_reloc): Ditto.
	(Relocate::relocate): Use symbolic names instead of numeric relocation
	codes to report error.
	(Target_arm::do_relox): Reduce default stub-group size for Cortex-A8
	workaround.
	* testsuite/Makefile.am (check_DATA): add thumb_blx_in_range.stdout,
	thumb_blx_out_of_range.stdout, thumb2_blx_in_range.stdout and
	thumb2_blx_out_of_range.stdout
	(thumb_bl_out_of_range, thumb_bl_out_of_range.o,
	thumb2_bl_out_of_range, thumb2_bl_out_of_range.o): Fix dependenices.
	(thumb_blx_in_range.stdout, thumb_blx_in_range, thumb_blx_in_range.o,
	thumb_blx_out_of_range.stdout, thumb_blx_out_of_range,
	thumb_blx_out_of_range.o, thumb2_blx_in_range.stdout,
	thumb2_blx_in_range, thumb2_blx_in_range.o,
	thumb2_blx_out_of_range.stdout, thumb2_blx_out_of_range,
	thumb2_blx_out_of_range.o): New rules.
 	(MOSTLYCLEANFILES): Add thumb_blx_in_range, thumb_blx_out_of_range,
	thumb2_blx_in_range and	thumb2_blx_out_of_range.
	* testsuite/Makefile.in: Regenerate.
	* arm_branch_in_range.sh: Add tests for THUMB BLX.
	* testsuite/thumb_blx_in_range.s: New file.
	* testsuite/thumb_blx_out_of_range.s: New file.
2010-03-22 22:48:05 +00:00
Rafael Ávila de Espíndola b0193076da 2010-03-22 Rafael Espindola <espindola@google.com>
* archive.cc (Should_include): Move to archive.h.
	(should_include_member): Make it a member of Archive.
	(Lib_group): New.
	(Add_lib_group_symbols): New.
	* archive.h: Include options.h.
	(Archive_member): Moved from Archive.
	(Should_include): Moved from archive.cc.
	(Lib_group): New.
	(Add_lib_group_symbols): New.
	* dynobj.cc (do_should_include_member): New.
	* dynobj.h (do_should_include_member): New.
	* gold.cc (queue_initial_tasks): Update call to queue.
	* main.cc (main): Print lib group stats.
	* object.cc (do_should_include_member): New.
	* object.h: Include archive.h.
	(Object::should_include_member): New.
	(Object::do_should_include_member): New.
	(Sized_relobj::do_should_include_member): New.
	* options.cc (General_options::parse_start_lib): New.
	(General_options::parse_end_lib): New.
	(Input_arguments::add_file): Handle lib groups.
	(Input_arguments::start_group): Check we are not in a lib.
	(Input_arguments::start_lib): New.
	(Input_arguments::end_lib): New.
	* options.h (General_options): Add start_lib and end_lib.
	(Input_argument::lib_): New.
	(Input_argument::lib): New.
	(Input_argument::is_lib): New.
	(Input_file_lib): New.
	(Input_arguments::in_lib_): New.
	(Input_arguments::in_lib): New.
	(Input_arguments::start_lib): New.
	(Input_arguments::end_lib_): New.
	* plugin.cc (Pluginobj::get_symbol_resolution_info): Mark symbols
	in unused members as preempted.
	(Sized_pluginobj::do_should_include_member): New.
	* plugin.h (Sized_pluginobj::do_should_include_member): New.
	* readsyms.cc (Read_symbols::locks): If we are just reading a member,
	return the blocker.
	(Read_symbols::do_whole_lib_group): New.
	(Read_symbols::do_lib_group): New.
	(Read_symbols::do_read_symbols): Handle lib groups.
	(Read_symbols::get_name): Handle lib groups.
	* readsyms.h (Read_symbols): Add an archive member pointer.
	(Read_symbols::do_whole_lib_group): New.
	(Read_symbols::do_lib_group): New.
	(Read_symbols::member_): New.
	* script.cc (read_input_script): Update call to queue_soon.
2010-03-22 14:18:24 +00:00
Doug Kwan d099120c64 2010-03-19 Doug Kwan <dougkwan@google.com>
* arm.cc (Stub_table::Stub_table): Initialize new data members
	Stub_table::reloc_stubs_size_ and Stub_table::reloc_stubs_addralign_.
	(Stub_table::add_reloc_stub): Assign stub offset and update
	Stub_table::reloc_stubs_size_ and Stub_table::reloc_stubs_addralign_.
	(Stub_table::reloc_stubs_size_, Stub_table::reloc_stubs_addralign_):
	New data members.
 	(Stub_table::update_data_size_and_addralign): Use
	Stub_table::reloc_stubs_size_ and Stub_table::reloc_stubs_addralign_
	instead of going over all reloc stubs.
 	(Stub_table::finalize_stubs): Do not assign reloc stub offsets.
	* stringpool.cc (Stringpool_template::Stringpool_template): Initialize
	Stringpool_template::offset_ to size of Stringpool_char.
 	(Stringpool_template::new_key_offset): Remove code to initialize
	Stringpool_template::offset_.
	* stringpool.h (Stringpool_template::set_no_zero_null): Set
	Stringpool_template::offset_ to zero.
2010-03-19 19:11:21 +00:00
Doug Kwan 1aa3738469 2010-03-15 Doug Kwan <dougkwan@google.com>
* stringpool.cc (Stringpool_template::Stringpool_template): Initialize
	offset_.
	(Stringpool_template::new_key_offset): New method.
	(Stringpool_template::add_string): Assign offsets when adding new
	strings.
	(Stringpool_template::set_string_offsets): Do not set string offsets
	when not optimizing.
	* stringpool.h (Chunked_vector::Chunked_vector): Initialize data
	member size_.
   	(Chunked_vector::clear): Clear size_.
   	(Chunked_vector::reserve): Call reserve method of all Element_vectors.
   	(Chunked_vector::size): Return size_.
   	(Chunked_vector::push_back): Use size_ to find insert position.
	(Chunked_vector::size_): New data member.
	(Stringpool_template::set_no_zero_null): Assert string set is empty.
	(Stringpool_template::new_key_offset): New method declaration.
	(Stringpool_template::offset_): New data member.
2010-03-16 01:26:15 +00:00
Rafael Ávila de Espíndola b672b05737 2010-03-15 Rafael Espindola <espindola@google.com>
* readsyms.cc (Read_symbols::do_read_symbols): Update calls to
	Add_symbols' constructor.
	* readsyms.h (Add_symbols): Remove the input_group member.
2010-03-15 14:46:16 +00:00
Ian Lance Taylor 4c5193b7db Adjust last patch--same ChangeLog entry, same e-mail. 2010-03-11 01:18:26 +00:00
Ian Lance Taylor b6848d3c09 * reloc.cc (Sized_relobj::split_stack_adjust_reltype): Call the
target to ask whether a reference to a symbol requires a stack
	split.
	* target.h (Target::is_call_to_non_split): New function.
	(Target::do_is_call_to_non_split): Declare virtual function.
	* target.cc: Include "symtab.h".
	(Target::do_is_call_to_non_split): New function.
	* i386.cc (Target_i386::do_is_call_to_non_split): New function.
2010-03-11 01:10:53 +00:00
Cary Coutant a2a5469e79 * fileread.cc (File_read::~File_read): Don't delete whole_file_view_.
(File_read::open[1]): Remove initial mapping of whole_file_view_.
	(File_read::open[2]): Add whole_file_view_ to list of views.
	(File_read::make_view): Remove test of whole_file_view_.
	(File_read::find_or_make_view): Create whole_file_view_ if
	necessary.
	(File_read::clear_views): Replace bool parameter with enum;
	adjust all callers.  Don't delete views with permanent data;
	do delete cached views and views from archives if
	--no-keep-files-mapped is set.  Set whole_file_view_ to NULL
	if clearing the corresponding view.
	* fileread.h (File_read::Clear_views_mode): New enum.
	(File_read::View::is_permanent_view): New method.
	(File_read::clear_views): Replace bool parameter
	with enum; adjust all callers.
	* options.h (General_options): Change keep_files_mapped option;
	add map_whole_files.
	* readsyms.cc (Add_symbols::run): Delete sd_ object before
	releasing the file.
	* reloc.cc (Scan_relocs::run): Delete rd_ object before releasing
	the file.
2010-03-10 17:37:11 +00:00
David S. Miller 8861f32bfe * sparc.cc (Target_sparc::Scan::local): Accept R_SPARC_WPLT30. 2010-03-10 17:07:26 +00:00
Sriraman Tallam d62d0f5fc2 2010-03-09 Sriraman Tallam <tmsriram@google.com>
* icf.cc (get_section_contents): Add '@' marker after processing the
	merge reloc.
2010-03-10 01:26:57 +00:00
Rafael Ávila de Espíndola 473b7a133c 2010-03-09 Rafael Espindola <espindola@google.com>
* archive.cc (should_include_member): New.
	(Archive::add_symbols): Use should_include_member.
2010-03-09 19:17:14 +00:00
Doug Kwan 9177756dc9 2010-03-08 Doug Kwan <dougkwan@google.com>
* gold/arm.cc (Arm_exidx_fixup::update_offset_map): Fix build breakage
	due to a conversion warning.
	(Arm_relobj::update_output_local_symbol_count): Check for local
	symbol with unset output index.
2010-03-08 22:15:16 +00:00
Ian Lance Taylor 9e9e071b2e * options.h (class General_options): Add --spare-dynamic-tags.
* output.cc (Output_data_dynamic::set_final_data_size): Implement
	--spare-dynamic-tags.
2010-03-06 02:34:13 +00:00
Ian Lance Taylor a81ee015bc * incremental.cc: Include "libiberty.h". 2010-03-05 22:04:48 +00:00
Rainer Orth 44ec90b93b include:
* elf/common.h (VER_FLG_*): Document.
	(VER_FLG_INFO): Define.

	gold:
	* dynobj.h (Verdef::Verdef): Add is_info arg, is_info member
	function, is_info_ member.
	* dynobj.cc (Verdef::write): Set VER_FLG_INFO if this->is_info_.
	(Versions::Versions): Update caller.
	(Versions::define_base_version): Likewise.
	(Versions::add_def): Likewise.

	elfcpp:
	* elfcpp.h (VER_FLG_INFO): Define.

	binutils:
	* readelf.c (get_ver_flags): Handle VER_FLG_INFO.
2010-03-05 21:04:59 +00:00
Sriraman Tallam 0897ed3bdb * i386.cc (Target_i386::can_check_for_function_pointers): New function.
(Scan::possible_function_pointer_reloc): New function.
	(Scan::local_reloc_may_be_function_pointer): Change to call
	possible_function_pointer_reloc.
	(Scan::global_reloc_may_be_function_pointer): Ditto.
	* icf.h (Icf::check_section_for_function_pointers): Change to reject
	relocations in ".data.rel.ro._ZTV" section.
	* testsuite/icf_safe_so_test.sh: Change to pass i386.
	* testsuite/icf_safe_so_test.cc: Ditto.
	* testsuite/icf_safe_test.cc: Ditto.
	* testsuite/icf_safe_test.sh: Ditto.
2010-03-04 01:33:22 +00:00
Ian Lance Taylor d3bbad6265 * target-reloc.h (relocate_section): Check the symbol table index
for -1U before setting the local symbol index.
	(scan_relocatable_relocs): If copying the relocation, record that
	the local symbol is required.
	* object.h (Symbol_value::is_output_symtab_index_set): New
	function.
	(Symbol_value::may_be_discarded_from_output_symtab): New
	function.
	(Symbol_value::has_output_symtab_entry): New function.
	(Symbol_value::needs_output_symtab_entry): Remove.
	(Symbol_value::output_symtab_index): Make sure the symbol index is
	set.
	(Symbol_value::set_output_symtab_index): Make sure the symbol
	index is not set.  Make sure the new index is valid.
	(Symbol_value::set_must_have_output_symtab_entry): New function.
	(Symbol_value::has_output_dynsym_entry): New function.
	(Symbol_value::set_output_dynsym_index): Make sure the new index
	is valid.
	(Sized_relobj::set_must_have_output_symtab_entry): New function.
	* object.cc (Sized_relobj::do_count_local_symbols): Only discard a
	local symbol if permitted.
	(Sized_relobj::do_finalize_local_symbols): Call
	is_output_symtab_index_set rather than needs_output_symtab_entry.
	(Sized_relobj::write_local_symbols): Call has_output_symtab_entry
	rather than needs_output_symtab_entry.  Call
	has_output_dynsym_entry rather than needs_output_dynsym_entry.
	* arm.cc (Arm_relobj::update_output_local_symbol_count): Call
	is_output_symtab_index_set rather than needs_output_symtab_entry.
	* testsuite/discard_locals_relocatable_test.c: New file.
	* testsuite/discard_locals_test.sh: Test -r.
	* testsuite/Makefile.am (check_DATA): Add
	discard_locals_relocatable_test1.syms,
	discard_local_relocatable_test2.syms.
	(MOSTLYCLEANFILES): Likewise.  Also add
	discard_locals_relocatable_test1.lout and
	discard_locals_relocatable_test2.out.
	(discard_locals_relocatable_test1.syms): New target.
	(discard_locals_relocatable_test.o): New target.
	(discard_locals_relocatable_test1.out): New target.
	(discard_locals_relocatable_test2.syms): New target.
	(discard_locals_relocatable_test2.out): New target.
	(various): Add missing ../ld-new dependencies.
	* testsuite/Makefile.in: Rebuild.
2010-03-03 19:31:54 +00:00
Nick Clifton 7e8ccf26e0 * po/fi.po: New Finnish translation. 2010-03-03 14:26:19 +00:00
Doug Kwan 2a0ff005c8 2010-03-01 Doug Kwan <dougkwan@google.com>
* layout.cc (Layout::Layout): Force section types of .init_array*,
	.preinit_array* and .fini_array* sections.
	* output.cc (Output_section::Input_section_sort_entry::has_priority):
	Fix check of return value of std::string::find.().
	(Output_section::Input_section_sort_compare::operator()): Remove
	comment about .init_array.
	(Output_section::Input_section_sort_init_fini_compare::operator()):
	New method.
	(Output_section::sort_attached_input_sections): Handle .init_array
	and .fini_array specially.
	* output.h (Output_section::Inut_section_sort_compare): Update
	comment.
	(Output_section::Input_section_sort_init_fini_compare): New struct.
2010-03-01 21:43:50 +00:00
Doug Kwan c3e4ae2903 2010-02-26 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Relocate::reloc_is_non_pic): Treat
	R_ARM_PREL31 and R_ARM_SBREL31 as position independent.
	* testsuite/debug_msg.sh: Avoid matching source line number for
	use of global variable undef_int.
2010-02-27 00:46:00 +00:00
Doug Kwan 2fd9ae7a1d 2010-02-26 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::scan_reloc_for_stub): Move code handling
	R_ARM_V4BX to Target_arm::scan_reloc_section_for_stubs.
	(Target_arm::scan_reloc_section_for_stubs): Instead of calling
	scan_reloc_for_stub, do all processing of R_ARM_V4BX here.
	* options.cc (General_options::General_options): Initialize member
	fix_v4bx_.
	* testsuite/Makefile.am (check_SCRIPTS): Add arm_fix_v4bx.sh
	(check_DATA): Add arm_fix_v4bx.stdout, arm_fix_v4bx_interworking.stdout
	and rm_no_fix_v4bx.stdout
	(arm_fix_v4bx.stdout, arm_fix_v4bx, arm_fix_v4bx.o,
	arm_fix_v4bx_interworking.stdout, arm_fix_v4bx_interworking,
	arm_no_fix_v4bx.stdout, arm_no_fix_v4bx): New make rules.
	(MOSTLYCLEANFILES): Add arm_fix_v4bx, arm_fix_v4bx_interworking
	and arm_no_fix_v4bx.
	* Makefile.in: Regenerate.
	* testsuite/arm_fix_v4bx.s: New file.
	* testsuite/arm_fix_v4bx.sh: Ditto.
2010-02-27 00:36:49 +00:00
Doug Kwan 67ec7d0b4d 2010-02-24 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::got_section): Make the .got section the first
	non RELRO section in the data segment.
	* testsuite/script_test_5.sh: Fix match patterns to avoid matching
	suffixes of section names.
2010-02-25 05:11:26 +00:00
Doug Kwan 101654612f 2010-02-24 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_finalize_sections): Skip processor specific
	flags and attributes merging if an input file is a binary file.
	* fileread.cc (Input_file::open): Record format of original file.
	* fileread.h (Input_file::Format): New enum type.
   	(Input_file::Input_file): Initialize data member format_.
	(Input_file::format): New method definition.
	(Input_file::format_):: New data member.
2010-02-24 20:50:59 +00:00
Doug Kwan 4a54abbbe9 2010-02-24 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_output_data_got): New class.
	(ARM_TCB_SIZE): New constant
	(Target_arm): Use Arm_output_data_got instead of Output_data_got.
	(Arm_output_section::fix_exidx_coverage): Add a parameter for layout.
	If user uses a script with a SECTIONS clause, issue only a warning
	for a misplaced EXIDX input section.  Otherwise, issue an error.
 	(Arm_relobj::do_gc_process_relocs): Exit early if we are not doing
	garbage collection.
	(Target_arm::got_mode_index_entry): Handle static linking.
	(Target_arm::Scan::local): Ditto.
	(Target_arm::Scan::global): Ditto.
	(Target_arm::Relocate::relocate_tls): Handle static linking.  Fix
	all incorrectly implemented relocations.
	(Target_arm::fix_exidx_coverage): Pass layout to
	Arm_output_section::fix_exidx_coverage.
	* layout.cc (Layout::section_name_mapping): Remove trailing dots
	from ".ARM.exidx." and ".ARM.extab.".
2010-02-24 20:45:12 +00:00
Ian Lance Taylor ca419a6f33 * arm.cc (Target_arm::do_finalize_sections): Create attribute
section if it does not already exist.
	* attributes.cc	(Attributes_section_data::Attributes_section_data):
	Don't crash if size is zero.
2010-02-23 17:45:38 +00:00
Ian Lance Taylor 135b9c78b2 * gold.cc (queue_middle_tasks): If no input files were opened,
exit.
	* workqueue.h (Task_function::Task_function): Assert that there is
	a blocker.
2010-02-23 17:42:26 +00:00
Doug Kwan bb0bfe4f65 2010-02-22 Doug Kwan <dougkwan@google.com>
* gold-threads.h (Once::~Once): Explicitly define virtual destructor.
	* icf.cc (get_section_contents): Cast snprintf arguments to long long
	types to avoid warnings due to different uint64_t implementations
	on different hosts.
2010-02-22 18:26:29 +00:00
Doug Kwan 2a2b6d42b1 2010-02-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common): Fix bug in
	handling of the maximum backward branch offset.
     	(Arm_relocate_functions::thumb_branch_common): Ditto.
	* testsuite/Makefile.am (check_SCRIPTS): Add arm_branch_in_range.sh.
	(check_DATA): Add arm_bl_in_range.stdout, arm_bl_out_of_range.stdout
	thumb_bl_in_range.stdout, thumb_bl_out_of_range.stdout,
	thumb2_bl_in_range.stdout and thumb2_bl_out_of_range.stdout.
	(arm_bl_in_range.stdout, arm_bl_in_range, arm_bl_in_range.o,
	arm_bl_out_of_range.stdout, arm_bl_out_of_range,
	arm_bl_out_of_range.o, thumb_bl_in_range.stdout, thumb_bl_in_range,
	thumb_bl_in_range.o, thumb_bl_out_of_range.stdout,
	thumb_bl_out_of_range thumb_bl_out_of_range.o,
	thumb2_bl_in_range.stdout, thumb2_bl_in_range, thumb2_bl_in_range.o
	thumb2_bl_out_of_range.stdout, thumb2_bl_out_of_range,
	thumb2_bl_out_of_range.o): New rules.
	(MOSTLYCLEANFILES): Add arm_bl_in_range, arm_bl_out_of_range,
	thumb_bl_in_range, thumb_bl_out_of_range, thumb2_bl_in_range and
	thumb2_bl_out_of_range
	* testsuite/Makefile.in: Regenerate.
	* testsuite/arm_bl_in_range.s: New file.
	* testsuite/arm_bl_out_of_range.s: Ditto.
	* testsuite/arm_branch_in_range.sh: Ditto.
	* testsuite/arm_branch_range.t: Ditto.
	* testsuite/thumb2_branch_range.t: Ditto.
	* testsuite/thumb_bl_in_range.s: Ditto.
	* testsuite/thumb_bl_out_of_range.s: Ditto.
	* testsuite/thumb_branch_range.t: Ditto.
2010-02-22 06:26:07 +00:00
Sriraman Tallam b487ad64e5 2010-02-20 Sriraman Tallam <tmsriram@google.com>
* gc.h (gc_process_relocs): Change vectors to point to the new list.
	Add reloc offset information.
	* icf.cc (get_section_contents): Change iterators to point to the new
	vectors. Add reloc offset information to the contents.
	* icf.h (Icf::Sections_reachable_info): New typedef.
	(Icf::Sections_reachable_list): New typedef.
	(Icf::Offset_info): New typedef.
	(Icf::Reloc_info): New struct typedef.
	(Icf::Reloc_info_list): New typedef.
	(Icf::symbol_reloc_list): Delete method.
	(Icf::addend_reloc_list): Delete method.
	(Icf::section_reloc_list): Delete method.
	(Icf::reloc_info_list): New method.
	(Icf::reloc_info_list_): New member.
2010-02-21 00:57:59 +00:00
Doug Kwan f96accdf2b 2010-02-18 Doug Kwan <dougkwan@google.com>
* arm-reloc.def: Mark R_ARM_TLS_GD32, R_ARM_TLS_LDM32,
	R_ARM_TLS_LDO32, R_ARM_TLS_IE32 and R_ARM_TLS_LE32 are implemented.
	* arm.cc (Arm_relocation_functions): New forward declaration.
	(Target_arm::Target_arm): Initialize new data members
	got_mod_index_offset_ and tls_base_symbol_defined_.
	(Target_arm::Relocate::relocate_tls): New method.
	(Target_arm::optimize_tls_reloc, Target_arm::define_tls_base_symbol,
	 Target_arm::got_mod_index_entry, Target_arm::rel_tls_desc_section):
	New methods.
   	(Target_arm::Got_type): Add GOT_TYPE_TLS_NOFFSET, GOT_TYPE_OFFSET,
	GOT_TYPE_TLS_PAIR and GOT_TYPE_TLS_DESC.
	(Target_arm::got_mod_index_offset_,
	Target_arm::tls_base_symbol_defined_): New data members.
	(Target_arm::Scan::local, Target::Scan::global,
	Target_arm::Relocate::relocate): Handle 32-bit initial TLS
	relocations.
2010-02-19 22:53:54 +00:00
Doug Kwan c8761b9af4 2010-02-18 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::find_linked_text_section): New method.
	(Arm_relobj::make_exidx_input_section): Pass section index of linked
	text section as a parameter becuase some broken tools may not set
	the link in section header.
	(Target_arm::has_got_section): New method.
	(Target_arm::scan_section_for_cortex_a8_stubs): Treat an input section
	without any mapping symbol as data only.  Remove warning.
	(Arm_relobj::do_read_synbols): If an EXIDX input section has no
	link in its section header, try to discover the link by inspecting the
	REL31 relocation at the beginning of the section.
	(Target_arm::Scan::check_non_pic): Report name of offending relocation
	in error message.
	(Target_arm::Scan::global): Treat any reference to the symbol
	_GLOBAL_OFFSET_TABLE_ as a GOT access.
2010-02-19 02:16:41 +00:00
Sriraman Tallam 21bb3914d6 2010-02-12 Sriraman Tallam <tmsriram@google.com>
* arm.cc (Scan::local_reloc_may_be_function_pointer): New function.
	(Scan::global_reloc_may_be_function_pointer): New function.
	* sparc.cc (Scan::local_reloc_may_be_function_pointer): New function.
	(Scan::global_reloc_may_be_function_pointer): New function.
	* powerpc.cc (Scan::local_reloc_may_be_function_pointer): New function.
	(Scan::global_reloc_may_be_function_pointer): New function.
	* i386.cc (Scan::local_reloc_may_be_function_pointer): New function.
	(Scan::global_reloc_may_be_function_pointer): New function.
	* x86_64.cc (Scan::local_reloc_may_be_function_pointer): New function.
	(Scan::global_reloc_may_be_function_pointer): New function.
	(Scan::possible_function_pointer_reloc): New function.
	(Target_x86_64::can_check_for_function_pointers): New function.
	* gc.h (gc_process_relocs): Scan relocation types to determine if
	function pointers were taken for targets that support it.
	* icf.cc (Icf::find_identical_sections): Include functions for
	folding in safe ICF whose pointer is not taken.
	* icf.h (Secn_fptr_taken_set): New typedef.
	(fptr_section_id_): New member.
	(section_has_function_pointers): New function.
	(set_section_has_function_pointers): New function.
	(check_section_for_function_pointers): New function.
	* options.h: Fix comment for safe ICF option.
	* target.h (can_check_for_function_pointers): New function.
	* testsuite/Makefile.am: Add icf_safe_so_test test case.
	Modify icf_safe_test for X86-64.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/icf_safe_so_test.cc: New file.
	* testsuite/icf_safe_so_test.sh: New file.
	* testsuite/icf_safe_test.cc (kept_func_3): New function.
	(main): Change to take pointer to function kept_func_3.
	* testsuite/icf_safe_test.sh (arch_specific_safe_fold): Check if safe
	folding is done correctly for X86-64.
2010-02-13 02:04:21 +00:00
David S. Miller 0da6fa6c5b * output.h (Output_reloc<SHT_REL>::Output_reloc): Add
is_symbolless parameter.
	(Output_reloc<SHT_REL>::is_symbolless): New.
	(Output_reloc<SHT_REL>::is_symbolless_): New.
	(Output_reloc<SHT_REL>::type_): Decrease to 29 bits.
	(Output_reloc<SHT_RELA>::Output_reloc): Add is_symbolless parameter.
	(Output_reloc<SHT_RELA>::is_symbolless): New.
	(Output_data_reloc::add_global): Handle is_symbolless.
	(Output_data_reloc::add_global_relative): Likewise.
	(Output_data_reloc::add_local): Likewise.
	(Output_data_reloc::add_local_relative): Likewise.
	(Output_data_reloc::add_symbolless_global_addend): New.
	(Output_data_reloc::add_symbolless_local_addend): New.
	* output.cc (Output_reloc<SHT_REL>::Output_reloc): Handle
	is_symbolless.
	(Output_reloc::set_needs_dynsym_index): Test ->is_symbolless_
	instead of ->is_relative_
	(Output_reloc::write): Likewise.
	(Output_reloc::get_symbol_index): Return 0 when ->is_symbolless_
	(Output_reloc::write_rel): Simplify.

	* sparc.cc (Target_sparc::Scan::local): Use
	->add_symbolless_local_addend as needed.
	(Target_sparc::Scan::global): Use ->add_symbolless_global_addend as
	needed.  Also, emit appropriate unaligned vs. aligned dynamic reloc
	based upon relocation offset.
2010-02-13 00:01:20 +00:00
Doug Kwan e4782e8381 2010-02-11 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Scan::local): Fix bugs in relocation handling.
	(Target_arm::Scan::global): Ditto.  Also remove a comment before the
	beginning of function.
	(Target_arm::Relocate::relocate): Remove error messages for MOVW_ABS
	and MOVT_ABS relocations.  Those are non issued in scanning.  Fix
	parameter is_32bit in calls to should_apply_static_reloc.
	* testsuite/Makefile.am (check_SCRIPTS): Add arm_abs_global.sh.
	(check_DATA): Add arm_abs_global.stdout.
	(arm_abs_lib.o, libarm_abs.so, arm_abs_global.o, arm_abs_global,
	arm_abs_global.stdout): New rules.
	(MOSTLLYCLEANFILES): Add arm_abs_global
	* Makefile.in: Regenerate.
	* testsuite/arm_abs_global.s: New file.
	* testsuite/arm_abs_global.sh: Ditto.
	* testsuite/arm_abs_lib.s: Ditto.
2010-02-12 05:51:32 +00:00
Ian Lance Taylor 93ceb76464 * gold.cc (queue_middle_gc_tasks): Use a separate blocker for each
Read_relocs task.
	(queue_middle_tasks): Likewise, and also for Scan_relocs.  Run
	Allocate_commons_task first.
	* reloc.cc (Read_relocs::run): Pass next_blocker_ down to next
	task, rather than symtab_lock_.
	(Gc_process_relocs::~Gc_process_relocs): New function.
	(Gc_process_relocs::is_runnable): Check this_blocker_.
	(Gc_process_relocs::locks): Use next_blocker_ rather than
	blocker_.
	(Scan_relocs::~Scan_relocs): New function.
	(Scan_relocs::is_runnable): Check this_blocker_ rather than
	symtab_lock_.
	(Scan_relocs::locks): Drop symtab_lock_ and blocker_.  Add
	next_blocker_.
	* reloc.h (class Read_relocs): Drop symtab_lock_ and blocker_
	fields.  Add this_blocker_ and next_blocker_ fields.  Adjust
	constructor accordingly.
	(class Gc_process_relocs): Likewise.
	(class Scan_relocs): Likewise.
	* common.h (class Allocate_commons_task): Remove symtab_lock_
	field, and corresponding constructor parameter.
	* common.cc (Allocate_commons_tasK::is_runnable): Remove use of
	symtab_lock_.
	(Allocate_commons_task::locks): Likewise.
2010-02-12 04:33:53 +00:00
Ian Lance Taylor 114dfbe13e * gold-threads.h (class Once): Define.
(class Initialize_lock): Rewrite as child of Once.
	* gold-threads.cc (class Once_initialize): Define.
	(once_pointer_control): New static variable.
	(once_pointer, once_arg): New static variables.
	(c_run_once): New static function.
	(Once::Once, Once::run_once, Once::internal_run): New functions.
	(class Initialize_lock_once): Remove.
	(initialize_lock_control): Remove.
	(initialize_lock_pointer): Remove.
	(initialize_lock_once): Remove.
	(Initialize_lock::Initialize_lock): Move to gold-threads.h.
	(Initialize_lock::initialize): Rewrite.
	(Initialize_lock::do_run_once): New function.
	* archive.cc (Archive::interpret_header): Only clear name if it is
	not already empty.
	* fileread.cc: Include "gold-threads.h"
	(file_counts_lock): New static variable.
	(file_counts_initialize_lock): Likewise.
	(File_read::release): Only increment counts when using --stats.
	Use a lock around the increment.
	* parameters.cc (class Set_parameters_target_once): Define.
	(set_parameters_target_once): New static variable.
	(Parameters::Parameters): Move here from parameters.h.
	(Parameters::set_target): Rewrite.
	(Parameters::set_target_once): New function.
	(Parameters::clear_target): Move here and rewrite.
	* parameters.h (class Parameters): Update declarations.  Add
	set_parameters_target_once_ field.
	(Parameters::Parameters): Move to parameters.cc.
	(Parameters::clear_target): Likewise.
	* readsyms.cc (Read_symbols::do_group): Create a Start_group
	task.
	(Start_group::~Start_group): New function.
	(Start_group::is_runnable): New function.
	(Start_group::locks, Start_group::run): New functions.
	(Finish_group::run): Change saw_undefined to size_t.
	* readsyms.h (class Start_group): Define.
	(class Finish_group): Change saw_undefined_ field to size_t.
	(Finish_group::Finish_group): Remove saw_undefined and
	this_blocker parameters.  Change all callers.
	(Finish_group::set_saw_undefined): New function.
	(Finish_group::set_blocker): New function.
	* symtab.h (class Symbol_table): Change saw_undefined to return
	size_t.  Change saw_undefined_ field to size_t.
	* target-select.cc (Set_target_once::do_run_once): New function.
	(Target_selector::Target_selector): Initialize set_target_once_
	field.  Don't initialize lock_ and initialize_lock_ fields.
	(Target_selector::instantiate_target): Rewrite.
	(Target_selector::set_target): New function.
	* target-select.h (class Set_target_once): Define.
	(class Target_selector): Update declarations.  Make
	Set_target_once a friend.  Remove lock_ and initialize_lock_
	fields.  Add set_target_once_ field.
2010-02-12 03:23:26 +00:00
Ian Lance Taylor fa17a3f432 * dirsearch.cc (Dirsearch::initialize): Add all blockers before
queueing any tasks.
	* gold.cc (queue_middle_gc_tasks): Likewise.  Fix final blocker.
	(queue_middle_tasks): Add all blockers before queueing any tasks.
	(queue_final_tasks): Likewise.
	* token.h (Task_token::add_blockers): New function.
	* object.h (Input_objects::number_of_relobjs): New function.
2010-02-11 07:42:17 +00:00
Ian Lance Taylor 612bdda138 Fix comment. 2010-02-11 07:40:11 +00:00
Ian Lance Taylor ec6dfed69b Update copyright notice. 2010-02-11 07:29:31 +00:00
Ian Lance Taylor 5de0e392de Forgot to commit. 2010-02-11 07:21:44 +00:00
Ian Lance Taylor b3705d2a51 * i386.cc (Relocate::relocate_tls): A local symbol is final if not
shared, not if not position independent.
	* x86_64.cc (Relocate::relocate_tls): Likewise.
	* testsuite/Makefile.am (check_PROGRAMS): Add tls_pie_pic_test.
	(tls_pie_pic_test): New target.
	* testsuite/Makefile.in: Rebuild.
2010-02-10 23:00:29 +00:00
Ian Lance Taylor c7177d31f0 * testsuite/Makefile.am (check_PROGRAMS): Add tls_pie_test.
(tls_test_main_pie.o, tls_test_pie.o): New targets.
	(tls_test_file2_pie.o, tls_test_c_pie.o, tls_pie_test): Likewise.
	* testsuite/Makefile.in: Rebuild.
2010-02-10 22:12:11 +00:00
David S. Miller 612a8d3dbf * output.h (Output_data_dynamic::add_section_size): New method
that takes two Output_data objects.
	(Output_data_dynamic::Dynamic_entry): Create storage for secondary
	entry param.  Handle it in initializers.
	* output.cc (Output_data_dynamic::Dynamic_entry::write): For
	DYNAMIC_SECTION_SIZE, add in second object size if non-NULL.
	* layout.h (Layout::add_target_dynamic_tags): Add dynrel_includes_plt
	arg.
	* layout.cc (Layout::add_target_dynamic_tags): If dynrel_includes_plt,
	and .rela.plt exists, set DT_REL{,A}SZ to sum of .rela.dyn and .rela.plt
	* arm.cc (Target_arm::do_finalize_sections): Update to pass false
	for dynrel_includes_plt.
	* i386.cc (Target_i386::do_finalize_sections): Likewise.
	* x86_64.cc (Target_x86_64::do_finalize_sections): Likewise.
	* sparc.cc (Target_sparc::make_plt_entry): Force .rela.dyn to be output
	before .rela.plt
	(Target_sparc::do_finalize_sections): Update to pass true for
	dynrel_includes_plt.
	* powerpc.cc (Target_powerpc::make_plt_entry): Force .rela.dyn to be
	output before .rela.plt
	(Target_powerpc::do_finalize_sections): Update to pass true for
	dynrel_includes_plt when 32-bit.
2010-02-09 20:29:44 +00:00
David S. Miller 684b268aba * sparc.cc (Target_sparc::Scan::local): Do not emit relocs other than
R_SPARC_RELATIVE using ->add_local_relative().
	(Target_sparc::Scan::global): Likewise for ->add_global_relative().
2010-02-09 20:05:19 +00:00
Doug Kwan cb1be87e23 2010-02-08 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::simple_input_section_output_address): New
        method.
        (Arm_relobj::section_needs_cortex_a8_stub_scanning,
        Arm_relobj::scan_section_for_cortex_a8_stubs,
        Arm_relobj::do_relocation_section): Instead of calling
        Output_section::output_address, use faster
        Arm_relobj::simple_input_section_output_address.
2010-02-09 06:46:00 +00:00
David S. Miller 024c446673 * sparc.cc (Target_sparc::Scan::local): Handle R_SPARC_GOTDATA_OP*
just like R_SPARC_GOT{10,13,22}.
	(Target_sparc::Scan::local): Likewise.
	(Target_sparc::Relocate:relocate): Likewise.
2010-02-09 06:34:44 +00:00
David S. Miller 705b512121 gold/
2010-02-08  David S. Miller  <davem@davemloft.net>

	* sparc.cc (Target_sparc::Relocate::relocate): If relocation offset is
	unaligned for R_SPARC_16, R_SPARC_32, or R_SPARC_64, use the unaligned
	relocation helper function.
2010-02-09 04:48:16 +00:00
Ian Lance Taylor 9109c078e3 * configure.ac: Rewrite targetobjs duplicate removal code to use
only shell constructs.
	* configure: Rebuild.
2010-02-06 20:14:01 +00:00
Doug Kwan cf846138ae 2010-02-05 Doug Kwan <dougkwan@google.com>
PR 11247
	* arm.cc (Arm_relobj::section_is_scannable): New method.
	(Arm_relobj::section_needs_reloc_stub_scanning): Use it.
	(Arm_relobj::section_needs_cortex_a8_stub_scanning): Same.
2010-02-06 04:30:00 +00:00
Doug Kwan 6cfaf60bc2 2010-02-04 Doug Kwan <dougkwan@google.com>
PR 11247
	* arm-reloc-property.cc (cstdio): Include.
	* configure.ac (targetobjs): Remove duplicates.
	* configure: Regenerate.
	* resolve.cc (Symbol_table::resolve): Explicit instantiate both
	big and little endian version for a given address size.
2010-02-05 00:30:35 +00:00
Doug Kwan 5c57f1be7b 2010-02-03 Doug Kwan <dougkwan@google.com>
* arm-reloc-property.cc
	(Arm_reloc_property_table::reloc_name_in_error_message): New method
	definition.
	* arm-reloc-property.h
	(Arm_reloc_property_table::get_implemented_static_reloc_property):
	New method definition.
	(Arm_reloc_property_table::reloc_name_in_error_message): New method
	declaration.
	* arm-reloc.def (THM_MOVT_ABS, THM_MOVT_PREL, THM_MOVT_BREL): Change
	overflow to N.
	(GOT_PREL): Change implemented to Y.
	* arm.cc (Target_arm::reloc_uses_thumb_bit): Remove method.
	(Target_arm::Relocate::reloc_needs_sym_origin): Remove method.
	(Arm_relocate_functions::movw_abs_nc): Remove method.
	(Arm_relocate_functions::movt_abs): Ditto.
	(Arm_relocate_functions::thm_movw_abs_nc): Ditto.
	(Arm_relocate_functions::thm_movt_abs): Ditto.
	(Arm_relocate_functions::movw_rel_nc): Ditto.
	(Arm_relocate_functions::movw_rel): Ditto.
	(Arm_relocate_functions::movt_rel): Ditto.
	(Arm_relocate_functions:thm_movw_rel_nc): Ditto.
	(Arm_relocate_functions:thm_movw_rel): Ditto.
	(Arm_relocate_functions:thm_movt_rel): Ditto.
	(Arm_relocate_functions::movw, Arm_relocate_functions::movt,
	(Arm_relocate_functions::thm_movw, Arm_relocate_functions::thm_movt):
	New method definitions.
	(Arm_relocation_functions::arm_grp_alu): Add assertion for group index.
	(Arm_relocation_functions::arm_grp_ldr): Ditto.
	(Arm_relocation_functions::arm_grp_ldrs): Ditto.
	(Arm_relocation_functions::arm_grp_ldc): Ditto.
	(Target_arm::Relocate::relocate): Check for non-static or
	unimplemented relocation code and exit early.  Change calls to
	Target_arm::reloc_uses_thumb_bit and
	Target_arm::Reloc::reloc_needs_sym_origin to use relocation property
	instead.  Refactor code to handle similar relocations to increase
	code sharing.  Remove check for unsupported relocation code in switch
	statement.
	(Target_arm::Relocatable_size_for_reloc::get_size_for_reloc): Use
	relocation property table to find out size.  Change error message to
	print out the name of a relocation code instead of the numeric value.
	(Target_arm::scan_reloc_for_stub): Use relocation property table
	instead of calling Target_arm::reloc_uses_thumb_bit().
2010-02-04 03:32:18 +00:00
Doug Kwan 218c583182 2010-02-03 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::relocate_section): Do view adjustment for all
	types of relaxed input section.
2010-02-03 19:32:28 +00:00
Doug Kwan 0d31c79dad 2010-02-02 Doug Kwan <dougkwan@google.com>
* Makefile.am (HFILES): Add arm-reloc-property.h.
	(DEFFILES): New.
 	(TARGETSOURCES): Add arm-reloc-property.cc
 	(ALL_TARGETOBJS): Add arm-reloc-property.$(OBJEXT)
	(libgold_a_SOURCES): $(DEFFILES)
	* Makefile.in: Regenerate.
	* arm-reloc-property.cc: New file.
	* arm-reloc-property.h: New file.
	* arm-reloc.def: New file.
	* arm.cc: Update comments.
	(arm-reloc-property.h): New included header.
	(arm_reloc_property_table): New global variable.
	(Target_arm::do_select_as_default_target): New method definition.
	* configure.tgt (armeb*-*-*,armbe*-*-*,arm*-*-*): Add
	arm-reloc-property to targ_extra_obj.
	* parameters.cc (set_parameters_target): Call
	Target::select_as_default_target().
	* target.h (Target::select_as_default_target): New method definition.
	(Target::do_select_as_default_target): Same.
2010-02-03 05:36:55 +00:00
Doug Kwan 546c74577f 2010-02-01 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_exidx_fixup::Arm_exidx_fixup): Initialize
	first_output_text_section_.
	(Arm_exidx_fixup::first_output_text_section): New method definition.
	(Arm_exidx_fixup::first_output_text_section_): New data member.
	(Arm_exidx_fixup::process_exidx_section): Record the first text
	output section seen.
	(Arm_output_section::fix_exidx_coverage): Set correct linked section
	and entsize in output section header.
2010-02-02 00:25:57 +00:00
Doug Kwan 11b861d510 2010-01-29 Viktor Kutuzov <vkutuzov@accesssoftek.com>
* gold/arm.cc: Added support for the ARM relocations: R_ARM_THM_PC8,
	R_ARM_THM_PC12, R_ARM_THM_ALU_PREL_11_0.
	(Arm_relocate_functions::thm_alu11): New Method.
	(Arm_relocate_functions::thm_pc8): New Method.
	(Arm_relocate_functions::thm_pc12): New Method.
	(Target_arm::Scan::local): Handle the relocations.
	(Target_arm::Scan::global): Likewise.
	(Target_arm::Relocate::relocate): Likewise.
	(Target_arm:Relocatable_size_for_reloc::get_size_for_reloc): Likewise.
2010-01-30 00:11:00 +00:00
Doug Kwan c9a2c12554 2010-01-29 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Scan::global): General PLTs for the same set
	of relocation types as ld.
2010-01-30 00:01:12 +00:00
Doug Kwan 1521477a53 2010-01-29 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::arm_branch_common) Change visibility
	to public.
	(Arm_relocate_functions::thumb_branch_common): Ditto.
	(Arm_relocate_functions::thm_call, Arm_relocate_functions::thm_jump24,
	Arm_relocate_functions::thm_xpc22, Arm_relocate_functions::plt32,
	Arm_relocate_functions::xpc25, Arm_relocate_functions::call,
	Arm_relocate_functions::jump24): Remove.
	(Target_arm::Relocate::relocate): Adjust code to call
	Arm_relocation_functions::arm_branch_common and
	Arm_relocation_functions::thumb_branch_common instead of their removed
	wrappers.  Merge switch-cases together to reduce source code size.
2010-01-29 22:16:17 +00:00
Doug Kwan e7eca48cb2 2010-01-29 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::Arm_relobj): Initialize new data member
	output_local_symbol_count_needs_update_.
	(Arm_relobj::output_local_symbol_count_needs_update,
	 Arm_relobj::set_output_local_symbol_count_needs_update,
	 Arm_relobj::update_output_local_symbol_count): New methods.
	(Arm_relobj::output_local_symbol_count_needs_update_): New data
	member.
	(Arm_exidx_cantunwind::do_fixed_endian_write): Write address
	of pointed function as in a R_ARM_PREL31 relocation.
	(Arm_output_section<big_endian>::fix_exidx_coverage): Mark objects
	for output local symbol count updating.
	(Target_arm::do_relax): Update output local symbol counts in objects
	if necessary.
	* object.h (Sized_relobj::set_output_local_symbol_count): New method.
2010-01-29 18:23:18 +00:00
Ian Lance Taylor 02961d7edf * arm.cc: Added support for the ARM relocations:
R_ARM_MOVW_BREL_NC, R_ARM_MOVT_BREL, R_ARM_MOVW_BREL,
	R_ARM_THM_MOVW_BREL_NC, R_ARM_THM_MOVT_BREL, R_ARM_THM_MOVW_BREL.
	(Arm_relocate_functions::movw_rel_nc): Renamed (was
	movw_prel_nc).
	(Arm_relocate_functions::movw_rel): New method.
	(Arm_relocate_functions::movt_rel): Renamed (was movt_prel).
	(Arm_relocate_functions::thm_movw_rel_nc): Renamed (was
	thm_movw_prel_nc).
	(Arm_relocate_functions::thm_movw_rel): New method.
	(Arm_relocate_functions::thm_movt_rel): Renamed (was
	thm_movt_prel).
	(Target_arm::Scan::local): Handle MOVW_BREL/MOVT_BREL
	relocations.
	(Target_arm::Scan::global): Likewise.
	(Target_arm::Relocate::relocate): Likewise.
	(Target_arm::Relocatable_size_for_reloc::get_size_for_reloc):
	Likewise.
2010-01-29 15:46:43 +00:00
Ian Lance Taylor b10d287364 * arm.cc: Added support for ARM group relocations.
(Target_arm::reloc_needs_sym_origin): New method.
	(Arm_relocate_functions::calc_grp_kn): New method.
	(Arm_relocate_functions::calc_grp_residual): New method.
	(Arm_relocate_functions::calc_grp_gn): New method.
	(Arm_relocate_functions::arm_grp_alu): New Method.
	(Arm_relocate_functions::arm_grp_ldr): New Method.
	(Arm_relocate_functions::arm_grp_ldrs): New Method.
	(Arm_relocate_functions::arm_grp_ldc): New Method.
	(Target_arm::Scan::local): Handle the ARM group relocations.
	(Target_arm::Scan::global): Likewise.
	(Target_arm::Relocate::relocate): Likewise.
	(Target_arm::Relocatable_size_for_reloc::get_size_for_reloc):
	Likewise.
2010-01-27 15:17:46 +00:00
Doug Kwan 2b328d4ec5 2010-01-26 Doug Kwan <dougkwan@google.com>
* arm.cc (set): Include.
	(class Arm_exidx_fixup): Change type of last_input_section_ to const
	pointer type.
 	(Arm_output_section::Text_section_list): New type.
	(Arm_output_section::append_text_sections_to_list): New method.
	(Arm_output_section::fix_exidx_coverage): Ditto.
	(Arm_relobj::Arm_relobj): Initialize exidx_section_map_.
   	(Arm_relobj::convert_input_section_to_relaxed_section): Use
	Relobj::set_section_offset() instead of
	Sized_relobj::invalidate_section_offset().
   	(Arm_relobj::section_needs_reloc_stub_scanning): Add an extra
	parameter for section headers. Ignore relocation sections for
	unallocated sections and EXIDX sections.
	(Target_arm::fix_exidx_coverage): New method.
	(Target_arm::output_section_address_less_than): New type.
	(Arm_exidx_fixup::add_exidx_cantunwind_as_needed): Use index of the
	linked text section instead of the EXIDX section.
	(Arm_output_section::create_stub_group): Add an assertion to check
	that this is not an EXIDX output section.
	(Arm_output_section::append_text_sections_to_list): New method.
	(Arm_output_section::fix_exidx_coverage): Ditto.
	(Arm_relobj::scan_sections_for_stubs): Adjust call to
   	Arm_relobj::section_needs_reloc_stub_scanning.
	(Target_arm::do_relax): Fix EXIDX output section coverage in the
	first pass.
	(Target_arm::fix_exidx_coverage): New method.
	* object.h (Relobj::set_output_section): New method.
	(Sized_relobj::invalidate_section_offset): Remove method.
	(Sized_relobj::do_invalidate_section_offset): Remove method.
	(Sized_relobj::do_set_section_offset): Handle offset value -1.
2010-01-26 21:29:10 +00:00
Doug Kwan c7f3c37113 2010-01-25 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_exidx_merged_section::do_output_offset):
	Fix warning due to signed and unsigned comparison on a 32-bit host.
2010-01-25 17:30:29 +00:00
Doug Kwan 8923b24c4b 2010-01-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_relax): Record an output section for section
	offset adjustment it contains any stub table that has changed.
	* layout.cc (Layout::clean_up_after_relaxation): Adjust section
	offsets in an output section if necessary.
	* output.cc (Output_section::Output_section): Initialize
	section_offsets_need_adjustments_.
	(Output_section::add_input_section_for_script): Renamed to
	Output_section::add_simple_input_section.
	(Output_section::save_states): Add a comment.
	(Output_section::discard_states): New method defintion.
	(Output_section::adjust_section_offsets): Same.
	* output.h (Output_section::add_input_section_for_script): Renamed to
	Output_section::add_simple_input_section.
	(Output_section::discard_states): New method declaration.
	(Output_section::adjust_section_offsets): Same.
	(Output_section::section_offsets_need_adjustment,
	Output_section::set_section_offsets_need_adjustment): New method
	definitions.
	(Output_section::section_offsets_need_adjustment_): New data member.
	* script-sections.cc
	(Output_section_element_input::set_section_address): Adjust code for
	renaming of Output_section::add_input_section_for_script.
	(Orphan_output_section::set_section_address): Same.
2010-01-23 01:07:59 +00:00
Doug Kwan 9b2fd36756 2010-01-22 Viktor Kutuzov <vkutuzov@accesssoftek.com>
* gold/arm.cc (Target_arm): Updated fix_v4bx method and usage of
	Fix_v4bx enum values .
	* gold/options.h (General_options): New option definitions.
	(General_options::fix_v4bx): New method.
	(General_options::Fix_v4bx): New enum.
	* gold/options.cc (General_options::parse_fix_v4bx): New method.
	(General_options::parse_fix_v4bx_interworking): New method.
2010-01-22 19:43:00 +00:00
Doug Kwan 80d0d023f5 2010-01-22 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_exidx_fixup): New class.
2010-01-22 17:53:18 +00:00
Doug Kwan af2cdeae83 2010-01-21 Doug Kwan <dougkwan@google.com>
elfcpp/ChangeLog:

	* arm.h (EXIDX_CANTUNWIND): New enum.

gold/ChangeLog:

	* arm.cc (Arm_exidx_cantunwind, Arm_exidx_merged_section): New
	classes.
	(Arm_exidx_section_offset_map): New type.
2010-01-22 06:06:46 +00:00
Doug Kwan 993d07c1d5 2010-01-21 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_exidx_input_section): New class.
	(Arm_relobj::exidx_input_section_by_link,
	Arm_relobj::exidx_input_section_by_shndx,
	Arm_relobj::make_exidx_input_section): New methods.
	(read_arm_attributes_section): Remove.
	(Arm_relobj::do_read_symbols): Look for ARM.exidx sections and record
	information about them.
	(Arm_dynobj::do_read_symbols): Move code in read_arm_attributes_section
	to here.
2010-01-22 00:51:17 +00:00
Doug Kwan 5ac169d4b6 2010-01-20 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Arm_input_section_map): Change key type from
	Input_section_specifier to Section_id.
	(Target_arm::new_arm_input_section: Adjust code for change of key
	type.
	(Target_arm::find_arm_input_section): Ditto.
	* gc.h (object.h): Include for Section_id nand Section_id_hash.
	(Section_id): Remove.
	(Garbage_collection::Section_id_hash): Remove.
	* icf.h (object.h): Include for Section_id nand Section_id_hash.
	(Section_id): Remove.
	(Icf::Section_id_hash): Remove.
	* object.h (Section_id, Const_section_id, Section_id_hash,
	Const_section_id_hash): New type definitions.
	* output.cc (Output_section::add_relaxed_input_section): Change to
	use Const_section_id instead of Input_section_specifier as key type.
	(Output_section::add_merge_input_section): Ditto.
	(Output_section::build_relaxation_map): Change to use Section_id
	instead of Input_section_specifier as key type.
 	(Output_section::convert_input_sections_in_list_to_relaxed_sections):
	Ditto.
	(Output_section::convert_input_sections_to_relaxed_sections): Change
	to use Const_section_id instead of Input_section_specifier as key type.
 	(Output_section::find_merge_section): Ditto.
	(Output_section::find_relaxed_input_section): Ditto.
	* output.h (Input_section_specifier): Remove class.
	(Output_section::Output_section_data_by_input_section_map): Change
	key type to Const_section_id.
	(Output_section::Output_relaxed_input_section_by_input_section_map):
	Ditto.
	(Output_section::Relaxation_map): Change key type to Section_id.
2010-01-20 17:29:52 +00:00
Ian Lance Taylor a21620630e * gold/arm.cc: Added support for R_ARM_V4BX relocation
(class Arm_v4bx_stub): New class.
	(DEF_STUBS): Updated definition to support v4_veneer_bx.
	(Stub_factory::make_arm_v4bx_stub): New method.
	(Stub_factory::elf32_arm_stub_v4_veneer_bx): New veneer template.
	(Stub_table::empty): Handle v4bx stubs.
	(Stub_table::add_arm_v4bx_stub): New method.
	(Stub_table::find_arm_v4bx_stub): New method.
	(Arm_relocate_functions::v4bx): New method.
	(Target_arm::fix_v4bx): New method.
	(Target_arm::Target_arm): Handle R_ARM_V4BX.
	(Stub_table::relocate_stubs): Likewise.
	(Stub_table::do_write): Likewise.
	(Stub_table::update_data_size_and_addralign): Likewise.
	(Stub_table::finalize_stubs):  Likewise.
	(Target_arm::Scan::local): Likewise.
	(Target_arm::Scan::global): Likewise.
	(Target_arm::do_finalize_sections): Likewise.
	(Target_arm::Relocate::relocate): Likewise.
	(Target_arm::Relocatable_size_for_reloc::get_size_for_reloc):
	Likewise.
	(Target_arm::scan_reloc_for_stub): Likewise.
	(Target_arm::scan_reloc_section_for_stubs): Likewise.
2010-01-20 16:49:09 +00:00
Ian Lance Taylor 5696ab0b73 elfcpp/:
* elfcpp.h (PN_XNUM): Define.
gold/:
	* output.cc (Output_section_headers::do_sized_write): Write large
	segment count to sh_info field.
	(Output_file_header::do_sized_write): For large segment count,
	write PN_XNUM to e_phnum field.
2010-01-19 17:55:49 +00:00
Ian Lance Taylor 800d0f5656 * arm.cc (Arm_relocate_functions::thm_jump6): New function.
(Arm_relocate_functions::thm_jump8): New function.
	(Arm_relocate_functions::thm_jump11): New function.
	(Target_arm::Scan::local): Handle R_ARM_THM_JUMP6, R_ARM_THM_JUMP8,
	R_ARM_THM_JUMP11.
	(Target_arm::Scan::global): Likewise.
	(Target_arm::Relocate::relocate): Likewise.
	(Target_arm::Relocatable_size_for_reloc::get_size_for_reloc):
	Likewise.
2010-01-15 15:41:42 +00:00
Doug Kwan 41263c058c 2010-01-14 Doug Kwan <dougkwan@google.com>
* arm.cc (map, utility): Include headers.
	(Target_arm::apply_cortex_a8_workaround): New method.
	(Arm_relobj::do_relocate_sections): Apply any Cortex-A8 workaround.
	(Target_arm::Scan::local): Handle R_ARM_THM_JUMP24, R_ARM_THM_JUMP19.
	(Target_arm::Scan::global): R_ARM_THM_JUMP19.
	(Target_arm::do_finalize_sections): Set fix_cortex_a8_ according to
	the --[no-]fix-cortex-a8 command line options.
	(Target_arm::Relocate::relocate): Handle R_ARM_JUMP19.
	(Target_arm::relocate_stub): Use addend in instruction template.
	* options.h (DEFINE_bool): Set the user-set flag.
	(General_options): Add --[no-]-fix-cortex options.
	* output.cc (Output_section::convert_input_sections_to_relaxed_sections)
	: Update fast look-up map after conversion.
2010-01-15 04:58:34 +00:00
Sriraman Tallam 459e9b03e8 * object.cc (Sized_relobj::do_layout): Change to call layout_gnu_stack
in the first pass of do_layout.
2010-01-15 01:44:22 +00:00
Doug Kwan b521dfe453 2010-01-13 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::section_needs_reloc_stub_scanning,
	Arm_relobj::scan_sections_for_stubs): Rearrange code to avoid an
	apparent compiler problem of not folding static constant integral
	data members of elfcpp::Elf_sizes<32>.
2010-01-14 02:42:20 +00:00
Doug Kwan 4427219284 2010-01-13 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::section_needs_reloc_stub_scanning,
	Arm_relobj::section_needs_cortex_a8_stub_scanning,
	Arm_relobj::scan_section_for_cortex_a8_erratum,
	Arm_relobj::scan_span_for_cortex_a8_erratum): New methods.
	(Arm_relobj::scan_sections_for_stubs): Move code deciding what
	sections to scan for relocation stubs into a new method
	Arm_relobj::section_needs_reloc_stub_scanning.  Handle both
	relocation and Cortex-A8 stub scanning.
	(Target_arm::do_relax): Force stubs to be after stubbed sections
	if fixing the Cortex-A8 erratum.  Remove all Cortex-A8 stubs at
	the beginning of a new relaxation pass.  Update a comment.
	(Target_arm::scan_span_for_cortex_a8_erratum): New method definition.
2010-01-13 21:36:47 +00:00
Ian Lance Taylor 44b71ece3c I forgot to commit this. 2010-01-13 21:14:47 +00:00
Doug Kwan a120bc7fab 2010-01-12 Doug Kwan <dougkwan@google.com>
* arm.cc (Cortex_a8_reloc): New class.
	(Target_arm::Target_arm): Initialize new data members fix_cortex_a8_
	and cortex_a8_relocs_info_.
	(Target_arm::fix_cortex_a8): New method definition.
	(Target_arm::Cortex_a8_relocs_info): New type.
	(Target_arm::fix_cortex_a8_, Target_arm::cortex_a8_relocs_info_):
	New data member declarations.
	(Target_arm::scan_reloc_for_stub): Record information about
	relocations for THUMB branches that might be exempted from the
	Cortex-A8 workaround.
	(Target_arm::do_relax): Clear all Cortex-A8 relocation information
	at the beginning of a relaxation pass.
2010-01-13 06:44:01 +00:00
Doug Kwan 20138696be 2010-01-12 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::mapping_symbols_info_): New data member.
	(Arm_relobj::Mapping_symbol_position,
	 Arm_reloj::Mapping_symbol_position_less,
	 Arm_relobj::Mapping_symbols_info): New types.
	(Target_arm::is_mapping_symbol_name): New method definition.
	(Arm_relobj::do_count_local_symbols): Save information about mapping
	symbols.
2010-01-13 02:00:39 +00:00
Ian Lance Taylor 837504c42d * target-reloc.h (visibility_error): New inline function.
(relocate_section): Call visibility_error.
	* testsuite/Makefile.am (check_DATA): Add protected_3.err.
	(MOSTLYCLEANFILES): Likewise.
	(protected_4_pic.o, protected_3.err): New targets.
	* testsuite/protected_4.cc: New file.
2010-01-12 19:12:40 +00:00
Doug Kwan 089d69dccd 2010-01-11 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relocate_functions::thumb32_branch_offset,
	Arm_relocate_functions::thumb32_branch_upper,
	Arm_relocate_functions::thumb32_branch_lower,
	Arm_relocate_functions::thumb32_cond_branch_offset,
	Arm_relocate_functions::thumb32_cond_branch_upper,
	Arm_relocate_functions::thumb32_cond_branch_lower,
	Arm_relocate_functions::thm_jump19): New methods to handle THUMB
	branch offset encoding.
	(Arm_relocate_functions::thumb_branch_common): Use new branch
	offset encoding methods to avoid code duplication.
	(Stub_template::Stub_template) Handle THUMB16_SPECIAL_TYPE.
	(Stub_addend_reader::operator()): Use new branch encoding method
	to avoid code duplication.
2010-01-12 07:54:37 +00:00
Doug Kwan 99e5bff2f9 2010-01-11 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::do_gc_process_relocs): New method.
	(Target_arm::do_finalize_sections): Define special EXIDX section
	symbols only if referenced.
	* gc.h (Garbage_collection::add_reference): New method.
	(gc_process_relocs): Use Garbage_collection::add_reference to avoid
	code duplication.
2010-01-12 07:22:56 +00:00
Ian Lance Taylor d0a91bd8c7 * script.cc (Version_script_info::build_expression_list_lookup):
Change complaing about duplicate wildcard match from error to
	warning.
2010-01-12 06:52:58 +00:00
Ian Lance Taylor 98e090bd1f * script.cc (class Lazy_demangler): Recreate--revert part of patch
of 2009-12-30.
	(Version_script_info::Version_script_info): Initialize globs_,
	default_version_, default_is_global_, and exact_.  Don't
	initialize globals_ or locals_.
	(Version_script_info::build_lookup_tables): Build local symbols
	first.
	(Version_script_info::unquote): New function.
	(Version_script_info::add_exact_match): New function.
	(Version_script_info::build_expression_list_lookup): Remove lookup
	parameter.  Add is_global parameter.  Change all callers.  Handle
	wildcard pattern specially.  Unquote pattern.  Call
	add_exact_match.
	(Version_script_info::get_name_to_match): New function.
	(Version_script_info::get_symbol_version): New function.
	(Version_script_info::get_symbol_version_helper): Remove.
	(Version_script_info::check_unmatched_names): Call unquote.
	* script.h (class Version_script_info): Change get_symbol_version
	to be non-inline and add is_global parameter; change all callers.
	Rewrite symbol_is_local.  Update declarations.  Define struct
	Version_tree_match, Exact, Globs.  Don't define struct Lookup.
	Remove globals_ and locals_ members.  Add exact_, globs_,
	default_version_, is_global_.
	(Version_script_info::Glob): Remove pattern, add expression and
	is_global.  Update constructor.  Change all callers.
	* dynobj.cc (Versions::finalize): Mark the version symbol as the
	default version.
	(Versions::symbol_section_contents): If a symbol is undefined, or
	defined in a dynamic object, set the version index to
	VER_NDX_LOCAL.
	* symtab.cc (Symbol_table::add_from_relobj): Don't call
	symbol_is_local.
	(Symbol_table::add_from_pluginobj): Likewise.
	* testsuite/ver_matching_test.sh: blaza1 and blaza go into V2.
2010-01-12 06:41:36 +00:00
Doug Kwan d56962d3a5 2010-01-11 Doug Kwan <dougkwan@google.com>
* Makefile.am (incremental_dump_DEPENDENCIES): Add libintl dependency.
	(incremental_dump_LDADD): Add linking option for libintl.
	* Makefile.in: Regenerate.
2010-01-11 19:38:22 +00:00
H.J. Lu 94e6ee9154 Use --dyn-syms instead of -Ds
2010-01-11  H.J. Lu  <hongjiu.lu@intel.com>

	PR gold/11144
	* testsuite/Makefile.am (dynamic_list.stdout): Use --dyn-syms
	instead of -Ds.
	* testsuite/Makefile.in: Regenerated.
2010-01-11 18:34:48 +00:00
Doug Kwan e96c574bdc 2010-01-10 Doug Kwan <dougkwan@google.com>
* options.h (DEFINE_var): Use parentheses around argument varname__
	in macro body to avoid any unintended subsequent substitutions.
2010-01-11 07:39:36 +00:00
Ian Lance Taylor ba4d53bf2b * resolve.cc (Symbol_table::resolve): Add symbols to list of ODR
candidates before doing symbol resolution.
2010-01-11 07:09:48 +00:00
Ian Lance Taylor 7198066bc1 * resolve.cc (Symbol_table::resolve): Add symbols to the list of
ODR candidates if only one is weak.
2010-01-11 05:44:04 +00:00
Ian Lance Taylor a2beed37db * script.cc (Version_script_info::build_expression_list_lookup):
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-09 05:49:57 +00:00
Doug Kwan 2fb7225c84 2010-01-08 Doug Kwan <dougkwan@google.com>
* 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 01:55:14 +00:00
Ian Lance Taylor 880cd20d40 PR 11108
* 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-09 00:13:48 +00:00
Ian Lance Taylor 2703e3eb93 * dynobj.cc (big_endian>::find_dynsym_sections): Set pi to NULL in
the SHT_SYMTAB case.
2010-01-08 23:10:58 +00:00
Ian Lance Taylor 339d40a3d9 * object.cc (Sized_relobj::do_layout): Don't get confused if
layout_eh_frame returns NULL.
2010-01-08 22:34:34 +00:00
Ian Lance Taylor abecea76bc PR 11084
* 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 21:24:44 +00:00
Ian Lance Taylor 6b7dd3f3b1 PR 11072
* layout.cc (Layout::include_section): Remove .gnu_debuglink
	sections.
2010-01-08 21:07:34 +00:00
H.J. Lu 36c50e63be Change to "Copyright 2010" 2010-01-08 19:48:09 +00:00
Ian Lance Taylor e291e7b9c9 PR 10287
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-08 19:33:18 +00:00
Ian Lance Taylor 3a44184e64 PR 11061
* 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 21:09:31 +00:00
Ian Lance Taylor ea715a34a7 * output.h (class Output_data): Add const version of
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 20:43:35 +00:00
Ian Lance Taylor 659948a498 PR 11042
* copy-relocs.cc (Copy_relocs::emit_copy_reloc): Mark the dynamic
	object as needed.
2010-01-07 19:32:59 +00:00
Ian Lance Taylor 9d3b86f6f9 PR 11019
* object.cc: Instantiate Xindex::initialize_symtab_xindex and
	Xindex::read_symtab_xindex.
2010-01-07 18:42:03 +00:00
Doug Kwan bb0d3eb035 2010-01-07 Doug Kwan <dougkwan@google.com>
* 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 18:38:43 +00:00
Ian Lance Taylor dc3f80feec PR 10980
* 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 18:31:30 +00:00
Ian Lance Taylor ffeef7dfa5 * options.h (class General_options): Add -z text and -z textoff.
* layout.cc (Layout::finish_dynamic_section): Implement -z text.
2010-01-07 18:16:24 +00:00
Sriraman Tallam f1ec9ded5c * gc.h (Garbage_collection::Cident_section_map): New typedef.
(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 07:14:30 +00:00
Ian Lance Taylor b9674e179b PR 10980
* options.h (class General_options): Add --warn-shared-textrel.
	* layout.cc (Layout::finish_dynamic_section): Implement
	--warn-shared-textrel.
2010-01-07 06:05:23 +00:00
Ian Lance Taylor 6eda8c29b8 PR 10980
* options.h (class General_options): Add --warn-multiple-gp.
2010-01-07 05:57:25 +00:00
Ian Lance Taylor 32dcd44e18 * Makefile.am (incremental_dump_DEPENDENCIES): Remove
$(THREADSLIB) and $(LIBDL).
	* Makefile.in: Rebuild.
2010-01-07 05:51:58 +00:00
Ian Lance Taylor a192ba0508 PR 10980
* 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 22:37:18 +00:00
Ian Lance Taylor 62dfdd4d1c PR 10980
* 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-06 05:30:24 +00:00
Ian Lance Taylor 9c4ae15620 * options.h (class General_options): Use DEFINE_bool_alias for
allow_multiple_definition.
	* resolve.cc (Symbol_table::should_override): Don't test
	allow_multiple_definition.
2010-01-05 22:55:08 +00:00
Ian Lance Taylor dde3f402cf PR 10980
* 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 21:52:51 +00:00
Ian Lance Taylor 8781f70964 * symtab.cc (Symbol_table::add_from_object): Rename def parameter
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 19:29:15 +00:00
Ian Lance Taylor 30bc8c4670 PR 10980
* 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 05:56:28 +00:00
Ian Lance Taylor 7eaea5495a PR 10980
* 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-05 00:32:22 +00:00
Ian Lance Taylor fe35d28dd3 PR 10980
* options.h (class General_options): Add -G as a short version of
	--shared.  Add no-op options -assert, -g, and -i.
2010-01-04 23:59:13 +00:00
Sriraman Tallam 55a2bb3546 * gc.h (gc_process_relocs): Call is_section_foldable_candidate to
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.
2010-01-04 19:08:39 +00:00
Ian Lance Taylor 719328e148 PR 10980
* options.h (class General_options): Permit two dashes with
	--retain-symbols-file.
2009-12-31 06:05:49 +00:00
Ian Lance Taylor 403a15dd3b PR 10979
* 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 05:43:29 +00:00
Ian Lance Taylor eda294df6d PR 10979
* 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 05:07:22 +00:00
Ian Lance Taylor d7bb574500 PR 10979
* 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 03:48:46 +00:00
Ian Lance Taylor fc59c57250 PR 10931
* 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 01:57:55 +00:00
Ian Lance Taylor 1c74fab0d1 PR 10916
* 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-31 01:14:34 +00:00
Ian Lance Taylor 6affe781e4 PR 10861
* 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 22:35:49 +00:00
Ian Lance Taylor 818bf354a7 PR 10843
* 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 20:35:52 +00:00
Ian Lance Taylor ebcc83046f PR 10670
* 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 20:23:29 +00:00
Ian Lance Taylor bb321bb1c4 PR 10450
* 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 19:29:20 +00:00
Ian Lance Taylor 176fe33f0d PR 10450
* 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 08:29:37 +00:00
Ian Lance Taylor 1b81fb710f PR 10450
* layout.cc (Layout::create_dynamic_symtab): Only set entsize of
	.gnu.hash table for a 32-bit target.
2009-12-30 07:45:32 +00:00
Ian Lance Taylor 8d6d383d7c PR 10450
* 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 07:40:01 +00:00
Ian Lance Taylor e785ec03fb PR 10450
* 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 07:22:06 +00:00
Ian Lance Taylor 1a2dff539b * layout.cc (Layout::Layout): Initialize increase_relro_.
(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 06:57:17 +00:00
Ian Lance Taylor f0ba79e29c PR 10450
* 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 04:16:50 +00:00
Ian Lance Taylor e8cd95c71e PR 10450
* 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-30 04:00:21 +00:00
Rafael Ávila de Espíndola 3e1b9a8a68 2009-12-29 Rafael Espindola <espindola@google.com>
* main.cc (main): Fix the sys time reporting.
	* workqueue.cc (Workqueue::find_and_run_task): Fix the sys time reporting.
2009-12-29 23:45:10 +00:00
Sriraman Tallam 3dcad3765d * options.cc (General_options::parse_version): Allow -v to exit
without an error if there is nothing to link.
2009-12-29 23:12:15 +00:00
Ian Lance Taylor 084e2665e2 * configure.ac: Set the MCMODEL_MEDIUM conditional to false if
using a version of gcc before 4.1.
	* configure: Rebuild.
2009-12-29 22:49:13 +00:00
Chris Demetriou 250acde31a 2009-12-28 Chris Demetriou <cgd@google.com>
* attributes.cc (Output_attributes_section_data::do_write): Use
        std::vector::front rather than std::vector::data.
2009-12-29 06:09:03 +00:00
Ian Lance Taylor 99fff23b2e * symtab.h (class Symbol_table): Add enum Defined.
* resolve.cc (Symbol_table::should_override): Add defined
	parameter.  Change all callers.  Test whether object is NULL
	before calling a method on it.
	(Symbol_table::report_resolve_problem): Add defined parameter.
	Change all callers.
	(Symbol_table::should_override_with_special): Likewise.
	* symtab.cc (Symbol_table::define_in_output_data): Add defined
	parameter.  Change all callers.
	(Symbol_table::do_define_in_output_data): Likewise.
	(Symbol_table::define_in_output_segment): Likewise.
	(Symbol_table::do_define_in_output_segment): Likewise.
	(Symbol_table::define_as_constant): Likewise.
	(Symbol_table::do_define_as_constant): Likewise.
	* script.h (class Symbol_assignment): Add is_defsym parameter to
	constructor; change all callers.
	* script.cc (Script_options::add_symbol_assignment): Add is_defsym
	parameter.  Change all callers.  Add is_defsym_ field.
	(class Parser_closure): Add parsing_defsym parameter to
	constructor; change all callers.  Add parsing_defsym accessor
	function.  Add parsing_defsym_ field.
2009-12-29 00:31:48 +00:00
Ian Lance Taylor fa618ee47d * object.cc (Relobj::is_section_name_included): Fix formatting. 2009-12-29 00:24:31 +00:00
Ian Lance Taylor 556bd68386 * gold.cc (queue_middle_tasks): Fix formatting. 2009-12-29 00:22:43 +00:00
Ian Lance Taylor cbc999b90f * x86_64.cc (Target_x86_64::do_calls_non_split): Recognize
-fsplit-stack prologue when using %r11.
2009-12-24 07:48:14 +00:00
Ian Lance Taylor 1782c879ce * i386.cc (Target_i386::do_calls_non_split): Recognize
-fsplit-stack prologue for a function with a static chain.
2009-12-23 23:53:43 +00:00
Sriraman Tallam 329ca2b10f 2009-12-21 Sriraman Tallam <tmsriram@google.com>
* options.cc (General_options::parse_version): Make -v continue and do
	the link like GNU ld does.
2009-12-22 01:33:43 +00:00
Rafael Ávila de Espíndola d675ff4684 2009-12-17 Rafael Avila de Espindola <espindola@google.com>
* Makefile.am (CCFILES): Add timer.cc.
	(HFILES): Add timer.h.
	* configure.ac: Check for sysconf and times.
	* main.cc: include timer.h.
	(main): Use Timer instead of get_run_time.
	* timer.cc: New.
	* timer.h: New.
	* workqueue.cc: include timer.h.
	(Workqueue::find_and_run_task):
	Report user, sys and wall time.
	* Makefile.in: Regenerate.
	* config.in: Regenerate.
	* configure: Regenerate.
2009-12-17 16:02:03 +00:00
Doug Kwan d6344fb5ba 2009-12-16 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::scan_sections_for_stubs): Exclude ICF-eliminated
	sections.
	* object.cc (Sized_relobj::do_finalize_local_symbols): Handle
	relaxed input sections.
	* output.cc (Output_section::find_relaxed_input_section): Change
	return type to Output_relaxed_input_section pointer.  Adjust code
	for new type of relaxed_input_section_map_.
	* output.h (Output_section::find_relaxed_input_section): Change
	return type to Output_relaxed_input_section pointer.
	(Output_section::Output_relaxed_input_section_by_input_section_map):
	New type.
	(Output_section::relaxed_input_section_map_): Change type to
	Output_section::Output_relaxed_input_section_by_input_section_map.
	* symtab.cc (Symbol_table::compute_final_value): Handle relaxed
	input section.
2009-12-17 00:00:26 +00:00
Ian Lance Taylor 0e0d5469b8 * layout.cc (Layout::create_shstrtab): Only write out after input
sections if we are compressing debug sections.
2009-12-15 22:20:25 +00:00
Ian Lance Taylor 0649a88912 * archive.cc (Archive::add_symbols): Only look up a symbol without
a version if there is, in fact, a version.
2009-12-15 22:05:22 +00:00
Ian Lance Taylor 2ea9794110 Revert -Wshadow changes, all changes from:
2009-12-11  Doug Kwan  <dougkwan@google.com>
	2009-12-11  Nick Clifton  <nickc@redhat.com>
	* configure.ac: Remove -Wshadow when setting WARN_CXXFLAGS.
2009-12-14 19:53:05 +00:00
Doug Kwan b0eec2ccda 2009-12-11 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::do_finalize_sections): Fix build breakage
	due to -Wshadow.
	* attributes.cc (Object_attribute::size): Ditto.
	(Attributes_section_data::size): Ditto.
	(Attributes_section_data::Attributes_section_data): Ditto.
	(Output_attributes_section_data::do_write): Ditto.
	* attributes.h (Object_attribute::set_type): Ditto.
	* testsuite/tls_test_main.cc (safe_lock, safe_unlock): Ditto.
2009-12-12 01:26:12 +00:00
Nick Clifton 91d6fa6a03 Add -Wshadow to the gcc command line options used when compiling the binutils.
Fix up all warnings generated by the addition of this switch.
2009-12-11 13:42:17 +00:00
Doug Kwan a0351a698b 2009-12-10 Doug Kwan <dougkwan@google.com>
elfcpp/ChangeLog
	* arm.h: New enums for EABI object attribute tags and values.

gold/ChangeLog
	* arm.cc (attributes.h): New include.
	(Arm_relobj::Arm_relobj): Initialize attributes_section_data_.
	(Arm_relobj::~Arm_relobj): Delete object pointed by
	attributes_section_data_.
	(Arm_relobj::attributes_section_data): New method definition.
	(Arm_relobj::attributes_section_data_): New data member declaration.
	(Arm_dynobj::Arm_dynobj): Initialize attributes_section_data_.
	(Arm_dynobj::~Arm_dynobj): Delete object pointed by
	attributes_section_data_.
	(Arm_dynobj::attributes_section_data): New method definition.
	(Arm_dynobj::attributes_section_data_): New data member declaration.
	(Target_arm::Target_arm): Initialize attributes_section_data_.  Change
	initialization value of may_use_blx_ to false.
   	(Target_arm::using_thumb2, Target_arm::using_thumb_only,
	Target_arm::may_use_arm_nop, Target_arm::may_use_thumb2_nop): Use
	object attributes to compute results instead of hard-coding.
	(Target_arm::do_attribute_arg_type, Target_arm::do_attributes_order,
	Target_arm::get_secondary_compatible_arch,
	Target_arm::set_secondary_compatible_arch
	Target_arm::tag_cpu_arch_combine, Target_arm::aeabi_enum_name,
	Target_arm::tag_cpu_name_value, Target_arm::merge_object_attributes):
	New method declarations.
	(Target_arm::get_aeabi_object_attribute): New method definition.
	(Target_arm::attributes_section_data_): New data member declaration.
	(read_arm_attributes_section): New template definition.
	(Arm_relobj::do_read_symbols): Read attributes section if it exists.
	(Arm_dynobj::do_read_symbols): Ditto.
	(Target_arm::do_finalize_sections): Merge attributes sections from
	input.  Check for BLX use after attributes section merging.
	Fix __exidx_start and __exidx_end visibility.  Create an
	.ARM.attributes section if necessary.
	(Target_arm::get_secondary_compatible_arch,
	Target_arm::set_secondary_compatible_arch,
	Target_arm::tag_cpu_arch_combine, Target_arm::aeabi_enum_name,
	Target_arm::tag_cpu_name_value, Target_arm::merge_object_attributes,
	Target_arm::do_attribute_arg_type, Target_arm::do_attributes_order):
	New method definitions.
2009-12-10 20:55:33 +00:00
Ian Lance Taylor b59befec8e * plugin.cc (Plugin::load): Don't cast from void* to a function
pointer.
2009-12-10 07:44:28 +00:00
Ian Lance Taylor 1276bc895a * dynobj.cc (Sized_dynobj::do_read_symbols): Clear version
information fields.
2009-12-10 01:10:09 +00:00
H.J. Lu 2f2de24889 2009-12-09 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/Makefile.am (two_file_shared_1_pic_2_test_DEPENDENCIES):
	Replace two_file_shared_1.so with two_file_shared_2.so.
	* testsuite/Makefile.in: Regenerated.
2009-12-09 16:26:36 +00:00
Doug Kwan 4f7872716e 2009-12-08 Doug Kwan <dougkwan@google.com>
* Makefile.am (CCFILES): Add attributes.cc and int_encoding.cc.
	(HFILES): Add attributes.h and int_encoding.h.
	* Makefile.in: Regenerate.
	* dwarf_reader.cc (read_unsigned_LEB_128, read_signed_LEB_128): Move
	function definitions to int_encoding.cc
	* dwarf_reader.h (read_unsigned_LEB_128, read_signed_LEB_128): Move
	prototypes to int_encoding.h
	* reduced_debug_output.cc (int_encoding.h): New include.
	(write_unsigned_LEB_128, get_length_as_unsigned_LEB_128): Move
	function definitions to int_encoding.cc
	(insert_into_vector, read_from_pointer): Move template definitions to
	int_encoding.h
	* attributes.cc: New file.
	* attributes.h: New file.
	* int_encoding.cc: New file.
	* int_encoding.h: New file.
2009-12-09 03:02:28 +00:00
Rafael Ávila de Espíndola 20b52f1af3 2009-12-07 Rafael Avila de Espindola <espindola@google.com>
PR gold/11055
	* incremental-dump.cc (dump_incremental_inputs): New.
	(main): Use dump_incremental_inputs.
2009-12-07 21:36:52 +00:00
H.J. Lu 53d7974cd8 2009-12-07 H.J. Lu <hongjiu.lu@intel.com>
PR gold/10893
	* i386.cc (Target_i386::Scan::globa): Use is_func instead of
	checking elfcpp::STT_FUNC.
	(Target_i386::Relocate::relocate): Likewise.
	* x86_64.cc (Target_x86_64::Scan::global): Likewise.

	* symtab.cc (Symbol_table::sized_write_symbol): Turn IFUNC
	symbols from shared libraries into normal FUNC symbols.

	* symtab.h (Symbol): Add is_func and use it.
2009-12-07 17:14:55 +00:00
Doug Kwan 05a352e6a7 2009-12-05 Doug Kwan <dougkwan@google.com>
elfcpp/ChangeLog:

	* arm.h: Define enums for Tag_CPU_arch EABI attribute.

gold/ChangeLog:
	* arm.cc (Target_arm::arm_info): Initialize new fields
	attributes_section and attributes_vendor.
	* i386.cc (Target_i386::i386_info): Same.
	* object.cc (Sized_relobj::do_layout): Skip attribute section.
	* gold/powerpc.cc (Target_powerpc::powerpc_info): Initialize new
	fields attributes_section and attributes_vendor.
 	* sparc.cc (Target_sparc::sparc_info): Same.
	* target.h (Target::attributes_section, Target::attributes_vendor,
	Target::is_attributes_section, Target::attribute_arg_type,
	Target::attributes_order): New method definitions.
	(Target::Target_info::attributes_section,
	Target::Target_info::attributes_vendor): New fields.
	(Target::do_attribute_arg_type, Target::do_attributes_order): New
	virtual method definitions.
	* x86_64.cc (Target_x86_64::x86_64_info): Initialize new fields
	attributes_section and attributes_vendor.
	* testsuite/testfile.cc (Target_test::test_target_info): Same.
2009-12-06 02:49:46 +00:00
Doug Kwan f4e5969cc0 2009-12-05 Doug Kwan <dougkwan@google.com>
* arm.cc: Update comments about interworking and stub generation.
	(Target_arm::Relocate::reloc_is_non_pic): Update list of relocations
	considered as non-PIC.
	(Arm_relocate_functions::base_abs): Fix formatting.
	(Arm_relocate_functions::got_prel): Fix comment.  Change interface
	of function to use GOT entry address instead of offset.
	(Target_arm::Scan::global): Issue an error if a symbol would need a
	PLT does not get one because it is untyped.  Remove code to create
	dynamic symbols for relative branches.
	(Target_arm::Relocate::relocate: Use 0 instead of false since function
	takes unsigned integer instead of boolean.
2009-12-06 02:20:53 +00:00
H.J. Lu 1abce4a658 2009-12-05 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/Makefile.am (constructor_test_LDADD): New. Empty.
	(two_file_test_LDADD): Likewise.
	(common_test_1_LDADD): Likewise.
	(exception_test_LDADD) Likewise.
	(weak_test_LDADD): Likewise.
	(many_sections_test_LDADD): Likewise.
	(initpri1_LDADD): Likewise.
	(script_test_1_LDADD): Likewise.
	(script_test_2_LDADD): Likewise.
	(justsyms_LDADD): Likewise.
	(binary_test_LDADD): Likewise.
	(large_LDADD): Likewise.
	* testsuite/Makefile.in: Regenerated.
2009-12-05 23:22:54 +00:00
H.J. Lu adcf2816e2 2009-12-04 H.J. Lu <hongjiu.lu@intel.com>
* resolve.cc (symbol_to_bits): Treat STB_GNU_UNIQUE as STB_GLOBAL.
	(Symbol_table::override_with_special): Likewise.
	(Symbol_table::add_from_object): Likewise.
2009-12-05 07:28:45 +00:00
Rafael Ávila de Espíndola 28e67f5d75 2009-12-04 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (Incremental_inputs::sized_create_inputs_section_data):
	Don't set the data_offset twice.
2009-12-04 18:18:18 +00:00
Rafael Ávila de Espíndola ae10a10115 pda 2009-12-04 15:47:49 +00:00
Doug Kwan f59f41f3e6 2009-12-03 Doug Kwan <dougkwan@google.com>
* arm.cc: Remove comment about missing .ARM.exidx section symbols.
	(Target_arm::do_finalize_sections): Add parameter for symbol table
	pointer.  Add __exidx_start and __exidx_end symbols as appropriate.
	* i386.cc (Target_i386::do_finalize_sections): Add an additional
	parameter for symbol table pointer.
	* layout.cc (Layout::finalize): Call Target::finalize_sections with
	an additional parameter for a pointer to symbol table.
	* powerpc.cc (Target_powerpc::do_finalize_sections): Add an additional
	parameter for a symbol table pointer.
	* sparc.cc (Target_sparc::do_finalize_sections): Ditto.
	* target.h (Target::finalize_sections, Target::do_finalize_sections):
	Ditto.
	* x86_64.cc (Target_x86_64::do_finalize_sections): Add an additional
	parameter for a symbol table pointer.
2009-12-03 23:13:55 +00:00
Rafael Ávila de Espíndola ca55d848d8 2009-12-03 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (Incremental_inputs_header)
	(Incremental_inputs_header_write, Incremental_inputs_entry)
	(Incremental_inputs_entry_write): Move ...
	* incremental.h (Incremental_inputs_header)
	(Incremental_inputs_header_write, Incremental_inputs_entry)
	(Incremental_inputs_entry_write): here.
2009-12-03 15:43:01 +00:00
Rafael Ávila de Espíndola 3aec4f9c2f 2009-12-02 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (make_sized_incremental_binary): Set the target.
	Error if it is incompatible.
	* output.h (Output_file): Add filename method.
2009-12-03 04:26:01 +00:00
Rafael Ávila de Espíndola 9c0ae74d4f 2009-12-02 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (Incremental_inputs_entry): Remove unused argument
       from the get_* methods.
2009-12-02 18:14:22 +00:00
Rafael Ávila de Espíndola a45500ae37 2009-12-02 Rafael Avila de Espindola <espindola@google.com>
* incremental-dump.cc (main): Check that the offeset of a script is 0.
	* incremental.cc (Incremental_inputs::sized_create_inputs_section_data):
	Write 0 for the data_offset of scripts.
2009-12-02 16:27:15 +00:00
Rafael Ávila de Espíndola 325e6408a8 2009-12-02 Rafael Avila de Espindola <espindola@google.com>
* testsuite/Makefile.am: Add the incremental_test.sh test.
	* testsuite/incremental_test.sh: New.
	* testsuite/incremental_test_1.c: New.
	* testsuite/incremental_test_2.c: New.
2009-12-02 14:51:22 +00:00
Rafael Ávila de Espíndola 954c3e2ed1 2009-12-01 Rafael Avila de Espindola <espindola@google.com>
* incremental-dump.cc (main): Fix typos.
2009-12-01 21:15:06 +00:00
Rafael Ávila de Espíndola f80866232e 2009-11-27 Rafael Avila de Espindola <espindola@google.com>
PR gold/11025
	* incremental-dump.cc (main): Use llu to print 64 bit values.
2009-11-27 16:15:26 +00:00
H.J. Lu 3b0dd6acb3 Add $(THREADSLIB) $(LIBDL) to incremental-dump.
2009-11-26  Per Øyvind Karlsen <peroyvind@mandriva.org>
	    H.J. Lu  <hongjiu.lu@intel.com>

	* Makefile.am (incremental_dump_DEPENDENCIES): Add $(THREADSLIB)
	$(LIBDL).
	(incremental_dump_LDADD): Likewise.
	* Makefile.in: Regenerated.
2009-11-27 02:05:34 +00:00
Doug Kwan a6d1ef576a 2009-11-25 Doug Kwan <dougkwan@google.com>
Revert:

	2009-11-25  Doug Kwan  <dougkwan@google.com>

		* arm.cc (Target_arm::Target_arm): Move method definition
		outside of class definition.  Add code to handle
		--target1-rel, --target1-abs and --target2= options.
		(Target_arm::get_reloc_reloc_type): Change method to be
		non-static and const.
		(Target_arm::target1_is_rel_, Target_arm::target2_reloc_):
		New data member declaration.
		(Target_arm::Scan::local, Target_arm::Scan::global,
		Target_arm::Relocate::relocate,
		Target_arm::Relocatable_size_for_reloc::get_size_for_reloc):
		Adjust call to Target_arm::get_real_reloc_type.
		(Target_arm::get_real_reloc_type): Use command line options
		to determine real types of R_ARM_TARGET1 and R_ARM_TARGET2.
		* options.h (--target1-rel, --target1-abs, --target2): New
		ARM-only options.
2009-11-25 08:08:45 +00:00
Doug Kwan 50aeb7d431 2009-11-25 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Target_arm): Move method definition outside of
	class definition.  Add code to handle --target1-rel, --target1-abs
	and --target2= options.
	(Target_arm::get_reloc_reloc_type): Change method to be non-static
	and const.
	(Target_arm::target1_is_rel_, Target_arm::target2_reloc_): New data
	member declaration.
	(Target_arm::Scan::local, Target_arm::Scan::global,
	Target_arm::Relocate::relocate,
	Target_arm::Relocatable_size_for_reloc::get_size_for_reloc): Adjust
	call to Target_arm::get_real_reloc_type.
	(Target_arm::get_real_reloc_type): Use command line options to
	determine real types of R_ARM_TARGET1 and R_ARM_TARGET2.
	* options.h (--target1-rel, --target1-abs, --target2): New ARM-only
	options.
2009-11-25 04:32:36 +00:00
Doug Kwan 5193828376 2009-11-25 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::Target_arm): Move method definition outside of
	class definition.  Add code to handle --target1-rel, --target1-abs
	and --target2= options.
	(Target_arm::get_reloc_reloc_type): Change method to be non-static
	and const.
	(Target_arm::target1_is_rel_, Target_arm::target2_reloc_): New data
	member declaration.
	(Target_arm::Scan::local, Target_arm::Scan::global,
	Target_arm::Relocate::relocate,
	Target_arm::Relocatable_size_for_reloc::get_size_for_reloc): Adjust
	call to Target_arm::get_real_reloc_type.
	(Target_arm::get_real_reloc_type): Use command line options to
	determine real types of R_ARM_TARGET1 and R_ARM_TARGET2.
	* options.h (--target1-rel, --target1-abs, --target2): New ARM-only
	options.
2009-11-25 04:11:56 +00:00
Rafael Ávila de Espíndola e2b8f3c401 2009-11-24 Rafael Avila de Espindola <espindola@google.com>
* Makefile.am: Build incremental-dump
	* Makefile.in: Regenerate.
	* incremental-dump.cc: New.
	* incremental.cc (Incremental_inputs_header_data,
	Incremental_inputs_entry_data): Move to incremental.h
	* incremental.h: (Incremental_inputs_header_data,
	Incremental_inputs_entry_data): Move from incremental.cc

2009-11-24  Rafael Avila de Espindola  <espindola@google.com>

	* elfcpp_file.h: Include elfcpp.h.
2009-11-25 00:10:05 +00:00
Rafael Ávila de Espíndola bcba9aec3f 2009-11-24 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (Incremental_inputs_header,
	Incremental_inputs_header_write, Incremental_inputs_entry,
	Incremental_inputs_entry_write): Add a typedef with the data type.
2009-11-24 22:50:44 +00:00
Rafael Ávila de Espíndola 7c3afe08c7 2009-11-24 Rafael Avila de Espindola <espindola@google.com>
* incremental.cc (Incremental_inputs_header,
	Incremental_inputs_header_write, Incremental_inputs_entry,
	Incremental_inputs_entry_write): Update comment about which
	type has the filed descriptions.
2009-11-24 20:18:17 +00:00
Doug Kwan d204b6e935 2009-11-15 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::may_use_arm_nop): New method definition.
	(Arm_relocate_functions::arm_branch_common): Change method defintion
	in class definition to a method declaration and update list of formal
	parameters.
	(Arm_relocate_functions::plt32, Arm_relocate_functions::call,
	Arm_relocation_functions::jump24): Adjust call to
	Arm_relocate_functions::arm_branch_common.  Update list of formal
	parameters.
	(Arm_relocate_functions::xpc25): New method definition.
	(Arm_relocate_functions::arm_branch_common): Move method defintion
	out from class definition.  Use stubs for mode-switching and extending
	branch ranges.
	(Target_arm::Relocate::relocate): Handle weakly-undefined symbols
	specially.  Change code to enable use of stubs in ARM branches.
2009-11-16 03:39:11 +00:00
Doug Kwan 43d12afeb9 2009-11-10 Doug Kwan <dougkwan@google.com>
* arm.cc (Arm_relobj::do_relocate_sections): Remove options parameter
	in method declaration.
	(Target_arm::relocate_stub): New method declaration.
	(Target_arm::default_target): Change to return a pointer instead of
	a const reference.
	(Reloc_stub::stub_type_for_reloc): Adjust for the change in
	Target_arm::default_target.
	(Arm_Relobj::do_relocate_sections): Remove options paramater in
	method definition.
	(Target_arm::relocate_section): Adjust view.
	(Target_arm::relocate_stub): New method definition.
2009-11-09 23:16:55 +00:00
Doug Kwan ac33a407ac 2009-11-10 Doug Kwan <dougkwan@google.com>
* i386.cc (Target_i386::do_calls_non_split): Add a cast to avoid
	a format warning.
	* incremental.cc (open_incremental_binary): Initialized local
	variables to avoid warnings.
	* object.cc (make_elf_object): Ditto.
	* x86_64.cc (Target_x86_64::do_calls_non_split): Add a cast to avoid
	a format warning.
2009-11-09 23:07:30 +00:00
H.J. Lu 88ee28e9fa Include "config.h".
009-11-09  H.J. Lu  <hongjiu.lu@intel.com>

	PR gold/10930
	* testsuite/plugin_test.c: Include "config.h".
2009-11-09 16:11:34 +00:00
Doug Kwan 2daedcd627 2009-11-09 Doug Kwan <dougkwan@google.com>
* arm.cc (Target_arm::fake_relnum_for_stubs): New constant.
	(arm_symbol_value): Remove.
	(Arm_relocate_functions::arm_branch_common,
	Arm_relocate_functions::abs8, Arm_relocate_functions::thm_abs5,
	Arm_relocate_functions::abs12, Arm_relocate_functions::abs16,
	Arm_relocate_functions::abs32, Arm_relocate_functions::rel32,
	Arm_relocate_functions::thm_call, Arm_relocate_functions::plt32,
	Arm_relocate_functions::call, Arm_relocate_functions::jump24,
	Arm_relocate_functions::prel31, Arm_relocate_functions::mov_abs_nc,
	Arm_relocate_functions::movt_abs, Arm_relocate_functions::movw_abs_nc,
	Arm_relocate_functions::thm_mobw_abs_nc,
	Arm_relocate_functions::thm_mov_abs,
	Arm_relocate_functions::movw_prel_nc,
	Arm_relocate_functions::thm_movt_abs,
	Arm_relocate_functions::movt_prel,
	Arm_relocate_functions::thm_movw_prel_nc,
	Arm_relocate_functions::thm_movt_prel): Adjust callers of the above.
	(Target_arm::Relocate::relocate): Only decompose address into two
	parts if relocation type uses the thumb-bit and pass the actual
	bit instead of a flag indicating that the thumb-bit is used.  Adjust
	calls to methods in Arm_relocate_functions for this change.
2009-11-09 16:03:45 +00:00
Ian Lance Taylor 3e4afc80cd PR 10925
* reloc.cc: Instantiate
	Sized_relobj::initialize_input_to_output_maps and
	Sized_relobj:free_input_to_output_maps.
2009-11-09 02:02:01 +00:00