Commit Graph

925 Commits

Author SHA1 Message Date
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