Commit graph

1014 commits

Author SHA1 Message Date
Alan Modra
e3deeb9c3a * powerpc.cc (class Track_tls): New.
(class Relocate, class Scan): Inherit Track_tls.
	(Target_powerpc::Scan::local, global): Track tls optimization
	and avoid creating plt entry for __tls_get_addr if all uses
	are optimized away.
	(Target_powerpc::Relocate::relocate): Update to use Track_tls.
2012-12-12 08:09:41 +00:00
Alan Modra
d8f5a2749d * options.h (General_options): Add --toc-sort/--no-toc-sort.
Replace no_toc_optimize with toc_optimize.
	* output.h (Output_section::input_sections): Provide non-const variant.
	* powerpc.cc (Powerpc_relobj::has_small_toc_reloc_,
	set_has_small_toc_reloc, has_small_toc_reloc): New variable and
	accessors.
	(Target_powerpc::Scan::local, global): Call set_has_small_toc_reloc.
	(class Sort_toc_sections): New.
	(Target_powerpc::do_finalize_sections): Sort toc sections.
	(Target_powerpc::Relocate::relocate): Update toc_optimize test.
2012-12-12 03:41:40 +00:00
Roland McGrath
4c8a1de1fe gold/
* testsuite/binary_unittest.cc (read_all): New function.
	(Sized_binary_test): Use it instead of ::read.
	* fileread.cc (do_read): Don't assume pread always reads the whole
	amount in a single call.
2012-12-10 17:38:42 +00:00
Nick Clifton
752937aa0c Add copyright notices 2012-12-10 12:48:03 +00:00
Alan Modra
edc27beb58 * powerpc.cc (Target_selector_powerpc::Target_selector_powerpc):
Set EM_PPC64 or EM_PPC here.
	(Target_selector_powerpc::do_recognize): Delete.
2012-12-10 11:45:18 +00:00
Alan Modra
906b9150c7 * powerpc.cc (Powerpc_relobj::Powerpc_relobj): Init has14_ and
stub_table_.
	(Target_powerpc::Branch_info::make_stub): Don't omit addend.
2012-12-10 11:30:57 +00:00
Roland McGrath
418c15ae72 gold/
* testsuite/binary_unittest.cc (Sized_binary_test):
	Use open_descriptor rather than ::open.
2012-12-07 21:48:32 +00:00
Ian Lance Taylor
db399005e8 * configure.ac (HAVE_ZLIB): Use AM_ZLIB instead of AC_SEARCH_LIBS.
Use $ac_cv_header_zlib_h = yes as the condition in AM_CONDITIONAL.
	* aclocal.m4: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.
	* testsuite/Makefile.in: Regenerate.
2012-12-07 05:03:30 +00:00
Alan Modra
decdd3bc36 * powerpc.cc (Stub_table::do_write): Delete redundant Address
typedef and invalid_address constant.
	(Output_data_glink, Stub_table, Target_powerpc): Explicitly
	instantiate constants.
2012-12-07 04:23:36 +00:00
Alan Modra
aba6bc71dd * options.h (General_options): Add no_toc_optimize.
* powerpc.cc (ok_lo_toc_insn): New function.
	(Target_powerpc::Relocate::relocate): Optimize toc access sequences.
2012-12-07 00:03:18 +00:00
Alan Modra
9e69ed506a * options.h (General_options): Add plt_align, plt_static_chain,
plt_thread_safe.  Update stub_group_size help text.
	* powerpc.cc (Target_powerpc::plt_thread_safe): New access function
	for new plt_thread_safe_ var.
	(use_plt_offset): Correct comments.
	(Target_powerpc::do_relax): Look for thread creation symbols to
	determine default plt_thread_safe value.  Clear plt call stubs
	as well as branch stubs each iteration.
	(add_2_2_11, add_12_12_11, bnectr_p4, cmpldi_2_0, xor_11_11_11): New
	insn constants.
	(l, hi, ha, write_insn): Move earlier.
	(Stub_table): Delete prev_size, add last_plt_size and last_branch_size.
	(Stub_table::clear_stubs): Rename from clear_long_branch_stubs, clear
	plt stubs too.
	(Stub_table::update_size): Adjust.
	(Stub_table::prev_size, set_prev_size): Delete.
	(Stub_table::stub_align): Let --plt-align affect result.
	(Stub_table::plt_call_size): Calculate sizes for various stubs.
	(Stub_table::branch_stub_size): Use last_plt_size in address calc.
	(Stub_table::add_plt_call_stub): Pass iterator to plt_call_size.
	(Stub_table::do_write): Support more stub variants.
2012-12-06 03:13:17 +00:00
Alan Modra
f43ba157ad * powerpc.cc (Powerpc_relobj::do_scan_relocs): Delete.
(Target_powerpc::do_define_standard_symbols): New function.
2012-12-04 03:13:31 +00:00
Alan Modra
dc9589e975 typo fix 2012-12-03 06:38:01 +00:00
Alan Modra
34171bc50f * output.h: Formatting, whitespace. 2012-12-03 05:48:47 +00:00
Alan Modra
ec661b9dca * layout.h (Layout::get_executable_sections): Declare.
* layout.cc (Layout::get_executable_sections): New function.
	* arm.cc (Target_arm::group_sections): Use it.
	(Arm_output_section::group_sections): Delete now redundant test.
	* output.cc (Output_reloc::Output_reloc): Add is_relative.
	param to handle relative relocs.
	* output.h (Output_reloc::Output_reloc <absolute reloc>): Likewise.
	(Output_data_reloc::add_absolute): Adjust.
	(Output_data_reloc::add_relative): New function.
	(Output_data::reset_data_size): New function.
	(Output_relaxed_input_section::set_relobj, set_shndx): New functions.
	(Output_section::set_addralign): New function.
	(Output_section::checkpoint_set_addralign): New function.
	(Output_section::clear_section_offsets_need_adjustment): New function.
	(Output_section::input_sections): Make public.
	* powerpc.cc (class Output_data_brlt_powerpc): New.
	(class Stub_table, class Stub_control): New.
	(Powerpc_relobj::has14_, set_has_14bit_branch, has_14bit_branch,
	stub_table_, set_stub_table, stub_table): New vectors and accessor
	functions.
	(Target_powerpc::do_may_relax, do_relax, push_branch,
	new_stub_table, stub_tables, brlt_section, group_sections,
	add_branch_lookup_table, find_branch_lookup_table,
	write_branch_lookup_table, make_brlt_section): New functions.
	(Target_powerpc::struct Sort_sections, class Branch_info): New.
	(Target_powerpc::brlt_section_, stub_tables_, branch_lookup_table_,
	branch_info_): New vars.
	(Target_powerpc::make_plt_entry, make_local_ifunc_plt_entry): Don't
	make call stubs here.
	(Output_data_glink): Remove all call stub handling from this class.
	(Target_powerpc::Scan::local, global): Save interesting branch
	relocs and relocs for ifunc.  Adjust calls to plt entry functions.
	(Target_powerpc::do_finalize_sections): Only make reg save/restore
	functions on final link.
	(Target_powerpc::Relocate::relocate): Adjust lookup of call stubs.
	Handle long branch destinations too.
	(Target_powerpc::do_dynsym_value, do_plt_address_for_global,
	do_plt_address_for_local): Adjust lookup of plt call stubs.
2012-12-03 05:30:59 +00:00
Alan Modra
627b30b77e * powerpc.c (Target_powerpc::Scan::global): Don't emit relative
relocs against protected symbols when building 32-bit shared libs.
2012-11-30 05:01:20 +00:00
Alan Modra
40b469d719 * powerpc.cc (Target_powerpc::make_plt_section): Add symtab
param.  Call got_section() to make .got.  Update all callers
	and their callers and so on.
2012-11-30 04:50:00 +00:00
Alan Modra
bb66a627d0 * powerpc.cc (Powerpc_relobj::do_scan_relocs): Make STB_LOCAL
_GLOBAL_OFFSET_TABLE_ rather than STB_WEAK.
	(Output_data_got_powerpc::make_header): Update _GLOBAL_OFFSET_TABLE_
	value if it already exists.
2012-11-30 04:47:08 +00:00
H.J. Lu
d2cf1c6cfc Fix TLS to LE optimization for x32
PR gold/14858
	* x86_64.cc (Relocate::tls_ld_to_le): Support x32.
2012-11-20 05:56:06 +00:00
Roland McGrath
edccdf7c8b bfd/
* elf32-arm.c (elf32_arm_nacl_plt0_entry): Use bic rather than bfc
	instruction for data sandboxing.

gold/
	* arm.cc (Output_data_plt_arm_nacl::first_plt_entry): Use bic rather
	than bfc instruction for data sandboxing.
2012-11-15 00:30:11 +00:00
Alan Modra
6febeb7413 Regenerate. 2012-11-08 03:03:26 +00:00
Alan Modra
0a6f1bf2f9 * configure.ac: Apply 2012-09-10 change to config.in here.
* configure: Regenerate.
2012-11-05 12:26:55 +00:00
Alan Modra
26a4e9cbc4 * powerpc.cc (Powerpc_relobj): Delete "Offset" typedef.
(struct Opd_ent): Use "Address" rather than "Offset".
	(Output_data_got_powerpc::got_base_offset): Return Valtype.
	(Target_powerpc::got_section): Make public.
	(Target_powerpc::scan_relocs): Move code setting symbols..
	(Powerpc_relobj::do_scan_relocs): ..to here, new function.
	Create _SDA_BASE_ only when referenced.
2012-11-05 03:29:58 +00:00
Roland McGrath
cc9280133f gold/
* i386.cc (Target_i386::relocate_relocs): Remove extraneous typename
	from last change.
2012-11-02 19:50:36 +00:00
Roland McGrath
62fe925ad4 gold/
* target.h (Sized_target::relocate_relocs): Use Elf_Off
	for offset_in_output_section parameter.
	(Sized_target::relocate_special_relocatable): Likewise.
	* arm.cc (Target_arm::relocate_relocs): Likewise.
	(Target_arm::relocate_special_relocatable): Likewise.
	* i386.cc (Target_i386::relocate_relocs): Likewise.
	* powerpc.cc (Target_powerpc::relocate_relocs): Likewise.
	* sparc.cc (Target_sparc::relocate_relocs): Likewise.
	* target-reloc.h (relocate_relocs): Likewise.
	* testsuite/testfile.cc (Target_test): Likewise.
	* tilegx.cc (Target_tilegx::relocate_relocs): Likewise.
	* x86_64.cc (Target_x86_64::relocate_relocs): Likewise.
2012-11-01 23:27:00 +00:00
Roland McGrath
c2c9fdb45e gold/
* system.h: Move inclusion of <clocale> to after <libintl.h> in
	[ENABLE_NLS] section, and separately at top of [!ENABLE_NLS] section.
2012-11-01 22:44:58 +00:00
Roland McGrath
3e536b9a7a gold/
* descriptors.cc (set_close_on_exec): Add ATTRIBUTE_UNUSED to the
	parameter, which is unused in the [!F_SETFD] case.
2012-11-01 22:43:26 +00:00
Roland McGrath
50ed5eb142 gold/
* dwarf_reader.cc (Sized_elf_reloc_mapper::symbol_section): Cast
	SYMNDX to off_t before comparing it to this->data_size().
	* output.cc (Output_symtab_xindex::endian_do_write): Likewise.
	* incremental.cc (Output_section_incremental_inputs::do_write):
	Cast GLOBAL_SYM_COUNT to off_t before comparing it to SYMTAB_SIZE.
2012-11-01 22:35:06 +00:00
Roland McGrath
2cadc0bfec gold/
* nacl.cc: Include "libiberty.h" for vasprintf declaration.
2012-11-01 18:16:23 +00:00
Nick Clifton
3bfcb6528e bfd:
* elf32-arm.c (elf32_arm_print_private_bfd_data): Recognise and
        display the new ARM hard-float/soft-float ABI flags for EABI_VER5
        (elf32_arm_post_process_headers): Add the hard-float/soft-float
        ABI flag as appropriate for ET_DYN/ET_EXEC in EABI_VER5.

binutils:
        * readelf.c (decode_ARM_machine_flags): Recognise and display the
        new ARM hard-float/soft-float ABI flags for EABI_VER5. Split out
        the code for EABI_VER4 and EABI_VER5 to allow this.

elfcpp:
        * arm.h: New enum for EABI soft- and hard-float flags.

gold:
        * gold.cc (Target_arm::do_adjust_elf_header): Add the
        hard-float/soft-float ABI flag as appropriate for ET_DYN/ET_EXEC
        in EABI_VER5.

include:
        * elf/arm.h (EF_ARM_ABI_FLOAT_SOFT): New define.
        (EF_ARM_ABI_FLOAT_HARD): Likewise.

ld/testsuite:
        * ld-arm/eabi-hard-float.s: New test source.
        * ld-arm/eabi-soft-float.s: New test source.
        * ld-arm/eabi-hard-float.d: New test.
        * ld-arm/eabi-soft-float.d: New test.
        * ld-arm/eabi-soft-float-ABI4.d: New test.
        * ld-arm/eabi-soft-float-r.d: New test.
        * ld-arm/arm-elf.xp: Use the new tests.

binutils:
	PR binutils/14779
	* configure.in: Add checks for wchar.h and mbstate_t.
	* config.in: Regenerate.
	* configure: Regenerate.
	* readelf.c: Conditionally include wchar.h.
	(print_symbol): Conditionally use mbstate_t.
2012-10-30 12:44:58 +00:00
Cary Coutant
c1a8d56e4e gold/
* dwp.cc (usage): Add file and exit status parameters;
	add --help and --version options.
	(print_version): New function.
	(main): Add --help and --version options.
2012-10-29 23:01:51 +00:00
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