Commit Graph

1677 Commits

Author SHA1 Message Date
Cary Coutant 943c8b4393 Fix gold incremental test failures.
Newer version of GCC pass -z relro to the linker, but incremental linking
does not support relro. This patch adds a check to complain about the
conflict, and changes the testsuite to pass -z norelro to the incremental
tests.

2015-03-11  Cary Coutant  <ccoutant@google.com>

gold/
	* options.cc (General_options::finalize): Don't allow -z relro
	with incremental linking.
	* testsuite/Makefile.am (incremental_test): Add -z norelro.
	(incremental_test_2): Likewise.
	(incremental_test_3): Likewise.
	(incremental_test_4): Likewise.
	(incremental_test_5): Likewise.
	(incremental_test_6): Likewise.
	(incremental_copy_test): Likewise.
	(incremental_common_test_1): Likewise.
	(incremental_comdat_test_1): Likewise.
	* testsuite/Makefile.in: Regenerate.
2015-03-11 22:07:51 -07:00
Cary Coutant e16631979e Fix failure in exception_static_test.
Because the __EH_FRAME_BEGIN__ symbol is provided in an empty .eh_frame
section in crtbeginT.o, if crt1.o has a non-empty .eh_frame section,
we place all optimized .eh_frame sections into the output section ahead
of the __EH_FRAME_BEGIN__ symbol, which breaks EH for statically-linked
binaries.

This patch fixes the problem by delaying the attachment of the optimized
.eh_frame sections to the output section until we see the end marker
section (or to the end of pass 1 if we never see an end marker).

gold/
	PR gold/14675
	* ehframe.cc (Eh_frame::add_ehframe_input_section): Change return type;
	return enum indicating whether .eh_frame section is empty, optimizable,
	unrecognized, or an end marker. Adjust explicit instantiations.
	* ehframe.h (Eh_frame::Eh_frame_section_disposition): New enum type.
	(Eh_frame::add_ehframe_input_section): Change return type.
	* gold.cc (queue_middle_tasks): Call Layout::finalize_eh_frame_section.
	* layout.cc (Layout::layout_eh_frame): Don't add optimized sections
	to the .eh_frame output section until we see the end marker.
	(Layout::finalize_eh_frame_section): New.
	* layout.h: (Layout::finalize_eh_frame_section): New.
2015-03-09 10:12:06 -07:00
H.J. Lu beb8418f47 Remove typename on elfcpp::Elf_types<size>::Elf_Addr
GCC 4.2 complains:

binutils/gold/object.cc:3261: error: using ‘typename’ outside of template

This patch removes typename.  It works with both GCC 4.2 and 4.8.

	* output.cc (Relobj::initialize_input_to_output_map<size>):
	Remove typename on elfcpp::Elf_types<size>::Elf_Addr.
2015-03-05 07:52:41 -08:00
Cary Coutant 48c734280a Fix a race condition when setting default target for ARM targets.
gold/
	* parameters.cc (Parameters::set_target_once): Call
	Target::select_as_default_target just once from here...
	(set_parameters_target): ...instead of from here.
2015-03-04 15:17:23 -08:00
Rafael Ávila de Espíndola dbe40a8891 Remove empty class Merge_map.
2015-03-02  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>

	* ehframe.cc (Cie::set_output_offset): Pass in and use a
	Output_section_data instead of a Merge_map.
	(Eh_frame::Eh_frame): Don't initialize merge_map_.
	(Eh_frame::read_cie): Use add_merge_mapping instead of
	Merge_map::add_mapping.
	(Eh_frame::read_fde): Ditto.
	(Eh_frame::set_final_data_size): Use this instead of this->merge_map_.
	(Eh_frame::do_output_offset): Use merge_output_offset istead of
	merge_map_->get_output_offset.
	(Eh_frame::do_is_merge_section_for): Delete.
	* ehframe.h (Fde::add_mapping): Pass in and use a Output_section_data
	instead of a Merge_map.
	(Cie::set_output_offset): Pass in a Output_section_data instead of a
	Merge_map.
	(Eh_frame::do_is_merge_section_for): Delete.
	(Eh_frame::merge_map_): Delete.
	* merge.cc (Object_merge_map::get_or_make_input_merge_map): Pass in
	and use a Output_section_data instead of a Merge_map.
	(Object_merge_map::add_mapping): Ditto.
	(Object_merge_map::get_output_offset): Remove the merge_map argument.
	(Object_merge_map::is_merge_section_for): Pass in and use a
	Output_section_data instead of a Merge_map.
	(Merge_map): Delete.
	(Output_merge_base::do_output_offset): Use merge_output_offset instead
	of merge_map_.get_output_offset.
	(Output_merge_base::do_is_merge_section_for): Delete.
	(Output_merge_data::do_add_input_section): Use
	object->add_merge_mapping instead of add_mapping.
	(Output_merge_string<Char_type>::finalize_merged_data): Ditto.
	* merge.h (Merge_map): Delete forward declaration.
	(Object_merge_map::add_mapping): Pass in and use a Output_section_data
	instead of a Merge_map.
	(Object_merge_map::get_output_offset): Remove the merge_map argument.
	(Object_merge_map::is_merge_section_for): Pass in and use a
	Output_section_data instead of a Merge_map.
	(Input_merge_map::Object_merge_map::merge_map): Replace with
	output_data.
	(Object_merge_map::get_or_make_input_merge_map): Pass in and use a
	Output_section_data instead of a Merge_map.
	(Merge_map): Delete.
	(Output_merge_base::Output_merge_base): Don't initialize merge_map_.
	(Output_merge_base::do_is_merge_section_for): Delete.
	(Output_merge_base::add_mapping): Delete.
	(Output_merge_base::merge_map_): Delete.
	* object.cc (Relobj::initialize_input_to_output_map): New.
	(Relobj::initialize_input_to_output_map): New.
	(Relobj::merge_output_offset): New.
	(Relobj::is_merge_section_for): New.
	(Relobj::initialize_input_to_output_map): Instantiate for 32 and 64
	bits.
	* object.h (Relobj::merge_map): Delete.
	(initialize_input_to_output_map): New.
	(set_merge_map): Delete.
	(add_merge_mapping): New.
	(merge_output_offset): New.
	(is_merge_section_for): New.
	* output.cc (Output_section::Input_section::is_merge_section_for):
	Use object->is_merge_section_for.
	* output.h (Output_section_data::is_merge_section_for): Delete.
	(Output_section_data::do_is_merge_section_for): Delete.
	* reloc.cc (Merged_symbol_value<size>::initialize_input_to_output_map):
	Use object->initialize_input_to_output_map.
	(Merged_symbol_value<size>::value_from_output_section): Use
	object->merge_output_offset.
2015-03-04 15:10:18 -08:00
Cary Coutant 2c7b626cee Fix crash when processing merge section with entsize of 0.
2015-02-04  Peter Collingbourne  <pcc@google.com>
            Cary Coutant  <ccoutant@google.com>

gold/
	* output.cc (Output_section::add_merge_input_section): Do not
	attempt to merge sections with an entsize of 0.
2015-03-02 10:20:21 -08:00
Cary Coutant 5b07cd848d Fix an internal error in do_print_to_mapfile on Arm.
2015-02-02  Khem Raj  <raj.khem@gmail.com>

gold/
	* attributes.h (class Output_attributes_section_data ): Add
	do_print_to_mapfile function.
2015-03-02 10:10:52 -08:00
Alan Modra ec86f43468 PowerPC64 GOLD: complain on misaligned _DS relocs
PR 18010
	* powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always
	complain if value is not a multiple of four.
	(Target_powerpc::Relocate::relocate): Correct handling of
	R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.
2015-02-24 18:21:39 +10:30
H.J. Lu be66981e16 Set GOLD_DEFAULT_SIZE to 32 for x32
* configure.ac (default_size): Set to 32 for x32.
	* configure: Regenerated.
2015-02-22 12:26:27 -08:00
Alan Modra e3ee8ed41b Fix gold error: hidden symbol '...' is not defined locally
Found when applying relocs in .debug that reference removed functions.

	PR 17954
	* powerpc.cc (Global_symbol_visitor_opd::operator()): Set default
	visibility.
2015-02-18 22:51:14 +10:30
Rafael Ávila de Espíndola 3a935c6cf9 Simplify Garbage_collection::add_reference a bit.
this->section_reloc_map_[src_id] is created if it doesn't exist, so there
is no point in doing a find.
2015-02-17 10:49:41 -05:00
Rafael Ávila de Espíndola e0a1e121b3 avoid std::vector copy. 2015-02-17 10:47:02 -05:00
Rafael Ávila de Espíndola 45a4fb1a70 Use std::upper_bound to simplify code a bit.
With std::upper_bound we don't have to check p->input_offset > input_offset.
2015-02-17 10:44:37 -05:00
Mark Wielaard 2d9afefe22 [gold] Recognize DWARF5/GCC5 DW_LANG_Fortran03 and DW_LANG_Fortran08.
DWARFv5 defines and GCC5 may output two new DW_LANG constants for the
Fortran 2003 and Fortran 2008 standards. Recognize both in gold gdb-index
as unsupported.

For consistency also add the other new DWARF5/GCC5 language constants in
the elfcpp::DW_LANG enum to match include/dwarf2.h.

elfcpp/ChangeLog:

	* dwarf.h (enum DW_LANG): Add DW_LANG_C_plus_plus_11,
	DW_LANG_C11, DW_LANG_C_plus_plus_14, DW_LANG_Fortran03 and
	DW_LANG_Fortran08 from ../include/dwarf2.h.

gold/ChangeLog:

	* gdb-index.cc (Gdb_index_info_reader::visit_top_die): Recognize
	DW_LANG_Fortran03 and DW_LANG_Fortran08.
2015-02-17 08:08:24 +01:00
Cary Coutant e9c1bdad26 Fix --dynamic-list so that symbols not in the list are still exported.
In PR 13577, the complaint was that -Bsymbolic was overriding the binding
behavior for symbols listed in the --dynamic-list by setting the DT_SYMBOLIC
tag in the dynamic table. In reading the Gnu ld manual, I decided that
--dynamic-list should be mutually exclusive of -Bsymbolic, and modified
gold so that --dynamic-list would treat symbols listed as preemptible,
and all other symbols as internally bound. I was wrong.

PR 16992 shows that with --dynamic-list (and not -Bsymbolic), a symbol
not listed in the dynamic list is being internally bound within the
shared library, but because it's still in the dynamic symbol table, we
expose it to a COPY relocation, and things go really bad from there.

(I can reproduce the same failure, simply by turning on -Bsymbolic-functions
with the Gnu linker. Even though the symbol is bound internally, it's
still exported to the dynamic symbol table, and is exposed to a COPY
relocation.)

I've backed out part of the fix for PR 13577, and -Bsymbolic (or
-Bsymbolic-functions) can now be used with --dynamic-list, but if the
two are used together, we do not set DT_SYMBOLIC or DF_SYMBOLIC
(this matches Gnu ld behavior). We now treat symbols listed in the
dynamic list as premptible, but we do not automatically treat symbols
not listed there as non-premptible.

gold/
	PR gold/13577
	PR gold/16992
	* layout.cc (Layout::finish_dynamic_section): Don't set DT_SYMBOLIC or
	DF_SYMBOLIC if --dynamic-list option is used.
	* options.cc (General_options::finalize): --dynamic-list is not
	mutually exclusive with -Bsymbolic.
	* symtab.h (Symbol::is_preemptible): Don't exclude dynamic symbols not
	listed in --dynamic-list.
	* testsuite/Makefile.am (dynamic_list_lib2.so): Add
	-Bsymbolic-functions.
	* testsuite/Makefile.in: Regenerate.
2015-02-16 22:15:12 -08:00
Cary Coutant 0ed4b0bf3d Remove redundant include of "output.h".
gold/
	PR gold/17971
	* incremental.cc: Remove redundant include of "output.h".
2015-02-16 20:15:07 -08:00
Jing Yu 1a920511af Add missing TLSLE relocations for gold aarch64 backend.
gold/ChangeLog:
	* aarch64-reloc.def (TLSLE_MOVW_TPREL_G2, TLSLE_MOVW_TPREL_G1,
	TLSLE_MOVW_TPREL_G1_NC, TLSLE_MOVW_TPREL_G0, TLSLE_MOVW_TPREL_G0_NC,):
	New relocation.
	* aarch64.cc (Target_aarch64::Scan::local): Add cases for new
	TLSLE_MOVW_* relocations.
	(Target_aarch64::Scan::global): Likewise.
	(Target_aarch64::Relocate::relocate): Likewise.
	(Target_aarch64::Relocate::relocate_tls): Add cases and handlings
	for new TLSLE_MOVW_* relocations.
2015-02-12 14:51:57 -08:00
Will Newton 07f107f306 gold/arm.cc: Output mapping symbol for PLT code
Output an ARM state mapping symbol at the start of the PLT. With the
current code objdump will fail to disassemble the PLT that gold
creates.

gold/ChangeLog:

2015-02-11  Will Newton  <will.newton@linaro.org>

	PR gold/13321
	* arm.cc (Target_arm::make_plt_section): Create an ARM
	state mapping symbol at the start of the PLT.
2015-02-11 15:18:59 +08:00
H.J. Lu e051a5b512 Replace two_file_shared_2.so with two_file_shared_1.so
There are

two_file_shared_2_pic_1_test_LDADD = two_file_test_2_pic.o two_file_shared_1.so

There should be two_file_shared_1.so, not two_file_shared_2.so in
two_file_shared_2_pic_1_test_DEPENDENCIES.

	* testsuite/Makefile.am (two_file_shared_2_pic_1_test_DEPENDENCIES):
	Replace two_file_shared_2.so with two_file_shared_1.so.
	* testsuite/Makefile.in: Regenerated.
2015-02-09 05:36:02 -08:00
Alan Modra dddcc5b9a8 Gold testsuite make clean
* testsuite/Makefile.am (MOSTLYCLEANFILES): Add libweak_undef_2.a,
	plugin_test_thin.a and defsym_test.
	* testsuite/Makefile.in: Regenerate.
2015-02-09 13:19:53 +10:30
Rafael Ávila de Espíndola b39b8b9d90 Combine loop epilogue into main loop body to reduce duplication. 2015-02-04 17:37:05 -05:00
Cary Coutant b66d1c52ac Add missing ChangeLog entry. 2015-02-04 10:36:25 -08:00
Peter Collingbourne 3c537f7fdb Resolve forwarding symbols in plugins.
2015-02-04  Peter Collingbourne  <pcc@google.com>

	* plugin.cc (Pluginobj::get_symbol_resolution_info): Resolve
	forwarding symbols when computing symbol resolution info for plugins.
2015-02-04 09:48:22 -08:00
Cary Coutant 23081de018 Add missing ChangeLog entries. 2015-02-03 20:18:25 -08:00
Cary Coutant 2cfbf2fece Fix a file descriptor leak in gold.
When an LTO linker plugin claims an external member of a thin archive, gold
does not properly unlock the file and make its file descriptor available for
reuse. This patch fixes the problem by modifying Archive::include_member to
unlock the object file via an RAII class instance, ensuring that it will be
unlocked no matter what path is taken through the function.

gold/
	PR gold/15660
	* archive.cc (Thin_archive_object_unlocker): New class.
	(Archive::include_member): Unlock external members of thin archives.
	* testsuite/Makefile.am (plugin_test_1): Rename .syms files.
	(plugin_test_2): Likewise.
	(plugin_test_3): Likewise.
	(plugin_test_4): Likewise.
	(plugin_test_5): Likewise.
	(plugin_test_6): Likewise.
	(plugin_test_7): Likewise.
	(plugin_test_8): Likewise.
	(plugin_test_9): Likewise.
	(plugin_test_10): Likewise.
	(plugin_test_11): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/plugin_test.c (claim_file_hook): Check for parallel .syms
	file to decide whether to claim file.
	(all_symbols_read_hook): Likewise.
	* testsuite/plugin_test_1.sh: Adjust expected output.
	* testsuite/plugin_test_2.sh: Likewise.
	* testsuite/plugin_test_3.sh: Likewise.
	* testsuite/plugin_test_6.sh: Likewise.
	* testsuite/plugin_test_tls.sh: Likewise.
	* testsuite/plugin_test_11.sh: New testcase.
2015-02-03 20:03:42 -08:00
Cary Coutant 8265ef9502 Add extra debugging output for files and descriptors.
gold/
	* descriptors.cc (Descriptors::open): Set artificially-low limit for
	file descriptors when debugging enabled. Add debug output.
	(Descriptors::release): Add debug output.
	(Descriptors::close_some_descriptor): Likewise.
	(Descriptors::close_all): Likewise.
	* fileread.cc (File_read::lock): Likewise.
	(File_read::unlock): Likewise.
2015-02-03 20:03:41 -08:00
Cary Coutant 24dd580891 Fix bug with previous patch for unresolved TLS symbol.
We need to check that the output is executable before assuming that we
can replace the reference with zero.

2015-02-02  Cary Coutant  <ccoutant@google.com>

gold/
	* x86_64.cc (Target_x86_64::Relocate::relocate_tls): Check for
	executable output file.
2015-02-02 11:46:45 -08:00
Han Shen fa89cc82f5 This patch adds IFUNC support for arm gold backend.
This is a feature required in chromeos arm development work.

Tested:
1) Built passed all-gold on x86_64 machine
2) Tested with basic gold aarch64 ifunc unittests -
   a) global ifunc, statically/non-statically linked
   b) local ifunc, statically/non-statically linked
   c) global/local, other shared library routine mixed,
   statically/non-statically linked
   d) arm/thumb mode ifunc
   e) linking chrome browser passed
2015-01-29 10:15:42 -08:00
Alan Modra 0f81d3f0a7 Correct GOLD PowerPC64 local-dynamic TLS linker optimization
Similar to b86ac8e3

	* powerpc.cc (Target_powerpc::Relocate::relocate): Correct GOT_TLSLD
	and GOT_TLSGD to LE optimization.
2015-01-29 20:34:45 +10:30
Cary Coutant 65d9213705 Allow undefined references to TLS symbols.
When --warn-unresolved-symbols is used, gold tries to create a dynamic relocation
for it, and gives an internal error if the TLS segment has not already been
created. This patch allows the IE-to-LE optimization for an undefined symbol
when building an executable, which suppresses the dynamic relocation, and
relaxes the requirement to have a TLS segment when applying a relocation for
an undefined symbol.

2015-01-28  Cary Coutant  <ccoutant@google.com>

gold/
	* x86_64.cc (Target_x86_64::Scan::global): Allow IE-to-LE optimization
	for undef TLS symbols.
	(Target_x86_64::Relocate::relocate_tls): Likewise.
	(Target_x86_64::Relocate::tls_ie_to_le): Likewise.
2015-01-28 15:39:08 -08:00
Cary Coutant 5485698ae4 2015-01-25 Cary Coutant <ccoutant@google.com>
gold/
	* output.cc (Output_segment::set_section_addresses): Fix calculation
	of size of relro segment.
2015-01-25 17:31:32 -08:00
Alan Modra b01a4b043a [GOLD] Correct powerpc64 ifunc plt entry test
Found when attempting to build an ELFv2 Linux kernel.  We don't
generally need a plt entry for ELFv2 got relocs, only on ifunc, just
like ppc32.

	* powerpc.cc (Target_powerpc::Scan::local <got relocs>): Correct
	condition for need of ifunc plt entry.
	(Target_powerpc::Scan::global <got relocs>): Likewise.
2015-01-22 15:42:45 +10:30
Cary Coutant 3d0064a95d Fix a bug in resolving HI16/LO16 relocation pairs for MIPS.
2015-01-14  Sasa Stankovic  <Sasa.Stankovic@imgtec.com>

gold/
	* mips.cc (reloc_high): Add r_sym.
	(Mips_relocate_functions::relhi16): Add r_sym parameter. Pass r_sym to
	reloc_high constructor.
	(Mips_relocate_functions::relgot16_local): Likewise.
	(Mips_relocate_functions::rello16): Add r_sym parameter. Use r_sym and
	r_type to decide whether LO16 matches HI16.
	(Target_mips::Relocate::relocate): Pass r_sym to calls to relhi16,
	rello16 and relgot16_local.
2015-01-14 10:30:14 -08:00
Cary Coutant a5cd8f05ca Don't align start of segment unless alignment is larger than page size.
This fixes an issue where a page-aligned data section, combined with -z relro,
could lead to a gap between text and data segments larger than a page, and
we would fail to overlap the segments in the file.

gold/
	* layout.cc (Layout::set_segment_offsets): Don't align start of segment
	unless alignment is larger than page size.
2015-01-09 15:58:39 -08:00
H.J. Lu 4fc1b9d43c Handle stack split for x32
X32 uses cmp %fs:NN,%esp, lea NN(%rsp),%r10d, lea NN(%rsp),%r11d,
instead of cmp %fs:NN,%rsp, lea NN(%rsp),%r10, lea NN(%rsp),%r11.
This patch handles it.

	PR gold/17729
	* configure.ac (DEFAULT_TARGET_X86_64): Don't set for x32.
	(DEFAULT_TARGET_X32): Set for x32.
	* x86_64.cc (cmp_insn_32): New.
	(lea_r10_insn_32): Likewise.
	(lea_r11_insn_32): Likewise.
	(cmp_insn_64): Likewise.
	(lea_r10_insn_64): Likewise.
	(lea_r11_insn_64): Likewise.
	(Target_x86_64<size>::do_calls_non_split): Handle x32.
	* testsuite/Makefile.am (check_SCRIPTS): Add split_x32.sh.
	(check_DATA): Add split_x32 files.
	(split_x32_[1234n].o): New targets.
	(split_x32_[124]): New targets.
	(split_x32_[1234r].stdout): New targets.
	* testsuite/split_x32.sh: New file.
	* testsuite/split_x32_1.s: Likewise.
	* testsuite/split_x32_2.s: Likewise.
	* testsuite/split_x32_3.s: Likewise.
	* testsuite/split_x32_4.s: Likewise.
	* testsuite/split_x32_n.s: Likewise.
	* configure: Regenerated.
	* testsuite/Makefile.in: Likewise.
2015-01-06 15:38:25 -08:00
H.J. Lu e749cab89d Handle Initial-Exec to Local-Exec for x32
PR gold/17809
	* x86_64.cc (Target_x86_64<size>::Relocate::tls_ie_to_le): Handle
	x32.
2015-01-06 12:58:54 -08:00
Alan Modra 2f5346cd7c Regenerate Makeile.in file for copyright update 2015-01-02 22:27:27 +10:30
Alan Modra af759df025 Correct printed year in copyright notices for gold. 2015-01-02 08:51:43 +10:30
Alan Modra b90efa5b79 ChangeLog rotatation and copyright year update 2015-01-02 00:53:45 +10:30
Alan Modra f12d1e8a66 ARM: Add support for value 3 of Tag_ABI_VFP_args attribute
Missing from 5c294fee

elfcpp/
	* arm.h: Add enums for Tag_ABI_FP_number_model and Tag_ABI_VFP_args.
gold/
	* arm.cc (Target_arm::do_adjust_elf_header): Provide namespace on
	new enums.
	(Target_arm::merge_object_attributes, ): Likewise.
2014-12-25 22:22:25 +10:30
Terry Guo 5c294fee9a ARM: Add support for value 3 of Tag_ABI_VFP_args attribute
*** bfd/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Handle new
	Tag_ABI_VFP_args value and replace hardcoded values by enum
	values.
	(elf32_arm_post_process_headers): Set e_flags in ELF header
	as hard float only when Tag_ABI_VFP_args is 1, using new enum
	value AEABI_VFP_args_vfp to check that.

*** binutils/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* readelf.c (arm_attr_tag_ABI_VFP_args): Add "compatible".

*** gdb/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* arm-tdep.c (arm_gdbarch_init): Explicitely handle value 3 of
	Tag_ABI_VFP_args. Also replace hardcoded values by enum values
	in the switch handling the different values of Tag_ABI_VFP_args.

*** gold/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* arm.cc (Target_arm::do_adjust_elf_header): Set e_flags in ELF
	header as hard float only when Tag_ABI_VFP_args is 1, using new
	enum value AEABI_VFP_args_vfp to check that.
	(Target_arm::merge_object_attributes): Handle new Tag_ABI_VFP_args
	value and replace hardcoded values by enum values.

*** include/elf/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* arm.h: New AEABI_FP_number_model_* and AEABI_VFP_args_* enum
	values.

*** ld/testsuite/ChangeLog ***

2014-12-25  Thomas Preud'homme  <thomas.preudhomme@arm.com>

	* ld-arm/attr-merge-2a.s: Add Tag_ABI_VFP_args.
	* ld-arm/attr-merge-2b.s: Likewise.
	* ld-arm/attr-merge-2.attr: Likewise.
	* ld-arm/attr-merge-4a.s: Add Tag_ABI_FP_number_model and
	Tag_ABI_VFP_args.
	* ld-arm/attr-merge-4b.s: Likewise.
	* ld-arm/attr-merge-4.attr: Likewise.
	* ld-arm/attr-merge-6a.s: Likewise.
	* ld-arm/attr-merge-6b.s: Likewise.
	* ld-arm/attr-merge-6.attr: Add Tag_ABI_FP_number_model.
2014-12-25 09:55:03 +08:00
Cary Coutant e30880c2ee gold/
* powerpc.cc (Target_powerpc::relocate): Fix overflow check.
2014-12-22 10:13:37 -08:00
H.J. Lu bd040da1db Change SometimesInlineFunction to "return i * i * 3;"
The debug_msg test has 2 implementations of SometimesInlineFunction:

int SometimesInlineFunction(int i) { return i; }
int SometimesInlineFunction(int i) { return i * i; }

and One Definition Rule (ODR) violation detection expects they will be
compiled into functions of different sizes.  Hower, on x86, GCC 4.7 and
newer compile them into functions of the same size and ODR violation
detection test fails.  This patch changes

int SometimesInlineFunction(int i) { return i; }

to

int SometimesInlineFunction(int i) { return i * i * 3; }

so that it will be compiled into a function of larger size.

	PR gold/14608
	* testsuite/debug_msg.cc (SometimesInlineFunction): Changed
	to "return i * i * 3;".
2014-12-20 08:05:45 -08:00
Cary Coutant e02a4046e0 Fix internal error in gold when -Map and --compress-debug-sections are used
together.

gold/
	* mapfile.cc (Mapfile::print_input_section): Print uncompressed sizes.
	(Mapfile::print_output_data): Use current_data_size() to avoid
	assert for sections requiring postprocessing; if address is not valid,
	print 0.
	(Mapfile::print_output_section): Use current_data_size(); print note
	that addresses and sizes are before compression.
2014-12-16 14:58:15 -08:00
H.J. Lu add6016bac Cast current_group_size to unsigned long
* aarch64.cc (AArch64_relocate_functions::maybe_apply_stub):
	Cast current_group_size to unsigned long when reporting error.
2014-12-14 06:59:20 -08:00
Jing Yu 0bf32ea9e6 Give informative error message for stub-group-size
This patch gives current stub-group-size in error message when stub
is too far away.

	* aarch64.cc (Target_aarch64): Add new variable: stub_group_size_.
	(AArch64_relocate_functions::maybe_apply_stub): Add new parameter.
	Update error message.
	(Target_aarch64::do_relax): Use absolute value of option
	stub_group_size. Replace local variable with class member
	stub_group_size_.
2014-12-10 15:39:13 -08:00
Alan Modra fbad6518c1 ChangeLog typo fix 2014-12-04 22:20:53 +10:30
Alan Modra cbcb23fa01 PowerPC gold, fix 32-bit branch address arithmetic
Mixing 64-bit and 32-bit types led to the wrong promotions.  Keep
calculation in same type.  Also fix a case where PLTREL25 reloc addend
should be ignored.

	* Powerpc.cc (Target_powerpc::Branch_info::make_stub): Ignore
	addend of PLTREL24 reloc when not generating a plt stub.  Make
	max_branch_offset an "Address".
	(Stub_table::can_read_stub): Make max_branch_offset an "Address".
	(Target_powerpc::Relocate::relocate): Likewise.
2014-12-04 21:17:54 +10:30
Alan Modra 1611bc4afb powerpc gold, work around pr17670
pr17670 is about an assert triggering on a branch to an undefined
weak symbol, the symbol being undefined due to dropping its comdat
group section.  (Well sort of.  The symbol is actually defined in
an .opd section which isn't part of the group, but the code section
the opd entry points at is dropped.)  So don't assert.
Also, don't make long branch stubs to such symbols, and arrange to
have target-reloc.h code warn when applying relocs that use the sym.

	PR 17670
	* symtab.cc (Symbol::set_undefined): Remove assertion.
	* powerpc.cc (Target_powerpc::symval_for_branch): Don't assert
	on symbols defined in discarded sections, instead return false.
	Rearrange params, update all callers.
	(Target_powerpc::Branch_info::make_stub): Don't make stubs for
	branches to syms in discarded sections.
	(Global_symbol_visitor_opd::operator()): Set discarded opd syms
	undefined and flag as discarded.
	(Target_powerpc::Relocate::relocate): Localize variable.
2014-12-04 09:23:59 +10:30
H.J. Lu 4759c34e12 Compile pie_copyrelocs_test.cc with -fno-exceptions -fno-asynchronous-unwind-tables
PR gold/17675
	* testsuite/Makefile.am (pie_copyrelocs_test_CXXFLAGS): New.
	* testsuite/Makefile.in: Regenerated.
2014-12-03 10:59:46 -08:00