Commit Graph

2137 Commits

Author SHA1 Message Date
Alan Modra
0c951c25c6 [GOLD] PowerPC R_PPC64_PCREL_OPT support
* powerpc.cc (xlate_pcrel_opt): New function.
	(Target_powerpc::Relocate::relocate): Optimise PCREL34 and
	GOT_PCREL34 sequences marked with PCREL_OPT.
2019-07-13 09:57:50 +09:30
Alan Modra
c9b8abb7af [GOLD] PowerPC got reloc optimisation
Note that gold won't remove unused GOT entries, in contrast to ld.bfd
which will.

	* powerpc.cc (Powerpc_relobj::make_got_relative): New function.
	(relative_value_is_known): New functions.
	(Target_powerpc::Relocate::relocate): Edit code using
	GOT16_HA, GOT16_LO_DS, and GOT_PCREL34 relocs.
2019-07-13 09:57:50 +09:30
Alan Modra
e4dff7651b [GOLD] PowerPC relocations for prefix insns
Also use pc-relative instructions for notoc stubs.

elfcpp/
	* powerpc.h (R_PPC64_PCREL_OPT, R_PPC64_D34, R_PPC64_D34_LO),
	(R_PPC64_D34_HI30, R_PPC64_D34_HA30, R_PPC64_PCREL34),
	(R_PPC64_GOT_PCREL34, R_PPC64_PLT_PCREL34, R_PPC64_PLT_PCREL34_NOTOC),
	(R_PPC64_ADDR16_HIGHER34, R_PPC64_ADDR16_HIGHERA34),
	(R_PPC64_ADDR16_HIGHEST34, R_PPC64_ADDR16_HIGHESTA34),
	(R_PPC64_REL16_HIGHER34, R_PPC64_REL16_HIGHERA34),
	(R_PPC64_REL16_HIGHEST34, R_PPC64_REL16_HIGHESTA34),
	(R_PPC64_D28, R_PPC64_PCREL28): Define.
gold/
	* powerpc.cc (Target_powerpc): Add powerxx_stubs_ and accessor
	functions.
	(Target_powerpc::maybe_skip_tls_get_addr_call): Handle PLT_PCREL34
	and PLT_PCREL34_NOTOC relocs.
	(Powerpc_relocate_functions): Add addr34, addr34_hi, addr34_ha,
	addr28, addr16_higher34, addr16_highera34, addr16_highest34,
	addr16_highest34a functions.
	(li_11_0, ori_11_11_0, sldi_11_11_34): Define.
	(paddi_12_pc, pld_12_pc, pnop): Define.
	(d34, ha34): New inline functions.
	(Stub_table::add_plt_call_entry): Handle powerxx_stubs.
	(Stub_table::add_eh_frame): Likewise.
	(build_powerxx_offset): New function.
	(Stub_table::plt_call_size): Handle powerxx_stubs.
	(Stub_table::branch_stub_size): Likewise.
	(Stub_table::do_write): Likewise.
	(Target_powerpc::Scan::get_reference_flags): Handle new relocs.
	(Target_powerpc::Scan::reloc_needs_plt_for_ifunc: Likewise.
	(Target_powerpc::Scan::local, global, relocate): Likewise.
2019-07-13 09:57:50 +09:30
Alan Modra
220f99066d [GOLD] PowerPC notoc eh_frame
When generating notoc call and branch stubs without the benefit of
pc-relative insns, the stubs need to use LR to access the run time PC.
All LR changes must be described in .eh_frame if we're to support
unwinding through asynchronous exceptions.  That's what this patch
does.

The patch has gone through way too many iterations.  At first I
attempted to add multiple FDEs, one for each stub.  That ran into
difficulties with do_plt_fde_location which is only capable of setting
the address of a single FDE per Output_data section, and with removing
any FDEs added on a previous do_relax pass.  Removing FDEs (git commit
be897fb774) went overboard in matching the FDE contents.  That means
either stashing the contents created for add_eh_frame_for_plt to use
when calling remove_eh_frame_for_plt, or recreating contents on the
fly (*) just to remove FDEs.  In fact, FDE content matching is quite
unnecesary.  FDEs added by a previous do_relax pass are those with
u_.from_linker.post_map set.  So they can easily be recognised just by
looking at that flag.  This patch keeps that part of the multiple FDE
changes.

In the end I went for just one FDE per stub group to describe the call
stubs.  That's reasonably efficient for the common case of only
needing to describe the __tls_get_addr_opt call stub.  We don't expect
to be making many calls using notoc stubs without pc-relative insns.

*) Which has it's own set of problems.  The contents must be recreated
using the old stub layout, but .eh_frame size can affect stub
requirements so you need to temporarily keep the old .eh_frame size
when creating new stubs, then reset .eh_frame size before adding new
FDEs.

	* ehframe.cc (Fde::operator==): Delete.
	(Cie::remove_fde): Delete.
	(Eh_frame::remove_ehframe_for_plt): Delete fde_data and fde_length
	parameters.  Remove all post-map plt FDEs.
	* ehframe.h (Fde:post_map): Make const, add variant to compare plt.
	(Fde::operator==): Delete.
	(Cie::remove_fde): Implement here.
	(Cie::last_fde): New accessor.
	(Eh_frame::remove_ehframe_for_plt): Update prototype.
	* layout.cc (Layout::remove_eh_frame_for_plt): Delete fde_data and
	fde_length parameters.
	* layout.h (Layout::remove_eh_frame_for_plt): Update prototype.
	* powerpc.cc (Stub_table::tls_get_addr_opt_bctrl_): Delete.
	(Stub_table::plt_fde_len_, plt_fde_, init_plt_fde): Delete.
	(Stub_table::add_plt_call_entry): Don't set tls_get_addr_opt_bctrl_.
	(eh_advance): New function.
	(stub_sort): New function.
	(Stub_table::add_eh_frame): Emit eh_frame for notoc plt calls and
	branches as well as __tls_get_addr_opt plt call stub.
	(Stub_table::remove_eh_frame): Update to suit.
2019-07-13 09:57:50 +09:30
Alan Modra
32f5984419 [GOLD] PowerPC64 ELFv2 notoc support
Calls from notoc functions via the PLT need different stubs.  Even
calls to local functions requiring a valid toc pointer must go via a
stub.  This patch provides the support in gold.

elfcpp/
	* powerpc.h (R_PPC64_PLTSEQ_NOTOC, R_PPC64_PLTCALL_NOTOC): Define.
gold/
	* powerpc.cc (Target_powerpc::maybe_skip_tls_get_addr_call): Handle
	notoc calls.
	(is_branch_reloc): Template on size.  Return true for REL24_NOTOC.
	Update all callers.
	(max_branch_delta): Likewise.
	(Target_powerpc::Branch_info::make_stub): Add a stub for notoc
	calls to functions needing a valid toc pointer.
	(Target_powerpc::do_relax): Layout stubs again if any need resize.
	(add_12_11_12, addi_12_11, addis_12_11, ldx_12_11_12, ori_12_12_0),
	(oris_12_12_0, sldi_12_12_32): Define.
	(Stub_table::Plt_stub_ent): Add notoc_ and iter_ fields.
	(Stub_table::Branch_stub_key, Branch_stub_key_hash): Rename from
	Branch_stub_ent and Branch_stub_ent hash.  Remove save_res_ from key.
	(Stub_table::Branch_stub_ent): New struct.
	(class Stub_table): Add need_resize and resizing vars.
	(Stub_table::need_resize, branch_size): New accessors.
	(Stub_table::set_resizing): New function.
	(Stub_table::add_plt_call_entry): Handle notoc calls and resizing
	on seeing such or a tocsave stubs after a normal stub using the
	same sym.
	(Stub_table::add_long_branch_entry): Similarly.
	(Stub_table::find_long_branch_entry): Return a Branch_stub_ent*.
	(Stub_table::define_stub_syms): Adjust
	(Stub_table::build_tls_opt_head, build_tls_opt_tail): New functions.
	(build_notoc_offset): New function.
	(Stub_table::plt_call_size): Move out of line.  Handle notoc calls.
	(Stub_table::branch_stub_size): Similarly.
	(Stub_table::do_write): Separate loop for ELFv2 stubs, handling
	notoc calls.  Simplify ELFv1 loop.  Output notoc branch stubs.
	Use build_tls_opt_head and build_tls_opt_tail.
	(Target_powerpc::Scan::get_reference_flags): Handle REL24_NOTOC.
	(Target_powerpc::Scan::reloc_needs_plt_for_ifunc): Likewise,
	and PLTSEQ_NOTOC and PLTCALL_NOTOC.
	(Target_powerpc::Scan::local, global, relocate): Likewise.
2019-07-13 09:57:50 +09:30
Alan Modra
f60c61e60e [GOLD] PowerPC tweak relnum tests
There is a call of relocate() to perform a single relocation.  In that
case the "relnum" parameter is -1U and of course it isn't appropriate
to consider any of the PowerPC code sequence optimisations triggered
by a following relocation.

	* powerpc.cc (Target_powerpc::Relocate::relocate): Don't look
	at next/previous reloc when relnum is -1.
2019-06-28 10:18:03 +09:30
Alan Modra
f073a3e8c6 [GOLD] PowerPC linkage table error
This fixes a segfault when attempring to output a "linkage table
error".  "object" is only non-NULL in the local symbol case.

	* powerpc.cc (Stub_table::plt_error): New function.
	(Stub_table::do_write): Use it.
	(Output_data_glink::do_write): Don't segfault emitting linkage
	table error.
2019-06-28 10:17:45 +09:30
Alan Modra
c432bbbaaa [GOLD] R_PPC64_REL16_HIGH relocs
These relocs have been around for quite a while.  It's past time gold
supported them.

elfcpp/
	* powerpc.h (R_PPC64_REL16_HIGH, R_PPC64_REL16_HIGHA),
	(R_PPC64_REL16_HIGHER, R_PPC64_REL16_HIGHERA),
	(R_PPC64_REL16_HIGHEST, R_PPC64_REL16_HIGHESTA): Define.

gold/
	* powerpc.cc (Target_powerpc::Scan::get_reference_flags): Handle
	REL16_HIGH* relocs.
	(Target_powerpc::Scan::local): Likewise.
	(Target_powerpc::Scan::global): Likewise.
	(Target_powerpc::Relocate::relocate): Likewise.
2019-06-28 10:17:08 +09:30
Martin Liska
a3972330f4 Fix a missing include of <string>
gold/ChangeLog:

2019-06-07  Martin Liska  <mliska@suse.cz>

	* errors.h: Include string.
2019-06-10 12:26:33 +02:00
Joshua Oreman
e173ea00c2 Fix problem with ICF where diffs in EH frame info is ignored.
PR gold/21066
	* gc.h (gc_process_relocs): Track relocations in .eh_frame sections
	when ICF is enabled, even though the .eh_frame sections themselves
	are not foldable.
	* icf.cc (get_section_contents): Change arguments to permit operation
	on just part of a section. Include extra identity regions in the
	referring section's contents recursively.
	(match_sections): Lock object here instead of in get_section_contents
	so that get_section_contents can operate recursively.
	(Icf::add_ehframe_links): New method.
	(Icf::find_identical_sections): Pass .eh_frame sections to
	add_ehframe_links(). Increase default iteration count from 2 to 3
	because handling exception info typically requires one extra iteration.
	* icf.h (Icf::extra_identity_list_): New data member with accessor.
	(is_section_foldable_candidate): Include .gcc_except_table sections.
	* options.h: Update documentation for new default ICF iteration count.
	* testsuite/Makefile.am (icf_test_pr21066): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/icf_test_pr21066.cc: New source file.
	* testsuite/icf_test_pr21066.sh: New test script.
2019-05-11 07:27:10 +08:00
Egeyar Bagcioglu
7ae39e2d40 Check whether symbols with MOVW_.ABS relocations require PLT entries (aarch64).
2019-02-19  Egeyar Bagcioglu  <egeyar.bagcioglu@oracle.com>

gold/
     PR gold/23870
     * aarch64.cc (Target_aarch64::Scan::global): Check if a symbol with
     R_AARCH64_MOVW_.ABS_* relocations requires a PLT entry.
     * testsuite/Makefile.am: Add aarch64_pr23870 test case.
     * testsuite/Makefile.in: Regenerate.
     * testsuite/aarch64_pr23870_bar.c: New file.
     * testsuite/aarch64_pr23870_foo.c: New file.
     * testsuite/aarch64_pr23870_main.S: New file.
2019-02-19 16:13:24 -08:00
Nick Clifton
e486594504 Updated French translation for ld/ and gold/ subdirectories 2019-02-12 13:22:42 +00:00
Nick Clifton
375cd4233d Updated translations for various binutils subdirectories. 2019-01-21 12:59:20 +00:00
Nick Clifton
f48dfe417e Change version to 2.32.51 and regenerate configure and pot files. 2019-01-19 16:51:42 +00:00
Nick Clifton
f974f26cb1 Add markers for 2.32 branch to NEWS and ChangeLog files. 2019-01-19 15:55:50 +00:00
Andrew Paprocki
3107326d3d Adjust bfd/warning.m4 egrep patterns
Adjust the `bfd/warning.m4` `egrep` patterns to handle preprocessors
that do not define `__GNUC__`, leaving the string in the output.

bfd/
	* warning.m4: Adjust egrep pattern for non-GNU compilers.
	* configure: Regenerate.
binutils/
	* configure: Regenerate.
gas/
	* configure: Regenerate.
gold/
	* configure: Regenerate.
gprof/
	* configure: Regenerate.
ld/
	* configure: Regenerate.
opcodes/
	* configure: Regenerate.
2019-01-09 13:51:08 +10:30
Alan Modra
827041555a Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
Alan Modra
d5c04e1bf8 ChangeLog rotation 2019-01-01 21:25:40 +10:30
Alan Modra
a529dcc854 [GOLD] Tweak keep_text_section_prefix test for PowerPC64 ELFv1
This test checks code layout by function symbol ordering, but that
doesn't work on powerpc64 ELFv1 where the function symbol is on a
descriptor.  A simple work-around is to have nm emit synthetic symbols
marking the code entry point of functions.  Since the text segment is
laid out before the data segment, the synthetic symbols will have
lower addresses than function descriptor symbols and be seen first in
nm -n output.

On other targets, nm --synthetic typically emits symbols on plt
entries.  Since the testcase doesn't call any of the functions of
interest there shouldn't be plt entries for those functions, so there
should be no potentially confusing extra symbols.

	* testsuite/Makefile.am (keep_text_section_prefix_nm.stdout):
	Pass --synthetic to nm.
	* testsuite/Makefile.in: Regenerate.
2018-12-18 11:57:45 +10:30
Alan Modra
c0ab2ae3cc [GOLD] icf_safe_so_test
PR 21128
	* testsuite/icf_safe_so_test.sh (check_fold): Rewrite to check
	multiple symbols at once.
	(arch_specific_safe_fold): Likewise, and call with the four foo*
	symbols expected to fold.
2018-12-08 13:24:14 +10:30
H.J. Lu
9da0a9988d gold: Provide more failed archive member info in error message
When gold fails to get an archive member, its error message doesn't
have information for

1. The failed archive member name.
2. The cause of failure: non-ELF object vs non-IR object.

This patch adds the failed archive member name and non-ELF/non-IR info
to gold error message.

	* archive.cc (Archive::get_elf_object_for_member): Also print
	archive member and non-ELF/non-IR info on error.
2018-12-06 12:29:01 -08:00
Alan Modra
9af7cc783a gold won't build with gcc-9
* symtab.h (Symbol::Symbol): Avoid -Wclass-memaccess warning.
2018-12-05 14:32:13 +10:30
Alexey Neyman
f4238194a2 Restore build on x86_64-w64-mingw32.
gold/
	PR gold/23594
	* configure.ac: Add checks for link, mkdtemp.
	* configure: Regenerate.
	* config.in: Regenerate.
	* plugin.cc (Plugin_recorder::init): Fall back to mktemp
	if mkdtemp is not available.
	(link_or_copy_file): Fall back to copy if link() is not available.
2018-12-03 23:50:48 -08:00
H.J. Lu
5f6c22aee7 gold: Get alignment of uncompressed section from ch_addralign
The ELF compression header has a field (ch_addralign) that is set to
the alignment of the uncompressed section. This way the section itself
can have a different alignment than the decompressed section.  Update
decompress_input_section to get alignment of the decompressed section
and use it when merging decompressed strings.

	PR binutils/23919
	* merge.cc (Output_merge_string<Char_type>::do_add_input_section):
	Get addralign from decompressed_section_contents.
	* object.cc (build_compressed_section_map): Set info.addralign.
	(Object::decompressed_section_contents): Add a palign
	argument and store p->second.addralign in *palign if it isn't
	NULL.
	* object.h (Compressed_section_info): Add addralign.
	(section_is_compressed): Add a palign argument, default it
	to NULL, store p->second.addralign in *palign if it isn't NULL.
	(Object::decompressed_section_contents): Likewise.
	* output.cc (Output_section::add_input_section): Get addralign
	from section_is_compressed.
2018-12-02 05:43:04 -08:00
Alan Modra
9b4e3a5e23 [GOLD] justsyms_exec test fail on powerpc64
This test fails on powerpc64le due to the justsyms_lib being built
with exported_data at 0x2010000, apparently due to the powerpc target
code generating an empty relro .branch_lt section.  Since the test
relies on the library having exported_data at 0x2000000, avoid the
problem by linking with -z norelro.  Also, the test doesn't need to
avoid checking the function symbol on powerpc elfv2.

	* testsuite/Makefile.am (justsyms_lib): Link with -z norelro.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/justsyms_exec.c (main): Do check exported_func
	on PowerPC64 ELFv2.
2018-11-26 22:07:46 +10:30
Alan Modra
2eccb8f91f [GOLD] support objdump -T display of st_other
PowerPC64 ELFv2 uses the top 3 bits of st_other to encode a function's
local entry point offset from its global entry point.  Allow st_other
bits except for visibility==default.

	* testsuite/ver_test_14.sh: Accept objdump -T display of st_other
	bits on powerpc64le.
2018-11-26 22:05:54 +10:30
Alan Modra
5acaada745 Make gold testsuite work with CC and CXX specifying -B
The patch allows the gold testsuite to pass when using something like
the following configure line, which works for the rest of the binutils
testsuite.  At least, it does if you don't configure your gcc with any
of the options that force a particular path to as or ld.

gccdir="/home/alan/build/gcc/prev-"
gccsrc="/home/alan/src/gcc.git"
gcctarg="x86_64-linux"
CC="${gccdir}gcc/xgcc -B${gccdir}gcc/" \
CXX="${gccdir}gcc/xg++ -B${gccdir}gcc/ -I${gccdir}$gcctarg/libstdc++-v3/include -I${gccdir}$gcctarg/libstdc++-v3/include/$gcctarg -I${gccsrc}/libstdc++-v3/libsupc++ -L${gccdir}$gcctarg/libstdc++-v3/src/.libs/" \
~/src/binutils-gdb/configure ...

gold's -Bgcctestdir/ option must come before the -B supplied by $CC
or $CXX, in order to pick up the linker we want to test.  Also when
using a not-yet-installed gcc, it is necessary to provide a collect-ld
in gcctestdir/ as otherwise a collect-ld script in -B${gccdir}gcc/
will be used and the wrong linker tested.

Besides this, the patch fixes some bugs: The $COMPILE -D_FORTIFY_SOURCE
edit was wrong (but worked for usual values), and the $CXXLINK_S edit
unnecessarily but harmlessly used extra backslash quoting.  See
posix shell documentation regarding quoting, or
www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

Also, -Bgcctestdir/ in one place makes it less likely a new test will
be added that accidentally lacks the option.

	* Makefile.am (gcctestdir1/ld): Use $@ and absolute paths.
	(gcctestdir1/collect-ld): New.
	(ld1_DEPENDENCIES): Add gcctestdir1/collect-ld.
	(ld1_LDFLAGS): Remove -Bgcctestdir1/.
	(editcc1, ld1_LINK): Define.
	(gcctestdir2/ld, gcctestdir2/collect-ld, ld2_DEPENDENCIES),
	(ld2_LDFLAGS, editcc2, ld2_LINK),
	(ld1_r_DEPENDENCIES, ld1_r_LDFLAGS, ld1_r_LINK),
	(gcctestdir2-r/ld, gcctestdir2-r/collect-ld, ld2_r_DEPENDENCIES),
	(ld2_r_LDFLAGS, editcc2r, ld2_r_LINK),
	(gcctestdir3/ld, gcctestdir3/collect-ld, ld3_DEPENDENCIES),
	(ld3_LDFLAGS, editcc3, ld3_LINK),
	(gcctestdir4/ld, gcctestdir4/collect-ld, ld4_DEPENDENCIES),
	(ld4_LDFLAGS, editcc4, ld4_LINK): Similarly.
	* Makefile.in: Regenerate.
	* testsuite/Makefile.am (editcc): Define sed command to put
	our -B option first.  Remove other occurrences of -Bgcctestdir/
	throughout file.
	(editcc1): Define for -D_FORTIFY_SOURCE stripping.
	(editcc2): Define for -static-libgcc/libstdc++ stripping.
	(LINK1, CXXLINK1): Don't use CCLD or CXXLD.
	(CCLD, CXXLD, COMPILE, LINK, CXXCOMPILE, CXXLINK, CXXLINK_S): Define
	using editcc macros.
	(gcctestdir/collect-ld): New rule, add as a dependency of..
	(gcctestdir/ld): ..this.  Use $@ and abs_top_buildir.
	(gcctestdir/as): Use $@.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/incremental_test.sh (actual): Match collect-ld too.
2018-11-08 11:20:34 +10:30
Alan Modra
396ce99883 [GOLD] make clean
Cleans a few more test files.

	* Makefile.am (MOSTLYCLEANFILES): Define.
	* Makefile.in: Regnerate.
	* testsuite/Makefile.am (MOSTLYCLEANFILES): Add ver_test_14 and
	gnu_property_test.
	* testsuite/Makefile.in: Regnerate.
2018-11-02 14:00:15 +10:30
Cherry Zhang
08ea4a7805 PR23769, mixing split-stack and non-split-stack error message
Corrects which file is reported as being split-stack.

	PR 23769
	* gold.cc (queue_middle_tasks): Correct split-stack error message.
2018-10-16 16:41:57 +10:30
Chenghua Xu
9108bc33b1 [MIPS] Add Loongson 2K1000 proccessor support.
bfd/
	* archures.c (bfd_architecture): New machine
	bfd_mach_mips_gs264e.
	* bfd-in2.h (bfd_architecture): Likewise.
	* cpu-mips.c (enum I_xxx): Likewise.
	(arch_info_struct): Likewise.
	* elfxx-mips.c (_bfd_elf_mips_mach): Handle
	E_MIPS_MACH_GS264E.
	(mips_set_isa_flags): Likewise.
	(mips_mach_extensions): Map bfd_mach_mips_gs264e to
	bfd_mach_mips_gs464e extension.

binutils/
	* NEWS: Mention Loongson 2K1000 proccessor support.
	* readelf.c (get_machine_flags): Handle gs264e.

elfcpp/
	* mips.c (EF_MIPS_MACH): New E_MIPS_MACH_GS264E.

gas/
	* config/tc-mips.c (ISA_HAS_ODD_SINGLE_FPR): Exclude CPU_GS264E.
	(mips_cpu_info_table): Add gs264e descriptors.
	* doc/as.texi (march table): Add gs264e.

include/
	* elf/mips.h (E_MIPS_MACH_XXX): New E_MIPS_MACH_GS264E.
	* opcode/mips.h (CPU_XXX): New CPU_GS264E.

ld/
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Run good_combination
	gs264e and gs464e.

opcodes/
	* mips-dis.c (mips_arch_choices): Add gs264e descriptors.
2018-08-29 20:55:25 +08:00
Chenghua Xu
bd782c07b9 [MIPS] Add Loongson 3A2000/3A3000 proccessor support.
bfd/
	* archures.c (bfd_architecture): New machine
	bfd_mach_mips_gs464e.
	* bfd-in2.h (bfd_architecture): Likewise.
	* cpu-mips.c (enum I_xxx): Likewise.
	(arch_info_struct): Likewise.
	* elfxx-mips.c (_bfd_elf_mips_mach): Handle
	E_MIPS_MACH_GS464E.
	(mips_set_isa_flags): Likewise.
	(mips_mach_extensions): Map bfd_mach_mips_gs464e to
	bfd_mach_mips_gs464 extension.

binutils/
	* NEWS: Mention Loongson 3A2000/3A3000 proccessor support.
	* readelf.c (get_machine_flags): Handle gs464e.

elfcpp/
	* mips.c (EF_MIPS_MACH): New E_MIPS_MACH_GS464E.

gas/
	* config/tc-mips.c (ISA_HAS_ODD_SINGLE_FPR): Exclude CPU_GS464E.
	(mips_cpu_info_table): Add gs464e descriptors.
	* doc/as.texi (march table): Add gs464e.

include/
	* elf/mips.h (E_MIPS_MACH_XXX): New E_MIPS_MACH_GS464E.
	* opcode/mips.h (CPU_XXX): New CPU_GS464E.

ld/
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Run good_combination
	gs464e and gs464.

opcodes/
	* mips-dis.c (mips_arch_choices): Add gs464e descriptors.
2018-08-29 20:43:19 +08:00
Chenghua Xu
ac8cb70f36 [MIPS] Add Loongson 3A1000 proccessor support.
bfd/
	* archures.c (bfd_architecture): Rename
	bfd_mach_mips_loongson_3a to bfd_mach_mips_gs464.
	* bfd-in2.h (bfd_architecture): Likewise.
	* cpu-mips.c (enum I_xxx): Likewise.
	(arch_info_struct): Likewise.
	* elfxx-mips.c (_bfd_elf_mips_mach): Likewise.
	(mips_set_isa_flags): Likewise.
	(mips_mach_extensions): Likewise.
	(bfd_mips_isa_ext_mach): Likewise.
	(bfd_mips_isa_ext): Likewise.
	(print_mips_isa_ext): Delete AFL_EXT_LOONGSON_3A.

binutils/
	* NEWS: Mention Loongson 3A1000 proccessor support.
	* readelf.c (get_machine_flags): Rename loongson-3a to gs464.
	(print_mips_isa_ext): Delete AFL_EXT_LOONGSON_3A.

elfcpp/
	* mips.c (EF_MIPS_MACH): Rename E_MIPS_MACH_LS3A to
	E_MIPS_MACH_GS464.

gas/
	* config/tc-mips.c (ISA_HAS_ODD_SINGLE_FPR): Rename
	CPU_LOONGSON_3A to CPU_GS464.
	(mips_cpu_info_table): Add gs464 descriptors, Keep
	loongson3a as an alias of gs464 for compatibility.
	* doc/as.texi (march table): Rename loongson3a to gs464.
	* testsuite/gas/mips/loongson-3a-mmi.d: Set "ISA Extension"
	flag to None.

gold/
	* mips.cc (Mips_mach, add_machine_extensions, elf_mips_mach):
	Rename loongson3a to gs464.
	(mips_isa_ext_mach, mips_isa_ext): Delete loongson3a.
	(infer_abiflags): Use ases instead of isa_ext for infer ABI
flags.
	(elf_mips_mach_name): Rename loongson3a to gs464.

include/
	* elf/mips.h (E_MIPS_MACH_XXX): Rename E_MIPS_MACH_LS3A to
	E_MIPS_MACH_GS464.
	(AFL_EXT_XXX): Delete AFL_EXT_LOONGSON_3A.
	* opcode/mips.h (INSN_XXX): Delete INSN_LOONGSON_3A.
	(CPU_XXX): Rename CPU_LOONGSON_3A to CPU_GS464.
	* opcode/mips.h (mips_isa_table): Delete CPU_LOONGSON_3A case.

ld/
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Rename loongson3a
	to gs464.

opcodes/
	* mips-dis.c (mips_arch_choices): Add gs464 descriptors, Keep
	loongson3a as an alias of gs464 for compatibility.
	* mips-opc.c (mips_opcodes): Change Comments.
2018-08-29 20:32:30 +08:00
Tulio Magno Quites Machado Filho
f6f9ed015e Fix "may be used uninitialized" warning.
* object.cc (Sized_relobj_file::map_to_kept_section): Initialize
	kept_file.
2018-08-07 22:40:33 -07:00
Cary Coutant
a9fc784bac Properly merge GNU_PROPERTY_X86_ISA_1_USED (x86_64).
gold/
	PR ld/23486
	* x86_64.cc (Target_x86_64::Target_x86_64): Initialize
	object_isa_1_used_.
	(Target_x86_64::object_isa_1_used_): New data member.
	(Target_x86_64::record_gnu_property): Save ISA_1_USED bits for object.
	(Target_x86_64::merge_gnu_properties): Merge ISA_1_USED bits.
2018-08-07 21:35:41 -07:00
Cary Coutant
3a12c78d14 Add --warn-drop-version option; by default, do not warn when discarding version info.
gold/
	PR gold/23455
	* options.h (General_options): Add --warn-drop-version option.
	* symtab.cc (Symbol_table::set_dynsym_indexes): Check it.
2018-08-06 14:10:13 -07:00
Cary Coutant
dc1f2887c5 Fix type checking errors.
gold/
	* target.h (Sized_target::record_gnu_property): Change first two
	parameters to unsigned int.
	* x86_64.cc (Target_x86_64::record_gnu_property): Likewise.
2018-08-06 13:36:42 -07:00
Nick Clifton
7d8a316657 Combine ,gnu.build.attributes.* sections into one .gnu.build.attributes section during linking.
gold	* layout.cc (section_name_mapping): Add an entry for
	.gnu.build.attributes.

ld	* scripttempl/elf.sc: Place .gnu.build.attributes sections with
	other read-only sections.
2018-07-30 09:34:40 +01:00
Nick Clifton
0984c34e76 Updated French translation for gold and Spanish translation for ld.
ld	* po/es.po: Updated Spanish translation.
gold	* po/fr.po: Updated French translation.
2018-07-18 08:37:38 +01:00
Cary Coutant
1074bc6d41 Fix internal error when using --emit-relocs with plugins.
When an .eh_frame section has deferred layout because of plugins, gold
was neglecting to mark the section as deferred. When we later processed
the corresponding relocation section, we were then ignoring it, causing
the internal error later on in the link.

gold/
	PR gold/23397
	* object.cc (Sized_relobj_file::do_layout): Mark section as deferred.
	* testsuite/Makefile.am (plugin_test_1): Add --emit-relocs option to
	existing test case.
	* testsuite/Makefile.in: Regenerate.
2018-07-14 12:44:48 -07:00
Cary Coutant
1b115e8e0e Fix problem causing duplicated linker-generated symbols with versions.
When generating _end, _edata, etc. symbols, and a version script provides
a version name, and we are linking against another shared library that
provides those symbols with a different version, gold ends up trying to
resolve the other shared library's symbols to the new definitions, resulting
in two copies of each symbol, one as default, and one as non-default.
This patch tests for that condition, and ignores the symbols provided
by the other shared library.

gold/
	PR gold/23409
	* symtab.cc (Symbol_table::define_special_symbol): Add check for
	version name on existing symbol.
	* testsuite/Makefile.am (ver_test_pr23409): New test case.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/ver_test_pr23409.sh: New test script.
	* testsuite/ver_test_pr23409_1.script: New version script.
	* testsuite/ver_test_pr23409_2.script: New version script.
2018-07-14 12:29:50 -07:00
Franz Sirl
04879304de Fix printing the size of GOLD's memory areana on Cygwin based systems.
I just stumbled over this with 2.29.1 while building a cross-toolchain, on Cygwin64, but it's still the same for 2.30. m.arena has size_t on Cygwin64 and thus errors out due to -Werror=format.

gold	* main.cc: Print m.arena as long long.
2018-07-11 08:39:36 -07:00
Cary Coutant
c3c5e48680 Fix test for availability of emplace_back.
Testing for the GCC version 5 or later isn't right, since C++ 11 support
wasn't enabled by default until later.  This patch tests the C++ standard
support directly instead of inferring it from the GCC version.

gold/
	* incremental.cc (Sized_incremental_binary::setup_readers): Use
	emplace_back for C++ 11 or later.
2018-07-09 16:12:27 -07:00
Alan Modra
724436fccb [GOLD] PowerPC .gnu.attributes support
elfcpp/
	* powerpc.h (Tag_GNU_Power_ABI_FP): Define.
	(Tag_GNU_Power_ABI_Vector, Tag_GNU_Power_ABI_Struct_Return): Define.
gold/
	* powerpc.cc: Include attributes.h.
	(Powerpc_relobj::attributes_section_data_): New variable, with
	accessor and associated constructor and destructor support.
	(Powerpc_dynobj::attributes_section_data_): Likewise.
	(Powerpc_relobj::do_read_symbols): Stash SHT_GNU_ATTRIBUTES section
	contents in attributes_section_data_.
	(Powerpc_dynobj::do_read_symbols): Likewise.
	(Target_powerpc): Add attributes_section_data_, last_fp_, last_ld_,
	last_vec_, and last_struct_ vars.
	(Target_powerpc::merge_object_attributes): New function.
	(Target_powerpc::do_finalize_sections): Iterate over input objects
	merging attributes.  Create output attributes section.
2018-07-06 15:18:51 +09:30
Nick Clifton
30aa13067f Updated translations.
gas	* po/uk.po: Updated Ukranian translation.
bfd	* po/uk.po: Updated Ukranian translation.
ld	* po/uk.po: Updated Ukranian translation.
gold	* po/uk.po: Updated Ukranian translation.

opcodes	* po/uk.po: Updated Ukranian translation.
	* po/de.po: Updated German translation.
	* po/pt_BR.po: Updated Brazilian Portuguese translation.

binutils* po/sv.po: Updated Swedish translation.
	* po/uk.po: Updated Ukranian translation.
2018-06-26 14:03:16 +01:00
Nick Clifton
71300e2c0c Regenerate configure and pot files with updated binutils version number. 2018-06-24 19:13:01 +01:00
Nick Clifton
719d828850 Add 2.30 branch notes to ChangeLogs and NEWS files. 2018-06-24 18:36:15 +01:00
Cary Coutant
155ea1bc92 Bump version number and summarize new features in 1.16.
gold/
	* version.cc (version_string): Bump to 1.16.
	* NEWS: Add new features in 1.16.
2018-06-23 00:46:13 -07:00
Cary Coutant
add4131108 Fix "may be used uninitialized" warning.
gold/
	PR gold/22914
	* x86_64.cc (Target_x86_64::record_gnu_property): Initialize val.
2018-06-23 00:26:07 -07:00
Cary Coutant
750ea5ed38 Add x86-64 support for Indirect Branch Tracking (IBT).
gold/
	PR gold/22915
	* x86_64.cc (Output_data_plt_x86_64_ibt): New class.
	(Target_x86_64::do_make_data_plt): (All instantiations) Check for
	IBT feature bit and create IBT PLTs.
2018-06-23 00:14:12 -07:00
Cary Coutant
a2575bec24 Update support for .note.gnu.property sections.
The original patch did not give the target enough hooks to discover that
an input object file does not have a particular property. For the
GNU_PROPERTY_X86_FEATURE_1_AND property, for example, where a missing
property should be assumed to be all zeroes, and ANDed with other
object modules, this is essential. We now store the target-specific
properties locally in the Target structure as native uint32_t fields,
then AND the per-object feature bits with the program's feature bits
when we're finished processing each input object file. The target-specific
properties are then added back to the output note section during
finalization.

gold/
	PR gold/22914
	* layout.cc (read_sized_value): Fix spelling of section name.
	(Layout::layout_gnu_property): Call Sized_target::record_gnu_property
	for target-specific properties;
	don't store them with target-independent properties yet.
	(Layout::merge_gnu_properties): New method.
	(Layout::add_gnu_property): New method.
	(Layout::create_gnu_properties_note): Call target to finalize
	target-specific properties. Fix spelling of output section name.
	* layout.h (Layout::merge_gnu_properties): New method.
	(Layout::add_gnu_property): New method.
	* object.cc (Sized_relobj_file::do_layout): Call
	Layout::merge_gnu_properties.
	* target.h (Target::merge_gnu_property): Remove.
	(Target::finalize_gnu_properties): New method.
	(Target::do_merge_gnu_property): Move to Sized_target and rename.
	(Target::do_finalize_gnu_properties): New virtual method.
	(Sized_target::record_gnu_property): Moved and renamed from
	Target::do_merge_gnu_property.
	(Sized_target::merge_gnu_properties): New virtual method.
	* x86_64.cc (Target_x86_64::isa_1_used_, isa_1_needed_)
	(feature_1_, object_feature_1_, seen_first_object_): New data members.
	(Target_x86_64::do_merge_gnu_property): Rename to ...
	(Target_x86_64::record_gnu_property): ... this.  Save target-specific
	properties in Target class object.
	(Target_x86_64::merge_gnu_properties): New method.
	(add_property): New static inline function.
	(Target_x86_64::do_finalize_gnu_properties): New method.
	* testsuite/Makefile.am (gnu_property_test): Remove C source file;
	link directly without compiler driver.
	* testsuite/Makefile.in: Regenerate.
	* testsuite/gnu_property_a.S: Add _start.
2018-06-22 23:36:50 -07:00