Commit graph

1387 commits

Author SHA1 Message Date
H.J. Lu
b2490a7b4f Add final_layout_sequence.txt to MOSTLYCLEANFILES
* testsuite/Makefile.am (MOSTLYCLEANFILES): Add
	final_layout_sequence.txt.
	* testsuite/Makefile.in: Regenerated.
2012-10-26 00:50:05 +00:00
H.J. Lu
aa54351297 Strip out -Wp,-D_FORTIFY_SOURCE= for gold tests
* testsuite/Makefile.am (COMPILE1): New variable. Renamed from
	COMPILE generated by automake.
	(LINK1): Likewise.
	(CXXCOMPILE1): Likewise.
	(CXXLINK1): Likewise.
	(COMPILE): Strip out -Wp,-D_FORTIFY_SOURCE= from COMPILE1.
	(LINK): Likewise.
	(CXXCOMPILE): Likewise.
	(CXXLINK): Likewise.
	* testsuite/Makefile.in: Regenerated.
2012-10-25 22:50:54 +00:00
H.J. Lu
d361fafb73 Issue a fatal error on bad fwrite return
* dwp.cc (Dwo_file::record_target_info): Issue a fatal error
	on bad fwrite return.
2012-10-25 20:51:32 +00:00
H.J. Lu
598c7410cc Use section_offset_type in remap_str_offset
* dwp.cc (Dwo_file::remap_str_offset): Use section_offset_type
	on val.
2012-10-25 20:50:24 +00:00
Cary Coutant
35c813e224 gold/
* testsuite/Makefile.am (TEST_OBJCOPY): New macro.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/dwp_test.h: New source file.
	* testsuite/dwp_test_1.cc: New source file.
	* testsuite/dwp_test_1.s: New source file.
	* testsuite/dwp_test_1.sh: New source file.
	* testsuite/dwp_test_1b.cc: New source file.
	* testsuite/dwp_test_1b.s: New source file.
	* testsuite/dwp_test_2.cc: New source file.
	* testsuite/dwp_test_2.s: New source file.
	* testsuite/dwp_test_2.sh: New source file.
	* testsuite/dwp_test_main.cc: New source file.
	* testsuite/dwp_test_main.s: New source file.
2012-10-24 02:32:15 +00:00
Cary Coutant
774299092d gold/
* dwp.h: New header file.
	* dwp.cc: New source file.
	* gold.h: Move shared declarations to system.h.
	* system.h: New header file.
	* Makefile.am: Add dwp.
	* Makefile.in: Regenerate.
2012-10-24 02:26:39 +00:00
Cary Coutant
ed5d6712b8 gold/
* dwarf_reader.cc (Dwarf_ranges_table::read_range_list): Call
	Dwarf_info_reader::read_from_pointer.
	(Dwarf_pubnames_table::read_header): Likewise.
	(Dwarf_pubnames_table::next_name): Likewise.
	(Dwarf_die::read_attributes): Likewise.
	(Dwarf_die::skip_attributes): Likewise.
	(Dwarf_info_reader::read_from_pointer): New function template.
	* dwarf_reader.h (Dwarf_ranges_table): Add dwinfo_.
	(Dwarf_pubnames_table): Likewise.
	(Dwarf_info_reader::read_from_pointer): New function template.
	* gdb-index.cc (Gdb_index_info_reader): Adjust call to
	Dwarf_pubnames_table ctor.
2012-10-23 21:41:37 +00:00
Cary Coutant
8787852de1 gold/
* dwarf_reader.cc (Dwarf_info_reader::do_parse): Use stored
	abbrev_shndx.
	* dwarf_reader.h (Dwarf_info_reader::Dwarf_info_reader): Initialize
	abbrev_shndx_.
	(Dwarf_info_reader::set_abbrev_shndx): New method.
	(Dwarf_info_reader::abbrev_shndx_): New data member.
2012-10-23 21:37:26 +00:00
Cary Coutant
9fc236f3fd gold/
* dwarf_reader.cc (make_elf_reloc_mapper): Check size and endianness
	from object, not parameters.
	(Dwarf_info_reader::parse): Likewise.
	* object.h (Relobj::elfsize, Relobj::is_big_endian): New methods.
	(Relobj::do_elfsize, Relobj::do_is_big_endian): New methods.
	(Sized_relobj::do_elfsize, Sized_relobj::do_is_big_endian): New
	methods.
2012-10-23 21:34:58 +00:00
Cary Coutant
effe83657d gold/
* fileread.cc (Input_file::Input_file): New constructor.
	* fileread.h (class Input_file): Add new constructor.
2012-10-23 21:29:20 +00:00
Alan Modra
1698990d32 PR gold/14727
* object.cc (Relobj::is_section_name_included): Also match
	.sdata personality section.
2012-10-18 05:36:02 +00:00
Alan Modra
168a472611 * target-reloc.h (class Default_comdat_behavior): New, package up..
(get_comdat_behaviour): ..this.
	(relocate_section): Add Relocate_comdat_behavior template arg,
	adjust code to suit.
	* arm.cc (Target_arm::relocate_section): Adjust to suit.
	(Target_arm::scan_reloc_section): Likewise.
	* i386.cc (Target_i386::relocate_section): Likewise.
	* sparc.cc (Target_sparc::relocate_section): Likewise.
	* tilegx.cc (Target_tilegx::relocate_section): Likewise.
	* x86_64.cc (Target_x86_64::relocate_section): Likewise.
	* powerpc.cc (class Relocate_comdat_behavior): New.
	(Target_powerpc::relocate_section): Don't zap opd relocs.  Supply
	gold::relocate_section with new template arg.
2012-10-18 04:18:18 +00:00
Alan Modra
acc276d812 * powerpc.cc (Target_powerpc::Scan::local, global): Always emit
dynamic relocs for GOT_TPREL got entries, without symbol if
	resolving locally.
	(Target_powerpc::do_gc_add_reference): Don't add for dynamic objects.
	(Target_powerpc::scan_relocs): Define _GLOBAL_OFFSET_TABLE_ early.
	(Target_powerpc::Relocate:relocate): REL32 reloc may be unaligned.
2012-10-17 14:33:41 +00:00
Alan Modra
e10f987022 PR gold/14726
* gold.cc (queue_middle_tasks): Call gc_mark_symbol on _init and _fini.
2012-10-17 11:58:39 +00:00
Sriraman Tallam
ae034989da 2012-10-16 Sriraman Tallam <tmsriram@google.com>
* layout.cc (Layout::include_section): Keep sections marked
	SHF_EXCLUDE when doing relocatable links.
2012-10-16 16:50:32 +00:00
Alan Modra
f3a0ed298a * powerpc.cc (Target_powerpc::define_save_restore_funcs): New func.
(Target_powerpc::do_finalize_sections): Call it.
	(Output_data_save_res): New class and supporting functions.
	(Target_powerpc::symval_for_branch): Only look up .opd entry for
	normal symbols defined in object files.
2012-10-16 00:23:00 +00:00
Alan Modra
c6de8ed456 * powerpc.cc (Powerpc_relobj::add_gc_mark, process_gc_mark): New.
(struct Opd_ent): Make "discard" a bit field.  Add "gc_mark".
	(Target_powerpc::do_gc_mark_symbol): Delay marking function code
	section if scan_opd_relocs not yet called.
	(Target_powerpc::gc_process_relocs): Call process_gc_mark.
2012-10-12 09:44:11 +00:00
Alan Modra
03e25981b6 * powerpc.cc (Output_data_plt_powerpc::add_entry, add_ifunc_entry,
add_local_ifunc_entry): Revert last change.
	(Target_powerpc::make_plt_entry, make_local_ifunc_plt_entry): Likewise.
2012-10-12 09:39:19 +00:00
Alan Modra
c9824451ad * powerpc.cc (Target_powerpc::do_plt_address_for_local,
do_plt_address_for_global): New functions.
	(Output_data_got_powerpc::do_write): Don't segfault when linking
	statically.
	(Output_data_plt_powerpc::add_entry, add_ifunc_entry,
	add_local_ifunc_entry): Return true on adding entry..
	(Target_powerpc::make_plt_entry): ..use to avoid unnecessary
	glink->add_entry call.  Remove unused symtab param.  Adjust calls.
	(Target_powerpc::make_local_ifunc_plt_entry): Likewise.
	(Target_powerpc::make_iplt_section): Remove symtab param.  Don't
	set up symbols here.
	(Target_powerpc::do_finalize_sections): Instead set up __rela_iplt
	syms here.  Do so even when no .iplt.  Don't segfault when linking
	statically.
	(Output_data_glink::add_entry, find_entry): Rearrange params.  Add
	new variants without reloc param.
	(Glink_sym_ent::Glink_sym_ent): Likewise.
	(Target_powerpc::Scan::reloc_needs_plt_for_ifunc): Accept any
	reloc when refs will resolve to plt call stub.
	(Target_powerpc::Scan::local): Correct ifunc handling.  Allow
	R_PPC_PLTREL24 to resolve locally.
	(Target_powerpc::Scan::global): Correct ifunc handling.
	(Target_powerpc::Relocate::relocate): Correct local sym glink
	lookup.  Don't destroy "value" when we have a plt call stub,
	and when checking plt call validity.
	(Target_powerpc::do_dynsym_value): Simplify.
2012-10-05 08:18:07 +00:00
Alan Modra
19fec8c1d3 * i386.cc (Output_data_plt_i386::address_for_global,
address_for_local): Add plt offset to returned value.  Adjust uses.
	* sparc.cc (Output_data_plt_sparc::address_for_global,
	address_for_local): Likewise.
	* tilegx.cc (Output_data_plt_tilegx::address_for_global,
	address_for_local): Likewise.
	* x86_64.cc (Output_data_plt_x86_64::address_for_global,
	address_for_local): Likewise.
	* target.h (Target::plt_address_for_global, plt_address_for_local):
	Update comment.
	* output.cc (Output_reloc::symbol_value): Don't add plt offset here.
	(Output_data_got::Got_entry::write): Nor here.
	* output.h: Comment fix.
2012-10-05 00:45:54 +00:00
Walter Lee
e867b64722 Adjust the value of _GLOBAL_OFFSET_TABLE_ for got bigger than 0x8000
bytes, so that the 16 bit relocations have a greater chance of
working.
	* tilegx.cc (Target_tilegx::do_finalize_sections): Adjust
	global_offset_table_ value for larget got.
	(Target_tilegx::Relocate::relocate): Handle adjusted got value.
2012-10-03 00:58:03 +00:00
Alan Modra
e5d5f5ed43 * powerpc.cc (Target_powerpc::iplt_): New output section.
(Target_powerpc::iplt_section, make_iplt_section,
	reloc_needs_plt_for_ifunc, make_local_ifunc_plt_entry): New functions.
	(Target_powerpc::make_plt_entry): Handle ifunc syms.
	Target_powerpc::plt_entry_count): Count iplt entries too.
	(Output_data_plt_powerpc::Output_data_plt_powerpc): Don't create
	reloc section in constructor.  New params.
	(Target_powerpc::make_plt_section): Create reloc section here instead.
	(Output_data_plt_powerpc::add_ifunc_entry, add_local_ifunc_entry): New
	functions.
	(Output_data_plt_powerpc::initial_plt_entry_size_, name_): New vars.
	(Output_data_glink::add_entry, find_entry): New functions to
	deal with local syms.
	(Glink_sym_ent): Add support for local syms.
	(Output_data_glink::do_write): Handle ifunc plt entries.
	(Target_powerpc::Scan::get_reference_flags): Handle more relocs.
	(Target_powerpc::Scan::local, global): Handle ifunc syms.
	(Target_powerpc::Relocate::relocate): Likewise.
	(Target_powerpc::do_dynsym_value): Use glink stub, not plt entry.
2012-09-29 10:29:05 +00:00
Alan Modra
ec4dbad32d * object.h (Sized_relobj_file::adjust_local_symbol,
do_adjust_local_symbol): New functions.
	* object.cc (Sized_relobj_file::do_count_local_symbols): Use the above.
	* powerpc.cc (Powerpc_relobj::do_adjust_local_symbol): New function.
	(Powerpc_relobj::scan_opd_relocs): Warn on unexpected opd relocs
	and irregular opd entry spacing.
	(Powerpc_relobj::do_read_relocs): Add opd size checks.
	(Global_symbol_visitor_opd): New functor.
	(Target_powerpc::do_finalize_sections): Omit global symbols defined
	on deleted opd entries.
2012-09-25 00:59:25 +00:00
Walter Lee
5c0b3823c6 Add support for tilegx in gold.
* configure.ac (ENABLE_GOLD): support tilegx*
	* configure: rebuild
elfcpp:
	* tilegx.h: New file.
	* elfcpp.h: add EM_TILEGX.
gold:
	* tilegx.cc: New file.
	* Makefile.am (TARGETSOURCES): Add tilegx.cc
	(ALL_TARGETOBJS): Add tilegx.$(OBJEXT)
	* configure.tgt: Add entries for tilegx*.
	* configure.ac: Likewise.
	* Makefile.in: Rebuild.
	* configure: Likewise.
	* testsuite/icf_safe_test.sh (arch_specific_safe_fold): Handle
	tilegx.
2012-09-15 17:11:28 +00:00
Alan Modra
bfdfa4cd8d * target-reloc.h (scan_relocs): Call scan.local for relocs
against symbols in discarded sections.  Pass is_discarded
	param.
	* arm.cc, * i386.cc, * sparc.cc, * x86_64.cc (Target_*::Scan::local):
	Add is_discarded param.
	* powerpc (Target_powerpc::Scan::local): Likewise.  Use
	is_discarded to flag opd entry as discarded.  Don't emit dyn
	relocs on such entries.
	(Target_powerpc::Scan::global): Similarly detect and handle
	such opd entries.
	(Powerpc_relobj): Replace opd_ent_shndx_ and opd_ent_off_ with
	opd_ent_.  Update all uses.
	(Powerpc_relobj::get_opd_discard, set_opd_discard): New functions.
	(Target_powerpc::relocate_section): Zero out discarded opd
	entry relocs.
2012-09-12 22:43:54 +00:00
Ian Lance Taylor
d77a055577 PR gold/14570
* output.cc: Rename Output_data_got template parameter from size
	to got_size for all functions.  Compile all variants of
	Output_data_got.
	(Output_data_got::Got_entry::write): Correct use of size for
	symbol value.  Use local_is_tls rather than casting to
	Sized_relobj_file.
	* object.h (class Object): Add local_is_tls and do_local_is_tls.
	(class Sized_relobj_file): Add do_local_is_tls.
	* incremental.h (class Sized_relobj_incr): Add do_local_is_tls.
2012-09-12 18:29:18 +00:00
Alan Modra
815a120572 PR gold/14566
* layout.cc (Layout::set_segment_offsets): When using
	common-page-size alignment, ensure we are on a new max-page-size
	page.
	* output.cc (Output_segment::set_section_addresses): Use
	abi_pagesize, not common_pagesize for relro boundary.
	(Output_segment::set_offset): Likewise.
2012-09-10 23:10:41 +00:00
Alan Modra
bd73a62d77 * output.h (Output_data_got::add_global_tls, add_local_tls,
add_local_tls_pair): New functions.
	(Output_data_got::add_local_pair_with_rel): Remove second
	reloc param.  Expand comment.
	(Output_data_got::Got_entry): Rename use_plt_offset_ to
	use_plt_or_tls_offset_, similarly for constructor param.
	(Output_data_got::Got_entry::write): Add got_index param.
	* output.cc (Output_data_got::add_global_tls, add_local_tls,
	add_local_tls_pair): New functions.
	(Output_data_got::Got_entry::write): Handle tls symbols
	with use_plt_or_tls_offset_ set specially.
	(Output_data_got::add_local_pair_with_rel): Only one reloc.
	(Output_data_got::do_write): Replace iterator with index, pass
	index to entry write function.
	* target.h (Target::tls_offset_for_local, tls_offset_for_global,
	do_tls_offset_for_local, do_tls_offset_for_global): New functions.
	* arm.cc (Target_arm::Scan::local): Update add_local_pair_with_rel
	call.
	* i386.cc (Target_i386::Scan::local): Likewise.
	* sparc.cc (Target_sparc::Scan::local): Likewise.
	* x86_64.cc (Target_x86_64::Scan::local): Likewise.
	* powerpc.cc (Target_powerpc::do_tls_offset_for_local,
	do_tls_offset_for_global): New functions.
	(Target_powerpc::Scan::local): Correct TLS relocations and got
	entry values.
	(Target_powerpc::Scan::global): Don't emit unnecessary
	dynamic relocations on TLS GOT entries.
2012-09-10 23:05:54 +00:00
Alan Modra
00716ab174 * config.in: Disable sanity check for kfreebsd. 2012-09-10 22:30:57 +00:00
Sterling Augustine
c891b3f924 2012-09-10 Sterling Augustine <saugustine@google.com>
* gdb-index.cc (Gdb_index::pubnames_read): New parameter.
	(Gdb_index::pubtypes_read): New parameter.
	(Gdb_index_info_reader::read_pubnames_and_pubtypes): Add parameters
	to calls.
	* gdb-index.h (Gdb_index): New fields pubnames_object_ and
	pubtypes_object_.
2012-09-10 19:16:33 +00:00
Alan Modra
e81fea4d17 * target.h (Target::gc_mark_symbol, do_gc_mark_symbol): New functions.
(Sized_target::gc_add_reference, do_gc_add_reference): New functions.
	* gc.h (gc_process_relocs): Call target gc_add_reference.
	* gold.cc (queue_middle_tasks): Use gc_mark_symbol on start sym.
	* symtab.cc (Symbol_table::gc_mark_undef_symbols): Use gc_mark_symbol.
	(Symbol_table::gc_mark_symbol): Call target gc_mark_symbol. Remove
	unnecessary cast.
	* powerpc.cc (Powerpc_relobj::get_opd_ent): Rearrange parameters
	to cater for when we don't need code offset.  Update use.
	(Powerpc_relobj::access_from_map_, opd_valid_): New vars.
	(Powerpc_relobj::access_from_map, add_reference, opd_valid,
	set_opd_valid): New functions.
	(Target_powerpc::do_gc_add_reference): New function.
	(Target_powerpc::gc_process_relocs): Call gc()->add_reference on
	stashed refs.
	(Target_powerpc::do_gc_mark_symbol): New function.
2012-09-09 03:43:51 +00:00
Cary Coutant
d2d60eefc4 2012-09-06 Cary Coutant <ccoutant@google.com>
gold/
	* dwarf_reader.cc (Dwarf_die::read_attributes): Add
	DW_FORM_GNU_addr_index and DW_FORM_GNU_str_index.
	(Dwarf_die::skip_attributes): Likewise.
	* object.cc (Read_symbols_data::~Read_symbols_data): Update comment.
	* testsuite/gdb_index_test.cc (inline_func_1): New function.
	(main): Call it.
	* testsuite/gdb_index_test_comm.sh: Check index for inline function.
2012-09-07 20:14:10 +00:00
H.J. Lu
32ed457365 Add .got.plt output section statement
* testsuite/script_test_3.t: Add .got.plt output section
	statement.
	* testsuite/script_test_4.t: Likewise.
2012-09-06 04:46:18 +00:00
Alan Modra
f4baf0d43d * powerpc.cc (Powerpc_relocate_functions): Upcase enum values,
update all uses and lose "enum" when using type.
2012-09-05 11:27:14 +00:00
Alan Modra
864a1b5697 * configure.ac (FN_PTRS_IN_SO_WITHOUT_PIC): False for powerpc.
* configure: Regenerate.
	* testsuite/Makefile.am (final_layout.stdout): Pass --synthetic to nm.
	(plugin_final_layout.stdout): Likewise.
	(memory_test): Set page sizes to 0x1000.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/discard_locals_test.sh: Add FIXME comment.
	* testsuite/justsyms_exec.c: Disable function test for powerpc64.
	* testsuite/pr14265.t: Add .got output section statement.
	* testsuite/script_test_2.t: Likewise.
	* testsuite/script_test_3.t: Likewise.
	* testsuite/script_test_4.t: Likewise.
	* testsuite/script_test_5.t: Likewise.
	* testsuite/script_test_6.t: Likewise.
	* testsuite/script_test_7.t: Likewise.
	* testsuite/script_test_9.t: Likewise.
2012-09-05 11:01:43 +00:00
Alan Modra
3ea0a085a6 * powerpc.cc (Powerpc_relobj::get_opd_ent): Make const.
(Powerpc_relocate_functions::Status): New typedef.
	(Target_powerpc::Scan::get_reference_flags): Handle more relocs.
	(Target_powerpc::Scan::local): Handle REL64.
	(Target_powerpc::Scan::global): Likewise, and dynamic relocs
	for REL32 and REL64.
	(Target_powerpc::symval_for_branch): New function, extracted from..
	(Target_powerpc::Relocate::relocate): ..here.  Correct plt call
	checks.  Report overflow errors.
2012-09-05 02:54:26 +00:00
Alan Modra
7404fe1b8d * object.h (Sized_relobj_file::emit_relocs): Delete.
(Sized_relobj_file::emit_relocs_reltype): Delete.
	* reloc.cc (Sized_relobj_file::do_relocate_sections): Call target
	relocate_relocs for --emit-relocs.
	(Sized_relobj_file::emit_relocs, emit_relocs_reltype): Delete.
	* output.h: Update comment.
	(Output_segment::first_section): New function.
	(Output_segment::first_section_load_address): Use first_section.
	* output.cc (Output_segment::first_section): New function extracted..
	(Output_segment::first_section_load_address): ..from here.  Delete.
	* target-reloc.h (relocate_for_relocatable): Rename to relocate_relocs.
	* target.h (Sized_target::relocate_for_relocatable): Likewise.
	* arm.cc (Target_arm::relocate_for_relocatable): Likewise, and
	adjust call to target.h function.
	* i386.cc (Target_i386): Likewise.
	* sparc.cc (Target_sparc): Likewise.
	* x86_64.cc (Target_x86_64): Likewise.
	* powerpc.cc (Target_powerpc): Likewise.
	(Target_powerpc::Scan::local, global): Handle R_POWERPC_TLS.  Ensure
	first tls section has section symbol for optimised local dynamic
	output relocs.
	(Target_powerpc::Relocate::relocate): Correct local dynamic value.
	(Target_powerpc::relocate_relocs): Adjust relocs emitted for
	optimised tls code.
	* testsuite/testfile.cc (Target_test::relocate_for_relocatable):
	Rename to relocate_relocs.  Update error message.
2012-09-05 00:34:20 +00:00
Andreas Schwab
957564c930 * powerpc.cc (do_make_elf_object): Allow ET_EXEC files with
--just-symbols.
2012-09-04 08:04:31 +00:00
Alan Modra
dd93cd0ae8 * powerpc.cc (Powerpc_relobj): Add and use Address typedef.
(Powerpc_relobj::toc_base_offset): New stub function.
	(Target_powerpc): Add tp_offset, dtp_offset.  Rename
	got_mod_index_offset to tlsld_got_offset.  Update all refs.
	(Target_powerpc::Relocate::enum skip_tls): New.
	(Target_powerpc::call_tls_get_addr_): New var.
	(Target_powerpc::is_branch_reloc): Move to file scope.
	(Target_powerpc::relocate_tls, optimize_tls_reloc): Delete.
	(Target_powerpc::optimize_tls_gd, optimize_tls_ld, optimize_tls_ie):
	New functions.
	(Target_powerpc::enum Got_type): Delete old values, add new ones.
	(powerpc_info): Correct common_pagesize for ppc64.
	(at_tls_transform, needs_dynamic_reloc, use_plt_offset): New functions.
	(Powerpc_relocate_functions): Add overflow check enums and functions.
	Add non-shift version of rela, rela_ua.  Delete all rel public
	functions.  Delete addr16_lo.  Add addr64, addr64_u, addr32,
	addr32_u, addr24, addr16_u, addr16_hi2, addr16_ha2, addr16_hi3,
	addr16_ha3, addr14 functions.
	(Output_data_got_powerpc::add_constant_pair): New function.
	(Output_data_got_powerpc::got_base_offset): Likewise.
	(Output_data_got_powerpc::do_write): Correct 64-bit got header.
	(instruction constants): Sort, add some more.
	(Output_data_glink::do_write): Add and use Address typedef.  Use
	object->toc_base_offset() stub for 64-bit.
	(Target_powerpc::tlsld_got_offset): Use add_constant_pair.
	(Target_powerpc::Scan::get_reference_flags): Handle more relocs.
	(Target_powerpc::Scan::local, global): Emit relative dynamic reloc
	for R_PPC64_TOC.  Handle more relocs.  Generate got entries for TLS.
	Always treat .opd relocs as against locally defined symbol.
	Correct condition for RELATIVE relocs.
	(Target_powerpc::do_finalize_sections): Test for NULL sections.
	(Target_powerpc::Relocate::relocate): Use plt call stub as value
	for 32-bit syms with a plt entry.  Correct ppc64 toc base
	calculations.  Handle TLS relocs, and more.  Add overflow
	checking and adjust for Powerpc_relocate_functions changes.
	(Target_powerpc::relocate_for_relocatable): Handle zero r_sym.
	Reinstate --emit-relocs code with FIXME.
2012-08-31 01:09:52 +00:00
Alan Modra
a1373b60b3 * layout.cc (Layout::set_segment_offsets): Set p_align to
abi_pagesize, not common_pagesize.
	(Layout::relaxation_loop_body): Similarly use abi_pagesize
	to determine whether file header can go in segment.
2012-08-30 05:57:05 +00:00
Alan Modra
703d02da76 * output.h (Output_reloc::Output_reloc <output section>): Add
is_relative param.  Adjust calls.
	(Output_reloc::add_output_section_relative): New functions.
	* output.cc (Output_reloc::Output_reloc <output section>): Handle
	is_relative.
	(Output_reloc::symbol_value): Handle SECTION_CODE.
2012-08-30 05:54:59 +00:00
Sriraman Tallam
16164a6b00 Patch adds support to allow plugins to map selected subset of sections to unique
segments.


2012-08-24  Sriraman Tallam  <tmsriram@google.com>

	* gold.cc (queue_middle_tasks): Call layout again when unique
	segments for sections is desired.
	* layout.cc (Layout::Layout): Initialize new members.
	(Layout::get_output_section_flags): New function.
	(Layout::choose_output_section): Call get_output_section_flags.
	(Layout::layout): Make output section for mapping to a unique segment.
	(Layout::insert_section_segment_map): New function.
	(Layout::attach_allocated_section_to_segment): Make unique segment for
	output sections marked so.
	(Layout::segment_precedes): Check for unique segments when sorting.
	* layout.h (Layout::Unique_segment_info): New struct.
	(Layout::Section_segment_map): New typedef.
	(Layout::insert_section_segment_map): New function.
	(Layout::get_output_section_flags): New function.
	(Layout::is_unique_segment_for_sections_specified): New function.
	(Layout::set_unique_segment_for_sections_specified): New function.
	(Layout::unique_segment_for_sections_specified_): New member.
	(Layout::section_segment_map_): New member.
	* object.cc (Sized_relobj_file<size, big_endian>::do_layout):
	Rename is_gc_pass_one to is_pass_one.
	Rename is_gc_pass_two to is_pass_two.
	Rename is_gc_or_icf to is_two_pass.
	Check for which pass based on whether symbols data is present.
	Make it two pass when unique segments for sections is desired.
	* output.cc (Output_section::Output_section): Initialize new
	members.
	* output.h (Output_section::is_unique_segment): New function.
	(Output_section::set_is_unique_segment): New function.
	(Output_section::is_unique_segment_): New member.
	(Output_section::extra_segment_flags): New function.
	(Output_section::set_extra_segment_flags): New function.
	(Output_section::extra_segment_flags_): New member.
	(Output_section::segment_alignment): New function.
	(Output_section::set_segment_alignment): New function.
	(Output_section::segment_alignment_): New member.
	(Output_segment::Output_segment): Initialize is_unique_segment_.
	(Output_segment::is_unique_segment): New function.
	(Output_segment::set_is_unique_segment): New function.
	(Output_segment::is_unique_segment_): New member.
	* plugin.cc (allow_unique_segment_for_sections): New function.
	(unique_segment_for_sections): New function.
	(Plugin::load): Add new functions to transfer vector.
	* Makefile.am (plugin_final_layout.readelf.stdout): Add readelf output.
	* Makefile.in: Regenerate.
	* testsuite/plugin_final_layout.sh: Check if unique segment
	functionality works.
	* testsuite/plugin_section_order.c (onload): Check if new interfaces
	are available.
	(allow_unique_segment_for_sections): New global.
	(unique_segment_for_sections): New global.
	(claim_file_hook): Call allow_unique_segment_for_sections.
	(all_symbols_read_hook): Call unique_segment_for_sections.


2012-08-24  Sriraman Tallam  <tmsriram@google.com>

	* plugin-api.h (ld_plugin_allow_unique_segment_for_sections):
	New interface.
	(ld_plugin_unique_segment_for_sections): New interface.
	(LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val.
	(LDPT_UNIQUE_SEGMENT_FOR_SECTIONS): New enum val.
	(tv_allow_unique_segment_for_sections): New member.
	(tv_unique_segment_for_sections): New member.
2012-08-24 18:35:35 +00:00
Cary Coutant
1e2bee4f5f 2012-08-22 Cary Coutant <ccoutant@google.com>
gold/
	* layout.cc (Layout::include_section): Don't assert on GROUP
	sections with --emit-relocs.
2012-08-22 18:26:32 +00:00
Cary Coutant
1d5dfe78f9 2012-08-21 Cary Coutant <ccoutant@google.com>
gold/
	* symtab.cc (Symbol_table::gc_mark_undef_symbols): Don't assert
	if --export-dynamic-symbol names an undef symbol.
2012-08-21 21:41:04 +00:00
Alan Modra
c9269dff67 * powerpc.cc: Formatting and white space.
(Powerpc_relobj): Rename got2_section_ to special_.
	Add opd_ent_shndx_ and opd_ent_off_ vectors.
	(Powerpc_relobj::opd_shndx, init_opd, get_opd_ent, set_opd_ent,
	scan_opd_relocs, do_read_relocs, opd_ent_ndx): New functions.
	(Target_powerpc): Add Address typedef and invalid_address.  Use
	throughout.
	(Target_powerpc::is_branch_reloc): New function.
	(Powerpc_relocate_functions): Add Address typedef, use throughout.
	(Powerpc_relocate_functions:rela, rela_ua): Correct type used
	for dst_mask, value and addend.
	(Powerpc_relobj::do_find_special_sections): Find .opd for 64-bit.
	(ld_2_1, cror_15_15_15, cror_31_31_31): New insn constants.
	(Output_data_glink::do_write): Correct toc base.  Don't try to use
	uint16_t for 24-bit offset.  Use get_output_section_offset and
	check return.
	(Target_powerpc::Scan::local): Handle more relocs.
	(Target_powerpc::do_finalize_sections): Set up DT_PPC64_GLINK.
	(Target_powerpc::Relocate::relocate): Correct toc base calculation.
	Plug in toc restoring insn after plt calls.  Translate branches
	to function descriptor symbols to corresponding entry point.
	(Target_powerpc::relocate_for_relocatable): Check return from
	get_output_section_offset.
	* symtab.h: Comment typo.
2012-08-18 11:12:50 +00:00
Ian Lance Taylor
b1759dce03 * x86_64.cc (Target_x86_64::Scan::global): Fix erroneous call to
unsupported_relocal_local to call unsupported_reloc_global.
2012-08-15 04:03:54 +00:00
Nick Clifton
b9b2ae8bbf PR ld/14265
* script-sections.cc (Sections_element::output_section_name): Add
	keep return parameter.
	(Output_section_element::match_name): Add keep return parameter.
	Return the value of the keep_ member.
	* script-sections.h (class Output_section): Update
	output_section_name prototype.
	* layout.cc (Layout::keep_input_section): New public member
	function.
	(Layout::choose_output_section): Pass keep parameter to
	output_section_name.
	* layout.h (class Layout): Add keep_input_section.
	* object.cc (Sized_relobj_file::do_layout): Check for kept input
	sections.
	* testsuite/Makefile.am: Add a test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/pr14265.c: Source file for the test.
	* testsuite/pr14265.t: Linker script for the test.
	* testsuite/pr14265.sh: Shell script for the test.

	* ld-gc/gc.exp: Add a new test.
	* ld-gc/pr14265.c: Source file for the new test.
	* ld-gc/pr14265.t: Linker script for the new test.
	* ld-gc/pr14265.d: Expected symbol dump.
2012-08-14 08:31:57 +00:00
Alan Modra
921b53228f * target.h (Target::output_section_name): New function.
(Target::do_output_section_name): New function.
	* layout.cc (Layout::choose_output_section): Call the above.
	* powerpc.cc (Target_powerpc::do_output_section_name): New function.
2012-08-14 03:39:03 +00:00
Alan Modra
6ce7895693 elfcpp/
* powerpc.h: Add more relocs.
	(R_PPC_REL16*): Rename to R_POWERPC_REL16*.
gold/
	* powerpc.cc: Update for renamed R_PPC_REL16 relocs.
	(Output_data_got_powerpc::do_write): Don't rely on base class lookup
	for replace_constant call.
	(Output_data_plt_powerpc::do_print_to_mapfile): New function.
	(Output_data_glink::do_print_to_mapfile): New function.
	(Target_powerpc::Scan::local): Ignore R_PPC64_TOCSAVE.
	(Target_powerpc::Relocate::relocate): Likewise.
2012-08-14 02:22:32 +00:00
Alan Modra
d1a8cabd8f * powerpc.cc (Powerpc_relobj::set_got2_shndx): Delete.
(Powerpc_relobj::do_find_special_sections): Don't use set_got2_shndx.
	(Output_data_glink::add_entry,find_entry): Remove shndx param.
	(class Glink_sym_ent): Rename from struct Glink_sym_ent.  Remove
	all references to shndx_.  Handle special case for R_PPC_PLTREL24
	here.
	(class Glink_sym_ent_hash): Rename from struct Glink_sym_ent_hash.
	(Output_data_glink::do_write): Retrieve got2_shdnx from object.
	(Target_powerpc::make_plt_entry): Don't special case R_PPC_PLTREL24
	here.
	(Target_powerpc::Scan::global): Nor on make_plt_entry call.
	(Target_powerpc::Relocate::relocate): Nor on glink->find_entry call.
2012-08-14 01:07:01 +00:00