Commit Graph

299 Commits

Author SHA1 Message Date
Maciej W. Rozycki
c77cb2a09c MIPS: Make the IRIX naming of local section symbols consistent
Make the MIPS/IRIX naming of local section symbols consistent between
files produced by generic ELF code and ELF linker code, complementing
commit 174fd7f955 ("New bfd elf hook: force naming of local section
symbols"), <https://sourceware.org/ml/binutils/2004-02/msg00072.html>.

Local section symbols have no names in the standard ELF gABI, however
the lack of a name causes problems with IRIX's MIPSpro linker.  To work
around the issue we give them names, however we do that in generic ELF
code only, based on what the `elf_backend_name_local_section_symbols'
hook returns if present.  That makes objects created by GAS or `objdump'
work correctly, however not ones created by `ld -r'.  That would not
normally cause issues with IRIX systems using GAS and `objdump' only
with the MIPSpro linker, however if GNU LD was used for whatever reason
in producing objects later fed to IRIX's MIPSpro linker, then things
would break.

Modify ELF linker code accordingly then, using the same hook.  Adjust
the `ld-elf/64ksec-r' test accordingly so that it also accepts a section
symbol with a name.

Also modify the hook itself so that only actual ET_REL objects have
names assigned to local section symbols.  Other kinds of ELF files are
not ever supposed to be relocated with the MIPSpro linker, so we can
afford producing more standard output.

Add suitable GAS, LD and `objcopy' test cases to the relevant testsuites
to keep these tools consistently verified.  This change also fixes:

FAIL: objcopy executable (pr25662)

across MIPS targets using the IRIX compatibility mode.

	bfd/
	* elflink.c (bfd_elf_final_link): Give local symbols a name if
	so requested.
	* elfxx-mips.c (_bfd_mips_elf_name_local_section_symbols): Only
	return TRUE if making ET_REL output.

	binutils/
	* testsuite/binutils-all/mips/global-local-symtab-sort-o32.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-sort-o32t.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-sort-n32.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-sort-n32t.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-sort-n64.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-sort-n64t.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-final-o32.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-final-n32.d:
	New test.
	* testsuite/binutils-all/mips/global-local-symtab-final-n64.d:
	New test.
	* testsuite/binutils-all/mips/mips.exp: Run the new tests.

	gas/
	* testsuite/gas/mips/global-local-symtab-sort-o32.d: New test.
	* testsuite/gas/mips/global-local-symtab-sort-o32t.d: New test.
	* testsuite/gas/mips/global-local-symtab-sort-n32.d: New test.
	* testsuite/gas/mips/global-local-symtab-sort-n32t.d: New test.
	* testsuite/gas/mips/global-local-symtab-sort-n64.d: New test.
	* testsuite/gas/mips/global-local-symtab-sort-n64t.d: New test.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-elf/sec64k.exp: Also accept a section symbol with
	a name.
	* testsuite/ld-mips-elf/global-local-symtab-sort-o32.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-sort-o32t.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-sort-n32.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-sort-n32t.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-sort-n64.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-sort-n64t.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-final-o32.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-final-n32.d: New
	test.
	* testsuite/ld-mips-elf/global-local-symtab-final-n64.d: New
	test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2020-07-29 20:56:41 +01:00
Maciej W. Rozycki
3f1b17bbf0 MIPS/LD: Set symtab's `sh_info' correctly for IRIX emulations
Correct ELF linker code so as to set the `sh_info' value of the static
symbol table section according to the section symbols vs other symbols
split where required by the selection of the IRIX compatibility mode for
MIPS target.  Add a `elf_backend_elfsym_local_is_section' hook for that
purpose, returning TRUE if it is only STB_LOCAL/STT_SECTION symbols that
are to be considered local for the purpose of this split rather than all
STB_LOCAL symbols.

We do it already in generic ELF code, and have done it since 1993, with
the `elf_backend_sym_is_global' hook, affecting GAS and `objcopy', so
these tools produce correct ELF output in the IRIX compatibility mode,
however if such output is fed as input to `ld -r', then the linker's
output is no longer valid for that mode.  The relevant changes to
generic ELF code are:

commit 062189c6ea
Author: Ian Lance Taylor <ian@airs.com>
Date:   Thu Nov 18 17:12:47 1993 +0000

and:

commit 6e07e54f1b
Author: Ian Lance Taylor <ian@airs.com>
Date:   Thu Jan 6 20:01:42 1994 +0000

(split across two GIT commits likely due to repository conversion
peculiarities).

The `elf_backend_sym_is_global' hook however operates on BFD rather than
ELF symbols, making it unsuitable for the ELF linker as the linker does
not convert any symbol tables processed into the BFD format.  Converting
the hook to operate on ELF symbols would in principle be possible, but
it would still require a considerable rewrite of `bfd_elf_final_link' to
adapt to the interface.

Therefore, especially given that no new use for the IRIX compatibility
mode is expected, minimize changes made to the ELF linker code and just
add an entirely new hook, and wire it in the o32 and n32 MIPS backends
accordingly; the n64 backend never uses the IRIX compatibility mode.

Since we have no coverage here at all add suitable GAS, LD and `objcopy'
test cases to the relevant testsuites to keep these tools consistently
verified.

	bfd/
	* elf-bfd.h (elf_backend_data): Add
	`elf_backend_elfsym_local_is_section' member.
	* elfxx-target.h (elf_backend_elfsym_local_is_section): New
	macro.
	(elfNN_bed): Add `elf_backend_elfsym_local_is_section' member.
	* elflink.c (bfd_elf_final_link): Use it to determine whether
	set the `.symtab' section's `sh_info' value to the index of the
	first non-local or non-section symbol.
	* elf32-mips.c (mips_elf32_elfsym_local_is_section): New
	function.
	(elf_backend_elfsym_local_is_section): New macro.
	* elfn32-mips.c (mips_elf_n32_elfsym_local_is_section): New
	function.
	(elf_backend_elfsym_local_is_section): New macro.

	binutils/
	* testsuite/binutils-all/mips/global-local-symtab-o32.d: New
	test.
	* testsuite/binutils-all/mips/global-local-symtab-o32t.d: New
	test.
	* testsuite/binutils-all/mips/global-local-symtab-n32.d: New
	test.
	* testsuite/binutils-all/mips/global-local-symtab-n32t.d: New
	test.
	* testsuite/binutils-all/mips/global-local-symtab-n64.d: New
	test.
	* testsuite/binutils-all/mips/mips.exp: Run the new tests.

	gas/
	* testsuite/gas/mips/global-local-symtab-o32.d: New test.
	* testsuite/gas/mips/global-local-symtab-o32t.d: New test.
	* testsuite/gas/mips/global-local-symtab-n32.d: New test.
	* testsuite/gas/mips/global-local-symtab-n32t.d: New test.
	* testsuite/gas/mips/global-local-symtab-n64.d: New test.
	* testsuite/gas/mips/global-local-symtab.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-mips-elf/global-local-symtab-o32.d: New test.
	* testsuite/ld-mips-elf/global-local-symtab-o32t.d: New test.
	* testsuite/ld-mips-elf/global-local-symtab-n32.d: New test.
	* testsuite/ld-mips-elf/global-local-symtab-n32t.d: New test.
	* testsuite/ld-mips-elf/global-local-symtab-n64.d: New test.
	* testsuite/ld-mips-elf/global-local-symtab.ld: New test linker
	script.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2020-07-29 20:56:41 +01:00
Nick Clifton
0942c7ab94 Change readelf's display of symbol names (when not in --wide mode) so that if they are going to be truncated then "[...]" is displayed at the end. Add a comment line option to disable this enhancement and restore the old behaviour.
PR 26028
binutils* readelf.c (print_symbol): Handle truncation of symbol names.
	(options): Add -T/--silent-truncation option.
	(parse_args): Handle the option.
	(print_dynamic_symbol): Correct calculation of width available to
	display symbol name.
	* doc/binutils.texi: Document the -T option to readelf.
	* NEWS: Mention the new feature.

gas	* testsuite/gas/ia64/group-2.d: Add -T option to readelf
	command line.
	* testsuite/gas/ia64/unwind.d: Likewise.
	* testsuite/gas/mmix/bspec-1.d: Likewise.
	* testsuite/gas/mmix/bspec-2.d: Likewise.
	* testsuite/gas/mmix/comment-1.d: Likewise.
	* testsuite/gas/tic6x/scomm-directive-4.d: Likewise.

ld	* testsuite/ld-powerpc/powerpc.exp: Add -T option to readelf
	command line when running some tests.
	* testsuite/ld-arm/arm-elf.exp: Likewise.
	* testsuite/ld-mips-elf/mips-elf.exp: Likewise.
	* testsuite/ld-mmix/local1.d: Likewise.
	* testsuite/ld-mmix/local3.d: Likewise.
	* testsuite/ld-mmix/local5.d: Likewise.
	* testsuite/ld-mmix/local7.d: Likewise.
	* testsuite/ld-powerpc/powerpc.exp: Likewise.
2020-07-02 11:30:52 +01:00
Alan Modra
348fe36b1d Remove perror from ld_assemble, ld_compile and ld_nm
ERROR should really be reserved for errors in the testsuite framework,
not just normal errors from the tools under test.  Removing use of
perror has been suggested before but without action, over concerns
that some test failures might be missed.  This patch removes uses of
perror in ld_assemble, ld_compile and ld_nm, and updates numerous
places that ignored the result of these functions by inappropriately
returning an "unresolved" test status.  Net result over my large set
of targets look good, in some cases improving the diagnostics, eg:

i386-msdos  -ERROR: tmpdir/script: nm failed
i386-msdos  -ERROR: tmpdir/script: nm failed
i386-msdos  -ERROR: tmpdir/script: nm failed
i386-msdos  -ERROR: tmpdir/script: nm failed
i386-msdos  +FAIL: script
i386-msdos  +FAIL: MRI script
i386-msdos  +FAIL: MEMORY
i386-msdos  +FAIL: MEMORY with symbols

	* testsuite/lib/ld-lib.exp (default_ld_compile): Don't perror on
	a compiler error.
	(default_ld_assemble): Similarly for an assembler error.
	(default_ld_nm): Similarly for an nm error.
	(run_ld_link_tests): Report ld_assemble errors as a fail.
	(check_as_cfi): Remove now unnecessary perror substitution.
	* testsuite/ld-elf/exclude.exp: Report ld_nm error return as test
	fails rather then unresolved.
	* testsuite/ld-gc/gc.exp: Likewise.
	* testsuite/ld-scripts/alignof.exp: Likewise.
	* testsuite/ld-scripts/defined.exp: Likewise.
	* testsuite/ld-scripts/script.exp: Likewise.
	* testsuite/ld-scripts/sizeof.exp: Likewise.
	* testsuite/ld-selective/selective.exp: Likewise.
	* testsuite/ld-scripts/extern.exp: Likewise.  Return on ld_link
	failure.
	* testsuite/ld-elfweak/elfweak.exp: Report compiler errors as
	test unresolved.
	* testsuite/ld-fastcall/fastcall.exp: Report assember errors as
	test fails.
	* testsuite/ld-i386/i386.exp (iamcu_tests): Likewise.
	* testsuite/ld-ia64/line.exp: Likewise.
	* testsuite/ld-mep/mep.exp: Likewise.
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Likewise.
	* testsuite/ld-nios2/nios2.exp: Likewise.
	* testsuite/ld-scripts/alignof.exp: Likewise.
	* testsuite/ld-x86-64/line.exp: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
	* testsuite/ld-scripts/log2.exp: Formatting.
	* testsuite/ld-tic6x/tic6x.exp: Report ld_link errors as a test fail.
2020-06-20 15:53:37 +09:30
Alan Modra
e2c8dab6ae tcl global directive outside proc body does nothing (ld)
* testsuite/config/default.exp: Remove global directive outside
	proc body.
	* testsuite/ld-bootstrap/bootstrap.exp: Likewise.
	* testsuite/ld-elf/compress.exp: Likewise.
	* testsuite/ld-elf/elf.exp: Likewise.
	* testsuite/ld-elf/exclude.exp: Likewise.
	* testsuite/ld-elf/frame.exp: Likewise.
	* testsuite/ld-elf/indirect.exp: Likewise.
	* testsuite/ld-elf/linux-x86.exp: Likewise.
	* testsuite/ld-elf/shared.exp: Likewise.
	* testsuite/ld-elf/tls.exp: Likewise.
	* testsuite/ld-elf/tls_common.exp: Likewise.
	* testsuite/ld-elfcomm/elfcomm.exp: Likewise.
	* testsuite/ld-elfweak/elfweak.exp: Likewise.
	* testsuite/ld-frv/fdpic.exp: Likewise.
	* testsuite/ld-frv/tls.exp: Likewise.
	* testsuite/ld-gc/gc.exp: Likewise.
	* testsuite/ld-i386/i386.exp: Likewise.
	* testsuite/ld-i386/no-plt.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Likewise.
	* testsuite/ld-nios2/nios2.exp: Likewise.
	* testsuite/ld-plugin/lto.exp: Likewise.
	* testsuite/ld-plugin/plugin.exp: Likewise.
	* testsuite/ld-powerpc/export-class.exp: Likewise.
	* testsuite/ld-scripts/align.exp: Likewise.
	* testsuite/ld-scripts/crossref.exp: Likewise.
	* testsuite/ld-scripts/defined.exp: Likewise.
	* testsuite/ld-scripts/overlay-size.exp: Likewise.
	* testsuite/ld-scripts/provide.exp: Likewise.
	* testsuite/ld-scripts/weak.exp: Likewise.
	* testsuite/ld-selective/selective.exp: Likewise.
	* testsuite/ld-sh/rd-sh.exp: Likewise.
	* testsuite/ld-size/size.exp: Likewise.
	* testsuite/ld-srec/srec.exp: Likewise.
	* testsuite/ld-x86-64/mpx.exp: Likewise.
	* testsuite/ld-x86-64/no-plt.exp: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
2020-06-04 16:11:19 +09:30
H.J. Lu
10ca4b042d readelf: Consolidate --syms --use-dynamic with --dyn-syms
When reconstructing dynamic symbol table from the PT_DYNAMIC segment,
compute dynamic symbol table size from hash table.  For DT_HASH, the
number of dynamic symbol table entries equals the number of chains.
For DT_GNU_HASH/DT_MIPS_XHASH, only defined symbols with non-STB_LOCAL
indings are in hash table.  Since DT_GNU_HASH/DT_MIPS_XHASH place all
symbols with STB_LOCAL binding before symbols with other bindings and
all undefined symbols defined ones in dynamic symbol table, the highest
symbol index in DT_GNU_HASH/DT_MIPS_XHASH is the highest dynamic symbol
table index.

Rewrite print_dynamic_symbol to dump dynamic symbol table for --dyn-syms
and --syms --use-dynamic.

binutils/

	PR binutils/25707
	* readelf.c (nbuckets): New.
	(nchains): Likewise.
	(buckets): Likewise.
	(chains): Likewise.
	(ngnubuckets): Likewise.
	(gnubuckets): Likewise.
	(gnuchains): Likewise.
	(mipsxlat): Likewise.
	(ngnuchains): Likewise.
	(gnusymidx): Likewise.
	(VALID_SYMBOL_NAME): Likewise.
	(VALID_DYNAMIC_NAME): Use it.
	(get_dynamic_data): Moved before process_dynamic_section.
	(get_num_dynamic_syms): New function.
	(process_dynamic_section): Use DT_SYMTAB, DT_SYMENT, DT_HASH,
	DT_GNU_HASH and DT_MIPS_XHASH to reconstruct dynamic symbol
	table.  Use DT_STRTAB and DT_STRSZ to reconstruct dynamic string
	table.
	(get_symbol_index_type): Don't print "bad section index" when
	there is no section header.
	(print_dynamic_symbol): Rewrite.
	(process_symbol_table): Call print_dynamic_symbol to dump dynamic
	symbol table.

ld/

	PR binutils/25707
	* testsuite/ld-arm/armthumb-lib.sym: Updated.
	* testsuite/ld-arm/farcall-mixed-app.sym: Likewise.
	* testsuite/ld-arm/farcall-mixed-app2.sym: Likewise.
	* testsuite/ld-arm/fdpic-main-m.sym: Likewise.
	* testsuite/ld-arm/fdpic-main.sym: Likewise.
	* testsuite/ld-arm/fdpic-shared-m.sym: Likewise.
	* testsuite/ld-arm/fdpic-shared.sym: Likewise.
	* testsuite/ld-arm/mixed-app.sym: Likewise.
	* testsuite/ld-arm/mixed-lib.sym: Likewise.
	* testsuite/ld-arm/preempt-app.sym: Likewise.
	* testsuite/ld-elf/hash.d: Likewise.
	* testsuite/ld-elf/pr13195.d: Likewise.
	* testsuite/ld-elfvsb/hidden2.d: Likewise.
	* testsuite/ld-mips-elf/hash2.d: Likewise.
2020-04-14 05:00:34 -07:00
Alan Modra
85e290dc12 Re: Prefer object over notype symbols when disassembling
Reverts unnecessary mips testsuite changes made by commit 660df28acf.

	* testsuite/ld-mips-elf/eh-frame5.s,
	* testsuite/ld-mips-elf/ehdr_start-new.s,
	* testsuite/ld-mips-elf/ehdr_start-o32.s,
	* testsuite/ld-mips-elf/mips16-call-global-1.s,
	* testsuite/ld-mips-elf/mips16-intermix-1.s,
	* testsuite/ld-mips-elf/mips16-pic-1b.s,
	* testsuite/ld-mips-elf/mips16-pic-4c.s,
	* testsuite/ld-mips-elf/no-shared-1-n64.s,
	* testsuite/ld-mips-elf/no-shared-1-o32.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-1b-micromips.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-1b.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-2a.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-3b.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-4b.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-5a.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s,
	* testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s,
	* testsuite/ld-mips-elf/pie.s,
	* testsuite/ld-mips-elf/relax-jalr.s: Revert 2019-12-17 change.
2020-01-07 09:34:52 +10:30
Alan Modra
b3adc24a07 Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
Alan Modra
660df28acf Prefer object over notype symbols when disassembling
Changing objdump disassembly output like this always requires some
testsuite changes, with the avr and x64_64 changes simply due to
picking up better symbols, the whole point of the patch.

The mips changes are due to mips-sgi-irix changing STT_NOTYPE symbols
to STT_OBJECT, which objdump now chooses in preference to script
symbols.  The problem is that objdump looks at the first symbol in the
section being disassembled, and if object type, just dumps out bytes
rather than disassembling.  This results in new failures:

FAIL: JAL overflow 2
FAIL: undefined weak symbol overflow
FAIL: undefined weak symbol overflow (n32)
FAIL: undefined weak symbol overflow (n64)

So for mips-sgi-irix function symbols really do need to be function
type.  I fixed a few more than just the required minimum to avoid the
above test fails.

binutils/
	* objdump.c (compare_section): New static var.
	(compare_symbols): Sort by current section only.  Don't access
	symbol name out of bounds when checking for file symbols.
	Sort section symbols and object symbols.
	(find_symbol_for_address): Remove bogus debugging and section
	symbol test.
	(disassemble_data): Move symbol sort from here..
	(disassemble_section): ..to here.  Set compare_section.
ld/
	* testsuite/ld-avr/lds-mega.d: Adjust symbols to suit objdump change.
	* testsuite/ld-avr/lds-tiny.d: Likewise.
	* testsuite/ld-x86-64/load2.d: Likewise.
	* testsuite/ld-mips-elf/compact-eh1.s: Give function symbols
	function type.
	* testsuite/ld-mips-elf/compact-eh1a.s: Likewise.
	* testsuite/ld-mips-elf/compact-eh1b.s: Likewise.
	* testsuite/ld-mips-elf/compact-eh2.s: Likewise.
	* testsuite/ld-mips-elf/compact-eh3.s: Likewise.
	* testsuite/ld-mips-elf/compact-eh3a.s: Likewise.
	* testsuite/ld-mips-elf/eh-frame5.s: Likewise.
	* testsuite/ld-mips-elf/ehdr_start-new.s: Likewise.
	* testsuite/ld-mips-elf/ehdr_start-o32.s: Likewise.
	* testsuite/ld-mips-elf/emit-relocs-1a.s: Likewise.
	* testsuite/ld-mips-elf/jaloverflow-2.s: Likewise.
	* testsuite/ld-mips-elf/jaloverflow.s: Likewise.
	* testsuite/ld-mips-elf/mips16-call-global-1.s: Likewise.
	* testsuite/ld-mips-elf/mips16-intermix-1.s: Likewise.
	* testsuite/ld-mips-elf/mips16-pic-1b.s: Likewise.
	* testsuite/ld-mips-elf/mips16-pic-4c.s: Likewise.
	* testsuite/ld-mips-elf/no-shared-1-n64.s: Likewise.
	* testsuite/ld-mips-elf/no-shared-1-o32.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-1b-micromips.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-1b.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-2a.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-3b.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-4b.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-5a.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s: Likewise.
	* testsuite/ld-mips-elf/pie.s: Likewise.
	* testsuite/ld-mips-elf/relax-jalr.s: Likewise.
	* testsuite/ld-mips-elf/reloc-1a.s: Likewise.
	* testsuite/ld-mips-elf/reloc-2a.s: Likewise.
	* testsuite/ld-mips-elf/reloc-4.s: Likewise.
	* testsuite/ld-mips-elf/reloc-5.s: Likewise.
	* testsuite/ld-mips-elf/reloc-6b.s: Likewise.
	* testsuite/ld-mips-elf/textrel-1.s: Likewise.
	* testsuite/ld-mips-elf/undefweak-overflow.s: Likewise.
	* testsuite/ld-mips-elf/undefweak-overflow.d: Adjust.
2019-12-17 20:43:00 +10:30
Alan Modra
260bcd09bf Accept mips-sgi-irix output in a few ld tests
mips-sgi-irix gas emits STT_OBJECT symbols where other assemblers
would use STT_NOTYPE.  See mips_frob_symbol in gas/config/tc-mips.c.
Also, the section of some dynamic symbols is set to SHN_MIPS_TEXT or
SHN_MIPS_DATA.  See _bfd_mips_elf_finish_dynamic_symbol in
bfd/elfxx-mips.c.  These differences are visible in readelf output
and cause some tests to fail for no other good reason.

The patch fixes the following fails and removes an xfail.
FAIL: ld-elf/pr23591
FAIL: PROVIDE_HIDDEN test (auxiliary shared object)
FAIL: PR ld/21233 dynamic symbols with section GC (auxiliary shared library)

	* testsuite/ld-elf/pr21233-l.sd: Accept OBJECT for type and
	PRC for section of symbols.
	* testsuite/ld-elf/pr23591.d: Likewise.
	* testsuite/ld-elf/provide-hidden-s.nd: Likewise.
	* testsuite/ld-mips-elf/start.s: Make symbols function type.
	* testsuite/ld-mips-elf/hash2.d: Adjust.  Don't xfail irix.
2019-12-17 20:42:47 +10:30
Alan Modra
e6b39f6f8e Re: Only give FDE encoding warnings if --eh-frame-hdr was specified.
For mips*-linux targets, fixes the following fails.
FAIL: MIPS eh-frame 1, n32
FAIL: MIPS eh-frame 1, n64
FAIL: MIPS eh-frame 2, n32
FAIL: MIPS eh-frame 2, n64

	* testsuite/ld-mips-elf/eh-frame1-n32.d: Pass --eh-frame-hdr to ld.
	* testsuite/ld-mips-elf/eh-frame1-n64.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame2-n32.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame2-n64.d: Likewise.
2019-12-06 17:59:13 +10:30
Alan Modra
075a2b89c7 Rename elf32.em to elf.em
* emultempl/elf32.em: Remove "misnamed" comment.  Rename to..
	* emultempl/elf.em: ..this.
	* configure.ac (elf_list_options): Adjust TEMPLATE_NAME grep.
	* emulparams/aarch64cloudabi.sh (TEMPLATE_NAME): Set to elf.
	* emulparams/aarch64elf.sh: Likewise.
	* emulparams/aarch64elf32.sh: Likewise.
	* emulparams/aarch64fbsd.sh: Likewise.
	* emulparams/aarch64linux.sh: Likewise.
	* emulparams/aarch64linux32.sh: Likewise.
	* emulparams/arcelf.sh: Likewise.
	* emulparams/arcelf_prof.sh: Likewise.
	* emulparams/arclinux.sh: Likewise.
	* emulparams/arclinux_prof.sh: Likewise.
	* emulparams/arcv2elf.sh: Likewise.
	* emulparams/arcv2elfx.sh: Likewise.
	* emulparams/armelf.sh: Likewise.
	* emulparams/armelf_fuchsia.sh: Likewise.
	* emulparams/armelf_linux.sh: Likewise.
	* emulparams/armelf_phoenix.sh: Likewise.
	* emulparams/armnto.sh: Likewise.
	* emulparams/avr1.sh: Likewise.
	* emulparams/avr2.sh: Likewise.
	* emulparams/avr25.sh: Likewise.
	* emulparams/avr3.sh: Likewise.
	* emulparams/avr31.sh: Likewise.
	* emulparams/avr35.sh: Likewise.
	* emulparams/avr4.sh: Likewise.
	* emulparams/avr5.sh: Likewise.
	* emulparams/avr51.sh: Likewise.
	* emulparams/avr6.sh: Likewise.
	* emulparams/avrtiny.sh: Likewise.
	* emulparams/avrxmega1.sh: Likewise.
	* emulparams/avrxmega2.sh: Likewise.
	* emulparams/avrxmega3.sh: Likewise.
	* emulparams/avrxmega4.sh: Likewise.
	* emulparams/avrxmega5.sh: Likewise.
	* emulparams/avrxmega6.sh: Likewise.
	* emulparams/avrxmega7.sh: Likewise.
	* emulparams/criself.sh: Likewise.
	* emulparams/crislinux.sh: Likewise.
	* emulparams/cskyelf.sh: Likewise.
	* emulparams/d10velf.sh: Likewise.
	* emulparams/elf32_sparc.sh: Likewise.
	* emulparams/elf32_spu.sh: Likewise.
	* emulparams/elf32_tic6x_le.sh: Likewise.
	* emulparams/elf32_x86_64.sh: Likewise.
	* emulparams/elf32am33lin.sh: Likewise.
	* emulparams/elf32bfin.sh: Likewise.
	* emulparams/elf32bfinfd.sh: Likewise.
	* emulparams/elf32bmip.sh: Likewise.
	* emulparams/elf32bmipn32-defs.sh: Likewise.
	* emulparams/elf32cr16.sh: Likewise.
	* emulparams/elf32cr16c.sh: Likewise.
	* emulparams/elf32crx.sh: Likewise.
	* emulparams/elf32epiphany.sh: Likewise.
	* emulparams/elf32epiphany_4x4.sh: Likewise.
	* emulparams/elf32frvfd.sh: Likewise.
	* emulparams/elf32ip2k.sh: Likewise.
	* emulparams/elf32lm32.sh: Likewise.
	* emulparams/elf32lm32fd.sh: Likewise.
	* emulparams/elf32lriscv-defs.sh: Likewise.
	* emulparams/elf32m32c.sh: Likewise.
	* emulparams/elf32mb_linux.sh: Likewise.
	* emulparams/elf32mbel_linux.sh: Likewise.
	* emulparams/elf32mcore.sh: Likewise.
	* emulparams/elf32mep.sh: Likewise.
	* emulparams/elf32metag.sh: Likewise.
	* emulparams/elf32microblaze.sh: Likewise.
	* emulparams/elf32mipswindiss.sh: Likewise.
	* emulparams/elf32or1k.sh: Likewise.
	* emulparams/elf32ppccommon.sh: Likewise.
	* emulparams/elf32rl78.sh: Likewise.
	* emulparams/elf32rx.sh: Likewise.
	* emulparams/elf32tilegx.sh: Likewise.
	* emulparams/elf32tilepro.sh: Likewise.
	* emulparams/elf32vax.sh: Likewise.
	* emulparams/elf32visium.sh: Likewise.
	* emulparams/elf32xc16x.sh: Likewise.
	* emulparams/elf32xc16xl.sh: Likewise.
	* emulparams/elf32xc16xs.sh: Likewise.
	* emulparams/elf32xstormy16.sh: Likewise.
	* emulparams/elf32xtensa.sh: Likewise.
	* emulparams/elf64_aix.sh: Likewise.
	* emulparams/elf64_ia64.sh: Likewise.
	* emulparams/elf64_s390.sh: Likewise.
	* emulparams/elf64_sparc.sh: Likewise.
	* emulparams/elf64alpha.sh: Likewise.
	* emulparams/elf64bpf.sh: Likewise.
	* emulparams/elf64hppa.sh: Likewise.
	* emulparams/elf64mmix.sh: Likewise.
	* emulparams/elf64rdos.sh: Likewise.
	* emulparams/elf64tilegx.sh: Likewise.
	* emulparams/elf_i386.sh: Likewise.
	* emulparams/elf_i386_be.sh: Likewise.
	* emulparams/elf_i386_ldso.sh: Likewise.
	* emulparams/elf_i386_vxworks.sh: Likewise.
	* emulparams/elf_iamcu.sh: Likewise.
	* emulparams/elf_k1om.sh: Likewise.
	* emulparams/elf_l1om.sh: Likewise.
	* emulparams/elf_s390.sh: Likewise.
	* emulparams/elf_x86_64.sh: Likewise.
	* emulparams/h8300elf.sh: Likewise.
	* emulparams/h8300elf_linux.sh: Likewise.
	* emulparams/hppa64linux.sh: Likewise.
	* emulparams/hppaelf.sh: Likewise.
	* emulparams/hppalinux.sh: Likewise.
	* emulparams/i386lynx.sh: Likewise.
	* emulparams/i386moss.sh: Likewise.
	* emulparams/i386nto.sh: Likewise.
	* emulparams/m32relf.sh: Likewise.
	* emulparams/m32relf_linux.sh: Likewise.
	* emulparams/m68hc11elf.sh: Likewise.
	* emulparams/m68hc11elfb.sh: Likewise.
	* emulparams/m68hc12elf.sh: Likewise.
	* emulparams/m68hc12elfb.sh: Likewise.
	* emulparams/m68kelf.sh: Likewise.
	* emulparams/mn10300.sh: Likewise.
	* emulparams/nds32elf.sh: Likewise.
	* emulparams/nds32elf16m.sh: Likewise.
	* emulparams/nds32elf_linux.sh: Likewise.
	* emulparams/nios2elf.sh: Likewise.
	* emulparams/nios2linux.sh: Likewise.
	* emulparams/pruelf.sh: Likewise.
	* emulparams/score3_elf.sh: Likewise.
	* emulparams/shelf.sh: Likewise.
	* emulparams/shelf_nto.sh: Likewise.
	* emulparams/shelf_vxworks.sh: Likewise.
	* emulparams/shlelf_linux.sh: Likewise.
	* emulparams/shlelf_nto.sh: Likewise.
	* emulparams/v850.sh: Likewise.
	* emulparams/v850_rh850.sh: Likewise.
	* ldelf.c: Update comment.
	* ldelf.h: Likewise.
	* emultempl/aarch64elf.em: Likewise.
	* emultempl/alphaelf.em: Likewise.
	* emultempl/arclinux.em: Likewise.
	* emultempl/armelf.em: Likewise.
	* emultempl/avrelf.em: Likewise.
	* emultempl/bfin.em: Likewise.
	* emultempl/cr16elf.em: Likewise.
	* emultempl/crxelf.em: Likewise.
	* emultempl/cskyelf.em: Likewise.
	* emultempl/elf-generic.em: Likewise.
	* emultempl/elf-x86.em: Likewise.
	* emultempl/epiphanyelf_4x4.em: Likewise.
	* emultempl/hppaelf.em: Likewise.
	* emultempl/ia64elf.em: Likewise.
	* emultempl/m68hc1xelf.em: Likewise.
	* emultempl/m68kelf.em: Likewise.
	* emultempl/metagelf.em: Likewise.
	* emultempl/mmix-elfnmmo.em: Likewise.
	* emultempl/mmixelf.em: Likewise.
	* emultempl/mmo.em: Likewise.
	* emultempl/needrelax.em: Likewise.
	* emultempl/nios2elf.em: Likewise.
	* emultempl/ppc32elf.em: Likewise.
	* emultempl/ppc64elf.em: Likewise.
	* emultempl/pruelf.em: Likewise.
	* emultempl/rxelf.em: Likewise.
	* emultempl/scoreelf.em: Likewise.
	* emultempl/spuelf.em: Likewise.
	* emultempl/tic6xdsbt.em: Likewise.
	* emultempl/v850elf.em: Likewise.
	* emultempl/vms.em: Likewise.
	* emultempl/vxworks.em: Likewise.
	* emultempl/xtensaelf.em: Likewise.
	* scripttempl/arclinux.sc: Likewise.
	* scripttempl/armbpabi.sc: Likewise.
	* scripttempl/elf.sc: Likewise.
	* scripttempl/elf64bpf.sc: Likewise.
	* scripttempl/elf64hppa.sc: Likewise.
	* scripttempl/elf_chaos.sc: Likewise.
	* scripttempl/elfarc.sc: Likewise.
	* scripttempl/elfarcv2.sc: Likewise.
	* scripttempl/elfd10v.sc: Likewise.
	* scripttempl/elfm68hc11.sc: Likewise.
	* scripttempl/elfm68hc12.sc: Likewise.
	* scripttempl/elfm9s12z.sc: Likewise.
	* scripttempl/elfxgate.sc: Likewise.
	* scripttempl/elfxtensa.sc: Likewise.
	* scripttempl/epiphany_4x4.sc: Likewise.
	* scripttempl/iq2000.sc: Likewise.
	* scripttempl/mep.sc: Likewise.
	* scripttempl/nds32elf.sc: Likewise.
	* scripttempl/v850.sc: Likewise.
	* scripttempl/v850_rh850.sc: Likewise.
	* scripttempl/xstormy16.sc: Likewise.
	* testsuite/ld-arm/arm-dyn.ld: Likewise.
	* testsuite/ld-arm/arm-lib.ld: Likewise.
	* testsuite/ld-arm/arm-no-rel-plt.ld: Likewise.
	* testsuite/ld-arm/fdpic-main.ld: Likewise.
	* testsuite/ld-arm/fdpic-shared.ld: Likewise.
	* testsuite/ld-elf/elf.exp: Likewise.
	* testsuite/ld-elf/orphan-region.d: Likewise.
	* testsuite/ld-elf/orphan.d: Likewise.
	* testsuite/ld-elf/pr349.d: Likewise.
	* testsuite/ld-elf/warn2.d: Likewise.
	* testsuite/ld-elfvsb/elf-offset.ld: Likewise.
	* testsuite/ld-mips-elf/mips-dyn.ld: Likewise.
	* testsuite/ld-mips-elf/mips-lib.ld: Likewise.
	* testsuite/ld-scripts/dynamic-sections.t: Likewise.
	* testsuite/ld-shared/elf-offset.ld: Likewise.
	* configure: Regenerate.
2019-09-11 13:45:18 +09:30
Mihailo Stojanovic
f16a9783c5 Add support for a MIPS specific .MIPS.xhash section.
This patch is a reimplementation of [1] which was submitted in 2015 by
Neil Schellenberger. Copyright issue was sorted out [2] last year.
It proposed a new section (.gnu.xhash) and related dynamic tag
(DT_GNU_XHASH). The new section would be virtually identical to the
existing .gnu.hash except for the translation table (xlat) which would
contain correct MIPS .dynsym indexes corresponding to the hashvals in
chains. This is because MIPS ABI imposes a different ordering on the
dynsyms than the one expected by the .gnu.hash section. Another addition
would be a leading word (ngnusyms) which would contain the number of
entries in the translation table.

  In this patch, the new section name and dynamic tag are changed to
reflect the fact that the section should be treated as MIPS-specific
(.MIPS.xhash and DT_MIPS_XHASH).

  This patch addresses the alignment issue as reported in [3], which is
caused by the leading word added to the .MIPS.xhash section. Leading word
is removed in this patch, and the number of entries in the translation
table is now calculated using DT_MIPS_SYMTABNO dynamic tag (this is
addressed by the corresponding glibc patch).

  Suggestions on coding style in [4] were taken into account. Existing
GNU hash testcase was covered, and another one was added in the MIPS
part of the testsuite.

  The other major change is reserving MIPS ABI version 5 for .MIPS.xhash,
marking the need of support for .MIPS.xhash in the dynamic linker (again,
addressed in the corresponding glibc patch). This is something which I
am not sure of, especially after reading [5]. I am confused on whether
this ABI version is reserved for IFUNC, or it can be used for this
purpose.

Already mentioned glibc patch is submitted at:
https://sourceware.org/ml/libc-alpha/2019-06/msg00456.html

[1] https://sourceware.org/ml/binutils/2015-10/msg00057.html
[2] https://sourceware.org/ml/binutils/2018-03/msg00025.html
[3] https://sourceware.org/ml/binutils/2016-01/msg00006.html
[4] https://sourceware.org/ml/binutils/2016-02/msg00097.html
[5] https://sourceware.org/ml/libc-alpha/2016-12/msg00853.html

ld      * emulparams/elf32bmip.sh: Add .MIPS.xhash section.
        * emulparams/elf32bmipn32-defs.sh: Add .MIPS.xhash section.
        * emulparams/elf64bmip-defs.sh: Add .MIPS.xhash section.
        * emultempl/mipself.em: Remove mips_after_parse function.
        * testsuite/ld-elf/hash.d: Update comment.
        * testsuite/ld-mips-elf/hash1.d: New test.
        * testsuite/ld-mips-elf/hash1.s: Ditto.
        * testsuite/ld-mips-elf/hash1a.d: Remove.
        * testsuite/ld-mips-elf/hash1b.d: Ditto.
        * testsuite/ld-mips-elf/hash1c.d: Ditto
        * testsuite/ld-mips-elf/hash2.d: New test.
        * testsuite/ld-mips-elf/mips-elf.exp: New tests.
        * testsuite/ld-mips-elf/start.s: New test.

bfd     * elf-bfd.h (struct elf_backend_data): New members.
        * elflink.c (_bfd_elf_link_create_dynamic_sections): Create
        .gnu.hash section if necessary.
        (struct collect_gnu_hash_codes): New member.
        (elf_gnu_hash_process_symidx): New function name.
        (elf_renumber_gnu_hash_syms): Ignore local and undefined
        symbols. Record xlat location for every symbol which should have
        a .MIPS.xhash entry.
        (bfd_elf_size_dynamic_sections): Add DT_GNU_HASH dynamic tag to
        dynamic section if necessary.
        (GNU_HASH_SECTION_NAME): New define.
        (bfd_elf_size_dynsym_hash_dynstr): Get .MIPS.xhash section.
        Update the section size info.
        * elfxx-mips.c (struct mips_elf_hash_sort_data): New members.
        (struct mips_elf_link_hash_entry): New member.
        (mips_elf_link_hash_newfunc): Initialize .MIPS.xhash translation
        table location.
        (mips_elf_sort_hash_table): Initialize the pointer to the
        .MIPS.xhash section.
        (mips_elf_sort_hash_table_f): Populate the .MIPS.xhash
        translation table entry with the symbol dynindx.
        (_bfd_mips_elf_section_from_shdr): Add SHT_MIPS_XHASH.
        (_bfd_mips_elf_fake_sections): Initialize .MIPS.xhash section
        info.
        (_bfd_mips_elf_create_dynamic_sections): Create .MIPS.xhash
        section.
        (_bfd_mips_elf_size_dynamic_sections): Add DT_MIPS_XHASH tag to
        dynamic section.
        (_bfd_mips_elf_finish_synamic_sections): Add DT_MIPS_XHASH.
        (_bfd_mips_elf_final_write_processing): Set .MIPS.xhash section
        sh_link info.
        (_bfd_mips_elf_get_target_dtag): Get DT_MIPS_XHASH tag.
        (MIPS_LIBC_ABI_XHASH): New ABI version enum value.
        (_bfd_mips_post_process_headers): Mark the ABI version as
        MIPS_LIBC_ABI_XHASH if there exists a .MIPS.xhash section,
        but not a .hash section.
        (_bfd_mips_elf_record_xhash_symbol): New function. Record a
        position in the translation table, associated with the hash
        entry.
        * elfxx-mips.h (literal_reloc_p): Define
        elf_backend_record_xhash_symbol backend hook.
        * elfxx-target.h: Initialize elf_backend_record_xhash_symbol
        backend hook.

include * elf/mips.h (SHT_GNU_XHASH): New define.
        (DT_GNU_XHASH): New define.

binutils * readelf.c (get_mips_dynamic_type): Return MIPS_XHASH dynamic type.
        (get_mips_section_type_name): Return MI{S_XHASH name string.
        (dynamic_section_mips_val): Initialize the .MIPS.xhash dynamic
        info.
        (process_symbol_table): Initialize the .MIPS.xhash section
        pointer. Adjust the readelf output to support the new section.
        (process_object): Set the .MIPS.xhash dynamic info to zero.
2019-08-09 11:06:37 +01:00
Alan Modra
f26a32876b Dynamic TLS section symbols
It is possible to create shared libraries on PowerPC using
-ftls-model=inital-exec or -ftls-model=local-exec.  The first is half
reasonable, getting you a shared library that can't be dlopen'd but
otherwise is reasonable.  The second is quite bad.  Not only do you
lose being able to dlopen, the library also has dynamic text
relocations.  Worse, the TPREL16_LO, TPREL16_HA and other TPREL16
dynamic relocs emitted were wrong, resulting in wrong values being
applied by ld.so.

Using the first TLS section symbol in dynamic relocations for local
TLS symbols doesn't work.  It's wrong because TLS symbols used by TLS
relocs have values relative to the TLS segment, whereas the TLS
section symbols are addresses.  This patch instead uses a symbol index
of zero which is used elsewhere by PowerPC on dynamic TLS relocs.
It's not strictly ABI compliant to use a non-TLS symbol with TLS
relocs but symbol index zero can be interpreted as "no symbol".  Not
using the first TLS section symbol means it doesn't need to be dynamic.

The patch also fixes a further problem with PowerPC32 dynamic TPREL16*
relocs, which shouldn't have the symbol value in the addend as we do
for non-TLS symbols.

bfd/
	* elflink.c (_bfd_elf_omit_section_dynsym_default): Don't keep
	tls_sec.
	(_bfd_elf_init_1_index_section): Prefer not using TLS sections.
	(_bfd_elf_init_2_index_sections): Likewise.
	* elf64-ppc.c (ppc64_elf_relocate_section): When emitting dynamic
	relocations for local TLS symbols, use STN_UNDEF as the relocation
	symbol.
	* elf32-ppc.c (ppc_elf_relocate_section): Likewise, and don't
	leave TLS symbol value in the addend.
ld/
	* testsuite/ld-powerpc/tlsso.r: Update.
	* testsuite/ld-powerpc/tlsso32.g: Update.
	* testsuite/ld-powerpc/tlsso32.r: Update.
	* testsuite/ld-powerpc/tlstocso.r: Update.
	* testsuite/ld-cris/tls-dso-dtpoffd2.d: Update.
	* testsuite/ld-cris/tls-dso-dtpoffd4.d: Update.
	* testsuite/ld-cris/tls-dso-tpoffgotcomm1.d: Update.
	* testsuite/ld-cris/tls-gd-1.d: Update.
	* testsuite/ld-cris/tls-gd-1h.d: Update.
	* testsuite/ld-cris/tls-gd-2.d: Update.
	* testsuite/ld-cris/tls-gd-2h.d: Update.
	* testsuite/ld-cris/tls-ie-10.d: Update.
	* testsuite/ld-cris/tls-ie-11.d: Update.
	* testsuite/ld-cris/tls-ie-8.d: Update.
	* testsuite/ld-cris/tls-ie-9.d: Update.
	* testsuite/ld-cris/tls-js1.d: Update.
	* testsuite/ld-cris/tls-ld-4.d: Update.
	* testsuite/ld-cris/tls-ld-5.d: Update.
	* testsuite/ld-cris/tls-ld-6.d: Update.
	* testsuite/ld-cris/tls-ld-7.d: Update.
	* testsuite/ld-cris/tls-ldgd-14.d: Update.
	* testsuite/ld-cris/tls-ldgd-15.d: Update.
	* testsuite/ld-cris/tls-ldgdx-14.d: Update.
	* testsuite/ld-cris/tls-ldgdx-15.d: Update.
	* testsuite/ld-cris/tls-local-54.d: Update.
	* testsuite/ld-cris/tls-local-60.d: Update.
	* testsuite/ld-cris/tls-local-61.d: Update.
	* testsuite/ld-cris/tls-local-63.d: Update.
	* testsuite/ld-cris/tls-local-64.d: Update.
	* testsuite/ld-cris/tls-ok-30.d: Update.
	* testsuite/ld-cris/tls-ok-32.d: Update.
	* testsuite/ld-cris/tls-ok-34.d: Update.
	* testsuite/ld-mips-elf/tls-multi-got-1.got: Update.
	* testsuite/ld-mips-elf/tls-multi-got-1.r: Update.
	* testsuite/ld-mips-elf/tlsdyn-pie-o32.d: Update.
	* testsuite/ld-mips-elf/tlsdyn-pie-o32.got: Update.
	* testsuite/ld-mips-elf/tlslib-o32-hidden.got: Update.
	* testsuite/ld-mips-elf/tlslib-o32-ver.got: Update.
	* testsuite/ld-mips-elf/tlslib-o32.got: Update.
	* testsuite/ld-s390/tlspic.rd: Update.
	* testsuite/ld-s390/tlspic_64.rd: Update.
	* testsuite/ld-sparc/tlssunnopic32.rd: Update.
	* testsuite/ld-sparc/tlssunnopic64.rd: Update.
	* testsuite/ld-sparc/tlssunpic32.rd: Update.
	* testsuite/ld-sparc/tlssunpic64.rd: Update.
2019-07-13 09:57:50 +09:30
Faraz Shahbazker
1e129bbefa MIPS/LD: Skip overflow check for %pcrel_hi relocations
Overflow checks were removed for all hi16 relocations except PC-relative
high relocations per PR ld/16720.  Remove overflow checks from %pcrel_hi
relocations so that we can correctly handle negative offsets from PC.

bfd/
	* elfxx-mips.c (mips_elf_calculate_relocation) <R_MIPS_PCHI16>:
	Remove overflow check.

ld/
	* testsuite/ld-mips-elf/undefweak-overflow.s: Remove test case
	for pcrel_hi/pcrel_lo.
	* testsuite/ld-mips-elf/undefweak-overflow.d: Update to match.
	* testsuite/ld-mips-elf/reloc-pcrel-r6.s: New test source.
	* testsuite/ld-mips-elf/reloc-pcrel-r6.d: New test linker script.
	* testsuite/ld-mips-elf/reloc-pcrel-r6.ld: New test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
2019-05-28 10:49:16 -07:00
Faraz Shahbazker
b474a2022d MIPS/LD: Reject tprel_hi and tprel_lo relocations in shared library
bfd/
	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error
	for TLS_TPREL_HI16(/LO16) relocations in shared library.

ld/
	* testsuite/ld-mips-elf/pic-reloc-5.s: Add tests for
	%tprel_hi and %tprel_lo relocations.
	* testsuite/ld-mips-elf/pic-reloc-6.s: Likewise.
	* testsuite/ld-mips-elf/pic-reloc-5.d: Update accordingly.
	* testsuite/ld-mips-elf/pic-reloc-6.d: Likewise.
	* testsuite/ld-mips-elf/pic-reloc-tls.ld: New test linker
	script file.
2019-05-21 11:55:08 -07:00
Faraz Shahbazker
304f09d0d4 MIPS/LD: Fix memory fault linking non-PIC object in to shared library
bfd/
	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Add NULL pointer
	checks.  Search the RELA table for n64 relocations.

ld/
	* testsuite/ld-mips-elf/pic-reloc-5.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-6.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-7.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-5.s: New test source.
	* testsuite/ld-mips-elf/pic-reloc-6.s: New test source.
	* testsuite/ld-mips-elf/pic-reloc-7.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2019-05-21 11:55:08 -07:00
Matthew Fortune
3734320dc0 [MIPS] Add generation of PLT entries with compact jumps for MIPS R6
Add a new option to get the linker to emit PLTs that use compact
branches instead of delay slot branches.

bfd/
	* elfxx-mips.c (LA25_BC): New macro.
	(mips_elf_link_hash_table)<compact_branches>: New field.
	(STUB_JALRC): New macro.
	(mipsr6_o32_exec_plt0_entry_compact): New array.
	(mipsr6_n32_exec_plt0_entry_compact): Likewise.
	(mipsr6_n64_exec_plt0_entry_compact): Likewise.
	(mipsr6_exec_plt_entry_compact): Likewise.
	(mips_elf_create_la25_stub): Use BC instead of J for stubs
	when compact_branches is true.
	(_bfd_mips_elf_finish_dynamic_symbol): Choose the compact
	PLT for MIPSR6 with compact_branches.  Do not reorder the
	compact branches PLT.  Switch the lazy stub for MIPSR6
	with compact_branches to use JALRC.
	(mips_finish_exec_plt): Choose the compact PLT0 for MIPSR6
	when compact_branches is true.
	(_bfd_mips_elf_compact_branches): New function.
	* elfxx-mips.h (_bfd_mips_elf_compact_branches): New prototype.

ld/
	* emultempl/mipself.em (compact_branches): New static variable.
	(mips_create_output_section_statements): Call
	_bfd_mips_elf_compact_branches.
	(PARSE_AND_LIST_PROLOGUE): Add OPTION_COMPACT_BRANCHES and
	OPTION_NO_COMPACT_BRANCHES.
	(PARSE_AND_LIST_LONGOPTS): Add compact-branches,
	no-compact-branches.
	(PARSE_AND_LIST_OPTIONS): Add --compact-branches,
	--no-compact-branches.
	(PARSE_AND_LIST_ARGS_CASES): Handle the above.
	* ld.texinfo: Document --compact-branches, --no-compact-branches.
	* testsuite/ld-mips-elf/pic-and-nonpic-1-r6.dd: New test.
	* testsuite/ld-mips-elf/pic-and-nonpic-1-r6.nd: New test.
	* testsuite/ld-mips-elf/pic-and-nonpic-3a-r6.dd: New test.
	* testsuite/ld-mips-elf/pic-and-nonpic-3a-r6.gd: New test.
	* testsuite/ld-mips-elf/pic-and-nonpic-1a-r6.s: New test source.
	* testsuite/ld-mips-elf/pic-and-nonpic-3a-r6.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2019-05-21 09:22:28 -07:00
Faraz Shahbazker
d87343802b [MIPS] PR gas/14798: Limit IRIX5 specific default typing to IRIX targets
On IRIX 5, every global symbol that is not explicitly labelled as
being a function is assumed to be an object.  There is no reason
why IRIX behaviour should extend to all MIPS targets, so limit this
to only IRIX targets.

gas/
	PR 14798
	* config/tc-mips.c (s_mips_globl): Only treat symbols that are
	not explicitly labelled as BSF_OBJECTs for IRIX targets.
	* testsuite/gas/mips/pr14798.s: New test source.
	* testsuite/gas/mips/pr14798-irix.d: New test.
	* testsuite/gas/mips/pr14798.d: Likewise.
	* testsuite/gas/mips/mips.exp: Run the new tests.

binutils/
	PR 14798
	* testsuite/binutils-all/readelf.ss-mips: Update reference output.
	* testsuite/binutils-all/readelf.ss-tmips: Likewise.

ld/
	PR 14798
	* testsuite/ld-mips-elf/reloc-6a.s: Specify .text section for
	global code symbols.
	* testsuite/ld-mips-elf/reloc-6b.s: Likewise.
2019-05-20 11:08:23 -07:00
Matthew Fortune
6f38008bb4 Fix M5100 flags test with interAptiv-MR2
ld/
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Fix expected ASEs
	for M5100.
2019-04-22 20:41:03 -07:00
Alan Modra
827041555a Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
Maciej W. Rozycki
3c7687b9cd MIPS/LD: Accept high-part relocations in PIC code with absolute symbols
Accept R_MIPS_HI16, R_MIPS_HIGHER and R_MIPS_HIGHEST relocations and
their compressed counterparts in PIC code where the symbol referred is
absolute.  Such an operation is meaningful, because an absolute symbol
effectively is a constant the calculation of the value of which has been
deferred to the static link time, and which is not going to change any
further at the dynamic load time.  Therefore there is no need ever to
refuse the use of these relocations with such symbols, as the resulting
run-time value observed by the program will be correct even in PIC code.

This is not the case with R_MIPS_26 and its compressed counterparts,
because the run-time value calculated by the instructions these
relocations are used with depends on the address of the instruction
itself, and that can change according to the base address used by the
dynamic loader.  Therefore these relocations have to continue being
rejected in PIC code even with absolute symbols.

This allows successful linking of code that relies on previous linker
behavior up to commit 861fb55ab5 ("Defer allocation of R_MIPS_REL32
GOT slots"), <https://sourceware.org/ml/binutils/2008-08/msg00096.html>,
which introduced the problematic check missing this special exception
for absolute symbols.

	bfd/
	* elfxx-mips.c (_bfd_mips_elf_check_relocs) <R_MIPS16_HI16>
	<R_MIPS_HI16, R_MIPS_HIGHER, R_MIPS_HIGHEST, R_MICROMIPS_HI16>
	<R_MICROMIPS_HIGHER, R_MICROMIPS_HIGHEST>: Also accept an
	absolute symbol in PIC code.

	ld/
	* testsuite/ld-mips-elf/pic-reloc-0.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-1.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-2.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-3.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-4.d: New test.
	* testsuite/ld-mips-elf/pic-reloc-absolute-hi.ld: New test
	linker script.
	* testsuite/ld-mips-elf/pic-reloc-absolute-lo.ld: New test
	linker script.
	* testsuite/ld-mips-elf/pic-reloc-ordinary.ld: New test linker
	script.
	* testsuite/ld-mips-elf/pic-reloc-j.s: New test source.
	* testsuite/ld-mips-elf/pic-reloc-lui.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2018-11-27 16:34:03 +00:00
Maciej W. Rozycki
982d0151e9 PR ld/21375: MIPS: Add test cases for undefined weaks resolving to zero
Define a new procedure, `run_mips_undefweak_test', and use it to iterate
over several scenarios involving undefined weak symbols resolving to
zero, verifying expected regular MIPS, MIPS16 and microMIPS code, GOT
and dynamic symbol table generation, as well as the setting of the
EI_ABIVERSION field in the ELF file header.  In particular ensure that
symbol versioning works and that `__gnu_absolute_zero' gets assigned a
version (any will do) even if it has not been listed for exportation in
a linker version script.

	ld/
	PR ld/21375
	* testsuite/ld-mips-elf/pr21375-abi.hd: New test.
	* testsuite/ld-mips-elf/pr21375-noabi.hd: New test.
	* testsuite/ld-mips-elf/pr21375.dd: New test.
	* testsuite/ld-mips-elf/pr21375h.dd: New test.
	* testsuite/ld-mips-elf/pr21375p.dd: New test.
	* testsuite/ld-mips-elf/pr21375ph.dd: New test.
	* testsuite/ld-mips-elf/pr21375s.dd: New test.
	* testsuite/ld-mips-elf/pr21375s-n32.dd: New test.
	* testsuite/ld-mips-elf/pr21375s-n64.dd: New test.
	* testsuite/ld-mips-elf/pr21375sh.dd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n32.dd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n64.dd: New test.
	* testsuite/ld-mips-elf/pr21375shg.dd: New test.
	* testsuite/ld-mips-elf/pr21375sx.dd: New test.
	* testsuite/ld-mips-elf/pr21375sxh.dd: New test.
	* testsuite/ld-mips-elf/pr21375sm16.dd: New test.
	* testsuite/ld-mips-elf/pr21375sm16h.dd: New test.
	* testsuite/ld-mips-elf/pr21375su.dd: New test.
	* testsuite/ld-mips-elf/pr21375su-n32.dd: New test.
	* testsuite/ld-mips-elf/pr21375su-n64.dd: New test.
	* testsuite/ld-mips-elf/pr21375suh.dd: New test.
	* testsuite/ld-mips-elf/pr21375suh-n32.dd: New test.
	* testsuite/ld-mips-elf/pr21375suh-n64.dd: New test.
	* testsuite/ld-mips-elf/pr21375sux.dd: New test.
	* testsuite/ld-mips-elf/pr21375suxh.dd: New test.
	* testsuite/ld-mips-elf/pr21375.gd: New test.
	* testsuite/ld-mips-elf/pr21375h.gd: New test.
	* testsuite/ld-mips-elf/pr21375p.gd: New test.
	* testsuite/ld-mips-elf/pr21375ph.gd: New test.
	* testsuite/ld-mips-elf/pr21375s.gd: New test.
	* testsuite/ld-mips-elf/pr21375s-n32.gd: New test.
	* testsuite/ld-mips-elf/pr21375s-n64.gd: New test.
	* testsuite/ld-mips-elf/pr21375sh.gd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n32.gd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n64.gd: New test.
	* testsuite/ld-mips-elf/pr21375shg.gd: New test.
	* testsuite/ld-mips-elf/pr21375shl.gd: New test.
	* testsuite/ld-mips-elf/pr21375shv.gd: New test.
	* testsuite/ld-mips-elf/pr21375sx.gd: New test.
	* testsuite/ld-mips-elf/pr21375sxh.gd: New test.
	* testsuite/ld-mips-elf/pr21375.sd: New test.
	* testsuite/ld-mips-elf/pr21375-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375h.sd: New test.
	* testsuite/ld-mips-elf/pr21375h-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375p.sd: New test.
	* testsuite/ld-mips-elf/pr21375p-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375ph.sd: New test.
	* testsuite/ld-mips-elf/pr21375ph-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375s.sd: New test.
	* testsuite/ld-mips-elf/pr21375s-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375s-n32.sd: New test.
	* testsuite/ld-mips-elf/pr21375s-n32-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375s-n64.sd: New test.
	* testsuite/ld-mips-elf/pr21375s-n64-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n32.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n32-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n64.sd: New test.
	* testsuite/ld-mips-elf/pr21375sh-n64-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375shg.sd: New test.
	* testsuite/ld-mips-elf/pr21375shg-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375shl.sd: New test.
	* testsuite/ld-mips-elf/pr21375shl-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375shv.sd: New test.
	* testsuite/ld-mips-elf/pr21375shv-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375sx.sd: New test.
	* testsuite/ld-mips-elf/pr21375sx-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375sxh.sd: New test.
	* testsuite/ld-mips-elf/pr21375sxh-irix.sd: New test.
	* testsuite/ld-mips-elf/pr21375.ld: New test linker script.
	* testsuite/ld-mips-elf/pr21375-xgot.ld: New test linker script.
	* testsuite/ld-mips-elf/pr21375.ver: New test version script.
	* testsuite/ld-mips-elf/pr21375v.ver: New test version script.
	* testsuite/ld-mips-elf/pr21375.s: New test source.
	* testsuite/ld-mips-elf/pr21375-mips16.s: New test source.
	* testsuite/ld-mips-elf/pr21375-n32.s: New test source.
	* testsuite/ld-mips-elf/pr21375-n64.s: New test source.
	* testsuite/ld-mips-elf/pr21375-xgot.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp (run_mips_undefweak_test):
	New procedure; run the new tests.
2018-09-14 20:22:57 +01:00
Maciej W. Rozycki
47275900ad PR ld/21375: MIPS: Fix non-zero run-time value for undefined weaks
We have an issue in the MIPS backend, with the handling of undefined
hidden and internal weak symbols.  References to such symbols are
supposed to resolve to 0 according to the ELF gABI[1]:

"Unresolved weak symbols have a zero value."

and the 64-bit MIPS psABI[2]:

"If a symbol with one of these [hidden or internal] attributes has no
definition within the executable/DSO being linked, then it must be
resolved to allocated space if common, resolved to zero if weak, or an
error reported otherwise."

however if a GOT relocation is used, then a local GOT entry is created
and used to satisfy the reference.  Such an entry is then (in DSO and
PIE binaries) subject to the usual load-time relocation, which means a
non-zero value will be returned if the base address is non-zero.  This
will defeat the usual run-time sequence like:

void a (void) __attribute__ ((visibility ("hidden"), weak));

void
x (void)
{
  if (a)
    a ();
}

This can be reproduced with this simple code:

$ cat libtest.c
extern int a __attribute__ ((visibility ("hidden"), weak));

int *
x (void)
{
  return &a;
}
$ cat test.c

int *x (void);

int
main (void)
{
  printf ("a: %p\n", x ());

  return 0;
}
$ gcc -shared -fPIC -o libtest.so libtest.c
$ gcc -o test test.c -Wl,-rpath,$(pwd) libtest.so
$ ./test
a: 0x77184000
$

The usual approach targets take is making all the steps required to
assign a GOT entry for the symbol referred, and then leave its contents
at zero with no dynamic relocation attached, therefore ensuring that the
value does not change at load time.  However this is not going to work
with the implicitly relocated GOT the MIPS psABI specifies[3]:

"The dynamic linker relocates the global offset table by first adding
the difference between the base where the shared object is loaded and
the value of the dynamic tag DT_MIPS_BASE_ADDRESS to all local global
offset table entries."

and we cannot therefore use the local GOT part.

And we cannot offhand use the global part either, as the symbol would
then have to be exported and possibly wrongly preempt symbols in other
modules involved in the dynamic load, because as per the ELF gABI[1] we
are not allowed to enter a hidden or internal symbol into the dynamic
symbol table (and then use its associated GOT entry):

"A hidden symbol contained in a relocatable object must be either
removed or converted to STB_LOCAL binding by the link-editor when the
relocatable object is included in an executable file or shared object."

and:

"An internal symbol contained in a relocatable object must be either
removed or converted to STB_LOCAL binding by the link-editor when the
relocatable object is included in an executable file or shared object."

So we have to choose something else.

Our choice is further limited by the need for the reference associated
with the GOT relocation to stay within the signed 16-bit limit from the
GOT pointer base register, while being compliant with the ELF gABI and
the MIPS psABI.  However as Alan Modra has observed[4] one possibility
is to edit (relax) the code such that the GOT reference is removed
altogether.

Based on these observations then modify MIPS BFD linker backend code to:

1. Interpret code associated with GOT relocations and relax the usual LW
   or LD instructions into a corresponding immediate load operation that
   places the value of 0 in the intended register, while leaving the GOT
   entry allocated and initialized as usually.

2. Leave any other instructions associated with GOT relocations in place
   and instead redirect the reference to a global GOT entry associated
   with a special `__gnu_absolute_zero' symbol created for this purpose,
   whose value is 0, SHN_ABS section marks it absolute, binding is
   global and export class protected, ensuring that the locally provided
   value is always used at load time, and that the value is not
   relocated by the dynamic loader.

3. Adjust any high-part GOT relocation used, typically associated with
   a LUI instruction, accordingly, so that run-time consistency is
   maintained, either by resolving to the original entry if the
   instruction associated with the corresponding low-part GOT relocation
   has been relaxed to an immediate load (in which case the value loaded
   with LUI will be overwritten), or by also redirecting the reference
   to `__gnu_absolute_zero' to complete the GOT access sequence if that
   symbol has been used.

4. Add a target `elf_backend_hide_symbol' hook, for the three MIPS ABIs,
   which prevents the `__gnu_absolute_zero' symbol from being forced
   local, to ensure that the redirection works and the symbol remains
   global/protected with existing linker scripts unchanged.

5. Observing the issue with handling SHN_ABS symbols in the GNU dynamic
   loader, covered by glibc PR 19818, set the EI_ABIVERSION field in the
   ELF file header produced to 4 (ABI_ABSOLUTE) if `__gnu_absolute_zero'
   symbol has been produced and the target configured indicates the GNU
   operating system, so that broken versions of the GNU dynamic loader
   gracefully reject the file in loading rather than going astray.  Keep
   EI_ABIVERSION at the original value for other operating systems or if
   no `__gnu_absolute_zero' symbol has been made.

The name of the special `__gnu_absolute_zero' has no meaning other than
how a human reader can interpret it, as it is ignored in dynamic loading
in the handling of the scenarios concerned.  This is because the symbol
resolves locally, and it's only the symbol's attributes that matter so
that the associated GOT entry remains unchanged at load time.

Therefore the name is somewhat arbitrary, observing however the need to
use the name space reserved for the system so that it does not conflict
with a possible user symbol, and hence the leading underscore, and also
the `gnu' infix to denote a GNU feature.  Other implementations wishing
to address the problem in a similar way may choose a different name and
have the solution still work, possibly with a mixture of modules used in
a dynamic having symbols of different names provided, which will however
not interact with each other due to the protected export class.

The symbol can be referred explicitly, however the name is an internal
implementation detail rather than a part of the ABI, and therefore no
specific semantics is guaranteed.

One limitation of this change is that if `__gnu_absolute_zero' has been
already defined, then we do not wipe the old definition and all kinds of
odd behavior can result.  This is however like with other symbols we
internally define, such as `_GLOBAL_OFFSET_TABLE_' or `__rld_map', and
therefore left as a possible future enhancement.

As an optimization the relaxation of LW and LD instructions to a load of
immediate zero is always made, even SVR4 PIC code for code that will end
up in a regular (non-PIE) executable, because there is a cache advantage
with the avoidance of a load from the GOT, even if it is otherwise
guaranteed to remain zero.  It does not reliably happen though, due to a
symbol exportation issue affecting executables, covered by PR ld/21805.

One existing test case needs to be updated, as it triggers relaxation
introduced with this change and consequently linker output does not
match expectations anymore.  As we want to keep the original issue
covered with the test case modify it then to use the LWL instruction in
place of LW, and adjust the output expected accordingly.

References:

[1] "System V Application Binary Interface - DRAFT - 19 October 2010",
    The SCO Group, Section "Symbol Table",
    <http://www.sco.com/developers/gabi/2012-12-31/ch4.symtab.html>

[2] "64-bit ELF Object File Specification, Draft Version 2.5", MIPS
    Technologies / Silicon Graphics Computer Systems, Order Number
    007-4658-001, Section 2.5 "Symbol Table", p. 22,
    <http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf>

[3] "SYSTEM V APPLICATION BINARY INTERFACE, MIPS RISC Processor
    Supplement, 3rd Edition", Section "Global Offset Table", p. 5-10,
    <http://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf>

[4] "Undo dynamic symbol state after regular object sym type mismatch",
    <https://sourceware.org/ml/binutils/2017-07/msg00265.html>

	bfd/
	PR ld/21375
	* elfxx-mips.h (_bfd_mips_elf_hide_symbol): New prototype.
	(_bfd_mips_elf_linker_flags): Update prototype.
	* elf32-mips.c (elf_backend_hide_symbol): New macro.
	* elf64-mips.c (elf_backend_hide_symbol): Likewise.
	* elfn32-mips.c (elf_backend_hide_symbol): Likewise.
	* elfxx-mips.c (mips_elf_link_hash_table): Add
	`use_absolute_zero' and `gnu_target' members.
	(mips_elf_record_global_got_symbol): Call
	`_bfd_mips_elf_hide_symbol' rather than
	`_bfd_elf_link_hash_hide_symbol'.
	(mips_use_local_got_p): Return FALSE if the symbol is absolute.
	(mips_elf_obtain_contents): Reorder function.
	(mips_elf_nullify_got_load): New function.
	(mips_elf_calculate_relocation): Add `contents' parameter.
	Nullify GOT loads or if it is not possible, then redirect GOT
	relocations to the `__gnu_absolute_zero' symbol, for references
	that are supposed to resolve to zero.
	(mips_elf_define_absolute_zero): New function.
	(_bfd_mips_elf_check_relocs): Prepare for arrangements made in
	`mips_elf_calculate_relocation' for references made via the GOT
	that are supposed to resolve to zero.
	(_bfd_mips_elf_hide_symbol): New function.
	(_bfd_mips_elf_linker_flags): Add the `gnu_target' parameter,
	set the `gnu_target' member of the MIPS hash table.
	(MIPS_LIBC_ABI_ABSOLUTE): New enumeration constant.
	(_bfd_mips_post_process_headers): Use it.

	ld/
	PR ld/21375
	* emultempl/mipself.em: Set `gnu_target' according to ${target}.
	(mips_create_output_section_statements): Update call to
	`_bfd_mips_elf_linker_flags'.
	* testsuite/ld-mips-elf/pr21334.s: Use LWL rather than LW.
	* testsuite/ld-mips-elf/pr21334.dd: Update accordingly.
2018-09-14 20:22:56 +01:00
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
Chenghua Xu
bc672693cc [MIPS/LD/testsuite] Skip o32 flags check on mips*-*-irix*
ld/ChangeLog:

	* testsuite/ld-mips-elf/mips-elf-flags.exp (good_combination):
	Skip o32 flags checking if target is mips*-*-irix*.
2018-08-29 17:12:44 +08:00
Chenghua Xu
3da65cd27e [PATCH] [MIPS] LD/testsuite: Skip 32bit test if ld not support.
ld/ChangeLog:

    * testsuite/ld-mips-elf/mips-elf-flags.exp
    (check_ld_support_32bit, check_is_32bit_args): New procedures.
    (good_combination, bad_combination): Skip 32bit test if ld
    not support 32bit emulations.
2018-08-24 21:25:15 +08:00
Maciej W. Rozycki
78da84f994 MIPS/LD/testsuite: Correct mips-elf.exp test ABI/emul/endian arrangement
Similarly to commit 86b24e15c4 ("MIPS/LD/testsuite: Correct
comm-data.exp test ABI/emul/endian arrangement") update the mips-elf.exp
test script to:

- correctly select emulations for targets using non-traditional MIPS
  emulations,

- correctly select ABIs for targets that do not support all of them,

- use the default endianness selection where possible to benefit targets
  that support only one,

- simplify test invocation by providing ABI-specific `run_dump_test'
  wrappers, specifically `run_dump_test_o32', `run_dump_test_n32',
  `run_dump_test_n64' and `run_dump_test_eabi', which remove the need to
  use conditionals across the Expect script or to repeat ABI-specific
  GAS and LD flags with each invocation,

removing numerous test failures for `mips-sgi-irix6', `mips64-openbsd',
`mips64el-openbsd' and `mips64el-ps2-elf' targets and broadening
coverage for several MIPS targets.

There are some new failures for the `mips64el-ps2-elf' target with tests
that were not previously run for that target:

FAIL: MIPS16 link branch to absolute expression (n32)
FAIL: MIPS16 link branch to absolute expression 1 (n32)
FAIL: MIPS16 link branch to absolute expression 2 (n32)
FAIL: microMIPS link branch to absolute expression (n32)
FAIL: MIPS ELF got reloc n32
FAIL: MIPS ELF xgot reloc n32
FAIL: undefined weak symbol overflow (n32)
FAIL: R_MIPS16_HI16 and R_MIPS16_LO16 relocs n32
FAIL: ld-mips-elf/attr-gnu-4-0-n32-ph
FAIL: ld-mips-elf/attr-gnu-4-1-n32-ph
FAIL: ld-mips-elf/attr-gnu-4-2-n32-ph
FAIL: ld-mips-elf/attr-gnu-4-3-n32-ph
FAIL: MIPSr6 JALR reloc unaligned/cross-mode link test (n32)

which are mostly due to dump discrepancies caused by mapping differences
coming from the default linker scripts used by these test cases, or
sometimes because of the specific MIPS processor architecture recorded
in the ELF file taking precedence over the general MIPS ISA level also
recorded.  Finally, the R_MIPS16_HI16/R_MIPS16_LO16 relocation test
failure is a preexisting issue with the IRIX style emulation.

These failures will have to be addressed separately.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp (run_dump_test_abi)
	(run_dump_test_o32, run_dump_test_n32, run_dump_test_n64)
	(run_dump_test_eabi): New procedures.
	(has_newabi, has_elf32): Remove variables.
	(has_abi): New associative array variable.
	(abi_asflags, abi_ldflags): Update settings across targets.
	(irixemul): New variable.
	Replace `run_dump_test' calls where applicable throughout with
	`run_dump_test_o32', `run_dump_test_n32', `run_dump_test_n64'
	and `run_dump_test_eabi' as appropriate.  Remove explicit
	passing of `abi_asflags' and `abi_ldflags'.  Use `noarch' for
	tests that require their own architecture setting.  Force the
	big endianness for tests that require it.  Select the endianness
	required for `objdump invocation with the `reloc-2' test.
	Conditionalize tests run via `run_ld_link_tests' on the ABI
	required and use the ABI list from the `has_abi' array where
	appropriate.
	* testsuite/ld-mips-elf/attr-gnu-4-0-n32-ph.d: Remove ABI and
	endianness selection options from `ld' and `source' tags.  Relax
	output format matching.
	* testsuite/ld-mips-elf/attr-gnu-4-0-n64-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-1-n32-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-1-n64-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-2-n32-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-2-n64-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-3-n32-ph.d: Likewise.
	* testsuite/ld-mips-elf/attr-gnu-4-3-n64-ph.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips-n32.d: Remove
	ABI and endianness selection options from `as', `ld', `source'
	tags, and also the `-march=from-abi' option.  Remove the `as'
	tag where it would become empty.
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-addend-micromips.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-addend-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-addend-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-addend.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local-micromips.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-local.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute-addend-n32.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute-addend-n64.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute-addend.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute-n32.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute-n64.d: Likewise.
	* testsuite/ld-mips-elf/branch-absolute.d: Likewise.
	* testsuite/ld-mips-elf/dyn-sec64.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame1-n32.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame1-n64.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame2-n32.d: Likewise.
	* testsuite/ld-mips-elf/eh-frame2-n64.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-got-n32-embed.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-got-n32.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-got-n64-embed.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-got-n64-irix.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-got-n64.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-xgot-n32-embed.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-xgot-n32.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64-embed.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64-irix.d: Likewise.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64.d: Likewise.
	* testsuite/ld-mips-elf/emit-relocs-1.d: Likewise.
	* testsuite/ld-mips-elf/got-dump-2.d: Likewise.
	* testsuite/ld-mips-elf/got-page-2.d: Likewise.
	* testsuite/ld-mips-elf/jal-global-overflow-0.d: Likewise.
	* testsuite/ld-mips-elf/jal-global-overflow-1.d: Likewise.
	* testsuite/ld-mips-elf/jal-local-overflow-0.d: Likewise.
	* testsuite/ld-mips-elf/jal-local-overflow-1.d: Likewise.
	* testsuite/ld-mips-elf/jalbal.d: Likewise.
	* testsuite/ld-mips-elf/jalx-addend-n32.d: Likewise.
	* testsuite/ld-mips-elf/jalx-addend-n64.d: Likewise.
	* testsuite/ld-mips-elf/jalx-addend.d: Likewise.
	* testsuite/ld-mips-elf/jalx-local-n32.d: Likewise.
	* testsuite/ld-mips-elf/jalx-local-n64.d: Likewise.
	* testsuite/ld-mips-elf/jalx-local.d: Likewise.
	* testsuite/ld-mips-elf/jr-to-b-1.d: Likewise.
	* testsuite/ld-mips-elf/jr-to-b-2.d: Likewise.
	* testsuite/ld-mips-elf/lsi-4010-isa.d: Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute-addend-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute-addend-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute-addend.d:
	Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/micromips-branch-absolute.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-2.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-3.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-2.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-addend.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n32.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d:
	Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute-n64.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-absolute.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-addend-2.d: Likewise.
	* testsuite/ld-mips-elf/mips16-branch-addend-3.d: Likewise.
	* testsuite/ld-mips-elf/mips16-hilo-n32.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-addend-2.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-addend-6.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-n32-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-n32-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-n64-sym32-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16-pcrel-n64-sym32-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-addend-2.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-addend-6.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-n32-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-n32-1.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-n64-sym32-0.d: Likewise.
	* testsuite/ld-mips-elf/mips16e2-pcrel-n64-sym32-1.d: Likewise.
	* testsuite/ld-mips-elf/multi-got-1.d: Likewise.
	* testsuite/ld-mips-elf/multi-got-hidden-1.d: Likewise.
	* testsuite/ld-mips-elf/multi-got-hidden-2.d: Likewise.
	* testsuite/ld-mips-elf/multi-got-no-shared.d: Likewise.
	* testsuite/ld-mips-elf/no-shared-1-n32.d: Likewise.
	* testsuite/ld-mips-elf/no-shared-1-n64.d: Likewise.
	* testsuite/ld-mips-elf/no-shared-1-o32.d: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-2.d: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-3-error.d: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-4-error.d: Likewise.
	* testsuite/ld-mips-elf/pie-n32.d: Likewise.
	* testsuite/ld-mips-elf/pie-n64.d: Likewise.
	* testsuite/ld-mips-elf/pie-o32.d: Likewise.
	* testsuite/ld-mips-elf/rel32-n32.d: Likewise.
	* testsuite/ld-mips-elf/rel32-o32.d: Likewise.
	* testsuite/ld-mips-elf/rel64.d: Likewise.
	* testsuite/ld-mips-elf/relax-jalr-n32.d: Likewise.
	* testsuite/ld-mips-elf/reloc-1-n32.d: Likewise.
	* testsuite/ld-mips-elf/reloc-1-n64.d: Likewise.
	* testsuite/ld-mips-elf/reloc-2.d: Likewise.
	* testsuite/ld-mips-elf/reloc-3-n32.d: Likewise.
	* testsuite/ld-mips-elf/reloc-local-overflow.d: Likewise.
	* testsuite/ld-mips-elf/textrel-1.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-2.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-micromips.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-mips16.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-r6-1.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch-r6-2.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-branch.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-0.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-1.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-2.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-3.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-0.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-1.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-0.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-1.d:
	Likewise.
	* testsuite/ld-mips-elf/unaligned-jump-micromips.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jump-mips16.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-jump.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-ldpc-0.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-ldpc-1.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-lwpc-0.d: Likewise.
	* testsuite/ld-mips-elf/unaligned-lwpc-1.d: Likewise.
2018-07-12 20:01:44 +01:00
Maciej W. Rozycki
f880fcab1a MIPS/LD/testsuite: Limit reloc 6 tests to DSO targets
Complement commit 500c05ddbe ("MIPS/ld/testsuite: Limit export class
call reloc tests to DSO targets") and also check for target's shared
library support in determining whether to run reloc 6 tests, which
require it.  No changes in results as all targets currently enabled for
NewABI testing support shared libraries.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Limit reloc 6 tests to
	shared library targets.
2018-07-12 20:01:44 +01:00
Maciej W. Rozycki
1cb83cac9a MIPS/BFD: Fix TLS relocation resolution for regular executables
Correct an issue with commit 0f20cc3522 ("TLS support for MIPS"),
<https://sourceware.org/ml/binutils/2005-02/msg00607.html>, where a
condition used to determine whether to use a dynamic symbol for GD, LD
and IE TLS dynamic relocations against a symbol that has been defined
locally has been incorrectly reversed.

It's executables rather than dynamic shared objects where no symbol is
required, because such symbols cannot be preempted and therefore their
values (thread pointer offsets) are fixed at the static link time as is
the associated module ID of the main executable, so the original
condition should have been `shared' instead of `!shared'.  This wrong
condition was then later converted from `!shared' to `!bfd_link_pic',
with commit 0e1862bb40 ("Add output_type to bfd_link_info").

Use the correct `bfd_link_dll' condition then, and adjust code for the
dynamic symbol index possibly being -1 as with symbols that have been
forced local, removing unnecessary dynamic relocations from dynamic
regular executables.  PIE executables are unaffected as the existing
condition excluded them by chance due to the conversion mentioned above.

Adjust test cases accordingly.

	bfd/
	* elfxx-mips.c (mips_tls_got_relocs): Use `bfd_link_dll' rather
	than `!bfd_link_pic' in determining the dynamic symbol index.
	Avoid the index of -1.
	(mips_elf_initialize_tls_slots): Likewise.  Flatten code by
	moving `dyn' to the beginning of the function block.

	ld/
	* testsuite/ld-mips-elf/tlsdyn-o32.d: Update test for dynamic
	relocation removal.
	* testsuite/ld-mips-elf/tlsdyn-o32.got: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-1.d: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-1.got: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-2.d: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-2.got: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-3.d: Likewise.
	* testsuite/ld-mips-elf/tlsdyn-o32-3.got: Likewise.
2018-07-11 17:44:45 +01:00
Maciej W. Rozycki
9143e72c6d PR ld/22570: MIPS/BFD: Fix TLS relocation resolution for PIE executables
Correct a commit 0e1862bb40 ("Add output_type to bfd_link_info") issue
and use `bfd_link_dll' rather than `bfd_link_pic' in determining whether
to fully resolve GD, LD and IE TLS relocations referring to symbols
locally defined rather than deferring them to the load time by means of
dynamic relocations.

Such symbols cannot be preempted in PIE executables, which are
necessarily PIC, and therefore their values (thread pointer offsets) are
fixed at the static link time as is the associated module ID of the main
executable.

Given the `tlsbin-o32.s' and `tlsdyn-o32.s' sources from our test suite
this removes the absolute TLS relocations from the static:

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
00000000 R_MIPS_NONE       *ABS*
1000002c R_MIPS_TLS_TPREL32  *ABS*
10000030 R_MIPS_TLS_DTPMOD32  *ABS*
10000038 R_MIPS_TLS_DTPMOD32  *ABS*

and the dynamic:

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
00000000 R_MIPS_NONE       *ABS*
1000002c R_MIPS_TLS_TPREL32  *ABS*
10000038 R_MIPS_TLS_DTPMOD32  *ABS*
10000044 R_MIPS_TLS_DTPMOD32  *ABS*
10000030 R_MIPS_TLS_DTPMOD32  tlsvar_gd
10000034 R_MIPS_TLS_DTPREL32  tlsvar_gd
10000040 R_MIPS_TLS_TPREL32  tlsvar_ie

PIE executable respectively, as reported by `objdump -R', and fills the
corresponding GOT slots with the values expected, as recorded with the
test cases added.  The new output from `objdump -R' is:

DYNAMIC RELOCATION RECORDS (none)

and:

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
00000000 R_MIPS_NONE       *ABS*
10000030 R_MIPS_TLS_DTPMOD32  tlsvar_gd
10000034 R_MIPS_TLS_DTPREL32  tlsvar_gd
10000040 R_MIPS_TLS_TPREL32  tlsvar_ie

for the static and the dynamic executable respectively.

2018-07-11  Maciej W. Rozycki  <macro@mips.com>
            Rich Felker  <bugdal@aerifal.cx>

	bfd/
	PR ld/22570
	* elfxx-mips.c (mips_tls_got_relocs): Use `bfd_link_dll' rather
	than `bfd_link_pic' to determine whether dynamic relocations are
	to be produced.
	(mips_elf_initialize_tls_slots): Likewise.

	ld/
	PR ld/22570
	* testsuite/ld-mips-elf/tlsbin-pie-o32.d: New test.
	* testsuite/ld-mips-elf/tlsbin-pie-o32.got: New test.
	* testsuite/ld-mips-elf/tlsdyn-pie-o32.d: New test.
	* testsuite/ld-mips-elf/tlsdyn-pie-o32.got: New test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2018-07-11 17:44:45 +01:00
Maciej W. Rozycki
500c05ddbe MIPS/ld/testsuite: Limit export class call reloc tests to DSO targets
Only run MIPS/LD export class call relocation tests with shared library
targets, avoiding:

.../ld/ld-new: -shared not supported

linker errors and removing:

FAIL: MIPS export class call relocation test (o32)

regressions with `mipsel-ps2-elf' and `mips64el-ps2-elf' targets.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Limit export class call
	relocation tests to shared library targets.
2018-07-11 00:57:36 +01:00
Maciej W. Rozycki
7153abac62 MIPS/LD/testsuite: Make Linux dumps for n64 GOT relocation tests the default
The current default dumps for n64 GOT relocation tests only work for
IRIX targets really, while the Linux dumps are suitable for non-Linux
targets as well.  Make the Linux dumps the default then and handle the
IRIX ones as a special case.

Define an `irix' variable as a shorthand for `[istarget *-*-irix*]' and
use it for these n64 GOT relocation tests as well as export class call
relocation tests.

	ld/
	* testsuite/ld-mips-elf/elf-rel-got-n64.d: Rename to...
	* testsuite/ld-mips-elf/elf-rel-got-n64-irix.d: ... this.
	* testsuite/ld-mips-elf/elf-rel-got-n64-linux.d: Rename to...
	* testsuite/ld-mips-elf/elf-rel-got-n64.d: ... this.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64.d: Rename to...
	* testsuite/ld-mips-elf/elf-rel-xgot-n64-irix.d: ... this.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64-linux.dd: Rename to...
	* testsuite/ld-mips-elf/elf-rel-xgot-n64.d: ... this.
	* testsuite/ld-mips-elf/mips-elf.exp: Update accordingly.
	Define `irix' as a shorthand for `[istarget *-*-irix*]' and use
	it throughout.
2018-07-10 01:28:46 +01:00
Maciej W. Rozycki
8d4c0995eb MIPS/LD/testsuite: Fix IRIX dumps for n64 GOT relocation tests
Factor in the presence of a `.gnu.attributes' section at the end of the
respective dumps:

Disassembly of section .gnu.attributes:

0000000000000000 <.gnu.attributes>:
   0:	41000000 	bc0f	4 <__dso_displacement+0x4>
   4:	0f676e75 	jal	d9db9d4 <__dso_displacement+0xd9db9d4>
   8:	00010000 	sll	zero,at,0x0
   c:	00070401 	0x70401

and also ignore any trailing output with the IRIX variant of n64 GOT
relocation tests, like already done with the Linux and the embedded
ones, removing:

FAIL: MIPS ELF got reloc n64
FAIL: MIPS ELF xgot reloc n64

LD testsuite regressions with the `mips-sgi-irix6' target.

	ld/
	* testsuite/ld-mips-elf/elf-rel-got-n64.d: Add `#pass' at the
	end.
	* testsuite/ld-mips-elf/elf-rel-xgot-n64.d: Likewise.
2018-07-09 23:43:27 +01:00
Maciej W. Rozycki
4b8377e7db MIPS/BFD: Do not redirect to discarded lazy binding stubs
Correct a MIPS/BFD linker issue with dynamic symbol and corresponding
GOT entry values being redirected to lazy binding stubs where the stubs
section has been discarded by assigning to the `/DISCARD/' output
section in the linker script used.  The issue manifests itself by the
values entered being relative to the absolute section, which is what any
discarded sections are internally assigned in the linker.

For the `stub-dynsym-2.s' piece of code included as a test case with
this change this issue results in the dynamic symbol table and the GOT
looking like:

Symbol table '.dynsym' contains 3 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000010     0 FUNC    GLOBAL DEFAULT  UND bar
     2: 00000000     0 FUNC    GLOBAL DEFAULT  UND foo

Primary GOT:
 Canonical gp value: 00097ff0

 Reserved entries:
   Address     Access  Initial Purpose
  00090000 -32752(gp) 00000000 Lazy resolver
  00090004 -32748(gp) 80000000 Module pointer (GNU extension)

 Global entries:
   Address     Access  Initial Sym.Val. Type    Ndx Name
  00090008 -32744(gp) 00000010 00000010 FUNC    UND bar
  0009000c -32740(gp) 00000000 00000000 FUNC    UND foo

if assembled to regular MIPS code, or:

Symbol table '.dynsym' contains 3 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000d     0 FUNC    GLOBAL DEFAULT  UND bar
     2: 00000001     0 FUNC    GLOBAL DEFAULT  UND foo

Primary GOT:
 Canonical gp value: 00097ff0

 Reserved entries:
   Address     Access  Initial Purpose
  00090000 -32752(gp) 00000000 Lazy resolver
  00090004 -32748(gp) 80000000 Module pointer (GNU extension)

 Global entries:
   Address     Access  Initial Sym.Val. Type    Ndx Name
  00090008 -32744(gp) 0000000d 0000000d FUNC    UND bar
  0009000c -32740(gp) 00000001 00000001 FUNC    UND foo

if assembled to microMIPS code.  Symbol values and GOT entries record
the offset into the inexistent stubs section and the ISA bit rather than
zero, which would be the case if a lazy binding stub was not used for
other reasons, such as the value of the symbol being taken for a purpose
other than making a function call (e.g. an R_MIPS_GOT16 relocation).

Correct the issue by refraining from redirecting symbols to lazy binding
stubs if the stubs section is going to be discarded.

	bfd/
	* elfxx-mips.c (_bfd_mips_elf_adjust_dynamic_symbol): Don't set
	`->needs_lazy_stub' if the stubs output section is the absolute
	section.

	ld/
	* testsuite/ld-mips-elf/stub-dynsym-2.dd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-2.gd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-2.sd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-discard-2.gd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-discard-2.sd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-2.dd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-2.gd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-2.sd: New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-2.dd: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-2.gd: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-2.sd: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-2.ld: New test linker
	script.
	* testsuite/ld-mips-elf/stub-dynsym-discard-2.ld: New test
	linker script.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2018-07-09 21:30:44 +01:00
Maciej W. Rozycki
a5628fa844 MIPS/LD/testsuite: Use $linux_gnu consistently across `mips-elf.exp'
Replace two remaining spelled-out calls to `[istarget mips*-*-linux*]'
in `mips-elf.exp' with $linux_gnu, which is equivalent.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Replace remaining calls to
	`[istarget mips*-*-linux*]' with $linux_gnu.
2018-07-05 19:44:02 +01:00
Maciej W. Rozycki
30e5322741 MIPS/LD/testsuite: Fix a typo in PR ld/21334 test name
ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Fix a typo in PR ld/21334
	test name.
2018-07-02 23:57:21 +01:00
Maciej W. Rozycki
789ff5b6c2 PR ld/22966: Fix n64 MIPS `.got.plt' range checks
The addressable signed 32-bit range for n64 MIPS `.got.plt' references
is from 0xffffffff7fff8000 to 0x7fff7fff, due to how the composition of
an LUI and an LD instruction works for address calculation in the 64-bit
addressing mode, such as when CP0.Status.UX=1.

We currently have a range check in `mips_finish_exec_plt', however it is
not correct as it verifies that the `.got.plt' start address referred is
between 0xffffffff80000000 and 0x7fffffff.  It is also implemented as an
assertion rather than a proper error message despite that the situation
can be triggered by user input.  Additionally there is no check made for
individual `.got.plt' entries referred even though they can be out of
range while the `.got.plt' start address is not.

Fix all these problems and use the correct range for the check, limiting
it to n64 output files, and then issue a proper error message both in
`mips_finish_exec_plt' and in `_bfd_mips_elf_finish_dynamic_symbol',
suggesting the use of the `-Ttext-segment=...' option that will often
work and with the default linker scripts in particular.  Add suitable
tests covering boundary cases.

	bfd/
	PR ld/22966
	* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_symbol): Verify the
	`.got.plt' entry referred is in range.
	(mips_finish_exec_plt): Correct the range check for `.got.plt'
	start.  Replace the assertion used for that with a proper error
	message.

	ld/
	PR ld/22966
	* testsuite/ld-mips-elf/n64-plt-1.dd: New test.
	* testsuite/ld-mips-elf/n64-plt-1.gd: New test.
	* testsuite/ld-mips-elf/n64-plt-2.ed: New test.
	* testsuite/ld-mips-elf/n64-plt-3.ed: New test.
	* testsuite/ld-mips-elf/n64-plt-4.dd: New test.
	* testsuite/ld-mips-elf/n64-plt-4.gd: New test.
	* testsuite/ld-mips-elf/n64-plt-1.ld: New test linker script.
	* testsuite/ld-mips-elf/n64-plt-2.ld: New test linker script.
	* testsuite/ld-mips-elf/n64-plt-3.ld: New test linker script.
	* testsuite/ld-mips-elf/n64-plt-4.ld: New test linker script.
	* testsuite/ld-mips-elf/n64-plt.s: New test source.
	* testsuite/ld-mips-elf/n64-plt-lib.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2018-06-20 00:37:51 +01:00
Alan Modra
7f923b7fd2 ELF dynsyms
Many ELF targets arrange to emit a number of section symbols in
.dynsym for use by dynamic relocations.  This happens before the
dynamic relocations are output, and the need for those symbols
determined.  In most cases they are not needed.  A proper analysis of
the need for dynamic section symbols is target specific and tedious,
so this patch just excludes them in the obvious case when no
dynamic relocations are present.

The patch also runs the new pr23161 and pr23162 tests on more targets.

bfd/
	* elf-bfd.h (struct elf_link_hash_table): Add "dynamic_relocs".
	* elflink.c (_bfd_elf_init_2_index_sections): Comment fix.
	(_bfd_elf_add_dynamic_entry): Set "dynamic_relocs".
	(_bfd_elf_link_renumber_dynsyms): Exclude all section symbols when
	"dynamic_relocs" is not set.
	* elfxx-mips.c (count_section_dynsyms): Likewise.
ld/
	* testsuite/ld-elf/readelf.exp: Delete DUMP and selection of
	variant ver_def.vd.
	* testsuite/ld-elf/ver_def-tic6x.vd: Delete.
	* testsuite/ld-elf/shared.exp: Run most pr23161 and pr23162 tests for
	linux, nacl and gnu targets.
	* testsuite/ld-mips-elf/mips-elf.exp: Set base_syms to 1.
	* testsuite/ld-elf/pr23161a.rd: Don't check reloc type.  Allow any
	order of __bss_start, _edata and _end.
	* testsuite/ld-elf/pr23161b.rd: Don't check plt and dyn relocs.
	Allow and order of __bss_start, _edata and _end.
	* testsuite/ld-elf/pr23162.rd: Fail if __bss_start, _edata or _end
	relocs are present rather than testing for no relocations.
	* testsuite/ld-aarch64/gc-plt-relocs.d,
	* testsuite/ld-aarch64/ifunc-1-local.d,
	* testsuite/ld-aarch64/ifunc-1.d,
	* testsuite/ld-aarch64/ifunc-2-local.d,
	* testsuite/ld-aarch64/ifunc-2.d,
	* testsuite/ld-aarch64/ifunc-21.d,
	* testsuite/ld-aarch64/ifunc-3a.d,
	* testsuite/ld-arm/farcall-mixed-lib-v4t.d,
	* testsuite/ld-arm/farcall-mixed-lib.d,
	* testsuite/ld-arm/gc-hidden-1.d,
	* testsuite/ld-arm/tls-gdesc-got.d,
	* testsuite/ld-arm/tls-lib-loc.d,
	* testsuite/ld-arm/tls-longplt-lib.d,
	* testsuite/ld-arm/tls-thumb1.d,
	* testsuite/ld-cris/libdso-10.d,
	* testsuite/ld-cris/libdso-11.d,
	* testsuite/ld-cris/libdso-13b.d,
	* testsuite/ld-cris/libdso-14.d,
	* testsuite/ld-cris/libdso-15.d,
	* testsuite/ld-cris/pic-gc-72.d,
	* testsuite/ld-cris/pic-gc-73.d,
	* testsuite/ld-cris/tls-gc-71.d,
	* testsuite/ld-mips-elf/mips16-pic-4a.nd,
	* testsuite/ld-mips-elf/pic-and-nonpic-3a.dd,
	* testsuite/ld-mips-elf/pie-n32.d,
	* testsuite/ld-mips-elf/pie-n64.d,
	* testsuite/ld-mips-elf/pie-o32.d: Update for removed dynamic
	section symbols.
2018-06-14 11:32:01 +09:30
Maciej W. Rozycki
d68033ea86 MIPS/LD/testsuite: Add microMIPS lazy binding stub tests
Adapt the existing regular MIPS lazy binding stub tests for microMIPS
code verification.  Check both regular and `--insn32' variants.

Correct indentation issues in the conditional updated.

	ld/
	* testsuite/ld-mips-elf/stub-dynsym-micromips-1-7fff.d: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-1-8000.d: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-1-fff0.d: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-1-10000.d: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-1-2fe80.d: New
	test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-1-7fff.d:
	New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-1-8000.d:
	New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-1-fff0.d:
	New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-1-10000.d:
	New test.
	* testsuite/ld-mips-elf/stub-dynsym-micromips-insn32-1-2fe80.d:
	New test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.  Fix
	indentation.
2018-06-09 01:09:23 +01:00
Maciej W. Rozycki
653e0a1e04 MIPS/LD/testsuite: Fix lazy binding stub test symbol count comment
Update the symbol count in the comment associated with lazy binding stub
tests to match `base_syms', complementing commit 889acb80ac
("MIPS/Linux/LD/testsuite: Linker script _gp scope updates"),
<https://sourceware.org/ml/binutils/2012-08/msg00066.html>, and commit
2f9efdfcdb ("mips/bfd/ld: Fix --as-needed on mips and update related
ld tests"), <https://sourceware.org/ml/binutils/2013-09/msg00131.html>.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Update symbol count in the
	comment associated with lazy binding stub tests.
2018-06-09 01:09:23 +01:00
Alan Modra
fd161d860f Define various symbols conditionally in shared libraries
The values of symbols in shared libraries like _end, _edata, and
__bss_start are generally not that useful outside of the shared
library.  This patch defines them conditionally with PROVIDE, since a
shared library might need the local value.  An example is glibc ld.so
local access to "_begin", "_etext" and "_end".  (ld.so gains access to
the local values by making the references using hidden visibility.
That makes the definitions hidden too.)

We can't use PROVIDE_HIDDEN in the linker scripts because the shared
library might need the value of the symbol in the executable.  An
example is freebsd libc dynamic access to "_end".

	PR ld/23161
	* emulparams/aarch64cloudabi.sh: PROVIDE __bss_start__, _bss_end__,
	and __end__ in shared libraries.
	* emulparams/aarch64fbsd.sh: Likewise.
	* emulparams/aarch64linux.sh: Likewise.
	* emulparams/aarch64linux32.sh: Likewise.
	* emulparams/armelf_fuchsia.sh: Likewise.
	* emulparams/armelf_linux.sh: Likewise.
	* emulparams/armelf_phoenix.sh: Likewise.
	* emulparams/aarch64elf.sh: Likewise, and __data_start
	* emulparams/aarch64elf32.sh: Likewise.
	* emulparams/armelf.sh: Likewise.
	* emulparams/armnto.sh: Likewise.
	* emulparams/elf32bmip.sh: Remove duplicate ". = ." from
	OTHER_GOT_SYMBOLS.  PROVIDE _ftext, _fdata, and _fbss in shared libs.
	* emulparams/elf32bmipn32-defs.sh: Likewise.
	* emulparams/elf32frv.sh: PROVIDE __end and __data_start in shared libs.
	* emulparams/elf32lriscv-defs.sh: Tidy.
	* emulparams/elf32mcore.sh: PROVIDE __bss_start and _bss_end in
	shared libs
	* emulparams/elf32ppccommon.sh: PROVIDE __end in shared libs.
	* emulparams/elf32rl78.sh: Tidy.
	* emulparams/i386nto.sh: PROVIDE _btext in shared libs.
	* emulparams/shelf_nto.sh: Likewise.
	* emulparams/shlelf_nto.sh: Likewise.
	* emulparams/score3_elf.sh: PROVIDE _gp, _bss_start__, _bss_end__,
	__bss_end__, __end__, _fdata, _sdata_begin, and _bss_start in
	shared libs.
	* scripttempl/elf.sc: Don't use EXECUTABLE_SYMBOLS for shared
	libraries.  PROVIDE _edata, edata, __bss_start, and _end in shared
	libraries.
	* testsuite/ld-elf/pr23161.map,
	* testsuite/ld-elf/pr23161a.c,
	* testsuite/ld-elf/pr23161b.c,
	* testsuite/ld-elf/pr23161c.c,
	* testsuite/ld-elf/pr23161a.rd,
	* testsuite/ld-elf/pr23161b.rd,
	* testsuite/ld-elf/pr23161c.rd,
	* testsuite/ld-elf/pr23161d.rd: New tests.
	* testsuite/ld-elf/shared.exp: Run ld/23161 tests.
	* testsuite/ld-elf/pr23162.rd,
	* testsuite/ld-aarch64/ifunc-1-local.d,
	* testsuite/ld-aarch64/ifunc-1.d,
	* testsuite/ld-aarch64/ifunc-2-local.d,
	* testsuite/ld-aarch64/ifunc-2.d,
	* testsuite/ld-aarch64/ifunc-21.d,
	* testsuite/ld-aarch64/ifunc-3a.d,
	* testsuite/ld-alpha/tlsbin.rd,
	* testsuite/ld-alpha/tlsbin.sd,
	* testsuite/ld-alpha/tlsbinr.rd,
	* testsuite/ld-alpha/tlspic.rd,
	* testsuite/ld-alpha/tlspic.sd,
	* testsuite/ld-cris/dso-pltdis1.d,
	* testsuite/ld-cris/dso-pltdis2.d,
	* testsuite/ld-cris/dso12-pltdis.d,
	* testsuite/ld-cris/gotplt1.d,
	* testsuite/ld-cris/gotplt2.d,
	* testsuite/ld-cris/gotplt3.d,
	* testsuite/ld-cris/hiddef1.d,
	* testsuite/ld-cris/libdso-1.d,
	* testsuite/ld-cris/libdso-10.d,
	* testsuite/ld-cris/libdso-11.d,
	* testsuite/ld-cris/libdso-12.d,
	* testsuite/ld-cris/libdso-12b.d,
	* testsuite/ld-cris/libdso-12c.d,
	* testsuite/ld-cris/libdso-13.d,
	* testsuite/ld-cris/libdso-13b.d,
	* testsuite/ld-cris/libdso-14.d,
	* testsuite/ld-cris/libdso-15.d,
	* testsuite/ld-cris/libdso-15b.d,
	* testsuite/ld-cris/libdso-1c.d,
	* testsuite/ld-cris/libdso-1d.d,
	* testsuite/ld-cris/libdso-2.d,
	* testsuite/ld-cris/pic-gc-72.d,
	* testsuite/ld-cris/pic-gc-73.d,
	* testsuite/ld-cris/pr16044.d,
	* testsuite/ld-cris/pv32-1.d,
	* testsuite/ld-cris/tls-dso-dtpoffd2.d,
	* testsuite/ld-cris/tls-dso-dtpoffd4.d,
	* testsuite/ld-cris/tls-dso-tpoffgotcomm1.d,
	* testsuite/ld-cris/tls-gc-71.d,
	* testsuite/ld-cris/tls-gd-1.d,
	* testsuite/ld-cris/tls-gd-1h.d,
	* testsuite/ld-cris/tls-gd-2.d,
	* testsuite/ld-cris/tls-gd-2h.d,
	* testsuite/ld-cris/tls-ie-10.d,
	* testsuite/ld-cris/tls-ie-11.d,
	* testsuite/ld-cris/tls-ie-78.d,
	* testsuite/ld-cris/tls-ie-8.d,
	* testsuite/ld-cris/tls-ie-9.d,
	* testsuite/ld-cris/tls-js1.d,
	* testsuite/ld-cris/tls-ld-4.d,
	* testsuite/ld-cris/tls-ld-5.d,
	* testsuite/ld-cris/tls-ld-6.d,
	* testsuite/ld-cris/tls-ld-7.d,
	* testsuite/ld-cris/tls-ldgd-14.d,
	* testsuite/ld-cris/tls-ldgd-15.d,
	* testsuite/ld-cris/tls-ldgdex-14.d,
	* testsuite/ld-cris/tls-ldgdex-15.d,
	* testsuite/ld-cris/tls-ldgdx-14.d,
	* testsuite/ld-cris/tls-ldgdx-15.d,
	* testsuite/ld-cris/tls-legdx-16.d,
	* testsuite/ld-cris/tls-legdx-17.d,
	* testsuite/ld-cris/tls-local-54.d,
	* testsuite/ld-cris/tls-local-60.d,
	* testsuite/ld-cris/tls-local-61.d,
	* testsuite/ld-cris/tls-local-63.d,
	* testsuite/ld-cris/tls-local-64.d,
	* testsuite/ld-cris/tls-ok-30.d,
	* testsuite/ld-cris/tls-ok-32.d,
	* testsuite/ld-cris/tls-ok-34.d,
	* testsuite/ld-cris/tls-und-38.d,
	* testsuite/ld-cris/tls-und-42.d,
	* testsuite/ld-cris/tls-und-46.d,
	* testsuite/ld-cris/tls-und-50.d,
	* testsuite/ld-cris/weakhiddso.d,
	* testsuite/ld-cris/weakref2.d,
	* testsuite/ld-frv/fdpic-shared-1.d,
	* testsuite/ld-frv/fdpic-shared-2.d,
	* testsuite/ld-frv/fdpic-shared-3.d,
	* testsuite/ld-frv/fdpic-shared-4.d,
	* testsuite/ld-frv/fdpic-shared-5.d,
	* testsuite/ld-frv/fdpic-shared-7.d,
	* testsuite/ld-frv/fdpic-shared-8.d,
	* testsuite/ld-frv/tls-dynamic-2.d,
	* testsuite/ld-i386/ibt-plt-1.d,
	* testsuite/ld-i386/ibt-plt-2a.d,
	* testsuite/ld-i386/ibt-plt-2b.d,
	* testsuite/ld-i386/ibt-plt-2c.d,
	* testsuite/ld-i386/ibt-plt-2d.d,
	* testsuite/ld-i386/ibt-plt-3a.d,
	* testsuite/ld-i386/ibt-plt-3b.d,
	* testsuite/ld-i386/ibt-plt-3c.d,
	* testsuite/ld-i386/ibt-plt-3d.d,
	* testsuite/ld-i386/plt2.dd,
	* testsuite/ld-i386/pr20830.d,
	* testsuite/ld-i386/tlsbin-nacl.rd,
	* testsuite/ld-i386/tlsbin.rd,
	* testsuite/ld-i386/tlsbin2-nacl.rd,
	* testsuite/ld-i386/tlsbin2.rd,
	* testsuite/ld-i386/tlsbindesc-nacl.rd,
	* testsuite/ld-i386/tlsbindesc.rd,
	* testsuite/ld-i386/tlsdesc-nacl.rd,
	* testsuite/ld-i386/tlsdesc.rd,
	* testsuite/ld-i386/tlsgdesc-nacl.rd,
	* testsuite/ld-i386/tlsgdesc.rd,
	* testsuite/ld-i386/tlsnopic-nacl.rd,
	* testsuite/ld-i386/tlsnopic.dd,
	* testsuite/ld-i386/tlsnopic.rd,
	* testsuite/ld-i386/tlsnopic.sd,
	* testsuite/ld-i386/tlspic-nacl.rd,
	* testsuite/ld-i386/tlspic.rd,
	* testsuite/ld-i386/tlspic2-nacl.rd,
	* testsuite/ld-i386/tlspic2.rd,
	* testsuite/ld-ia64/merge1.d,
	* testsuite/ld-ia64/merge2.d,
	* testsuite/ld-ia64/merge3.d,
	* testsuite/ld-ia64/merge4.d,
	* testsuite/ld-ia64/merge5.d,
	* testsuite/ld-ia64/tlsbin.rd,
	* testsuite/ld-ia64/tlspic.rd,
	* testsuite/ld-ifunc/ifunc-2-i386-now.d,
	* testsuite/ld-ifunc/ifunc-2-local-i386-now.d,
	* testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d,
	* testsuite/ld-ifunc/ifunc-2-local-x86-64.d,
	* testsuite/ld-ifunc/ifunc-2-x86-64-now.d,
	* testsuite/ld-ifunc/ifunc-2-x86-64.d,
	* testsuite/ld-ifunc/pr17154-i386-now.d,
	* testsuite/ld-ifunc/pr17154-i386.d,
	* testsuite/ld-ifunc/pr17154-x86-64-now.d,
	* testsuite/ld-ifunc/pr17154-x86-64.d,
	* testsuite/ld-m68k/tls-def-1.d,
	* testsuite/ld-m68k/tls-gd-1.d2,
	* testsuite/ld-metag/shared.d,
	* testsuite/ld-metag/stub_pic_app.d,
	* testsuite/ld-mips-elf/rel32-n32.d,
	* testsuite/ld-mips-elf/rel32-o32.d,
	* testsuite/ld-mips-elf/rel64.d,
	* testsuite/ld-powerpc/ambiguousv1.d,
	* testsuite/ld-powerpc/ambiguousv1b.d,
	* testsuite/ld-powerpc/ambiguousv2.d,
	* testsuite/ld-powerpc/ambiguousv2b.d,
	* testsuite/ld-powerpc/tlsexe.d,
	* testsuite/ld-powerpc/tlsexe.r,
	* testsuite/ld-powerpc/tlsexe32.d,
	* testsuite/ld-powerpc/tlsexe32.g,
	* testsuite/ld-powerpc/tlsexe32.r,
	* testsuite/ld-powerpc/tlsexetoc.d,
	* testsuite/ld-powerpc/tlsexetoc.r,
	* testsuite/ld-powerpc/tlsso.d,
	* testsuite/ld-powerpc/tlsso.r,
	* testsuite/ld-powerpc/tlsso32.g,
	* testsuite/ld-powerpc/tlsso32.r,
	* testsuite/ld-powerpc/tlstocso.d,
	* testsuite/ld-powerpc/tlstocso.g,
	* testsuite/ld-powerpc/tlstocso.r,
	* testsuite/ld-s390/gotreloc_31-1.dd,
	* testsuite/ld-s390/tlsbin.dd,
	* testsuite/ld-s390/tlsbin.rd,
	* testsuite/ld-s390/tlsbin_64.dd,
	* testsuite/ld-s390/tlsbin_64.rd,
	* testsuite/ld-s390/tlspic.rd,
	* testsuite/ld-s390/tlspic_64.rd,
	* testsuite/ld-sh/tlsbin-2.d,
	* testsuite/ld-sh/tlspic-2.d,
	* testsuite/ld-sparc/gotop32.rd,
	* testsuite/ld-sparc/gotop64.rd,
	* testsuite/ld-sparc/tlssunbin32.rd,
	* testsuite/ld-sparc/tlssunbin64.rd,
	* testsuite/ld-sparc/tlssunnopic32.rd,
	* testsuite/ld-sparc/tlssunnopic64.rd,
	* testsuite/ld-sparc/tlssunpic32.rd,
	* testsuite/ld-sparc/tlssunpic64.rd,
	* testsuite/ld-x86-64/bnd-branch-1-now.d,
	* testsuite/ld-x86-64/bnd-ifunc-1-now.d,
	* testsuite/ld-x86-64/bnd-ifunc-2-now.d,
	* testsuite/ld-x86-64/bnd-ifunc-2.d,
	* testsuite/ld-x86-64/bnd-plt-1-now.d,
	* testsuite/ld-x86-64/bnd-plt-1.d,
	* testsuite/ld-x86-64/ibt-plt-1-x32.d,
	* testsuite/ld-x86-64/ibt-plt-1.d,
	* testsuite/ld-x86-64/ibt-plt-2a-x32.d,
	* testsuite/ld-x86-64/ibt-plt-2a.d,
	* testsuite/ld-x86-64/ibt-plt-2b-x32.d,
	* testsuite/ld-x86-64/ibt-plt-2b.d,
	* testsuite/ld-x86-64/ibt-plt-2c-x32.d,
	* testsuite/ld-x86-64/ibt-plt-2c.d,
	* testsuite/ld-x86-64/ibt-plt-2d-x32.d,
	* testsuite/ld-x86-64/ibt-plt-2d.d,
	* testsuite/ld-x86-64/ibt-plt-3a-x32.d,
	* testsuite/ld-x86-64/ibt-plt-3a.d,
	* testsuite/ld-x86-64/ibt-plt-3b-x32.d,
	* testsuite/ld-x86-64/ibt-plt-3b.d,
	* testsuite/ld-x86-64/ibt-plt-3c-x32.d,
	* testsuite/ld-x86-64/ibt-plt-3c.d,
	* testsuite/ld-x86-64/ibt-plt-3d-x32.d,
	* testsuite/ld-x86-64/ibt-plt-3d.d,
	* testsuite/ld-x86-64/ilp32-4-nacl.d,
	* testsuite/ld-x86-64/ilp32-4.d,
	* testsuite/ld-x86-64/load1c-nacl.d,
	* testsuite/ld-x86-64/load1c.d,
	* testsuite/ld-x86-64/load1d-nacl.d,
	* testsuite/ld-x86-64/load1d.d,
	* testsuite/ld-x86-64/mpx3n.dd,
	* testsuite/ld-x86-64/mpx4.dd,
	* testsuite/ld-x86-64/mpx4n.dd,
	* testsuite/ld-x86-64/plt2.dd,
	* testsuite/ld-x86-64/pr14207.d,
	* testsuite/ld-x86-64/pr19162.d,
	* testsuite/ld-x86-64/pr20253-1f.d,
	* testsuite/ld-x86-64/pr20253-1l.d,
	* testsuite/ld-x86-64/pr20830a-now.d,
	* testsuite/ld-x86-64/pr20830a.d,
	* testsuite/ld-x86-64/pr20830b-now.d,
	* testsuite/ld-x86-64/pr20830b.d,
	* testsuite/ld-x86-64/pr21038a-now.d,
	* testsuite/ld-x86-64/pr21038a.d,
	* testsuite/ld-x86-64/pr21038b-now.d,
	* testsuite/ld-x86-64/pr21038b.d,
	* testsuite/ld-x86-64/pr21038c-now.d,
	* testsuite/ld-x86-64/pr21038c.d,
	* testsuite/ld-x86-64/tlsbin-nacl.rd,
	* testsuite/ld-x86-64/tlsbin.rd,
	* testsuite/ld-x86-64/tlsbin2-nacl.rd,
	* testsuite/ld-x86-64/tlsbin2.rd,
	* testsuite/ld-x86-64/tlsbindesc-nacl.rd,
	* testsuite/ld-x86-64/tlsbindesc.rd,
	* testsuite/ld-x86-64/tlsdesc-nacl.rd,
	* testsuite/ld-x86-64/tlsdesc.rd,
	* testsuite/ld-x86-64/tlsgdesc-nacl.rd,
	* testsuite/ld-x86-64/tlsgdesc.rd,
	* testsuite/ld-x86-64/tlspic-nacl.rd,
	* testsuite/ld-x86-64/tlspic.rd,
	* testsuite/ld-x86-64/tlspic2-nacl.rd,
	* testsuite/ld-x86-64/tlspic2.rd: Update.
2018-06-08 20:17:34 +09:30
Simon Atanasyan
3be08ea472 BFD: Prevent writing the MIPS _gp_disp symbol into symbol tables
The _gp_disp is a magic symbol, always implicitly defined by the linker.
It does not make a sense to write it into symbol tables for output files.
Moreover, now if the linker gets a version script, the _gp_disp symbol
gets zero version definition index.  The zero index means[1]:

"The symbol is local, not available outside the object."

But the _gp_disp symbol has GLOBAL binding.  That confuses some tools
like for example the LLD linker when they get such files as inputs.

This patch fixes the problem - it prevents writing the _gp_disp symbol
in regular and dynamic symbol tables.

This was tested by running LD test suite on a mipsel-linux board.

References:

[1] "Linux Standard Base Specification", Section "10.7.2 Symbol
    Version Table", p. 32

2018-05-03  Simon Atanasyan  <simon@atanasyan.com>

bfd/

	* elf32-mips.c: (elf32_mips_fixup_symbol): New function.
	(elf_backend_fixup_symbol): New macro.
	* elfxx-mips.c: (mips_elf_output_extsym): Discard _gp_disp
	handling.
	(_bfd_mips_elf_finish_dynamic_symbol): Likewise.

ld/

	* testsuite/ld-mips-elf/gp-disp-sym.d: New test.
	* testsuite/ld-mips-elf/gp-disp-sym.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
	* testsuite/ld-mips-elf/mips16-pic-2.ad: Update for _gp_disp
	symbol removal.
	* testsuite/ld-mips-elf/mips16-pic-2.nd: Likewise.
	* testsuite/ld-mips-elf/pic-and-nonpic-3a.dd: Likewise.
	* testsuite/ld-mips-elf/tlslib-o32-hidden.got: Likewise.
	* testsuite/ld-mips-elf/tlslib-o32-ver.got: Likewise.
	* testsuite/ld-mips-elf/tlslib-o32.got: Likewise.
2018-05-03 17:17:46 +01:00
Maciej W. Rozycki
197b262f98 MIPS/LD/testsuite: Update `run_dump_test' cases for non-DSO targets
Mark these `run_dump_test' cases across `ld-mips-elf/mips-elf.exp' that
are run unconditionally and require shared library support for exclusion
for targets that do not have such support, removing these failures:

FAIL: MIPS BAL/JALX in PIC mode
FAIL: microMIPS BAL/JALX in PIC mode
FAIL: MIPS BAL/JALX in PIC mode (ignore branch ISA)
FAIL: microMIPS BAL/JALX in PIC mode (ignore branch ISA)
FAIL: ld-mips-elf/hash1a
FAIL: ld-mips-elf/hash1b
FAIL: ld-mips-elf/hash1c

with `mipsel-ps2-elf' and `mips64el-ps2-elf' targets.  Tests that are
guarded with `linux_gnu' will have to be reviewed separately.

	ld/
	* testsuite/ld-mips-elf/bal-jalx-pic.d: Only run for
	`check_shared_lib_support' targets.
	* testsuite/ld-mips-elf/bal-jalx-pic-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n32.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-n64.d: Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n32.d:
	Likewise.
	* testsuite/ld-mips-elf/bal-jalx-pic-ignore-micromips-n64.d:
	Likewise.
	* testsuite/ld-mips-elf/hash1a.d: Likewise.
	* testsuite/ld-mips-elf/hash1b.d: Likewise.
	* testsuite/ld-mips-elf/hash1c.d: Likewise.
	* testsuite/ld-mips-elf/relax-jalr-n32-shared.d: Likewise.
	* testsuite/ld-mips-elf/relax-jalr-n64-shared.d: Likewise.
2018-04-27 15:25:20 +01:00
Maciej W. Rozycki
dfdad367e4 MIPS/LD/testsuite: Correct LD emulations for `mips*-*-kfreebsd*-gnu'
Complement commit 86b24e15c4 ("MIPS/LD/testsuite: Correct
comm-data.exp test ABI/emul/endian arrangement") and set LD emulations
correctly for `mips*-*-kfreebsd*-gnu' targets in comm-data.exp, removing
test suite failures:

FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/copyreloc common symbol override test
FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/nocopyreloc common symbol override test

	ld/
	* testsuite/ld-mips-elf/comm-data.exp: Correct support for
	`mips*-*-kfreebsd*-gnu' targets.
2018-04-03 09:18:06 +01:00
James Cowgill
dfb93f1158 PR ld/21900: MIPS: Fix relocation processing with undefined symbols
Currently, when `mips_elf_calculate_relocation' is asked to relocate an
undefined symbol, it reports an error or a warning and immediately
returns without performing the relocation.  This is fine if the link
fails, but if unresolved_syms_in_objects == RM_GENERATE_WARNING, the
link will continue and output some unrelocated code, which is a
regression from commit e7e2196da3 ("MIPS/BFD: Correctly report
undefined relocations").

Fix this by continuing after calling the `undefined_symbol' hook unless
this is an error condition.

	bfd/
	PR ld/21900
	* elfxx-mips.c (mips_elf_calculate_relocation): Only return
	after calling `undefined_symbol' hook if this is an error
	condition.  Assume the value of 0 for the symbol requested
	otherwise.

	ld/
	PR ld/21900
	* testsuite/ld-mips-elf/undefined-warn.d: New test.
	* testsuite/ld-mips-elf/undefined.s: Add padding at the end.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
2018-03-03 15:49:21 +00:00
Alan Modra
df5f2391f7 ld error/warning messages
This patch standardizes messages in ld, to better conform to the GNU
coding standard.  Besides issues of capitalization and full-stops,
I've
- Split up help messages for target options, so that adding a new
  option does not mean loss of translation for all the others.
- Embedded tabs have been removed, since a user might have tab stops
  set at other than 8 char intervals.
- Added missing program name (%P).  ld isn't the compiler.
- Put %F and %X first (and removed %X if %F was present).  These can
  go anywhere, but look silly in the m%Fiddle of a message, and
  choosing "%P%F:" in some messages but "%F%P:" in others leads to the
  likelihood of duplication in ld.pot.  Besides, the colon belongs
  with %P.

	* emulparams/call_nop.sh, * emulparams/cet.sh,
	* emulparams/elf32mcore.sh, * emultempl/aarch64elf.em
	* emultempl/aix.em, * emultempl/alphaelf.em, * emultempl/armcoff.em,
	* emultempl/armelf.em, * emultempl/avrelf.em, * emultempl/beos.em,
	* emultempl/bfin.em, * emultempl/cr16elf.em, * emultempl/elf32.em,
	* emultempl/elf-generic.em, * emultempl/hppaelf.em,
	* emultempl/linux.em, * emultempl/lnk960.em,
	* emultempl/m68hc1xelf.em, * emultempl/m68kcoff.em,
	* emultempl/m68kelf.em, * emultempl/metagelf.em,
	* emultempl/mipself.em, * emultempl/mmix-elfnmmo.em,
	* emultempl/mmo.em, * emultempl/msp430.em, * emultempl/nds32elf.em,
	* emultempl/nios2elf.em, * emultempl/pe.em, * emultempl/pep.em,
	* emultempl/ppc32elf.em, * emultempl/ppc64elf.em,
	* emultempl/scoreelf.em, * emultempl/sh64elf.em,
	* emultempl/spuelf.em, * emultempl/sunos.em, * emultempl/tic6xdsbt.em,
	* emultempl/ticoff.em, * emultempl/v850elf.em, * emultempl/vms.em,
	* emultempl/vxworks.em, * emultempl/xtensaelf.em, * ldcref.c,
	* ldctor.c, * ldexp.c, * ldfile.c, * ldgram.y, * ldlang.c,
	* ldmain.c, * ldmisc.c, * ldwrite.c, * lexsup.c, * mri.c, * pe-dll.c,
	* plugin.c: Standardize error/warning messages.
	* testsuite/ld-arc/jli-overflow.err,
	* testsuite/ld-arm/cmse-implib-errors.out,
	* testsuite/ld-arm/cmse-new-earlier-later-implib.out,
	* testsuite/ld-arm/cmse-new-implib-not-sg-in-implib.out,
	* testsuite/ld-arm/cmse-new-wrong-implib.out,
	* testsuite/ld-arm/cmse-veneers-no-gnu_sgstubs.out,
	* testsuite/ld-arm/cmse-veneers-wrong-entryfct.out,
	* testsuite/ld-arm/vxworks1-static.d,
	* testsuite/ld-cris/tls-err-20x.d, * testsuite/ld-cris/tls-err-29.d,
	* testsuite/ld-cris/tls-err-31.d, * testsuite/ld-cris/tls-err-33.d,
	* testsuite/ld-cris/tls-err-35.d, * testsuite/ld-cris/tls-err-37.d,
	* testsuite/ld-cris/tls-err-39.d, * testsuite/ld-cris/tls-err-41.d,
	* testsuite/ld-cris/tls-err-43.d, * testsuite/ld-cris/tls-err-45.d,
	* testsuite/ld-cris/tls-err-47.d, * testsuite/ld-cris/tls-err-49.d,
	* testsuite/ld-cris/tls-err-51.d, * testsuite/ld-cris/tls-err-67.d,
	* testsuite/ld-elf/dwarf2.err, * testsuite/ld-elf/dwarf3.err,
	* testsuite/ld-elf/orphan-5.l, * testsuite/ld-elf/orphan-6.l,
	* testsuite/ld-i386/vxworks1-static.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-n32.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-n64.d,
	* testsuite/ld-mips-elf/bal-jalx-pic.d,
	* testsuite/ld-mips-elf/jal-global-overflow-1.d,
	* testsuite/ld-mips-elf/jal-local-overflow-1.d,
	* testsuite/ld-mips-elf/mode-change-error-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-2.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-micromips.d,
	* testsuite/ld-mips-elf/unaligned-branch-mips16.d,
	* testsuite/ld-mips-elf/unaligned-branch-r6-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-r6-2.d,
	* testsuite/ld-mips-elf/unaligned-branch.d,
	* testsuite/ld-mips-elf/unaligned-jalx-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-3.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-3.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d,
	* testsuite/ld-mips-elf/unaligned-jump-micromips.d,
	* testsuite/ld-mips-elf/unaligned-jump-mips16.d,
	* testsuite/ld-mips-elf/unaligned-jump.d,
	* testsuite/ld-mips-elf/unaligned-ldpc-1.d,
	* testsuite/ld-mips-elf/unaligned-lwpc-1.d,
	* testsuite/ld-mips-elf/undefined.d,
	* testsuite/ld-mips-elf/vxworks1-static.d,
	* testsuite/ld-mmix/bpo-20.d, * testsuite/ld-mmix/bpo-20m.d,
	* testsuite/ld-mmix/bpo-7.d, * testsuite/ld-mmix/bpo-7m.d,
	* testsuite/ld-mmix/bpo-8.d, * testsuite/ld-mmix/bpo-8m.d,
	* testsuite/ld-mmix/greg-17.d, * testsuite/ld-mmix/greg-18.d,
	* testsuite/ld-mmix/greg-8.d, * testsuite/ld-mmix/greg-9.d,
	* testsuite/ld-plugin/plugin-14.d, * testsuite/ld-plugin/plugin-15.d,
	* testsuite/ld-plugin/plugin-16.d, * testsuite/ld-plugin/plugin-20.d,
	* testsuite/ld-plugin/plugin-21.d, * testsuite/ld-plugin/plugin-22.d,
	* testsuite/ld-plugin/plugin-23.d, * testsuite/ld-plugin/plugin-6.d,
	* testsuite/ld-plugin/plugin-7.d, * testsuite/ld-plugin/plugin-8.d,
	* testsuite/ld-powerpc/aix-weak-3-32.d,
	* testsuite/ld-powerpc/aix-weak-3-64.d,
	* testsuite/ld-powerpc/vxworks1-static.d,
	* testsuite/ld-sh/vxworks1-static.d,
	* testsuite/ld-sparc/vxworks1-static.d,
	* testsuite/ld-undefined/undefined.exp,
	* testsuite/ld-x86-64/pie1.d: Update for changed errors and warnings.
	* testsuite/ld-elf/warn1.d, * testsuite/ld-elf/warn2.d: Correct regex.
2018-02-26 10:51:12 +10:30
Alan Modra
2c1c967956 MIPS messages
More standardization of messages.

bfd/
	* elfxx-mips.c: Standardize error/warning messages.
binutils/
	* testsuite/binutils-all/mips/mips-reginfo-n32.d,
	* testsuite/binutils-all/mips/mips-reginfo.d: Update.
gas/
	* testsuite/gas/mips/reginfo-2.l: Update.
ld/
	* testsuite/ld-mips-elf/attr-gnu-4-12.d,
	* testsuite/ld-mips-elf/attr-gnu-4-13.d,
	* testsuite/ld-mips-elf/attr-gnu-4-14.d,
	* testsuite/ld-mips-elf/attr-gnu-4-16.d,
	* testsuite/ld-mips-elf/attr-gnu-4-17.d,
	* testsuite/ld-mips-elf/attr-gnu-4-18.d,
	* testsuite/ld-mips-elf/attr-gnu-4-19.d,
	* testsuite/ld-mips-elf/attr-gnu-4-21.d,
	* testsuite/ld-mips-elf/attr-gnu-4-23.d,
	* testsuite/ld-mips-elf/attr-gnu-4-24.d,
	* testsuite/ld-mips-elf/attr-gnu-4-25.d,
	* testsuite/ld-mips-elf/attr-gnu-4-26.d,
	* testsuite/ld-mips-elf/attr-gnu-4-27.d,
	* testsuite/ld-mips-elf/attr-gnu-4-28.d,
	* testsuite/ld-mips-elf/attr-gnu-4-29.d,
	* testsuite/ld-mips-elf/attr-gnu-4-31.d,
	* testsuite/ld-mips-elf/attr-gnu-4-32.d,
	* testsuite/ld-mips-elf/attr-gnu-4-34.d,
	* testsuite/ld-mips-elf/attr-gnu-4-35.d,
	* testsuite/ld-mips-elf/attr-gnu-4-36.d,
	* testsuite/ld-mips-elf/attr-gnu-4-37.d,
	* testsuite/ld-mips-elf/attr-gnu-4-38.d,
	* testsuite/ld-mips-elf/attr-gnu-4-39.d,
	* testsuite/ld-mips-elf/attr-gnu-4-41.d,
	* testsuite/ld-mips-elf/attr-gnu-4-42.d,
	* testsuite/ld-mips-elf/attr-gnu-4-43.d,
	* testsuite/ld-mips-elf/attr-gnu-4-45.d,
	* testsuite/ld-mips-elf/attr-gnu-4-46.d,
	* testsuite/ld-mips-elf/attr-gnu-4-47.d,
	* testsuite/ld-mips-elf/attr-gnu-4-48.d,
	* testsuite/ld-mips-elf/attr-gnu-4-49.d,
	* testsuite/ld-mips-elf/attr-gnu-4-52.d,
	* testsuite/ld-mips-elf/attr-gnu-4-53.d,
	* testsuite/ld-mips-elf/attr-gnu-4-54.d,
	* testsuite/ld-mips-elf/attr-gnu-4-58.d,
	* testsuite/ld-mips-elf/attr-gnu-4-59.d,
	* testsuite/ld-mips-elf/attr-gnu-4-61.d,
	* testsuite/ld-mips-elf/attr-gnu-4-62.d,
	* testsuite/ld-mips-elf/attr-gnu-4-63.d,
	* testsuite/ld-mips-elf/attr-gnu-4-64.d,
	* testsuite/ld-mips-elf/attr-gnu-4-68.d,
	* testsuite/ld-mips-elf/attr-gnu-4-69.d,
	* testsuite/ld-mips-elf/attr-gnu-4-71.d,
	* testsuite/ld-mips-elf/attr-gnu-4-72.d,
	* testsuite/ld-mips-elf/attr-gnu-4-73.d,
	* testsuite/ld-mips-elf/attr-gnu-4-74.d,
	* testsuite/ld-mips-elf/attr-gnu-4-78.d,
	* testsuite/ld-mips-elf/attr-gnu-4-79.d,
	* testsuite/ld-mips-elf/attr-gnu-4-81.d,
	* testsuite/ld-mips-elf/attr-gnu-4-89.d,
	* testsuite/ld-mips-elf/attr-gnu-8-12.d,
	* testsuite/ld-mips-elf/attr-gnu-8-21.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n32.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips-n64.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-micromips.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-n32.d,
	* testsuite/ld-mips-elf/bal-jalx-pic-n64.d,
	* testsuite/ld-mips-elf/bal-jalx-pic.d,
	* testsuite/ld-mips-elf/mode-change-error-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-2.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-2.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-micromips.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-mips16.d,
	* testsuite/ld-mips-elf/unaligned-branch-ignore-r6-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-micromips.d,
	* testsuite/ld-mips-elf/unaligned-branch-mips16.d,
	* testsuite/ld-mips-elf/unaligned-branch-r6-1.d,
	* testsuite/ld-mips-elf/unaligned-branch-r6-2.d,
	* testsuite/ld-mips-elf/unaligned-branch.d,
	* testsuite/ld-mips-elf/unaligned-jalx-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-3.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-3.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-micromips-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-addend-mips16-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d,
	* testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d,
	* testsuite/ld-mips-elf/unaligned-jump-micromips.d,
	* testsuite/ld-mips-elf/unaligned-jump-mips16.d,
	* testsuite/ld-mips-elf/unaligned-jump.d: Update.
2018-02-26 09:31:04 +10:30