Commit Graph

507 Commits

Author SHA1 Message Date
Cary Coutant 40d7d93ff4 Fix problem where version script causes predefined hidden symbol to be defined twice.
When creating a predefined hidden symbol like _GLOBAL_OFFSET_TABLE_, gold
was incorrectly letting a version script add a version to the symbol,
resulting in two copies of the symbol, both STB_LOCAL, but one of which
was grouped in the globals part of the symbol table.

gold/
	* symtab.cc (Symbol_table::define_special_symbol): Add is_forced_local
	parameter; if set, do not check version script.
	(Symbol_table::do_define_in_output_data): Pass is_forced_local for
	STB_LOCAL predefined symbols.
	(Symbol_table::do_define_in_output_segment): Likewise.
	(Symbol_table::do_define_in_output_segment): Likewise.
	(Symbol_table::do_define_as_constant): Likewise.
	* symtab.h (Symbol_table::define_special_symbol): Add is_forced_local
	parameter. Adjust all callers.
	* testsuite/Makefile.am (ver_test_8.sh): New test case.
	* testsuite/Makefile.in: Regenerate.
	* ver_test_8.sh: New test script.
2016-12-22 16:00:06 -08:00
Cary Coutant 78d9f182f5 Update testsuite Makefile with missing dependencies.
2016-12-20  Cary Coutant  <ccoutant@gmail.com>

gold/
	* testsuite/Makefile.am: Add missing dependencies on gcctestdir/ld
	or ../ld-new.
	* testsuite/Makefile.in: Regenerate.
2016-12-20 01:03:55 -08:00
Igor Kudrin ee7ef219cb Fix an internal error in the constructor of Target_arm.
gold/
	* arm.cc (Target_arm::Target_arm): Move initialization code ...
	(Target_arm::do_select_as_default_target): ... to here.
	* testsuite/Makefile.am (arm_target_lazy_init): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/arm_target_lazy_init.s: New source file.
	* testsuite/arm_target_lazy_init.t: New linker script.
2016-12-19 15:28:28 -08:00
Cary Coutant 89ede9f53b Fix forced allocation of common (-d) during -r links.
If the .bss section has other data in it besides common allocations,
gold was subtracting the wrong section start address from the symbol
value.

gold/
	PR gold/20976
	* symtab.cc (Symbol_table::sized_write_globals): Use address of
	output section, not input section.
	* testsuite/Makefile.am (pr20976): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/pr20976.c: New source file.
2016-12-19 10:37:34 -08:00
Cary Coutant bfbf34de2f When using linker scripts, place linker-generated sections by the output section name.
2016-12-12  Igor Kudrin  <ikudrin@accesssoftek.com>
	    Cary Coutant  <ccoutant@gmail.com>

gold/
	PR gold/14676
	* script-sections.cc (Output_section_definition::output_section_name):
	For linker-generated sections, compare with output section name.
	* testsuite/Makefile.am (script_test_13): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/script_test_13.c: New source file.
	* testsuite/script_test_13.sh: New script.
	* testsuite/script_test_13.t: New linker script.
2016-12-12 18:52:44 -08:00
Alan Modra ea0ffd5be2 [GOLD] Allow for larger alignment in script_test_15
PowerPC64 aligns .got to a 256 byte boundary.  This tends to bump the
data segment file size.

	PR gold/16711
	* testsuite/script_test_15a.sh: Allows larger p_filesz.
	* testsuite/script_test_15b.sh: Likewise.
	* testsuite/script_test_15c.sh: Likewise.
2016-12-13 09:32:30 +10:30
Alan Modra d32a48b9f2 [GOLD] Adjust testcase for PowerPC64
Since the linker created .TOC. symbol is placed at roughly .got+32k,
.toc input sections must be placed in or after .got if .toc entries
are accessed using 16-bit signed offset relocs.  crt1.o contains such
a relocation.

	PR gold/20717
	* testsuite/pr20717.t: Add .got output section containing .toc.
2016-12-13 09:31:19 +10:30
Igor Kudrin cc90de4973 Fix earlier ChangeLog entry to give Igor credit, add testcases.
2016-12-01  Cary Coutant  <ccoutant@gmail.com>
	    Igor Kudrin  <ikudrin@accesssoftek.com>

	PR gold/20717
	* script-sections.cc (Script_sections): Set *keep to false when
	no match.

2016-12-11  Igor Kudrin  <ikudrin@accesssoftek.com>

	PR gold/20717
	* testsuite/Makefile.am (pr20717): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/pr20717.c: New test source file.
	* testsuite/pr20717.sh: New test script.
	* testsuite/pr20717.t: New test linker script.
2016-12-11 20:31:09 -08:00
Cary Coutant 5d9f66cb84 Fix problems with bss handling in linker scripts.
PR 16711 noted that gold allocates file space for BSS sections when using
a linker script. I've fixed that by rewriting set_section_addresses and
set_section_list_addresses to track the file offset separate from the
current virtual address, so that BSS sections do not move the file offset.
Now, if a series of BSS sections come at the end of a segment, we do not
allocate file space; but if a script forces them into the middle of a
segment, we will still allocate file space (matching Gnu ld behavior).
I've also added a warning when that happens.

That exposed another problem where orphan .bss sections were sometimes
placed in the middle of a segment. For example, if the script mentions
the .got section, but both .data and .bss are orphans, gold would put
both .data and .bss in front of .got. I've fixed that by ensuring that
orphan BSS sections are always placed after all other allocated sections.

It also exposed a problem where the SUBALIGN property is not handled
properly. The ld manual clearly states that it should override input section
alignment, whether greater or less than the given alignment, but gold would
only increase an input section's alignment. Gold would also place the output
section based on its original alignment before the SUBALIGN property took
effect, leading to a misaligned output section (where the input section
was properly aligned in memory, but was not aligned relative to the start
of the section), in violation of the ELF/gABI spec. I've fixed that by
making sure that the SUBALIGN property overrides the internal alignment of
the input sections as well as the external alignment of the output section.
This affected the behavior of script_test_2, which was written to expect
a misaligned section.

The net effect is, I think, improved compatibility with the BFD linker.
There are still cases where orphan placement differs, but the differences
should be rarer and less important. ALIGN and SUBALIGN behavior is closer,
but still not an exact match -- I still found cases where ld would create
a misaligned output section, and where gold will properly align it.

gold/
	PR gold/16711
	* output.cc (Output_section::set_final_data_size): Calculate data size
	based on relative offset rather than file offset.
	(Output_segment::set_section_addresses): Track file offset separately
	from address offset.
	(Output_segment::set_section_list_addresses): Add pfoff parameter.
	Track file offset separately.  Don't move file offset for BSS
	sections.
	* output.h (Output_segment::set_section_list_addresses): Add pfoff
	parameter.
	* script-sections.cc (Orphan_section_placement): Add PLACE_LAST_ALLOC.
	(Orphan_section_placement::Orphan_section_placement): Initialize it.
	(Orphan_section_placement::output_section_init): Track last allocated
	section.
	(Orphan_section_placement::find_place): Place BSS after last allocated
	section.
	(Output_section_element_input::set_section_addresses): Always override
	input section alignment when SUBALIGN is specified.
	(Output_section_definition::set_section_addresses): Override alignment
	of output section when SUBALIGN is specified.

	* testsuite/Makefile.am (script_test_15a, script_test_15b)
	(script_test_15c): New test cases.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/script_test_2.cc: Adjust expected layout.
	* testsuite/script_test_15.c: New source file.
	* testsuite/script_test_15a.sh: New shell script.
	* testsuite/script_test_15a.t: New linker script.
	* testsuite/script_test_15b.sh: New shell script.
	* testsuite/script_test_15b.t: New linker script.
	* testsuite/script_test_15c.sh: New shell script.
	* testsuite/script_test_15c.t: New linker script.
2016-12-11 17:31:25 -08:00
Alan Modra efe4db3f06 Fix gold/testsuite/file_in_many_sections_test.sh file mode
chmod a+x
2016-12-06 07:56:12 +10:30
Cary Coutant 82d93790a8 Fix problem where absolute local symbols are omitted when output has many sections.
2016-12-05  Cary Coutant  <ccoutant@gmail.com>
            Tristan Gingold  <gingold@adacore.com>

gold/
	* object.cc (Sized_relobj_file::do_count_local_symbols): Check
	is_ordinary before using shndx.
	* testsuite/Makefile.am (file_in_many_sections_test.sh): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/file_in_many_sections.c: New source file.
	* testsuite/file_in_many_sections_test.sh: New script.
2016-12-05 10:41:09 -08:00
Gergely Nagy ac423761af Fix PR 17704.
This fix keeps the section with the highest alignment when folding sections with ICF.

	PR gold/17704
	* icf.cc (match_sections): Add new parameter section_addraligns.
	Check section alignment and keep the section with the strictest
	alignment.
	(find_identical_sections): New local variable section_addraligns.
	Store each section's alignment.
	* testsuite/pr17704a_test.s: New file.
	* testsuite/Makefile.am (pr17704a_test): New test.
	* testsuite/Makefile.in: Regenerate.
2016-10-21 11:10:46 -07:00
Vlad Zakharov c5da193232 When building target binaries, ensure that the warning flags selected for the command line match the target compiler.
bfd	* warning.m4 (AC_EGREP_CPP_FOR_BUILD): Introduce macro
	to verify CC_FOR_BUILD compiler.
	(AM_BINUTILS_WARNINGS): Introduce ac_cpp_for_build variable
	and add CC_FOR_BUILD compiler checks.
	* Makefile.in: Regenerate.
	* configure: Likewise.
	* doc/Makefile.in: Likewise.

binutils	* Makefile.am: Replace AM_CLFAGS with AM_CFLAGS_FOR_BUILD
	when building with CC_FOR_BUILD compiler.
	* Makefile.in: Regenerate.
	* configure: Likewise.
	* doc/Makefile.in: Likewise.

gas	* Makefile.in: Regenerate.
	* configure: Likewise.
	* doc/Makefile.in: Likewise.

gold	* Makefile.in: Regenerate.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.

gprof	* Makefile.in: Regenerate.
	* configure: Likewise.

ld	* Makefile.in: Regenerate.
	* configure: Likewise.

opcodes	* Makefile.in: Regenerate.
	* configure: Likewise.
2016-09-26 16:36:08 +01:00
Alan Modra 153679d55f [GOLD] regen testsuite/Makefile.in 2016-09-26 18:04:35 +09:30
Doug Kwan bc99685c73 Handle ARM-specific --target1-abs, --target1-rel and --target2 options 2016-09-02 15:51:59 -07:00
Cary Coutant a4aa1f5f01 Fix extraneous complaints about missing expected TLS relocation (i386).
Build the test objects with the in-tree assembler. Also fix some cascading
error messages caused by not resetting the skip_call_tls_get_addr_ flag
after printing the error.

gold/
	* i386.cc (Target_i386): Reset skip_call_tls_get_addr_ after printing
	error message.
	* testsuite/Makefile.am (pr20216a): Add missing dependencies.
	(pr20308a): Add -Bgcctestdir/ to compile rules.
	* testsuite/Makefile.in: Regenerate.
2016-08-17 10:53:31 -07:00
Cary Coutant f571390111 Fix extraneous complaints about missing expected TLS relocation.
With some versions of gas, the call to tls_get_addr uses a GOTPCREL
relocation instead of a GOTPCRELX relocation. We should allow for that
when skip_call_tls_get_addr_ is true. We should also build the test
objects with the in-tree assembler.

This patch also fixes some cascading error messages caused by not
resetting the skip_call_tls_get_addr_ flag after printing the error.

gold/
	PR gold/20216
	* x86_64.cc (Target_x86_64::Relocate::relocate): Add check for
	R_X86_64_GOTPCREL. Reset skip_call_tls_get_addr_ after printing
	error message.
	* testsuite/Makefile.am (pr20216_gd.o): Add -Bgcctestdir/.
	(pr20216_ld.o): Likewise.
	* testsuite/Makefile.in: Regenerate.
2016-08-10 10:57:42 -07:00
Alan Modra 23fcf59aeb Fix aarch64_relocs.sh file mode 2016-07-27 16:26:42 +09:30
Han Shen 8769bc4bab [Gold, aarch64] Implement some AArch64 relocs.
This CL implemented the following relocs for AArch64 target.
  - R_AARCH64_MOVW_UABS_G*
  - R_AARCH64_MOVW_SABS_G* relocations

gold/ChangeLog

2016-07-26 Igor Kudrin  <ikudrin@accesssoftek.com>

    * aarch64-reloc-property.cc (Rvalue_bit_select_impl): New class.
    (rvalue_bit_select): Use Rvalue_bit_select_impl.
    * aarch64-reloc.def (MOVW_UABS_G0, MOVW_UABS_G0_NC,
    MOVW_UABS_G1,
    MOVW_UABS_G1_NC, MOVW_UABS_G2, MOVW_UABS_G2_NC, MOVW_UABS_G3,
    MOVW_SABS_G0, MOVW_SABS_G1, MOVW_SABS_G2): New relocations.
    * aarch64.cc (Target_aarch64::Scan::local): Add cases for new
    MOVW_UABS_* and MOVW_SABS_* relocations.
    (Target_aarch64::Scan::global): Likewise.
    (Target_aarch64::Relocate::relocate): Add cases and handlings
    for new MOVW_UABS_* and MOVW_SABS_* relocations.
    * testsuite/Makefile.am (aarch64_relocs): New test.
    * testsuite/Makefile.in: Regenerate.
    * testsuite/aarch64_globals.s: New test source file.
    * testsuite/aarch64_relocs.s: Likewise.
    * testsuite/aarch64_relocs.sh: New test script.
2016-07-26 08:55:14 -07:00
Cary Coutant 6e25650792 Fix gold testsuite failure with GCC 6.
With GCC 6 when not using -static-libstdc++, the operator delete(void*)
function is defined in the shared C++ support library, rather than in
the main program. The test script is too aggressive in checking for
this symbol's presence among the exported symbols. This patch removes
the check for that symbol.

gold/
	PR gold/20310
	* testsuite/dynamic_list.sh: Remove check for _ZdlPv.
2016-06-29 23:24:35 -07:00
Cary Coutant 8db8e6948a Update "make clean" in gold/testsuite.
gold/
	* testsuite/Makefile.am (MOSTLYCLEANFILES): Add eh_test_2.
	* testsuite/Makefile.in: Regenerate.
2016-06-29 23:16:24 -07:00
Alan Modra 068e05badb [GOLD] Pass -Wl,-z to gcc, not plain -z
* testsuite/Makefile.am (memory_test, memory_test_2): Pass
	-Wl,-z to gcc, not plain -z.
	* testsuite/Makefile.in: Regenerate.
2016-06-30 12:40:36 +09:30
H.J. Lu b287eca391 gold: Support 386 TLS code sequences without PLT
There are extensions to 386 psABI:

https://groups.google.com/forum/#!topic/ia32-abi/awsRSvJOJfs

to call tls_get_addr via GOT:

call *___tls_get_addr@GOT(%reg)

where EBX register isn't required as GOT base.

Since direct call is 4-byte long and indirect call, is 5-byte long, the
extra one byte must be handled properly.

For general dynamic model, 7-byte lea instruction before call
instruction is replaced by 6-byte one to make room for indirect call.
For local dynamic model, we simply use 5-byte indirect call.

TLS linker optimization is updated to recognize new instruction
patterns.  For local dynamic model to local exec model transition,
we generate a 6-byte lea instruction as nop, instead of a 1-byte nop
plus a 4-byte lea instruction.

	PR gold/20308
	* i386.cc (Target_i386::Relocate::relocate): Allow
	R_386_GOT32X relocation against ___tls_get_addr.
	(Target_i386::Relocate::tls_gd_to_ie): Support indirect
	call to __tls_get_addr.
	(Target_i386::Relocate::tls_gd_to_le): Likewise.
	(Target_i386::Relocate::tls_ld_to_le): Likewise.
	* testsuite/Makefile.am (check_PROGRAMS): Add pr20308a_test,
	pr20308b_test, pr20308c_test, pr20308d_test, pr20308e_test.
	(pr20308a_test_SOURCES): New.
	(pr20308a_test_DEPENDENCIES): Likewise.
	(pr20308a_test_CFLAGS): Likewise.
	(pr20308a_test_LDFLAGS): Likewise.
	(pr20308a_test_LDADD): Likewise.
	(pr20308b_test_SOURCES): Likewise.
	(pr20308b_test_DEPENDENCIES): Likewise.
	(pr20308b_test_CFLAGS): Likewise.
	(pr20308b_test_LDFLAGS): Likewise.
	(pr20308b_test_LDADD): Likewise.
	(pr20308c_test_SOURCES): Likewise.
	(pr20308c_test_DEPENDENCIES): Likewise.
	(pr20308c_test_CFLAGS): Likewise.
	(pr20308c_test_LDFLAGS): Likewise.
	(pr20308c_test_LDADD): Likewise.
	(pr20308d_test_SOURCES): Likewise.
	(pr20308d_test_DEPENDENCIES): Likewise.
	(pr20308d_test_CFLAGS): Likewise.
	(pr20308d_test_LDFLAGS): Likewise.
	(pr20308d_test_LDADD): Likewise.
	(pr20308e_test_SOURCES): Likewise.
	(pr20308e_test_DEPENDENCIES): Likewise.
	(pr20308e_test_CFLAGS): Likewise.
	(pr20308e_test_LDFLAGS): Likewise.
	(pr20308e_test_LDADD): Likewise.
	(pr20308a.so): Likewise.
	(pr20308b.so): Likewise.
	(pr20308_gd.o): Likewise.
	(pr20308_ld.o): Likewise.
	(MOSTLYCLEANFILES): Add pr20308a.so pr20308b.so.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/pr20308_def.c: New file.
	* testsuite/pr20308_gd.S: Likewise.
	* testsuite/pr20308_ld.S: Likewise.
	* testsuite/pr20308_main.c: Likewise.
2016-06-29 08:38:58 -07:00
H.J. Lu ad961eab9a gold: Support x86-64 TLS code sequences without PLT
There are extensions to x86-64 psABI:

https://groups.google.com/forum/#!topic/x86-64-abi/de5_KnLHxtI

to call tls_get_addr via GOT:

call *__tls_get_addr@GOTPCREL(%rip)

Since direct call is 4-byte long and indirect call, is 5-byte long, the
extra one byte must be handled properly.

For general dynamic model, one 0x66 prefix before call instruction is
removed to make room for indirect call.  For local dynamic model, we
simply use 5-byte indirect call.

TLS linker optimization is updated to recognize new instruction
patterns.  For local dynamic model to local exec model transition, we
generate 4 0x66 prefixes, instead of 3, before mov instruction in 64-bit
and generate a 5-byte nop, instead of 4-byte, before mov instruction in
32-bit.

	PR gold/20216
	* configure.ac (DEFAULT_TARGET_X86_64_OR_X32): New
	AM_CONDITIONAL.
	* configure: Regenerated.
	* x86_64.cc (Target_x86_64<size>::Relocate::relocate): Allow
	R_X86_64_GOTPCRELX relocation against __tls_get_addr.
	(Target_x86_64<size>::Relocate::tls_gd_to_ie): Support indirect
	call to __tls_get_addr.
	(Target_x86_64<size>::Relocate::tls_gd_to_le): Likewise.
	(Target_x86_64<size>::Relocate::tls_ld_to_le): Likewise.
	* testsuite/Makefile.am (check_PROGRAMS): Add pr20216a_test,
	pr20216b_test, pr20216c_test, pr20216d_test, pr20216e_test.
	(pr20216a_test_SOURCES): New.
	(pr20216a_test_DEPENDENCIES): Likewise.
	(pr20216a_test_CFLAGS): Likewise.
	(pr20216a_test_LDFLAGS): Likewise.
	(pr20216a_test_LDADD): Likewise.
	(pr20216b_test_SOURCES): Likewise.
	(pr20216b_test_DEPENDENCIES): Likewise.
	(pr20216b_test_CFLAGS): Likewise.
	(pr20216b_test_LDFLAGS): Likewise.
	(pr20216b_test_LDADD): Likewise.
	(pr20216c_test_SOURCES): Likewise.
	(pr20216c_test_DEPENDENCIES): Likewise.
	(pr20216c_test_CFLAGS): Likewise.
	(pr20216c_test_LDFLAGS): Likewise.
	(pr20216c_test_LDADD): Likewise.
	(pr20216d_test_SOURCES): Likewise.
	(pr20216d_test_DEPENDENCIES): Likewise.
	(pr20216d_test_CFLAGS): Likewise.
	(pr20216d_test_LDFLAGS): Likewise.
	(pr20216d_test_LDADD): Likewise.
	(pr20216e_test_SOURCES): Likewise.
	(pr20216e_test_DEPENDENCIES): Likewise.
	(pr20216e_test_CFLAGS): Likewise.
	(pr20216e_test_LDFLAGS): Likewise.
	(pr20216e_test_LDADD): Likewise.
	(pr20216a.so): Likewise.
	(pr20216b.so): Likewise.
	(pr20216_gd.o): Likewise.
	(pr20216_ld.o): Likewise.
	(MOSTLYCLEANFILES): Add pr20216a.so pr20216b.so.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/pr20216_def.c: New file.
	* testsuite/pr20216_gd.S: Likewise.
	* testsuite/pr20216_ld.S: Likewise.
	* testsuite/pr20216_main.c: Likewise.
2016-06-29 08:37:42 -07:00
Alan Modra bebf013204 [GOLD] Modify script_test_12
Changes necessary to make this test pass on powerpc64.

	* script_test_12.t: Delete .plt, specify 64k page size.
	* script_test_12i.t: Likewise.
2016-06-29 08:37:00 +09:30
Alan Modra 1275dd7247 [GOLD] alignment test
PowerPC gcc aligns char arrays to a word which results in the test
failing since it expects a char alignment.  As the test already uses
gcc attributes to assign variables to sections, we may as well use an
attribute to align too.

	* testsuite/plugin_layout_with_alignment.c: Explicitly align all
	variables.
2016-06-29 08:37:00 +09:30
Alan Modra 38ac44ac99 [GOLD] Disable copy_test_protected on powerpc
A target like powerpc64 that is PIC by default doesn't need copy relocs.

	* testsuite/Makefile.am (copy_test_protected): Disable for powerpc.
	* testsuite/Makefile.in: Regenerate.
2016-06-29 08:36:53 +09:30
Cary Coutant 59ae9ffe14 Fix execute permission on gold/testsuite/script_test_14.sh. 2016-06-28 15:51:13 -07:00
Igor Kudrin 5627d875bc Implement the R_AARCH64_NONE relocation.
According to "ELF for the ARM(r) 64-bit Architecture (AArch64)",
this relocation can be used "to prevent removal of sections that
might otherwise appear to be unused."

gold/
	* aarch64-reloc.def (NONE): New relocation.
	* aarch64.cc (Target_aarch64::Scan::local): Handle R_AARCH64_NONE.
	(Target_aarch64::Scan::global): Likewise.
	* testsuite/Makefile.am (aarch64_reloc_none): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/aarch64_reloc_none.s: New test source file.
	* testsuite/aarch64_reloc_none.sh: New test script.
2016-06-28 15:50:29 -07:00
Sriraman Tallam 3a4f096e5f Convert indirect calls to direct when possible.
Please see patch discussion:
https://www.sourceware.org/ml/binutils/2016-05/msg00322.html

2016-06-28  Sriraman Tallam  <tmsriram@google.com>

	* x86_64.cc (Lazy_view): New class.
	(can_convert_mov_to_lea): Templatize function.  Make the function
	check for appropriate relocation types and use the view parameter
	to get section contents.
	(can_convert_callq_to_direct): New function.
	(Target_x86_64<size>::Scan::global): Refactor.
	(Target_x86_64<size>::Relocate::relocate): Refactor. Change any indirect
	call via GOT that can be converted.
	* testsuite/Makefile.am (x86_64_indirect_call_to_direct.sh): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/x86_64_indirect_call_to_direct1.s: New file.
	* testsuite/x86_64_indirect_jump_to_direct1.s: New file.
2016-06-28 15:42:33 -07:00
Igor Kudrin f224a3c590 Implement SORT_BY_INIT_PRIORITY.
2016-06-28  Igor Kudrin  <ikudrin@accesssoftek.com>

gold/
	PR gold/18098
	* script-c.h (Sort_wildcard): Add SORT_WILDCARD_BY_INIT_PRIORITY.
	* script-sections.cc (Input_section_sorter::get_init_priority): New method.
	(Input_section_sorter::operator()): Handle SORT_WILDCARD_BY_INIT_PRIORITY.
	(Output_section_element_input::print): Likewise.
	* script.cc (script_keyword_parsecodes): Add entry SORT_BY_INIT_PRIORITY.
	* yyscript.y (SORT_BY_INIT_PRIORITY): New token.
	(wildcard_section): Handle SORT_BY_INIT_PRIORITY.

	* testsuite/Makefile.am (script_test_14): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/script_test_14.s: New test source file.
	* testsuite/script_test_14.sh: New test script.
	* testsuite/script_test_14.t: New test linker script.
2016-06-28 13:56:05 -07:00
Cary Coutant 3ca25b560a Fix bug with grouping sections.
The fix for PR 15370 did not correctly check all patterns in a group,
but instead threw all unassigned sections into the group. This patch
fixes that.

2016-06-23  Cary Coutant  <ccoutant@gmail.com>
	    Igor Kudrin  <ikudrin@accesssoftek.com>

gold/
	PR gold/15370
	* script-sections.cc
	(Output_section_element_input::set_section_addresses): Keep bin_count
	separate from input_pattern_count.
	* testsuite/script_test_12.t: Add another section .x4.
	* testsuite/script_test_12i.t: Likewise.
	* testsuite/script_test_12a.c: Likewise.
	* testsuite/script_test_12b.c: Likewise.
2016-06-23 09:45:25 -07:00
H.J. Lu 3328c04b10 Add .got.plt to testsuite/script_test_2.t
The .got.plt section must be placed right after the .got section.
Otherwise, GOT offset will be wrong.

	PR gold/20246
	* testsuite/script_test_2.t: Add .got.plt after .got.
2016-06-13 11:15:12 -07:00
Cary Coutant 6eeb0170bb Don't allow COPY relocations for protected symbols.
gold/
	PR gold/19823
	* copy-relocs.cc (Copy_relocs::make_copy_reloc): Add object
	parameter; check for protected symbol.
	* copy-relocs.h (Copy_relocs::make_copy_reloc): Add object parameter.
	* mips.cc (Mips_copy_relocs): Adjust call to make_copy_reloc.
	* symtab.cc (Symbol::init_fields): Initialize is_protected_.
	(Symbol_table::add_from_dynobj): Mark protected symbols.
	* symtab.h (Symbol::is_protected): New method.
	(Symbol::set_is_protected): New method.
	(Symbol::is_protected_): New data member.

	* testsuite/Makefile.am (copy_test_protected): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/copy_test.cc (main): Add legal reference to protected
	symbol.
	* testsuite/copy_test_v1.cc (main): Likewise.
	* testsuite/copy_test_2.cc (ip): Add protected symbol.
	* testsuite/copy_test_protected.cc: New test source file.
	* testsuite/copy_test_protected.sh: New test script.
2016-05-19 15:05:03 -07:00
H.J. Lu 6fd8e7c249 Regenerate Makefile.in/aclocal.m4 automake 1.11.6
bfd/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.
	* doc/Makefile.in: Likewise.

binutils/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.
	* doc/Makefile.in: Likewise.

gas/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.
	* doc/Makefile.in: Likewise.

gold/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.
	* testsuite/Makefile.in: Likewise.

gprof/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.

ld/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.

opcodes/

	* Makefile.in: Regenerated with automake 1.11.6.
	* aclocal.m4: Likewise.
2016-04-15 16:20:55 -07:00
Cary Coutant 648c5cbbf3 Fix problem where gold fails to issue an undefined symbol error during LTO.
During LTO, if (1) an IR file contains a COMDAT group that is kept,
(2) a later non-claimed file contains the same group, which we discard,
and (3) the plugin fails to provide a definition of the symbols in that
COMDAT group, gold silently resolves any references to those symbols
to 0.

This patch adds a check for a placeholder symbol when deciding
whether to issue an undefined symbol error. It also adds an extra
note after any undefined placeholder symbol error that explains
that a definition was expected from the plugin.

gold/
	PR gold/19842
	* errors.cc (Errors::undefined_symbol): Add info message when
	symbol should have been provided by a plugin.
	* target-reloc.h (issue_undefined_symbol_error): Check for
	placeholder symbols defined in discarded sections.
	* testsuite/Makefile.am (plugin_test_9b): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/plugin_test_9b_elf.cc: New test source file.
	* testsuite/plugin_test_9b_ir.cc: New test source file.
2016-03-21 21:42:15 -07:00
Cary Coutant 698400bfb9 Fix problem where gold cannot build .eh_frame_hdr from ld -r output.
When running ld -r on objects that have comdat groups, when gold
deduplicates a function in a comdat group, it removes the relocations
from the EH information that referred to the dropped copy of the function.
When running a final link using the result of the -r link, the missing
relocation cause it to fail to recognize the FDE for the dropped
function.

This patch improves gold's FDE scanning to take into account the
possibility that an FDE corresponds to a dropped function, and drops
that FDE as well.

Gnu ld, on the other hand, leaves the relocations in the ld -r output,
but makes them R_NONE with an r_sym field of 0. This was sufficient to
let both linkers recognize the FDE properly.

With this fix, if you do an ld -r with gold, then do the final link with
Gnu ld, the .eh_frame_hdr section will not be generated. To make it work
with Gnu ld, we would have to leave the R_NONE relocations in, but I
think it's better to drop the relocations entirely. I'd hope that if
you're doing a -r link with gold, you'll also do the final link with
gold.

gold/
	PR gold/19002
	* ehframe.cc (Eh_frame::read_fde): Check for dropped functions.
	* testsuite/Makefile.am (eh_test_2): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/eh_test_2.sh: New test script.
	* testsuite/eh_test_a.cc (bar): Make it comdat.
	* testsuite/eh_test_b.cc (bar): Add a duplicate copy.
2016-03-20 19:17:14 -07:00
H.J. Lu fd91f0024c Workaround a C++ bug in GCC 4.2 in gold test
G++ in GCC 4.2 silently ignores

---
__attribute__ ((section(".rodata.v1_a2")))
const short rodata_item1 = 101;
---

which leads to plugin_layout_with_alignment test failure with

Expected 12 sections, found 8 sections

since 4 .rodata sections are missing.  As a workaround, this patch
changes plugin_layout_with_alignment test from C++ to C.

	* testsuite/plugin_layout_with_alignment.cc: Renamed to ..
	* testsuite/plugin_layout_with_alignment.c: This.
	* testsuite/Makefile.am (plugin_layout_with_alignment.o): Updated.
	(plugin_layout_with_alignment): Likewise.
	* testsuite/Makefile.in: Regenerated.
2016-03-09 08:32:46 -08:00
Cary Coutant 7ff6eb49a2 Remove checks for constructors that might have been eliminated by GCC.
GCC 6 does not generate constructors for two of gold's test cases.
This patch simply removes the checks for them.

gold/
	PR 19751
	* testsuite/Makefile.am (retain_symbols_file_test): Remove check
	for constructor.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/dynamic_list.sh: Likewise.
	* testsuite/retain_symbols_file_test.sh: Likewise.
2016-03-08 20:36:31 -08:00
Cary Coutant 0863441e8a Fix Makefile so make clean removes overlooked files.
gold/
	* testsuite/Makefile.am: Add to MOSTLYCLEANFILES.
	* testsuite/Makefile.in: Regenerate.
2016-03-08 19:52:28 -08:00
H.J. Lu 3f1f41f55f Add missing ChangeLog entries for commit 82838
Fix gold/testsuite/plugin_layout_with_alignment.sh permission.
2016-03-04 08:28:12 -08:00
Cary Coutant 82838bd626 Add new plugin hooks to support querying section alignment and size.
include/
2016-03-03  Than McIntosh <thanm@google.com>

	* plugin-api.h: Add new hooks to the plugin transfer vector to
	to support querying section alignment and section size.
	(ld_plugin_get_input_section_alignment): New hook.
	(ld_plugin_get_input_section_size): New hook.
	(ld_plugin_tag): Add LDPT_GET_INPUT_SECTION_ALIGNMENT
	and LDPT_GET_INPUT_SECTION_SIZE.
	(ld_plugin_tv): Add tv_get_input_section_alignment and
	tv_get_input_section_size.

gold/
2016-03-03  Than McIntosh  <thanm@google.com>

	* plugin.cc (Plugin::load): Include hooks for get_input_section_size
	and get_input_section_alignment in transfer vector.
	(get_input_section_alignment): New function.
	(get_input_section_size): New function.
	* testsuite/Makefile.am: Add plugin_layout_with_alignment.sh test.
	* testsuite/Makefile.in: [Regenerate.]
	* testsuite/plugin_section_alignment.cc: New test file.
	* testsuite/plugin_layout_with_alignment.cc: New test file.
	* testsuite/plugin_layout_with_alignment.sh: New test file.
2016-03-03 12:09:06 -08:00
Evgenii Stepanov 95ecdfbfcb get_symbols() plugin API tweak to support --start-lib/--end-lib.
Let the plugin know that a file is not being included in the link by
returning LDPS_NO_SYMS from get_symbols().

include/
	* plugin-api.h (enum ld_plugin_tag): Add LDPT_GET_SYMBOLS_V3.

gold/
	* plugin.h (Pluginobj::get_symbol_resolution_info): Add version
	parameter.
	* plugin.cc (get_symbols_v3): New function.
	(Plugin::load): Add LDPT_GET_SYMBOLS_V3.
	(Pluginobj::get_symbol_resolution_info): Return LDPS_NO_SYMS when using
	new version.
2016-03-03 11:42:13 -08:00
H.J. Lu 1cd17042aa Pass -mrelax-relocations=yes to $(TEST_AS)
x86_64_mov_to_lea5.o and x86_64_mov_to_lea6.o must be assembled with
-mrelax-relocations=yes since when assembler is configured with
--disable-x86-relax-relocations, R_X86_64_GOTPCRELX relocation won't
be generated.  This linker optimization requires R_X86_64_GOTPCRELX
relocation.

This patch also removed the duplicated x86_64_overflow_pc32.o target.

	* testsuite/Makefile.am (x86_64_mov_to_lea5.o): Pass
	-mrelax-relocations=yes to $(TEST_AS).
	(x86_64_mov_to_lea6.o): Likewise.
	(x86_64_overflow_pc32.o): Remove duplicated target.
	* testsuite/Makefile.in: Regenerated.
2016-02-16 06:00:03 -08:00
Marcin Kościelnicki 2b63aca39c gold: Add s390 -fsplit-stack support.
gold/ChangeLog:

	* s390.cc (Target_s390::match_view_u): New helper method.
	(Target_s390::do_is_call_to_non_split): New method.
	(Target_s390::ss_code_st_r14): New const.
	(Target_s390::ss_code_l_r14): New const.
	(Target_s390::ss_code_bras_8): New const.
	(Target_s390::ss_code_l_basr): New const.
	(Target_s390::ss_code_a_basr): New const.
	(Target_s390::ss_code_ear): New const.
	(Target_s390::ss_code_c): New const.
	(Target_s390::ss_code_larl): New const.
	(Target_s390::ss_code_brasl): New const.
	(Target_s390::ss_code_jg): New const.
	(Target_s390::ss_code_jgl): New const.
	(Target_s390::ss_match_mcount): New helper method.
	(Target_s390::ss_match_l): New helper method.
	(Target_s390::ss_match_ahi): New helper method.
	(Target_s390::ss_match_alfi): New helper method.
	(Target_s390::ss_match_cr): New helper method.
	(Target_s390::do_calls_non_split): New method.
	* testsuite/Makefile.am: Added new tests.
	* testsuite/split_s390.sh: New test.
	* testsuite/split_s390_1_a1.s: New test.
	* testsuite/split_s390_1_a2.s: New test.
	* testsuite/split_s390_1_n1.s: New test.
	* testsuite/split_s390_1_n2.s: New test.
	* testsuite/split_s390_1_z1.s: New test.
	* testsuite/split_s390_1_z2.s: New test.
	* testsuite/split_s390_1_z3.s: New test.
	* testsuite/split_s390_1_z4.s: New test.
	* testsuite/split_s390_2_ns.s: New test.
	* testsuite/split_s390_2_s.s: New test.
	* testsuite/split_s390x_1_a1.s: New test.
	* testsuite/split_s390x_1_a2.s: New test.
	* testsuite/split_s390x_1_n1.s: New test.
	* testsuite/split_s390x_1_n2.s: New test.
	* testsuite/split_s390x_1_z1.s: New test.
	* testsuite/split_s390x_1_z2.s: New test.
	* testsuite/split_s390x_1_z3.s: New test.
	* testsuite/split_s390x_1_z4.s: New test.
	* testsuite/split_s390x_2_ns.s: New test.
	* testsuite/split_s390x_2_s.s: New test.
2016-02-15 11:59:25 +01:00
Cary Coutant 19ef3f4d2e Fix overflow checking for 32-bit pc-relative relocations on x32.
The problem here is that x32 is really using 64-bit addressing,
while pretending to be 32-bit. Even though the object file format
is 32-bit, we need to do the overflow checking with 64-bit
arithmetic (because that's what the hardware will be using).
This patch overrides the pcrela32_check functions in reloc.h
with target-specific versions that do 64-bit checking.

I've also updated the test case to use -Tdata instead of adding
a huge .space directive, to reduce the size of the .o files.

gold/
	PR gold/19567
	* reloc.h (Relocate_functions::Overflow_check): Add comments.
	* x86_64.cc (X86_64_relocate_functions): New class.
	(Target_x86_64::Relocate::relocate): Use the new class.
	* testsuite/Makefile.am (x86_64_overflow_pc32): Add -Tdata option.
	(x32_overflow_pc32): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/x32_overflow_pc32.sh: New script.
	* testsuite/x86_64_overflow_pc32.s: Remove .space directive.
2016-02-06 14:47:05 -08:00
Cary Coutant c34c98ed62 Add some relocation overflow checks for x86_64.
2016-02-05  Cary Coutant  <ccoutant@gmail.com>
	    Andrew Senkevich  <andrew.senkevich@intel.com>

gold/
	PR gold/18695
	* x86_64.cc (Target_x86_64::Relocate::relocate): Add overflow
	checking for R_X86_64_32, R_X86_64_32S, R_X86_64_PC32, and
	R_X86_64_PLT32.
	* testsuite/Makefile.am (x86_64_overflow_pc32): New test.
	* testsuite/x86_64_overflow_pc32.sh: New test script.
	* testsuite/x86_64_overflow_pc32.s: New source file.
2016-02-05 09:19:47 -08:00
Cary Coutant 44803b5d87 Overhaul relocation framework to support overflow checking.
gold/
	PR gold/18695
	* reloc.h (Relocate_functions::Address): New typedef.
	(Relocate_functions::Addendtype): New typedef.
	(Relocate_functions::Overflow_check): New enum type.
	(Relocate_functions::Reloc_status): New enum type.
	(Relocate_functions::check_overflow): New function template.
	(Relocate_functions::rel): Add check parameter; check for overflow.
	(Relocate_functions::rel_unaligned): Likewise.
	(Relocate_functions::rela): Likewise.
	(Relocate_functions::pcrel): Likewise.
	(Relocate_functions::pcrel_unaligned): Likewise.
	(Relocate_functions::pcrela): Likewise.
	(Relocate_functions::rel8): Adjust parameter types.
	(Relocate_functions::rela8): Likewise.
	(Relocate_functions::pcrel8): Likewise.
	(Relocate_functions::pcrela8): Likewise.
	(Relocate_functions::rel16): Likewise.
	(Relocate_functions::rela168): Likewise.
	(Relocate_functions::pcrel16): Likewise.
	(Relocate_functions::pcrela16): Likewise.
	(Relocate_functions::rel32): Likewise.
	(Relocate_functions::rel32_unaligned): Likewise.
	(Relocate_functions::rela32): Likewise.
	(Relocate_functions::pcrel32): Likewise.
	(Relocate_functions::pcrel32_unaligned): Likewise.
	(Relocate_functions::pcrela32): Likewise.
	(Relocate_functions::rel8_check): New function.
	(Relocate_functions::rela8_check): New function.
	(Relocate_functions::pcrel8_check): New function.
	(Relocate_functions::pcrela8_check): New function.
	(Relocate_functions::rel16_check): New function.
	(Relocate_functions::rela168_check): New function.
	(Relocate_functions::pcrel16_check): New function.
	(Relocate_functions::pcrela16_check): New function.
	(Relocate_functions::rel32_check): New function.
	(Relocate_functions::rel32_unaligned_check): New function.
	(Relocate_functions::rela32_check): New function.
	(Relocate_functions::pcrel32_check): New function.
	(Relocate_functions::pcrel32_unaligned_check): New function.
	(Relocate_functions::pcrela32_check): New function.
	(Bits::has_unsigned_overflow32): New function.
	(Bits::has_unsigned_overflow): New function.
	* testsuite/Makefile.am (overflow_unittest): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/overflow_unittest.cc: New source file.
2016-02-05 08:28:04 -08:00
Cary Coutant 4d625b70fc Refactor gold to enable support for MIPS-64 relocation format.
For MIPS-64, the r_info field in the relocation format is
replaced by several individual fields, including r_sym and
r_type. To enable support for this format, I've refactored
target-independent code to remove almost all uses of the r_info
field. (I've left alone a couple of routines used only for
incremental linking, which I can update if/when the MIPS target
adds support for incremental linking.)

For routines that are already templated on a Classify_reloc class
(namely, gc_process_relocs, relocate_section, and
relocate_relocs), I've extended the Classify_reloc interface to
include sh_type (which no longer needs to be a separate template
parameter) as well as get_r_sym() and get_r_type() methods for
extracting the r_sym and r_type fields. For
scan_relocatable_relocs, I've extended the
Default_scan_relocatable_relocs class by converting it to a class
template with Classify_reloc as a template parameter. For the
remaining routines that need to access r_sym, I've added a
virtual Target::get_r_sym() method with an override for the MIPS
target.

In elfcpp, I've added Mips64_rel, etc., accessor classes and
corresponding internal data structures. The MIPS target uses
these new classes within its own Mips_classify_reloc class.
The Mips64_ accessor classes also expose the r_ssym, r_type2,
and r_type3 fields from the relocation.

These changes should be functionally the same for all but the
MIPS target.

elfcpp/
	* elfcpp.h (Mips64_rel, Mips64_rel_write): New classes.
	(Mips64_rela, Mips64_rela_write): New classes.
	* elfcpp_internal.h (Mips64_rel_data, Mips64_rela_data): New structs.

gold/
	* gc.h (get_embedded_addend_size): Remove sh_type parameter.
	(gc_process_relocs): Remove sh_type template parameter.
	Use Classify_reloc to access r_sym, r_type, and r_addend fields.
	* object.h (Sized_relobj_file::split_stack_adjust): Add target
	parameter.
	(Sized_relobj_file::split_stack_adjust_reltype): Likewise.
	* reloc-types.h (Reloc_types::copy_reloc_addend): (SHT_REL and SHT_RELA
	specializations) Remove.
	* reloc.cc (Emit_relocs_strategy): Rename and move to target-reloc.h.
	(Sized_relobj_file::emit_relocs_scan): Call Target::emit_relocs_scan().
	(Sized_relobj_file::emit_relocs_scan_reltype): Remove.
	(Sized_relobj_file::split_stack_adjust): Add target parameter.
	Adjust all callers.
	(Sized_relobj_file::split_stack_adjust_reltype): Likewise. Call
	Target::get_r_sym() to get r_sym field from relocations.
	(Track_relocs::next_symndx): Call Target::get_r_sym().
	* target-reloc.h (scan_relocs): Remove sh_type template parameter;
	add Classify_reloc template parameter.  Use for accessing r_sym and
	r_type.
	(relocate_section): Likewise.
	(Default_classify_reloc): New class (renamed and moved from reloc.cc).
	(Default_scan_relocatable_relocs): Remove sh_type template parameter.
	(Default_scan_relocatable_relocs::Reltype): New typedef.
	(Default_scan_relocatable_relocs::reloc_size): New const.
	(Default_scan_relocatable_relocs::sh_type): New const.
	(Default_scan_relocatable_relocs::get_r_sym): New method.
	(Default_scan_relocatable_relocs::get_r_type): New method.
	(Default_emit_relocs_strategy): New class.
	(scan_relocatable_relocs): Replace sh_type template parameter with
	Scan_relocatable_relocs class.  Use it to access r_sym and r_type
	fields.
	(relocate_relocs): Replace sh_type template parameter with
	Classify_reloc class.  Use it to access r_sym and r_type fields.
	* target.h (Target::is_call_to_non_split): Replace r_type parameter
	with pointer to relocation. Adjust all callers.
	(Target::do_is_call_to_non_split): Likewise.
	(Target::emit_relocs_scan): New virtual method.
	(Sized_target::get_r_sym): New virtual method.
	* target.cc (Target::do_is_call_to_non_split): Replace r_type parameter
	with pointer to relocation.

	* aarch64.cc (Target_aarch64::emit_relocs_scan): New method.
	(Target_aarch64::Relocatable_size_for_reloc): Remove.
	(Target_aarch64::gc_process_relocs): Use Default_classify_reloc.
	(Target_aarch64::scan_relocs): Likewise.
	(Target_aarch64::relocate_section): Likewise.
	(Target_aarch64::Relocatable_size_for_reloc::get_size_for_reloc):
	Remove.
	(Target_aarch64::scan_relocatable_relocs): Use Default_classify_reloc.
	(Target_aarch64::relocate_relocs): Use Default_classify_reloc.
	* arm.cc (Target_arm::Arm_scan_relocatable_relocs): Remove sh_type
	template parameter.
	(Target_arm::emit_relocs_scan): New method.
	(Target_arm::Relocatable_size_for_reloc): Replace with...
	(Target_arm::Classify_reloc): ...this.
	(Target_arm::gc_process_relocs): Use Classify_reloc.
	(Target_arm::scan_relocs): Likewise.
	(Target_arm::relocate_section): Likewise.
	(Target_arm::scan_relocatable_relocs): Likewise.
	(Target_arm::relocate_relocs): Likewise.
	* i386.cc (Target_i386::emit_relocs_scan): New method.
	(Target_i386::Relocatable_size_for_reloc): Replace with...
	(Target_i386::Classify_reloc): ...this.
	(Target_i386::gc_process_relocs): Use Classify_reloc.
	(Target_i386::scan_relocs): Likewise.
	(Target_i386::relocate_section): Likewise.
	(Target_i386::scan_relocatable_relocs): Likewise.
	(Target_i386::relocate_relocs): Likewise.
	* mips.cc (Mips_scan_relocatable_relocs): Remove sh_type template
	parameter.
	(Mips_reloc_types): New class template.
	(Mips_classify_reloc): New class template.
	(Target_mips::Reltype): New typedef.
	(Target_mips::Relatype): New typedef.
	(Target_mips::emit_relocs_scan): New method.
	(Target_mips::get_r_sym): New method.
	(Target_mips::Relocatable_size_for_reloc): Replace with
	Mips_classify_reloc.
	(Target_mips::copy_reloc): Use Mips_classify_reloc.
	(Target_mips::gc_process_relocs): Likewise.
	(Target_mips::scan_relocs): Likewise.
	(Target_mips::relocate_section): Likewise.
	(Target_mips::scan_relocatable_relocs): Likewise.
	(Target_mips::relocate_relocs): Likewise.
	(mips_get_size_for_reloc): New function, factored out from
	Relocatable_size_for_reloc::get_size_for_reloc.
	(Target_mips::Scan::local): Use Mips_classify_reloc.
	(Target_mips::Scan::global): Likewise.
	(Target_mips::Relocate::relocate): Likewise.
	* powerpc.cc (Target_powerpc::emit_relocs_scan): New method.
	(Target_powerpc::Relocatable_size_for_reloc): Remove.
	(Target_powerpc::gc_process_relocs): Use Default_classify_reloc.
	(Target_powerpc::scan_relocs): Likewise.
	(Target_powerpc::relocate_section): Likewise.
	(Powerpc_scan_relocatable_reloc): Convert to class template.
	(Powerpc_scan_relocatable_reloc::Reltype): New typedef.
	(Powerpc_scan_relocatable_reloc::reloc_size): New const.
	(Powerpc_scan_relocatable_reloc::sh_type): New const.
	(Powerpc_scan_relocatable_reloc::get_r_sym): New method.
	(Powerpc_scan_relocatable_reloc::get_r_type): New method.
	(Target_powerpc::scan_relocatable_relocs): Use
	Powerpc_scan_relocatable_reloc.
	(Target_powerpc::relocate_relocs): Use Default_classify_reloc.
	* s390.cc (Target_s390::emit_relocs_scan): New method.
	(Target_s390::Relocatable_size_for_reloc): Remove.
	(Target_s390::gc_process_relocs): Use Default_classify_reloc.
	(Target_s390::scan_relocs): Likewise.
	(Target_s390::relocate_section): Likewise.
	(Target_s390::Relocatable_size_for_reloc::get_size_for_reloc):
	Remove.
	(Target_s390::scan_relocatable_relocs): Use Default_classify_reloc.
	(Target_s390::relocate_relocs): Use Default_classify_reloc.
	* sparc.cc (Target_sparc::emit_relocs_scan): New method.
	(Target_sparc::Relocatable_size_for_reloc): Remove.
	(Target_sparc::gc_process_relocs): Use Default_classify_reloc.
	(Target_sparc::scan_relocs): Likewise.
	(Target_sparc::relocate_section): Likewise.
	(Target_sparc::Relocatable_size_for_reloc::get_size_for_reloc):
	Remove.
	(Target_sparc::scan_relocatable_relocs): Use Default_classify_reloc.
	(Target_sparc::relocate_relocs): Use Default_classify_reloc.
	* tilegx.cc (Target_tilegx::emit_relocs_scan): New method.
	(Target_tilegx::Relocatable_size_for_reloc): Remove.
	(Target_tilegx::gc_process_relocs): Use Default_classify_reloc.
	(Target_tilegx::scan_relocs): Likewise.
	(Target_tilegx::relocate_section): Likewise.
	(Target_tilegx::Relocatable_size_for_reloc::get_size_for_reloc):
	Remove.
	(Target_tilegx::scan_relocatable_relocs): Use Default_classify_reloc.
	(Target_tilegx::relocate_relocs): Use Default_classify_reloc.
	* x86_64.cc (Target_x86_64::emit_relocs_scan): New method.
	(Target_x86_64::Relocatable_size_for_reloc): Remove.
	(Target_x86_64::gc_process_relocs): Use Default_classify_reloc.
	(Target_x86_64::scan_relocs): Likewise.
	(Target_x86_64::relocate_section): Likewise.
	(Target_x86_64::Relocatable_size_for_reloc::get_size_for_reloc):
	Remove.
	(Target_x86_64::scan_relocatable_relocs): Use Default_classify_reloc.
	(Target_x86_64::relocate_relocs): Use Default_classify_reloc.

	* testsuite/testfile.cc (Target_test::emit_relocs_scan): New method.
2016-01-11 18:51:18 -08:00
Alan Modra 6f2750feaf Copyright update for binutils 2016-01-01 23:00:01 +10:30
Alan Modra 91a65d2fe8 [GOLD] Relocate::relocate() params
Some linker code editing needs to change multiple insns.  In some
cases multiple relocations are involved and it is not sufficient to
make the changes independently as relocations are processed, because
doing so might lead to a partial edit.  So in order to safely edit we
need all the relocations available in relocate().  Also, to emit
edited relocs corresponding to the edited code sequence we need some
way to pass information from relocate() to relocate_relocs(),
particularly if the edit depends on insns.  We can't modify input
relocs in relocate() as they are mmapped PROT_READ, nor it is
particularly clean to write relocs to the output at that stage.  So
add a Relocatable_relocs* field to relinfo to mark edited relocs.

Given that relocate is passed the raw reloc pointer, it makes sense to
remove the rel/rela parameter and r_type too.  However, that means the
mips relocate() needs to know whether SHT_REL or SHT_RELA relocs are
being processed.  So add a rel_type for mips, which also has the
benefit of removing relocate() overloading there.

This patch adds the infrastructure without making use of it.

Note that relinfo->rr will be NULL if not outputting relocations.

	* object.h (struct Relocate_info): Add "rr".
	* reloc.h (Relocatable_relocs::set_strategy): New accessor.
	* reloc.cc (Sized_relobj_file::do_relocate_sections): Init
	relinfo.rr for relocate_section and relocate_relocs.
	* powerpc.cc (relocate): Add rel_type and preloc parameters.
	Delete rela and r_type params, instead recalculate these from
	preloc.
	(relocate_relocs): Delete Relocatable_relocs* param, instead
	use relinfo->rr.
	* aarch64.cc: Likewise.
	* arm.cc: Likewise.
	* i386.cc: Likewise.
	* mips.cc: Likewise.
	* s390.cc: Likewise.
	* sparc.cc: Likewise.
	* target.h: Likewise.
	* tilegx.cc: Likewise.
	* x86_64.cc: Likewise.
	* testsuite/testfile.cc: Likewise.
	* target-reloc.h (relocate_section): Adjust to suit.
	(apply_relocation, relocate_relocs): Likewise.
2015-12-09 10:36:43 +10:30
Marcin Kościelnicki 238830c697 Add __attribute__((__aligned__(1))) to unaligned symbols from scripts (for s390).
gold/
	* testsuite/binary_test.cc: Add __attribute__((aligned(1))).
	* testsuite/script_test_12a.c: Likewise.
	* testsuite/script_test_1a.cc: Likewise.
	* testsuite/script_test_2.cc: Likewise.
2015-10-28 16:49:13 -07:00
Marcin Kościelnicki bd890911da Make debug_msg.sh more open-minded about line numbers (needed for s390).
gold/
	* testsuite/debug_msg.sh: Accept more fuzz in line numbers.
2015-10-28 16:48:46 -07:00
Marcin Kościelnicki e79a4bad70 Add s390 backend.
elfcpp/
	* s390.h: New file.

gold/
	* s390.cc: New file.
	* Makefile.am (TARGETSOURCES): Add s390.cc.
	(ALL_TARGETOBJS): Add s390.o.
	* Makefile.in: Regenerate.
	* configure.ac: Add s390 support.
	* configure: Regenerate.
	* configure.tgt: Add s390-*-* and s390x-*-*.
	* testsuite/icf_safe_test.sh (arch_specific_safe_fold): Add s390
	support.
2015-10-28 16:47:27 -07:00
Marcin Kościelnicki 8d9743bd43 Support 64-bit entry size in SHT_HASH (for s390).
gold/
	* dynobj.cc (Dynobj::create_elf_hash_table): Create hash table with
	target-specific entry size.
	(Dynobj::sized_create_elf_hash_table): Add size template parameter.
	* dynobj.h (Dynobj::sized_create_elf_hash_table): Likewise.
	* layout.cc (Layout::create_dynamic_symtab): Set entsize to
	hash_entry_size.
	* target.h (Target::hash_entry_size): New method.
	(Target::Target_info::hash_entry_size): New data member.

	* aarch64.cc (Target_aarch64::aarch64_info): Add hash_entry_size.
	* arm.cc (Target_arm::arm_info): Likewise.
	(Target_arm_nacl::arm_nacl_info): Likewise.
	* i386.cc (Target_i386::i386_info): Likewise.
	(Target_i386_nacl::i386_nacl_info): Likewise.
	(Target_iamcu::iamcu_info): Likewise.
	* mips.cc (Target_mips::mips_info): Likewise.
	(Target_mips_nacl::mips_nacl_info): Likewise.
	* powerpc.cc (Target_powerpc::powerpc_info): Likewise.
	* sparc.cc (Target_sparc::sparc_info): Likewise.
	* tilegx.cc (Target_tilegx::tilegx_info): Likewise.
	* x86_64.cc (Target_x86_64::x86_64_info): Likewise.
	(Target_x86_64_nacl::x86_64_nacl_info): Likewise.
	* testsuite/testfile.cc (Target_test::test_target_info): Likewise.
2015-10-28 16:45:37 -07:00
H.J. Lu 0fd153457c Feed right input object to x86_64_mov_to_lea1[12]
x86_64_mov_to_lea1.o is a 64-bit x86-64 object and x86_64_mov_to_lea2.o
is a 32-bit x86-64 object.  x86_64_mov_to_lea11 should use
x86_64_mov_to_lea2.o and x86_64_mov_to_lea12 should use
x86_64_mov_to_lea1.o.

	* testsuite/Makefile.am (x86_64_mov_to_lea11): Replace
	x86_64_mov_to_lea1.o with x86_64_mov_to_lea2.o.
	(x86_64_mov_to_lea12): Replace x86_64_mov_to_lea2.o with
	x86_64_mov_to_lea1.o.
	* testsuite/Makefile.in: Regenerated.
2015-10-20 10:46:47 -07:00
Cary Coutant b45e00b3ed Fix symbol versioning problems in PR 18703.
If a symbol is defined with ".symver foo,foo@VER", the assembler
creates two symbols in the object: one unversioned, and one with
the (non-default) version "VER". If foo is listed in a version
script, gold would then make the first of those symbols the
default version, and would ignore the second symbol as a
duplicate, without making it a non-default version. While this is
arguably reasonable behavior, it doesn't match Gnu ld behavior,
so this patch fixes that by allowing the second definition to
override the first by resetting the "default version" indication.

Several test cases from the Gnu ld testsuite also exposed another
related problem, where a symbol defined with ".symver foo,foo@",
placed into a shared library, is not handled properly by gold.
This patch also fixes that case, binding the symbol to the base
version.

gold/
	PR gold/18703
	* dynobj.cc (Versions::record_version): Handle symbol defined with
	base version.
	(Versions::symbol_section_contents): Likewise.
	* symtab.h (Symbol::set_is_not_default): New class method.
	(Symbol_table::resolve): Add is_default_version parameter.
	(Symbol_table::should_override): Likewise.
	* resolve.cc (Symbol_table::resolve): Add is_default_version parameter,
	and pass to should_override. Adjust all callers and explicit
	instantiations.
	(Symbol_table::should_override): Add is_default_value parameter;
	allow default version in a dynamic object to override existing
	definition from same object.
	* symtab.cc (Symbol_table::add_from_object): Handle case where same
	symbol is defined as unversioned and non-default version in the same
	object.
	* testsuite/Makefile.am (ver_test_13): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/ver_test_4.cc: Add test for symbol with base version.
	* testsuite/ver_test_4.sh: Likewise.
	* testsuite/ver_test_13.c: New source file.
	* testsuite/ver_test_13.script: New version script.
	* testsuite/ver_test_13.sh: New test case.
2015-08-18 19:24:41 -07:00
Doug Kwan ab3b14b04b Make arm_unaligned_reloc test less sensitive to disassembler output format. 2015-07-26 00:54:26 -07:00
H.J. Lu 5b2af7dd40 Don't compare symbol addresses directly
GCC 5 will fold symbol address comparison, assuming each symbol has a
different address, which leads to abort.  We should use separate
functions to compare symbol address.

	PR gold/18663
	* testsuite/Makefile.am (script_test_1_SOURCES): Set to
	script_test_1a.cc script_test_1b.cc.
	(script_test_11_r.o): Replace script_test_11.o with
	script_test_11a.o script_test_11b.o.
	(script_test_11.o): Removed.
	(script_test_11a.o): New.
	(script_test_11b.o): Likewise.
	* testsuite/Makefile.in: Regenerated.
	* testsuite/script_test_1.h: New file.
	* testsuite/script_test_1b.cc: Likewise.
	* testsuite/script_test_11.h: Likewise.
	* testsuite/script_test_11b.c: Likewise.
	* testsuite/script_test_1.cc: Renamed to ...
	* testsuite/script_test_1a.cc: This.
	Include "script_test_1.h".
	(main): Call check_int and check_ptr.
	* testsuite/script_test_11.c: Renamed to ...
	* testsuite/script_test_11a.c: This.
	Include "script_test_11.h".
	(main): Call ptr_equal.
2015-07-22 03:38:00 -07:00
H.J. Lu cd78ea777c Mark global with hidden attribute
GCC 5 will generate a relocation for protected symbol:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65248

when compiling for a shared library.  It is undefined to access protected
symbol in IFUNC selector function inside a shared library.

	PR gold/18628
	* testsuite/ifuncdep2.c (global): Change protected to hidden.
	* testsuite/ifuncmod1.c (global): Likewise.
	* testsuite/ifuncmod5.c (global): Likewise.
2015-07-22 03:37:50 -07:00
H.J. Lu 45972d0074 Update testsuite/pr18689.sh for older GCC
Older GCC, like 4.2, generates .debug_macinfo section instead of
.debug_macro section.  This patch updates testsuite/pr18689.sh to
support it.
2015-07-20 12:20:46 -07:00
H.J. Lu f54f5e31ce Clear SHF_COMPRESSED flag bit from input to output
For relocatable link, we should clear the SHF_COMPRESSED flag bit from
input group section.

	PR gold/18689
	* layout.cc (Layout::layout): Clear the SHF_COMPRESSED flag bit
	from input group section for relocatable link.
	* testsuite/Makefile.am (check_SCRIPTS): Add pr18689.sh.
	(check_DATA): Add pr18689.stdout.
	(MOSTLYCLEANFILES): Add pr18689a.o pr18689b.o.
	(pr18689.stdout): New rule.
	(pr18689a.o): Likewise.
	(pr18689b.o): Likewise.
	(pr18689.o): Likewise.
	* testsuite/pr18689.c: New file.
	* testsuite/pr18689.sh: Likewise.
	* testsuite/Makefile.in: Regenerated.
2015-07-20 10:14:35 -07:00
Yiran Wang c20ceeb226 Remove warning about references from shared objects to hidden symbols.
gold/
	PR gold/15574
	* resolve.cc (Symbol_table): Remove warning about references
	from shared objects to hidden symbols.
	* testsuite/Makefile.am (hidden_test): Add hidden_test.syms.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/hidden_test.sh: Check dynamic symbol table; update
	expected error messages.
2015-07-20 09:19:02 -07:00
H.J. Lu 19a7fe52ae Make default compression gABI compliant
All programs in binutils+gdb git repo now support gABI compression
with the SHF_COMPRESSED bit.  This patch makes the zlib-gabi option
as compression default for gas, gold, ld and objcopy, instead of the
zlib-gnu option whose outputs are incompatible with gABI.

binutils/

	* objcopy.c (copy_file): Set BFD_COMPRESS_GABI if not
	zlib-gnu.
	* doc/binutils.texi: Change --compress-debug-sections and
	--compress-debug-sections=zlib to zlib-gabi.

binutils/testsuite/

	* binutils-all/compress.exp: Update.

gas/

	* as.c (parse_args): Make --compress-debug-sections and
	--compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* doc/as.texinfo: Change --compress-debug-sections and
	--compress-debug-sections=zlib to zlib-gabi.

gold/

	* compressed_output.cc (Output_compressed_section::set_final_data_size):
	Make --compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* testsuite/Makefile.am (flagstest_compress_debug_sections.check):
	Expect ".debug_.*" with the SHF_COMPRESSED bit, instead of
	".zdebug_".
	* testsuite/Makefile.in: Regenerated.

ld/

	* emultempl/elf32.em (gld${EMULATION_NAME}_handle_option): Make
	--compress-debug-sections=zlib the same as
	--compress-debug-sections=zlib-gabi.
	* ld.texinfo: Change --compress-debug-sections=zlib to zlib-gabi.

ld/testsuite/

	* ld-elf/zlibbegin.rS: Updated to .debug_.* with the
	SHF_COMPRESSED bit.
	* ld-elf/zlibnormal.rS: Likewise.
2015-07-14 10:26:23 -07:00
H.J. Lu fb8b9dbc14 Extend --compress-debug-sections in gold
This patch extends --compress-debug-sections= with [zlib-gnu|zlib-gabi]
in gold.

	PR gold/18322
	* compressed_output.cc (zlib_compress): Add argument for
	compression header size.  Set header size to compression header
	size if it isn't 0.  Don't write out the zlib header here.
	(Output_compressed_section::set_final_data_size): Support
	zlib-gnu and zlib-gabi compressions.  Pass compression header
	size to zlib_compress and write out compression header.  Set
	the SHF_COMPRESSED bit for zlib-gabi compression.  Otherwise
	clear the SHF_COMPRESSED bit
	* options.h (compress_debug_sections): Add zlib-gnu and
	zlib-gabi.
	* output.h (Output_section::set_flags): New.
	* testsuite/Makefile.am (check_PROGRAMS): Add
	flagstest_compress_debug_sections_none,
	flagstest_compress_debug_sections_gnu and
	flagstest_compress_debug_sections_gabi.
	(check_DATA): Add flagstest_compress_debug_sections_none.stdout.
	flagstest_compress_debug_sections.stdout,
	flagstest_compress_debug_sections.cmp,
	flagstest_compress_debug_sections.check,
	flagstest_compress_debug_sections_gnu.stdout,
	flagstest_compress_debug_sections_gnu.cmp,
	flagstest_compress_debug_sections_gnu.check,
	flagstest_compress_debug_sections_gabi.stdout,
	flagstest_compress_debug_sections_gabi.cmp and
	flagstest_compress_debug_sections_gabi.check.
	(flagstest_compress_debug_sections_none): New.
	(flagstest_compress_debug_sections_none.stdout): Likewise.
	(flagstest_compress_debug_sections.stdout): Likewise.
	(flagstest_compress_debug_sections.check): Likewise.
	(flagstest_compress_debug_sections.cmp): Likewise.
	(flagstest_compress_debug_sections_gnu): Likewise.
	(flagstest_compress_debug_sections_gnu.stdout): Likewise.
	(flagstest_compress_debug_sections_gnu.check): Likewise.
	(flagstest_compress_debug_sections_gnu.cmp): Likewise.
	(flagstest_compress_debug_sections_gabi): Likewise.
	(flagstest_compress_debug_sections_gabi.stdout): Likewise.
	(flagstest_compress_debug_sections_gnu.check): Likewise.
	(flagstest_compress_debug_sections_gnu.cmp): Likewise.
	* testsuite/Makefile.in: Regenerated.
2015-07-12 10:56:58 -07:00
H.J. Lu 480586639d Add SHF_COMPRESSED section decompression to gold
This patch adds SHF_COMPRESSED section decompression to gold.

	PR gold/18321
	* compressed_output.h (decompress_input_section): Add arguments
	for ELF class, big endian and sh_flags.
	* compressed_output.cc (decompress_input_section): Likewise.
	Support the SHF_COMPRESSED section.
	* dynobj.h (Dynobj): Add elfsize and is_big_endian member
	functions.
	* plugin.h (Pluginobj): Likewise.
	* layout.cc (Layout::get_output_section_flags): Also clear the
	SHF_COMPRESSED bit.
	* object.h (Compressed_section_info): Add flag to store sh_flags.
	(Object): Add pure virtual elfsize and is_big_endian member
	functions.
	* object.cc (need_decompressed_section): Don't skip the ".zdebug"
	prefix here.
	(build_compressed_section_map): Check SHF_COMPRESSED for
	uncompressed size.  Store sh_flags in Compressed_section_info.
	Pass size, big_endian and sh_flags to decompress_input_section.
	Skip the ".debug"/".zdebug" prefix when passing section name to
	need_decompressed_section.
	(Sized_relobj_file<size, big_endian>::do_find_special_section):
	Don't check ".zdebug_*" sections.
	(Object::decompressed_section_contents): Pass ELF class, big
	endian and sh_flags to decompress_input_section.
	* reloc.cc (Sized_relobj_file<size, big_endian>::write_sections):
	Likewise.
	* testsuite/Makefile.am (check_DATA): Add
	debug_msg_cdebug_gabi.err and gdb_index_test_2_gabi.stdout.
	(MOSTLYCLEANFILES): Add debug_msg_cdebug_gabi.err and
	gdb_index_test_2_gabi.stdout.
	(debug_msg_cdebug_gabi.o): New.
	(odr_violation1_cdebug_gabi.o): Likewise.
	(odr_violation2_cdebug_gabi.o): Likewise.
	(debug_msg_cdebug_gabi.err): Likewise.
	(check_SCRIPTS): Add gdb_index_test_2_gabi.sh.
	(gdb_index_test_cdebug_gabi.o): Likewise.
	(gdb_index_test_2_gabi): Likewise.
	(gdb_index_test_2_gabi.stdout): Likewise.
	* testsuite/gdb_index_test_2_gabi.sh: New file.
	* testsuite/Makefile.in: Regenerated.
2015-07-12 10:50:40 -07:00
Doug Kwan 15162befa3 Align text section ends so that stub tables appears at expected addresses. 2015-07-06 15:02:40 -07:00
Jing Yu a3a0c39166 Fix broken gold/testsuite/script_test_12 in some setup.
This patch adds -O0 to gold script_test_12 test, hoping that compiler
won't change the order of globel variables that the test assumes.

Changelog:
	testsuite/Makefile.am: Add -O0 to compile script_test_12 test.
	testsuite/Makefile.in: Regenerate.
2015-06-11 12:52:07 -07:00
Cary Coutant 374082dfab Fix gold to group sections correctly via linker script.
In PR 15370, it is noted that gold does not distinguish between
"*(.foo .bar)" and "*(.foo) *(.bar)" in linker scripts. In both
cases, gold groups all .foo sections together, followed by all
.bar sections, whereas in the first case, it should collect all
.foo and .bar sections in the order seen.

If you add sort specs, the Gnu linker has some bizarre corner
cases that I do not try to replicate. In particular,
"*(SORT_BY_NAME(.foo) SORT_BY_NAME(.bar))" does the same thing
as "*(.foo) *(.bar)". But if you apply a sort spec
to just one of several patterns, say, "*(SORT_BY_NAME(.foo) .bar)",
the Gnu linker will collect any .bar section it sees before the
first .foo, then all .foo sections, then all remaining .bar
sections. With this patch, if any of the input patterns have a
sort spec, gold will group them all as it did before; e.g.,
all .foo sections followed by all .bar sections.

2015-06-03  Cary Coutant  <ccoutant@gmail.com>

gold/
	PR gold/15370
	* script-sections.cc
	(Output_section_element_input::set_section_addresses): When there
	are several patterns with no sort spec, put all sections in the same
	bin.
	* testsuite/Makefile.am (script_test_12): New testcase.
	(script_test_12i): New testcase.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/script_test_12.t: New test linker script.
	* testsuite/script_test_12i.t: New test linker script.
	* testsuite/script_test_12a.c: New test source file.
	* testsuite/script_test_12b.c: New test source file.
2015-06-03 19:37:49 -07:00
Cary Coutant 9c7fe3c5c2 PR 17819: Fix --build-id=tree when using --compress-debug-sections.
When --build-id=tree is selected, gold would schedule a set of
tasks to run to compute md5 hashes in parallel on chunks of the
file. The scheduling was done before the
Write_after_input_sections_task ran, so if we are compressing
debug sections, the output file will change size and be remapped
to a new address, sometimes causing the build id computation to
crash, but even when it doesn't crash, it wouldn't include the
debug information in the hash computation.

This patch delays the scheduling of the md5 tasks until after
Write_after_input_sections_task.

gold/
        PR gold/17819
        * gold.cc (queue_final_tasks): When --build-id=tree, queue a
        separate task to schedule the build id computation.
        * layout.cc (Hash_task::Hash_task): Remove build_id_blocker,
        add Output_file and offset.
        (Hash_task::run): Get and release the input views.
        (Hash_task::is_runnable): Always return NULL (always runnable).
        (Layout::queue_build_id_tasks): Remove.
        (Layout::write_build_id): Add array_of_hashes and size_of_hashes
        parameters; use them instead of class members.
        (Build_id_task_runner::run): New function.
        (Close_task_runner::run): Pass array_of_hashes and size_of_hashes
        to write_build_id.
        * layout.h (Layout::queue_build_id_tasks): Remove.
        (Layout::write_build_id): Add array_of_hashes and size_of_hashes
        parameters.
        (Layout::array_of_hashes_): Remove.
        (Layout::size_of_array_of_hashes_): Remove.
        (Layout::input_view_): Remove.
        (Build_id_task_runner): New class.
        (Close_task_runner::Close_task_runner): Add array_of_hashes and
        size_of_hashes parameters.
        (Close_task_runner::array_of_hashes_): New data member.
        (Close_task_runner::size_of_hashes_): New data member.
        * testsuite/Makefile.am
        (flagstest_compress_debug_sections_and_build_id_tree): New test.
        * testsuite/Makefile.in: Regenerate.
2015-06-02 09:46:10 -07:00
Rafael Ávila de Espíndola cfbf0e3c5b If a range is missing, assume the input address is mapped.
When Output_section::is_input_address_mapped is called we have entries for
all dropped ranges, but not for all ranges.
2015-04-27 14:35:17 -04:00
Sriraman Tallam a100d66fb4 Add option --weak-unresolved-symbols to treat unresolved symbols as weak ref.
This patch adds option --weak-unresolved-symbols to treat unresolved symbols as
weak references.  This is helpful when we want the link to succeed with unresolved
symbols and the dynamic loader to not complain at run-time.  Option
--warn-unresolved-symbols lets the link succeed but could fail at run-time with
unresolved symbol warnings especially when the unresolved symbols have GOT entries
and dynamic relocations against them, like when -fPIE is used.
2015-04-23 13:56:40 -07:00
Sriraman Tallam 65eb8c79be Add option --weak-unresolved-symbols to treat unresolved as weak references.
This patch adds option --weak-unresolved-symbols to treat unresolved symbols as
weak references.  This is helpful when we want the link to succeed with unresolved
symbols and the dynamic loader to not complain at run-time.  Option
--warn-unresolved-symbols lets the link succeed but could fail at run-time with
unresolved symbol warnings especially when the unresolved symbols have GOT entries
and dynamic relocations against them, like when -fPIE is used.

2015-04-23  Sriraman Tallam  <tmsriram@google.com>
	* options.h (--weak-unresolved-symbols): New option.
	* symtab.cc (Symbol_table::sized_write_globals): Change symbol
	binding to weak with new option.
	* symtab.h (is_weak_undefined): Check for new option.
	(is_strong_undefined): Check for new option.
	* testsuite/Makefile.am (weak_unresolved_symbols_test): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/weak_unresolved_symbols_test.cc: New file.
2015-04-23 13:50:48 -07:00
Cary Coutant a6a177507c Allow gold to resolve defined TLS symbols in a PIE link.
This patch fixes Symbol::final_value_is_known so that a defined TLS symbol
in a PIE link is treated as having a known final value, thus allowing
GD->LE TLS optimization, eliminating an unnecessary GOT entry and dynamic
relocation.

gold/
	* symtab.cc (Symbol::final_value_is_known): Check for TLS symbol
	in a PIE link.
	* testsuite/Makefile.am (tls_pie_test.sh): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/tls_pie_test.sh: New.
2015-04-09 15:47:37 -07:00
Cary Coutant 437ddf0c4c Improve ODR checking in gold.
gold/
	* debug.h (DEBUG_LOCATION): New.
	(DEBUG_ALL): Include DEBUG_LOCATION.
	(debug_string_to_enum): Add DEBUG_LOCATION.
	* dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Fix debug
	output to print correct context.
	(Sized_dwarf_line_info::do_addr2line): Add debug output. Return
	up to 4 more locations at the beginning of the function.
	* symtab.cc (Symbol_table::detect_odr_violations): Get canonical
	result before sorting list of line numbers.
	* testsuite/debug_msg.sh: Allow range of line numbers for
	canonical results on optimized code.
2015-04-09 11:53:01 -07:00
Ilya Tocar 1fa29f1060 [Gold,x86_64] Convert mov foo@GOTPCREL(%rip), %reg to lea foo(%rip), %reg
2015-04-06  Ilya Tocar  <ilya.tocar@intel.com>

	PR gold/17641
	* x86_64.cc (Target_x86_64::can_convert_mov_to_lea): New.
	(Target_x86_64::Scan::local): Don't create GOT entry, when we
	can convert mov to lea.
	(Target_x86_64::Scan::global): Ditto.
	(Target_x86_64::Relocate::relocate): Convert mov foo@GOTPCREL(%rip),
	%reg to lea foo(%rip), %reg if possible.
	* testsuite/Makefile.am (x86_64_mov_to_lea): New test.
	* testsuite/x86_64_mov_to_lea1.s: New.
	* testsuite/x86_64_mov_to_lea2.s: Ditto.
	* testsuite/x86_64_mov_to_lea3.s: Ditto.
	* testsuite/x86_64_mov_to_lea4.s: Ditto.
	* testsuite/x86_64_mov_to_lea.sh: Ditto.
---
2015-04-06 12:37:34 +03:00
Ilya Tocar c4fc4724a6 Convert mov foo@GOT(%reg), %reg to lea foo@GOTOFF(%reg), %reg
2015-04-01  Ilya Tocar  <ilya.tocar@intel.com>

	PR gold/17640
	* i386.cc (Target_i386::can_convert_mov_to_lea): New.
	(Target_i386::Scan::local): Don't create GOT entry, when we
	can convert GOT to GOTOFF.
	(Target_i386::Scan::global): Ditto.
	(Target_i386::Relocate::relocate): Convert  mov foo@GOT(%reg), %reg to
	lea foo@GOTOFF(%reg), %reg if possible.
	* testsuite/Makefile.am (i386_mov_to_lea): New test.
	* testsuite/i386_mov_to_lea1.s: New.
	* testsuite/i386_mov_to_lea2.s: Ditto.
	* testsuite/i386_mov_to_lea3.s: Ditto.
	* testsuite/i386_mov_to_lea4.s: Ditto.
	* testsuite/i386_mov_to_lea5.s: Ditto.
	* testsuite/i386_mov_to_lea.sh: Ditto.
2015-04-01 16:52:09 +03:00
H.J. Lu 918357b955 Regenerate configure in gold
Regenerate configure for zlib.m4 change, which adds --with-system-zlib and
removes --with-zlib in gold.  zlib is enabled unconditionally with builtin
zlib imported from GCC.

	* Makefile.am (ZLIB): New.
	(ZLIBINC): Likewise.
	(AM_CFLAGS): Add $(ZLIBINC).
	(AM_CXXFLAGS): Likewise.
	(ldadd_varldadd_var): Add $(ZLIB).
	(incremental_dump_LDADD): Likewise.
	(dwp_LDADD): Likewise.
	* compressed_output.cc: Don't check HAVE_ZLIB_H to include
	<zlib.h>.
	(zlib_compress): Don't check HAVE_ZLIB_H.
	(zlib_decompress): Likewise.
	* options.h (compress_debug_sections): Likewise.
	* configure.ac (AM_CONDITIONAL): Removed.
	* testsuite/Makefile.am (ZLIB): New.
	(LDADD): Add $(ZLIB).
	Don't check HAVE_ZLIB.
	* Makefile.in: Regenerated.
	* config.in: Likewise.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.
2015-04-01 06:40:35 -07:00
Cary Coutant 410da591ba PR gold/18048: Fix INCLUDE directive support for gold
This patch fixes INCLUDE directives in script files, so that when
an INCLUDE appears inside a sections block, section commands block,
or memory def block, the contents are parsed in the appropriate
context.

gold/
	PR gold/18048
	* script-c.h (script_include_directive): Add first_token parameter.
	* script.cc (script_include_directive): Add first_token parameter, and
	pass it to read_script_file.
	* yyscript.y (PARSING_SECTIONS_BLOCK, PARSING_SECTION_CMDS)
	(PARSING_MEMORY_DEF): New tokens.
	(top): Add new productions for INCLUDE files.
	(file_cmd): Replace file_or_sections_cmd with copy of its productions.
	Pass PARSING_LINKER_SCRIPT to script_include_directive.
	(section_block_cmd): Likewise; pass PARSING_SECTIONS_BLOCK.
	(section_cmd): Pass PARSING_SECTION_CMDS.
	(file_or_sections_cmd): Remove.
	(memory_def): Pass PARSING_MEMORY_DEF.
	* testsuite/Makefile.am (memory_test_2): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/memory_test_inc.t: New script file.
	* testsuite/memory_test_inc_1.t.src: New script file.
	* testsuite/memory_test_inc_2.t.src: New script file.
	* testsuite/memory_test_inc_3.t.src: New script file.
2015-03-21 19:54:15 -07:00
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 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
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
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
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
Alan Modra b90efa5b79 ChangeLog rotatation and copyright year update 2015-01-02 00:53:45 +10:30
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
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
Han Shen 9726c3c179 Misc about gold for aarch64 backend.
The patch does the following things:
  -- Add support for ifunc.
  -- Enable safe icf
  -- Add support for TLSLD relocations
     R_AARCH64_TLSLD_ADR_PAGE21,
     R_AARCH64_TLSLD_ADD_LO12_NC,
     R_AARCH64_TLSLD_MOVW_DTPREL_G1,
     R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC.
     (R_AARCH64_TLSLD_MOVW_* are used by LLVM.)
  -- Add support for TLSLD->TLSLE relaxation.
  -- Add support for R_AARCH64_LD_PREL_LO19, R_AARCH64_ADR_PREL_LO21.
  -- Fix 2 encoding bugs in AArch64_relocate_functions::update_movnz.
  -- Correct TLS relocation properties in gold/aarch64-reloc.def.
  -- Update testsuite/icf_safe_so_test.cc, testsuite/icf_safe_test.sh.

gold/
2014-10-29  Han Shen  <shenhan@google.com>
            Jing Yu   <jingyu@google.com>

	* aarch64-reloc.def: Add LD_PREL_LO12, ADR_PREL_LO21,
	TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC, TLSLD_MOVW_DTPREL_G1,
	TLSLD_MOVW_DTPREL_G0_NC. Change property of TLS relocations to
	Symbol::TLS_REF.
	* aarch64.cc (Target_aarch64::do_can_check_for_function_pointers): New
	method.
	(Target_aarch64::reloc_needs_plt_for_ifunc): New method.
	(Target_aarch64::tls_ld_to_le): New method.
	(Target_aarch64::aarch64_info): Enable can_icf_inline_merge_sections
	for 64bit targets.
	(Output_data_plt_aarch64::irelative_rel_): New data member.
	(Output_data_plt_aarch64::add_entry): Add irelative entries to plt.
	(Output_data_plt_aarch64::add_local_ifunc_entry): New method.
	(Output_data_plt_aarch64::add_relocation): New method.
	(Output_data_plt_aarch64::do_write): Add gold_assert on got_irelative
	offset. Add got_irelative size to got size.
	(AArch64_relocate_functions): Typedef AArch64_valtype. Replace long
	type string with the new typename.
	(AArch64_relocate_functions::update_adr): Replace parameter x with
	immed.
	(AArch64_relocate_functions::update_movnz): Correct wrong val mask.
	(AArch64_relocate_functions::reloc_common): New method.
	(AArch64_relocate_funcsions::rela_general): Extract common part out
	into reloc_common method.
	(AArch64_relocate_functions::rela_general): Likewise.
	(AArch64_relocate_functions::pcrela_general): Likewise.
	(AArch64_relocate_functions::adr): New method.
	(AArch64_relocate_functions::adrp): Calculate immed before calling
	update_adr.
	(AArch64_relocate_functions::adrp): Likewise.
	(AArch64_relocate_functions::movnz): Cast x to SignedW type when
	comparing x to 0. Calculate immed from ~x when x < 0.
	(Target_aarch64::optimize_tls_reloc): Add new cases for
	TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC, TLSLD_MOVW_DTPREL_G1,
	TLSLD_MOVW_DTPREL_G0_NC.
	(Target_aarch64::possible_function_pointer_reloc): Implement this
	method.
	(Target_aarch64::Scan::local_reloc_may_be_function_pointer): Update
	comment.
	(Target_aarch64::Scan::local): Add codes to handle STT_GNU_IFUNC
	symbol. Add cases for TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC,
	TLSLD_MOVW_DTPREL_G1, TLSLD_MOVW_DTPREL_G0_NC.
	(Target_aarch64::Scan::global): Add codes to handle STT_GNU_IFUNC
	symbol. Add cases for TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC,
	TLSLD_MOVW_DTPREL_G1, TLSLD_MOVW_DTPREL_G0_NC.
	(Target_aarch64::make_plt_entry): Call add_entry with two more
	parameters.
	(Target_aarch64::make_local_ifunc_plt_entry): New method.
	(Target_aarch64::Relocate::relocate): Add cases for LD_PREL_LO19,
	ADR_PREL_LO21, TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC,
	TLSLD_MOVW_DTPREL_G1, TLSLD_MOVW_DTPREL_G0_NC.
	(Target_aarch64::Relocate::relocate_tls): Add cases for
	TLSLD_ADR_PAGE21, TLSLD_ADD_LO12_NC, TLSLD_MOVW_DTPREL_G1,
	TLSLD_MOVW_DTPREL_G0_NC.
	* testsuite/icf_safe_so_test.cc: Correct test comment.
	* testsuite/icf_safe_test.sh: Add AArch64 arch.
2014-10-29 11:31:36 -07:00
Cary Coutant 635aa30e3a Fix race condition causing assert in Eh_frame_hdr::do_sized_write().
2014-09-23  Taiju Tsuiki  <tzik@google.com>
            Cary Coutant  <ccoutant@google.com>

gold/
	* gold.cc (queue_final_tasks): Add Write_sections_task as a blocker
	on input_sections_blocker.
	* layout.cc (Write_sections_task::locks): Unblock
	input_sections_blocker_.
	* layout.h (Write_sections_task::Write_sections_task): Add
	input_sections_blocker.
	* testsuite/Makefile.am (exception_x86_64_bnd_test): Add gcctestdir/ld
	to DEPENDENCIES.
	* testsuite/Makefile.in: Regenerate.
2014-09-23 23:20:57 -07:00
Rafael Ávila de Espíndola c0c71592f7 A a testcase for common symbol handling with plugins.
2014-09-18  Rafael Ávila de Espíndola <rafael.espindola@gmail.com>

	* testsuite/Makefile.am (plugin_test_10): New test.
	* testsuite/Makefile.in: Regenerate
	* testsuite/plugin_common_test_2.c (c1): Align to 8.
	* testsuite/plugin_test_10.sh: New file.
2014-09-18 13:58:16 -04:00
Alan Modra ad9fe6c108 Modify new gold test to pass on powerpc64le
* testsuite/defsym_test.sh: Allow ppc64le localentry annotation.
2014-08-06 22:15:48 +09:30
Cary Coutant e051745c83 Fix --defsym to copy symbol attributes.
Alan Modra committed a patch to Gnu ld to fix a problem encountered on
PPC where the --defsym option wasn't copying the st_other bits to the
newly-defined symbol.

    https://sourceware.org/ml/binutils/2014-07/msg00094.html

Gold has the same problem, and additionally wasn't copying the symbol type.
This patch fixes both problems, by copying the symbol type, visibility, and
the remaining st_other bits to the new symbol for --defsym=sym1=sym2
assignments.

gold/
	* expression.cc (struct Expression::Expression_eval_info): Add
	new fields type_pointer, vis_pointer, and nonvis_pointer.
	(Expression::eval_maybe_dot): Add type_pointer, vis_pointer, and
	nonvis_pointer parameters. Adjust all calls.
	(Symbol_expression::value): Update type, visibility, and nonvis bits
	in caller.
	* script.cc (Symbol_assignment::sized_finalize): Update type,
	visibility, and remaining st_other bits for new symbol.
	* script.h: (Expression::eval_maybe_dot): Add type_pointer,
	vis_pointer, and nonvis_pointer parameters.
	* symtab.h (Symbol::set_type): New method.

	* testsuite/Makefile.am (defsym_test): New test.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/defsym_test.c: New file.
	* testsuite/defsym_test.sh: New file.
2014-07-08 22:52:37 -07:00
Alan Modra 61f5c66f62 Fix gold plugin_test failures on PowerPC64 ELFv2
readelf output for ELFv2 includes st_other bits specifying a
function's local entry offset.

	* testsuite/plugin_test.c (parse_readelf_line): Skip non-visibility
	st_other output.
2014-06-03 10:47:55 +09:30
Cary Coutant f6fb832249 Fix testsuite to use newly-built linker for ehdr_start_test_4, and fix
check script to look for the right binding.

gold/
	* testsuite/Makefile.am (ehdr_start_test_4): Fix typo in -B option.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/ehdr_start_test_4.sh: Look for "U" instead of "w".
2014-05-30 10:21:27 -07:00
Sriraman Tallam a82bef932e With -pie and x86, the linker complains if it sees a PC-relative relocation
to access a global as it expects a GOTPCREL relocation.  This is really not
necessary as the linker could use a copy relocation to get around it.  This
patch enables copy relocations with pie.

Context:
This is useful because currently the GCC compiler with option -fpie makes
every extern global access go through the GOT. That is because the compiler
cannot tell if a global will end up being defined in the executable or not
and is conservative. This ends up hurting performance when the binary is linked
as mostly static where most of the globals do end up being defined in the
executable.  By allowing copy relocs with fPIE, the compiler need not generate
a GOTPCREL(GOT access) for any global access.  It can safely assume that all
globals will be defined in the executable and generate a PC-relative access
instead.  Gold can then create a copy reloc for only the undefined globals.

	gold/
	* symtab.h (may_need_copy_reloc): Remove check for position independent
	code.
	* x86_64.cc (Target_x86_64<size>::Scan::global): Add check for no
	position independence before pc absolute may_need_copy_reloc call.
	Add check for executable output befor pc relative may_need_copy_reloc
	call.
	* i386.cc: Ditto.
	* arm.cc: Ditto.
	* sparc.cc: Ditto.
	* tilegx.cc: Ditto.
	* powerpc.cc: Add check for no position independence before
	may_need_copy_reloc calls.
	* testsuite/pie_copyrelocs_test.cc: New file.
	* testsuite/pie_copyrelocs_shared_test.cc: New file.
	* Makefile.am (pie_copyrelocs_test): New test.
	* Makefile.in: Regenerate.
2014-05-13 10:55:11 -07:00
Sriraman Tallam 1642b4b337 Optimizing accesses to Globals with -fpie -pie:
With -pie and x86, the linker complains if it sees a PC-relative relocation
to access a global as it expects a GOTPCREL relocation.  This is really not
necessary as the linker could use a copy relocation to get around it.  This
patch enables copy relocations with pie.

Context:
This is useful because currently the GCC compiler with option -fpie makes
every extern global access go through the GOT. That is because the compiler
cannot tell if a global will end up being defined in the executable or not
and is conservative. This ends up hurting performance when the binary is linked
as mostly static where most of the globals do end up being defined in the
executable.  By allowing copy relocs with fPIE, the compiler need not generate
a GOTPCREL(GOT access) for any global access.  It can safely assume that all
globals will be defined in the executable and generate a PC-relative access
instead.  Gold can then create a copy reloc for only the undefined globals.
2014-05-13 10:33:59 -07:00
Cary Coutant d1bddd3c4b Fix handling of __ehdr_start when it cannot be defined.
2014-05-02  Cary Coutant  <ccoutant@google.com>

	* defstd.cc (in_segment): Define __ehdr_start here...
	* layout.cc (Layout::finalize): ...Instead of here.  Set the
	output segment when known.
	* resolve.cc (Symbol::override_base_with_special): Remember
	the original binding.
	* symtab.cc (Symbol::set_output_segment): New function.
	(Symbol::set_undefined): New function.
	* symtab.h (Symbol::is_weak_undefined): Check original undef
	binding.
	(Symbol::is_strong_undefined): New function.
	(Symbol::set_output_segment): New function.
	(Symbol::set_undefined): New function.
	* target-reloc.h (is_strong_undefined): Remove.
	(issue_undefined_symbol_error): Call Symbol::is_weak_undefined.
	Check for hidden undefs.
	(relocate_section): Call Symbol::is_strong_undefined.

	* testsuite/Makefile.am (ehdr_start_test_1)
	(ehdr_start_test_2, ehdr_start_test_3)
	(ehdr_start_test_4, ehdr_start_test_5): New test cases.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/ehdr_start_def.cc: New source file.
	* testsuite/ehdr_start_test.cc: New source file.
	* testsuite/ehdr_start_test.t: New linker script.
	* testsuite/ehdr_start_test_4.sh: New shell script.
2014-05-02 16:33:43 -07:00
Cary Coutant ae447ddd12 Modify gold testsuite to disable plugins added by GCC driver.
GCC 4.8 now adds linker plugin options by default, which conflict with the
--incremental tests in the testsuite. This patch checks whether the compiler
supports the -fno-use-linker-plugin option, and adds it to all link
commands.

2014-04-02  Cary Coutant  <ccoutant@google.com>

	* configure.ac (HAVE_PUBNAMES): Use C instead of C++.
	(HAVE_NO_USE_LINKER_PLUGIN): Check for -fno-use-linker-plugin.
	* configure: Regenerate.
	* testsuite/Makefile.am (OPT_NO_PLUGINS): New macro for
	-fno-use-linker-plugin.
	(LINK1, CXXLINK1): Add it to the link command.
	* testsuite/Makefile.in: Regenerate.
2014-04-02 15:04:36 -07:00
Alan Modra 4b95cf5c0c Update copyright years 2014-03-05 22:16:15 +10:30