Commit Graph

14127 Commits

Author SHA1 Message Date
Alan Modra 98bbb1b861 PowerPC readonly_dynrelocs
PowerPC64 lacked the mapfile textrel warning on finding dynamic relocs
in read-only sections.  This patch adds it, and tidies the
readonly_dynrelocs interface.  PowerPC doesn't need a SEC_ALLOC test
because !SEC_ALLOC sections are excluded by check_relocs so will never
have dyn_relocs.

	* elf32-ppc.c (readonly_dynrelocs): Delete info param.  Update all
	callers.  Don't bother with SEC_ALLOC test.  Return section pointer.
	Move minfo call to..
	(maybe_set_textrel): ..here.
	* elf64-ppc.c (readonly_dynrelocs): Return section pointer.
	(maybe_set_textrel): Call minfo to print textrel warning to map file.
2017-11-05 09:37:33 +10:30
Alan Modra 2e684e75ae hppa-linux TLS relocs
This patch fixes various problems with TLS relocations.

1) Report an error if a symbol has both TLS and normal GOT entries.
2) The GOT entry size calculation was obscure and made use of the fact
   that a symbol shouldn't have both normal and TLS GOT entries.
3) The second word of a GD GOT entry sometimes omitted a dynamic
   reloc, which was fine except that doing so makes it impossible for
   ld.so to differentiate GD and LD entries.  Also, a NONE reloc was
   emitted.
4) Unnecessary relocs were emitted for GOT entries.
5) GOT relocs didn't take note of UNDEFWEAK_NO_DYNAMIC_RELOC.

	* elf32-hppa.c (enum _tls_type): Move.
	(struct elf32_hppa_link_hash_entry): Make tls_type a bitfield.
	(elf32_hppa_check_relocs): Set DF_STATIC_TLS only for shared libraries.
	Tidy tls_type handling.  Set symbol tls_type for GOT_TLS_LDM too.
	(got_entries_needed, got_relocs_needed): New functions.
	(allocate_dynrelocs): Use them.
	(elf32_hppa_size_dynamic_sections): Likewise.
	(elf32_hppa_relocate_section): Delete bogus FIXME.  Formatting.
	Correct code emitting relocs on GD/IE got entries.  Report an
	error when a symbol has both normal and TLS GOT relocs.
2017-11-05 09:37:33 +10:30
Alan Modra 127e8e9f62 PR22394, hppa-linux-ld fails to emit dynamic relocations
gcc -mfast-indirect-calls emits a function pointer initialization
without a P% (plabel) modifier.  ld does not create the necessary
dynamic relocations for this to work.  It turns out that the problem
is caused by the non_got_ref symbol flag.  This flag is set for
non-pic by check_relocs to indicate that the symbol might need copy
relocations or dynamic relocations.  Later, the backend
adjust_dynamic_symbol clears the flag to indicate dynamic relocations
are needed, but leaves it set when copy relocations were created.  The
inversion in meaning is insane, but it's that way because the backend
adjust_dynamic_symbol function doesn't get to look at all symbols..
Anyway, the insanity works for non-function symbols.  However, the
flag is left set on any function symbol with a dynamic relocation.

This patch fixes the non_got_ref handling for function symbols, adds
-z nocopyreloc for hppa-elf, reports where textrel occurs, and expands
comments.  The check_relocs change just stops creation of dyn_relocs
we always threw away later.

	PR 22394
	* elf32-hppa.c (elf32_hppa_check_relocs): Don't create dyn_relocs
	for plabels when non-pic.
	(maybe_set_textrel): New function.
	(readonly_dynrelocs): Move and rewrite.
	(elf32_hppa_adjust_dynamic_symbol): Use it.  Don't create copy
	relocs when def_regular or -z nocopyreloc.  Handle non_got_ref
	for functions.  Expand non_got_ref comments.
	(elf32_hppa_size_dynamic_sections): Use maybe_set_textrel.
2017-11-05 09:37:33 +10:30
GDB Administrator ebe6dbc264 Automatic date update in version.in 2017-11-04 00:00:27 +00:00
H.J. Lu 79b0c981b8 x86: Remove func_pointer_refcount
Since check_reloc is running after gc_sections, there is no need for
reference count.  If a function pointer relocation can be resolved at
run-time, there is no need for PLT and it doesn't count as non-GOT/PLT
relocation.  func_pointer_refcount can be removed.

	* elf32-i386.c (elf_i386_check_relocs): Set plt.refcount to 1.
	Don't use func_pointer_refcount.  Don't set plt.refcount nor
	non_got_ref for function pointer reference.
	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Don't use
	func_pointer_refcount.
	(_bfd_x86_elf_copy_indirect_symbol): Don't copy
	func_pointer_refcount.
	(_bfd_x86_elf_hide_symbol): Don't use func_pointer_refcount.
	* elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): Likewise.
	(elf_x86_link_hash_entry): Remove func_pointer_refcount.
2017-11-03 11:15:10 -07:00
Nick Clifton 6cee897971 Fix excessive memory allocation attempts and possible integer overfloaws when attempting to read a COFF binary with a corrupt symbol count.
PR 22385
	* coffgen.c (_bfd_coff_get_external_symbols): Check for an
	overlarge raw syment count.
	(coff_get_normalized_symtab): Likewise.
2017-11-03 11:55:21 +00:00
GDB Administrator 3d47a7fef6 Automatic date update in version.in 2017-11-03 00:00:26 +00:00
GDB Administrator 89f3c4b6b9 Automatic date update in version.in 2017-11-02 00:00:15 +00:00
James Bowman 81b42bcab1 FT32B is a new FT32 family member. It has a code compression scheme, which requires the use of linker relaxations. The change is quite large, so submission is in several parts.
Part 2 adds a relaxation pass, which actually implements the code compression scheme.

bfd	* archures.c: Add bfd_mach_ft32b.
	* cpu-ft32.c: Add arch_info_struct.
	* elf32-ft32.c: Add R_FT32_RELAX, SC0, SC1,
	DIFF32. (ft32_elf_relocate_section): Add clauses
	for R_FT32_SC0, SC1, DIFF32.  (ft32_reloc_shortable,
	elf32_ft32_is_diff_reloc, elf32_ft32_adjust_diff_reloc_value,
	elf32_ft32_adjust_reloc_if_spans_insn,
	elf32_ft32_relax_delete_bytes, elf32_ft32_relax_is_branch_target,
	ft32_elf_relax_section): New function.
	* reloc.c: Add BFD_RELOC_FT32_RELAX, SC0, SC1, DIFF32.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.

gas	* config/tc-ft32.c (md_assemble): add relaxation reloc
	BFD_RELOC_FT32_RELAX.  (md_longopts): Add "norelax" and
	"no-relax". (md_apply_fix): Add reloc BFD_RELOC_FT32_DIFF32.
	(relaxable_section, ft32_validate_fix_sub, ft32_force_relocation,
	ft32_allow_local_subtract): New function.
	* config/tc-ft32.h: remove unused MD_PCREL_FROM_SECTION.
	* testsuite/gas/ft32/insnsc.s: New test exercising all FT32B
	shortcodes.

include	* elf/ft32.h: Add R_FT32_RELAX, SC0, SC1, DIFF32.
2017-11-01 15:33:24 +00:00
Nick Clifton a67d66eb97 Prevent illegal memory accesses when attempting to read excessively large COFF line number tables.
PR 22376
	* coffcode.h (coff_slurp_line_table): Check for an excessively
	large line number count.
2017-11-01 15:21:46 +00:00
Nick Clifton e0115a8446 Update check for invalid values in pe_bfd_read_buildid function.
PR 22373
	* peicode.h (pe_bfd_read_buildid): Revise check for invalid size
	and offset in light of further possible bogus values.
2017-11-01 12:37:33 +00:00
Nick Clifton ee357486aa Fix an invalid free called when attempting to link a COFF object against an ELF archive with --no-keep-memory enabled.
PR 22369
	* coffgen.c (_bfd_coff_free_symbols): Fail if called on a non-COFF
	file.
	* cofflink.c (coff_link_check_archive_element): Skip non-COFF
	members of an archive.
2017-11-01 11:35:42 +00:00
Alan Modra 3988aed54a PR22374, PowerPC unnecessary PLT entries
We don't need a PLT entry when function pointer initialization in a
read/write section is the only reference to a given function symbol.
This patch prevents the unnecessary PLT entry, and ensures no dynamic
relocs are emitted when UNDEFWEAK_NO_DYNAMIC_RELOC says so.

bfd/
	PR 22374
	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't create a plt
	entry when just a dynamic reloc can serve.  Ensure no dynamic
	relocations when UNDEFWEAK_NO_DYNAMIC_RELOC by setting non_got_ref.
	Expand and move the non_got_ref comment.
	* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
ld/
	* testsuite/ld-powerpc/ambiguousv2.d: Remove FIXME.
2017-11-01 18:46:34 +10:30
GDB Administrator 4d01dee480 Automatic date update in version.in 2017-11-01 00:00:19 +00:00
Nick Clifton 0bb6961f18 Fix illegal memory access triggered when parsing a PE binary with a corrupt data dictionary.
PR 22373
	* peicode.h (pe_bfd_read_buildid): Check for invalid size and data
	offset values.
2017-10-31 14:29:40 +00:00
GDB Administrator 916296ccea Automatic date update in version.in 2017-10-31 00:00:40 +00:00
Alan Modra 7f9cb5d275 frv-elf --gc-sections failures
git commit 81742b83e9 exposed an frv-elf bug, with the object id not
matching the hash table id.

	* elf32-frv.c (ELF_TARGET_ID): Don't define for generic
	elf target.
2017-10-30 12:08:26 +10:30
Alan Modra 81742b83e9 relocs_compatible test for gc-sections
I noticed when looking at pr22300 that before calling check_relocs we
have an elf_object_id test (added for pr11933) as well as the
relocs_compatible test.  I believe backend gc_mark_hook and
gc_sweep_hook ought to be protected similarly from being confused by
unexpected relocations (for example, both elf64-ppc.c and elf32-ppc.c
use _bfd_elf_relocs_compatible, so I think it would be possible for
the ppc64 gc_mark_hook to be presented with a ppc32 relocatable
object).

	* elflink.c (elf_gc_sweep): Test elf_object_id in addition to
	relocs_compatible.
	(bfd_elf_gc_sections): Likewise.
2017-10-30 11:03:50 +10:30
Alan Modra d336fa6d82 Fix hppa-linux pr22269-1 fail
Adds UNDEFWEAK_NO_DYNAMIC_RELOC in the rest of places needed in this
file, reduces dynamic relocations in a number of cases, and removes
some bogus code that was attempting to handle dynamic common symbols
specially.

	PR 22269
	* elf32-hppa.c (elf32_hppa_check_relocs): Move SEC_ALLOC test to
	ensure non_got_ref is not set due to debug references.
	(elf32_hppa_adjust_dynamic_symbol): Tidy plabel handling.  Use
	SYMBOL_CALLS_LOCAL and UNDEFWEAK_NO_DYNAMIC_RELOC when determining
	need for a plt entry.
	(allocate_dynrelocs): Similarly for got entries.  Tidy code discarding
	dynamic relocs when pic.  Remove bogus code attempting to handle
	commons.
	(elf32_hppa_relocate_section): Similarly.  Delete resolved_to_zero
	and simplify.
	(elf32_hppa_finish_dynamic_symbol): Use UNDEFWEAK_NO_DYNAMIC_RELOC
	and SYMBOL_REFERENCES_LOCAL in GOT handling.
2017-10-30 11:03:50 +10:30
GDB Administrator 2b2d167607 Automatic date update in version.in 2017-10-30 00:00:32 +00:00
GDB Administrator 692af22719 Automatic date update in version.in 2017-10-29 00:00:25 +00:00
Alan Modra c0e331c794 PR22300, Abort in elf32_hppa_relocate_section building polyml
polyml produces object files with the wrong OS/ABI for hppa-linux.
This, along with the fact that elf32-hppa.c is using the strictest
backend relocs_compatible, results in wrong merging of ELF symbols.

So, remove the relocs_compatible check in _bfd_elf_merge_symbol.
_bfd_elf_merge_symbol is only called nowadays from within blocks
protected by is_elf_hash_table, so "we are doing an ELF link" as the
removed comment says, is true.

Also relax relocs_compatible for hppa and powerpc.  relocs_compatible
is used for more than just merging symbols, as the name suggests.
This allows objects that are in fact reasonably compatible to be
linked.

	PR 22300
	* elflink.c (_bfd_elf_merge_symbol): Remove relocs_compatible check.
	* elf32-hppa.c (elf_backend_relocs_compatible): Define.
	* elf32-ppc.c (elf_backend_relocs_compatible): Define.
	* elf64-ppc.c (elf_backend_relocs_compatible): Define.
2017-10-28 22:11:40 +10:30
GDB Administrator af5f32f82b Automatic date update in version.in 2017-10-28 00:00:30 +00:00
GDB Administrator 95904ac43c Automatic date update in version.in 2017-10-27 00:00:28 +00:00
GDB Administrator ca3e4ea52d Automatic date update in version.in 2017-10-26 00:00:22 +00:00
Alan Modra e601d38b7c Allow for __gnu_lto_slim prefixed with extra "_"
Some targets prefix global symbols with "_".

bfd/
	* archive.c (_bfd_compute_and_write_armap): Match "__gnu_lto_slim"
	optionally prefixed with "_".
	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
binutils/
	* nm.c (filter_symbols): Match "__gnu_lto_slim" optionally prefixed
	with "_".
gold/
	* symtab.cc (Symbol_table::add_from_relobj): Match "__gnu_lto_slim"
	optionally prefixed with "_".
ld/
	* testsuite/ld-plugin/lto-3r.d: Match "__gnu_lto_v" optionally
	prefixed with "_".
	* testsuite/ld-plugin/lto-5r.d: Likewise.
2017-10-25 15:32:52 +10:30
GDB Administrator 711f5e559e Automatic date update in version.in 2017-10-25 00:00:26 +00:00
Andrew Waterman 3342be5dab RISC-V: Only relax to C.LUI when imm != 0 and rd != 0/2
This matches the ISA specification.  This also adds two tests: one to
make sure the assembler rejects invalid 'c.lui's, and one to make sure
we only relax valid 'c.lui's.

bfd/ChangeLog

2017-10-24  Andrew Waterman  <andrew@sifive.com>

        * elfnn-riscv.c (_bfd_riscv_relax_lui): Don't relax to c.lui
        when rd is x0.

include/ChangeLog

2017-10-24  Andrew Waterman  <andrew@sifive.com>

        * opcode/riscv.h (VALID_RVC_LUI_IMM): c.lui can't load the
        immediate 0.

gas/ChangeLog

2017-10-24  Andrew Waterman  <andrew@sifive.com>

        * testsuite/gas/riscv/c-lui-fail.d: New testcase.
        gas/testsuite/gas/riscv/c-lui-fail.l: Likewise.
        gas/testsuite/gas/riscv/c-lui-fail.s: Likewise.
        gas/testsuite/gas/riscv/riscv.exp: Likewise.

ld/ChangeLog

2017-10-24  Andrew Waterman  <andrew@sifive.com>

        * ld/testsuite/ld-riscv-elf/c-lui.d: New testcase.
        ld/testsuite/ld-riscv-elf/c-lui.s: Likewise.
        ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp: New test suite.
2017-10-24 08:02:46 -07:00
Renlin Li 93f4de3929 [BFD][PR21703]Override the new defined symbol with the old normal symbol when --allow-multiple-definition is provided.
The behavior of _bfd_elf_merge_symbol and _bfd_generic_link_add_one_symbol is
inconsistent.

In multiple definition case, _bfd_elf_merge_symbol decided to override the old
symbol definition with the new defintion, (size, type, target data)
In _bfd_generic_link_add_one_symbol, it simply return without doing anything
because of allow-multiple-definition is provided.
This leaves the symbol in a wrong state.

Here, following the documentation, I made this patch to force the old definition
override the new definition if the old symbol is not dynamic or weak.
Because, in those two cases, it's expected to do some merge. I have checked
that, those two cases are properly handled.

bfd/
	PR ld/21703
	* elflink.c (_bfd_elf_merge_symbol): Handle multiple definition case.

ld/

	PR ld/21703
	* testsuite/ld-elf/elf.exp: Run new tests.
	* testsuite/ld-elf/pr21703-1.s: New.
	* testsuite/ld-elf/pr21703-2.s: New.
	* testsuite/ld-elf/pr21703-3.s: New.
	* testsuite/ld-elf/pr21703-4.s: New.
	* testsuite/ld-elf/pr21703-r.sd: New.
	* testsuite/ld-elf/pr21703-shared.sd: New.
	* testsuite/ld-elf/pr21703.sd: New.
	* testsuite/ld-elf/pr21703.ver: New.
2017-10-24 13:01:48 +01:00
GDB Administrator fee0ea1f2d Automatic date update in version.in 2017-10-24 00:00:31 +00:00
Nick Clifton 66cae56016 Make sure that undefined symbols added to the linker command line via the -u option appear in the output executable, if they have not been resolved.
PR 22319
bfd	* elflink.c (elf_link_output_extsym): Keep global undefined
	symbols if they have been marked as needed.

ld	* testsuite/ld-elf/pr22310.s: New test source file.
	* testsuite/ld-elf/pr22310.d: New test driver.
	* testsuite/ld-mmix/undef-3.d: Update expected output from readelf.
2017-10-23 18:16:49 +01:00
Maciej W. Rozycki defc8e2b35 MIPS: Preset EF_MIPS_ABI2 with n32 ELF objects
Fix a bug in MIPS n32 ELF object file generation and make such objects
consistent with the n32 BFD requested, by presetting the EF_MIPS_ABI2
flag in the `e_flags' member of the newly created ELF file header, as it
is this flag that tells n32 objects apart from o32 objects.

This flag will then stay set through to output file generation for
writers such as GAS or GDB's `generate-core-file' command.  Readers will
overwrite the whole of `e_flags' along with the rest of the ELF file
header in `elf_swap_ehdr_in' and then verify in `mips_elf_n32_object_p'
that the flag is still set before accepting an input file as an n32
object.

The issue was discovered with GDB's `generate-core-file' command making
o32 core files out of n32 debuggees.

	bfd/
	* elfn32-mips.c (mips_elf_n32_mkobject): New prototype and
	function.
	(bfd_elf32_mkobject): Use `mips_elf_n32_mkobject' rather than
	`_bfd_mips_elf_mkobject'.

	gas/
	* config/tc-mips.c (mips_elf_final_processing): Don't set
	EF_MIPS_ABI2 in `e_flags'.
2017-10-23 15:39:46 +01:00
GDB Administrator f6af9f3428 Automatic date update in version.in 2017-10-23 00:00:26 +00:00
Hans-Peter Nilsson 56fbd04185 Fix gas/22304 by forcing a 64-bit bfd for cris*-*.
PR gas/22304
	* config.bfd (cris-*-* | crisv32-*-*): Require a 64-bit BFD.
2017-10-22 13:05:07 +02:00
GDB Administrator a73ca55259 Automatic date update in version.in 2017-10-22 00:00:28 +00:00
GDB Administrator 881b33774d Automatic date update in version.in 2017-10-21 00:00:31 +00:00
GDB Administrator b5f6e74092 Automatic date update in version.in 2017-10-20 00:00:28 +00:00
Palmer Dabbelt 9d06997adb RISC-V: Relax RISCV_PCREL_* to RISCV_GPREL_*
In the medany code model the compiler generates PCREL_HI20+PCREL_LO12
relocation pairs against local symbols because HI20+LO12 relocations
can't reach high addresses.  We relax HI20+LO12 pairs to GPREL
relocations when possible, which is an important optimization for
Dhrystone.  Without this commit we are unable to relax
PCREL_HI20+PCREL_LO12 pairs to GPREL when possible, causing a 10%
permormance hit on Dhrystone on Rocket.

Note that we'll now relax

  la gp, __global_pointer$

to

  mv gp, gp

which probably isn't what you want in your entry code.  Users who want
gp-relative symbols to continue to resolve should add ".option norelax"
accordingly.  Due to this, the assembler now pairs PCREL relocations
with RELAX relocations when they're expected to be relaxed just like
every other relaxable relocation.

bfd/ChangeLog

2017-10-19  Palmer Dabbelt  <palmer@dabbelt.com>

        * elfnn-riscv.c (riscv_pcgp_hi_reloc): New structure.
        (riscv_pcgp_lo_reloc): Likewise.
        (riscv_pcgp_relocs): Likewise.
        (riscv_init_pcgp_relocs): New function.
        (riscv_free_pcgp_relocs): Likewise.
        (riscv_record_pcgp_hi_reloc): Likewise.
        (riscv_record_pcgp_lo_reloc): Likewise.
        (riscv_delete_pcgp_hi_reloc): Likewise.
        (riscv_use_pcgp_hi_reloc): Likewise.
        (riscv_record_pcgp_lo_reloc): Likewise.
        (riscv_find_pcgp_lo_reloc): Likewise.
        (riscv_delete_pcgp_lo_reloc): Likewise.
        (_bfd_riscv_relax_pc): Likewise.
        (_bfd_riscv_relax_section): Handle R_RISCV_PCREL_* relocations
        via the new functions above.

gas/ChangeLog

2017-10-19  Palmer Dabbelt  <palmer@dabbelt.com>

        * config/tc-riscv.c (md_apply_fix): Mark
        BFD_RELOC_RISCV_PCREL_HI20 as relaxable when relaxations are
        enabled.
2017-10-19 09:19:46 -07:00
Palmer Dabbelt ff6f4d9b2d RISC-V: Add R_RISCV_DELETE, which marks bytes for deletion
We currently delete bytes by shifting an entire BFD backwards to
overwrite the bytes we no longer need.  The result is that relaxing a
BFD is quadratic time.

This patch adds an additional relocation that specifies a byte range
that will be deleted from the final object file, and adds a relaxation
pass (between the existing passes that delete bytes and the alignment
pass) that actually deletes the bytes.  Note that deletion is still
quadratic time, and nothing uses R_RISCV_DELETE yet.

I've been meaning to go convert all the other relaxations to use
R_RISCV_DELETE and then make it faster, but this patch has been sitting
around for months so it looks like that won't happen for a bit.  The
PCREL->GPREL relaxation that comes next uses this, and since we've been
using these two patches out of tree since I wrote them months ago I
figure it's better to just get them in now.  I (or someone else :)) can
convert all the relocations later...

R_RISCV_DELETE will never be emitted into ELF objects, so therefor isn't
exposed to the rest of binutils.  As such, we're not considering this as
part of the ABI.

bfd/ChangeLog

2017-10-19  Palmer Dabbelt  <palmer@dabbelt.com>

        * elfnn-riscv (R_RISCV_DELETE): New define.
        (_bfd_riscv_relax_delete): New function.
        (perform_relocation): Handle R_RISCV_DELETE.
        (_bfd_riscv_relax_section): Likewise.

ld/ChangeLog

2017-10-19  Palmer Dabbelt  <palmer@dabbelt.com>

        * emultempl/riscvelf.em (riscv_elf_before_allocation): Add a
        third relaxation pass.
2017-10-19 09:19:32 -07:00
H.J. Lu 280958942b tilegx: Check bfd_link_executable for TLS check
Copied from x86, check bfd_link_executable, instead of bfd_link_pic,
for TLS transition check.  Not sure if it works correctly.  All usages
of bfd_link_pic should be audited.

	PR ld/22263
	* elfxx-tilegx.c (tilegx_elf_tls_transition): Replace
	bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
	bfd_link_executable for TLS check.
	(tilegx_elf_check_relocs): Likewise.
	(allocate_dynrelocs): Likewise.
	(tilegx_elf_relocate_section): Likewise.
2017-10-19 05:22:35 -07:00
H.J. Lu 1ba1f393fa tilepro: Check bfd_link_executable for TLS check
Copied from x86, check bfd_link_executable, instead of bfd_link_pic,
for TLS transition check.  Not sure if it works correctly.  All usages
of bfd_link_pic should be audited.

	PR ld/22263
	* elf32-tilepro.c (tilepro_elf_tls_transition): Replace
	bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
	bfd_link_executable for TLS check.
	(tilepro_elf_check_relocs): Likewise.
	(allocate_dynrelocs): Likewise.
	(tilepro_elf_relocate_section): Likewise.
2017-10-19 05:21:01 -07:00
H.J. Lu 0fb7012e88 sparc: Check bfd_link_executable for TLS check
Copied from x86, check bfd_link_executable, instead of bfd_link_pic,
for TLS transition check.  Not sure if it works correctly.  All usages
of bfd_link_pic should be audited.

	PR ld/22263
	* elfxx-sparc.c (sparc_elf_tls_transition): Replace
	bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
	bfd_link_executable for TLS check.
	(_bfd_sparc_elf_check_relocs): Likewise.
	(allocate_dynrelocs): Likewise.
	(_bfd_sparc_elf_relocate_section): Likewise.
2017-10-19 05:18:22 -07:00
GDB Administrator d7dd155841 Automatic date update in version.in 2017-10-19 00:00:32 +00:00
H.J. Lu 8e35405853 tile: Mark __tls_get_addr in gc_mark_hook
TLS_GD_CALL relocations implicitly reference __tls_get_addr.  Since
elf_gc_mark_hook is called before check_relocs now, we need to call
_bfd_generic_link_add_one_symbol to mark __tls_get_addr for garbage
collection.

	* elf32-tilepro.c (tilepro_elf_gc_mark_hook): Call
	_bfd_generic_link_add_one_symbol to mark __tls_get_addr.
	* elfxx-tilegx.c (tilegx_elf_gc_mark_hook): Likewise.
2017-10-18 15:47:35 -07:00
H.J. Lu b7213666d6 microblaze: Check for indirect and warning symbols
Relocations against indirect and warning symbols should be applied to real
symbols.

	* elf32-microblaze.c (microblaze_elf_check_relocs): Check for
	indirect and warning symbols.
2017-10-17 17:15:02 -07:00
GDB Administrator da15dcb0aa Automatic date update in version.in 2017-10-18 00:00:29 +00:00
Alan Modra cf54ebff3b PR22307, Heap out of bounds read in _bfd_elf_parse_gnu_properties
When adding an unbounded increment to a pointer, you can't just check
against the end of the buffer but also must check that overflow
doesn't result in "negative" pointer movement.  Pointer comparisons
are signed.  Better, check the increment against the space left using
an unsigned comparison.

	PR 22307
	* elf-properties.c (_bfd_elf_parse_gnu_properties): Compare datasz
	against size left rather than comparing pointers.  Reorganise loop.
2017-10-17 22:12:45 +10:30
Alan Modra 0301ce1486 PR22306, Invalid free() in slurp_symtab()
PR 22306
	* aoutx.h (aout_get_external_symbols): Handle stringsize of zero,
	and error for any other size that doesn't cover the header word.
2017-10-17 16:47:44 +10:30
GDB Administrator 087ce8fa02 Automatic date update in version.in 2017-10-17 00:00:26 +00:00
H.J. Lu 5c3261b0e8 ELF: Call check_relocs after opening all inputs
For all ELF targers, call check_relocs after opening all inputs and
garbage collection.  Since the symbol resolution is known, check_relocs
can be simplified.  Also garbage collection doesn't need to undo what
check_relocs has done for symbols which have been garbage collected.
Since ELF targets never see the removed sections, gc_sweep_hook can be
removed from elf_backend_data and we can avoid GOT/PLT with garbage
collection now.

Set link_info.check_relocs_after_open_input to TRUE for all linker
targets which use ELF linker and update garbage collection tests to
remove unused GOT section.

ldemul_after_check_relocs is added for powerpc to support --secure-plt,
--bss-plt and --sdata-got.

Tested natively without regressions on i686, x86-64 and x32.  Tested
cross binutils on x86-64 without regressions for aarch64-linux,
alpha-linux, arm-linux, bfin-elf, cr16-elf, cris-elf, crx-elf, frv-linux,
hppa64-linux, hppa-linux, ia64-linux, lm32-elf, m32r-elf, m68k-linux,
mcore-elf, metag-elf, microblaze-linux, mips-linux, mmix, mn10300-elf,
nds32le-linux, nios2-linux, or1k-elf, powerpc64-linux, powerpc-linux,
riscv32-linux, riscv64-linux, s390-linux, s390x-linux, score-elf,
sh3-linux, sparc64-linux, sparc-linux, tic6x-elf, tilegx-linux,
tilepro-linux, vax-linux, x86_64-mingw32 and xtensa-linux.

bfd/

	* elf-bfd.h (elf_backend_data): Remove gc_sweep_hook.
	* elf32-arm.c (elf32_arm_gc_sweep_hook): Removed.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-bfin.c (bfin_gc_sweep_hook): Likewise.
	(bfinfdpic_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-cr16.c (elf32_cr16_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-cris.c (cris_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-hppa.c (elf32_hppa_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-lm32.c (lm32_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-m32r.c (m32r_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-m68k.c (elf_m68k_got_entry): Remove elf_m68k_gc_sweep_hook
	from comments.
	(elf_m68k_remove_got_entry_type): Removed.
	(elf_m68k_find_got_entry_ptr): Likewise.
	(elf_m68k_remove_got_entry): Likewise.
	(elf_m68k_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-mcore.c (mcore_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-metag.c (elf_metag_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-microblaze.c (elf_backend_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-mips.c (elf_backend_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-nds32.c (nds32_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-nios2.c (nios2_elf32_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-or1k.c (or1k_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-ppc.c (ppc_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-s390.c (elf_s390_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-sparc.c (elf_backend_gc_sweep_hook): Likewise.
	* elf32-tic6x.c (elf32_tic6x_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-tilegx.c (elf_backend_gc_sweep_hook): Likewise.
	* elf32-tilepro.c (tilepro_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-vax.c (elf_vax_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf32-xtensa.c (elf_xtensa_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf64-alpha.c (elf64_alpha_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf64-mips.c (elf_backend_gc_sweep_hook): Likewise.
	* elf64-mmix.c (mmix_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf64-ppc.c (elf_backend_gc_sweep_hook): Likewise.
	(ppc64_elf_gc_sweep_hook): Likewise.
	* elf64-s390.c (elf_s390_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elf64-sparc.c (elf_backend_gc_sweep_hook): Likewise.
	* elf64-tilegx.c (elf_backend_gc_sweep_hook): Likewise.
	* elflink.c (elf_link_add_object_symbols): Don't call
	_bfd_elf_link_check_relocs here.
	(gc_sweep_hook_fn): Removed.
	(elf_gc_sweep): Remove gc_sweep_hook.
	* elfnn-aarch64.c (elfNN_aarch64_gc_sweep_hook): Removed.
	(elf_backend_gc_sweep_hook): Likewise.
	* elfnn-riscv.c (riscv_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elfxx-mips.c (_bfd_mips_elf_gc_sweep_hook): Likewise.
	* elfxx-mips.h (_bfd_mips_elf_gc_sweep_hook): Likewise.
	(elf_backend_gc_sweep_hook): Likewise.
	* elfxx-sparc.c (_bfd_sparc_elf_gc_sweep_hook): Likewise.
	* elfxx-sparc.h (_bfd_sparc_elf_gc_sweep_hook): Likewise.
	* elfxx-target.h (elf_backend_gc_sweep_hook): Likewise.
	(elfNN_bed): Remove elf_backend_gc_sweep_hook.
	* elfxx-tilegx.c (tilegx_elf_gc_sweep_hook): Removed.
	* elfxx-tilegx.h (tilegx_elf_gc_sweep_hook): Likewise.

ld/

	* emulparams/elf32_x86_64.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Removed.
	* emulparams/elf_i386_be.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_i386_chaos.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_i386_ldso.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_i386_vxworks.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_iamcu.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_k1om.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_l1om.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/elf_x86_64.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/i386lynx.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/i386moss.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/i386nto.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/i386nw.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shelf.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shelf32.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shelf_nto.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shelf_vxworks.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shlelf32_linux.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shlelf_linux.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emulparams/shlelf_nto.sh (CHECK_RELOCS_AFTER_OPEN_INPUT):
	Likewise.
	* emultempl/aarch64elf.em (gld${EMULATION_NAME}_before_parse):
	Set link_info.check_relocs_after_open_input to TRUE.
	* emultempl/armelf.em (gld${EMULATION_NAME}_before_parse):
	Likewise.
	* emultempl/scoreelf.em (gld${EMULATION_NAME}_before_parse):
	Likewise.
	* emultempl/aix.em (ld_${EMULATION_NAME}_emulation): Add
	after_parse_default.
	* emultempl/armcoff.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/beos.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/generic.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/gld960.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/gld960c.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/lnk960.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/m68kcoff.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/msp430.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/pe.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/pep.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/sunos.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/ticoff.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/vanilla.em (ld_${EMULATION_NAME}_emulation): Likewise.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Always
	set link_info.check_relocs_after_open_input to TRUE.
	(ld_${EMULATION_NAME}_emulation): Add $LDEMUL_AFTER_CHECK_RELOCS.
	* emultempl/linux.em (gld${EMULATION_NAME}_before_parse):
	Set link_info.check_relocs_after_open_input to TRUE.
	(ld_${EMULATION_NAME}_emulation): Add after_check_relocs_default.
	* emultempl/mmix-elfnmmo.em (mmix_before_parse): New function.
	(LDEMUL_BEFORE_PARSE): New.
	* emultempl/mmixelf.em (elfmmix_before_parse): Replace
	gld${EMULATION_NAME}_before_parse with mmix_before_parse.
	* emultempl/ppc32elf.em (ppc_after_open): Renamed to ...
	(ppc_after_check_relocs): This.  Call after_check_relocs_default
	instead of gld${EMULATION_NAME}_after_open.
	(LDEMUL_AFTER_OPEN): Removed.
	(LDEMUL_AFTER_CHECK_RELOCS): New.
	* ldemul.c (ldemul_after_check_relocs): New.
	(after_check_relocs_default): Likewise.
	* ldemul.h (ldemul_after_check_relocs): Likewise.
	(after_check_relocs_default): Likewise.
	(ld_emulation_xfer_struct): Add after_check_relocs.
	* ldlang.c (lang_process): Call ldemul_after_check_relocs after
	lang_check_relocs.
	* testsuite/ld-aarch64/gc-got-relocs.d: Don't expect GOT section.
	* testsuite/ld-aarch64/gc-tls-relocs.d: Likewise.
	* testsuite/ld-cris/tls-gc-68.d: Likewise.
	* testsuite/ld-cris/tls-gc-69.d: Likewise.
	* testsuite/ld-cris/tls-gc-70.d: Likewise.
	* testsuite/ld-cris/tls-gc-75.d: Likewise.
	* testsuite/ld-cris/tls-gc-79.d: Likewise.
	* testsuite/ld-mmix/bpo-10.d: Don't expect .MMIX.reg_contents
	section.
2017-10-16 03:50:13 -07:00
GDB Administrator 86e17b6fbc Automatic date update in version.in 2017-10-16 00:00:19 +00:00
GDB Administrator 631859b65b Automatic date update in version.in 2017-10-15 00:00:28 +00:00
H.J. Lu 851b6fa137 x86: Add elf_x86_backend_data
Add plt0_pad_byte and target_os fields to elf_x86_link_hash_table.
Replace elf_i386_backend_data and elf_x86_64_backend_data with
elf_x86_backend_data.

	* elf32-i386.c (elf_i386_backend_data): Removed.
	(get_elf_i386_backend_data): Likewise.
	(elf_i386_arch_bed): Replace elf_i386_backend_data with
	elf_x86_backend_data.
	(elf_i386_get_synthetic_symtab): Likewise.
	(elf_i386_nacl_arch_bed): Likewise.
	(elf_i386_vxworks_arch_bed): Likewise.
	(elf_i386_relocate_section): Check target_os instead of
	is_vxworks.
	(elf_i386_finish_dynamic_symbol): Likewise.
	(elf_i386_finish_dynamic_sections): Use htab->plt0_pad_byte.
	Check target_os instead of is_vxworks.
	(elf_i386_link_setup_gnu_properties): Remove normal_target and
	is_vxworks.  Initialize plt0_pad_byte.
	* elf64-x86-64.c (elf_x86_64_backend_data); Removed.
	(get_elf_x86_64_arch_data): Likewise.
	(get_elf_x86_64_backend_data): Likewise.
	(elf_x86_64_arch_bed): Replace elf_x86_64_backend_data with
	elf_x86_backend_data.
	(elf_x86_64_get_synthetic_symtab): Likewise.
	(elf_x86_64_nacl_arch_bed): Likewise.
	(elf_x86_64_link_setup_gnu_properties): Remove is_vxworks and
	normal_target.  Initialize plt0_pad_byte.
	* elfxx-x86.c (elf_x86_allocate_dynrelocs): Check target_os
	instead of is_vxworks.
	(_bfd_x86_elf_size_dynamic_sections): Likewise.
	(_bfd_x86_elf_finish_dynamic_sections): Likewise.
	(_bfd_x86_elf_adjust_dynamic_symbol): Likewise.
	(_bfd_x86_elf_link_hash_table_create): Initialize target_os.
	(_bfd_x86_elf_link_setup_gnu_properties): Remove is_vxworks.
	Update normal_target.  Set up plt0_pad_byte.  Check target_os
	instead of is_vxworks.
	* elfxx-x86.h (elf_x86_target_os): New.
	(elf_x86_backend_data): Likewise.
	(get_elf_x86_backend_data): Likewise.
	(elf_x86_link_hash_table): Remove is_vxworks.  Add plt0_pad_byte
	and target_os.
	(elf_x86_init_table): Remove normal_target and is_vxworks.  Add
	plt0_pad_byte.
2017-10-14 11:32:52 -07:00
H.J. Lu 9577f60b5a x86: Add _bfd_x86_elf_finish_dynamic_sections
Extract the common parts of elf_i386_finish_dynamic_sections and
elf_x86_64_finish_dynamic_sections into a separate function in
elfxx-x86.c.

	* elf32-i386.c (elf_i386_finish_dynamic_sections): Call
	_bfd_x86_elf_finish_dynamic_sections.
	* elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Likewise.
	* elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): New
	function.
	* elfxx-x86.h (_bfd_x86_elf_finish_dynamic_sections): New
	prototype.
2017-10-14 11:31:25 -07:00
H.J. Lu 5d84490bf6 cris: Don't hide symbol which was forced to be dynamic
h->root.dynamic is set on symbols which were forced to be dynamic due
to a version script file.  Don't remove such symbols from dynamic symbol
table.  This fixes:

FAIL: ld-elf/pr21384

	PR ld/21384
	* elf32-cris.c (elf_cris_discard_excess_program_dynamics): Don't
	hide symbol which was forced to be dynamic.
2017-10-14 11:24:29 -07:00
H.J. Lu e01c16a838 cris: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

bfd/

	PR ld/22269
	* elf32-cris.c (cris_elf_relocate_section): Don't generate
	dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(cris_elf_check_relocs): Don't allocate dynamic relocation
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.

ld/

	PR ld/22269
	* testsuite/ld-cris/weakhiddso.d: Update and remove R_CRIS_NONE.
2017-10-14 11:09:44 -07:00
H.J. Lu 6ee6e05af4 sh: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-sh.c (allocate_dynrelocs): Discard dynamic relocations
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(sh_elf_relocate_section): Don't generate dynamic relocation if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 11:07:30 -07:00
H.J. Lu b27bb18f45 s390: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-s390.c (allocate_dynrelocs): Discard dynamic
	relocations if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elf_s390_relocate_section): Don't generate dynamic relocation
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	* elf64-s390.c (allocate_dynrelocs): Discard dynamic
	relocations if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elf_s390_relocate_section): Don't generate dynamic relocation
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 11:06:20 -07:00
H.J. Lu 31a53da541 nios2: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-nios2.c (nios2_elf32_relocate_section): Don't generate
	dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_dynrelocs): Discard dynamic relocations if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 11:04:45 -07:00
H.J. Lu 112fef4084 microblaze: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-microblaze.c (microblaze_elf_relocate_section): Don't
	generate dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is
	true.
	(allocate_dynrelocs): Discard dynamic relocations if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 11:03:37 -07:00
H.J. Lu 5056ba1d4d m68k: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-m68k.c (elf_m68k_check_relocs): Don't allocate dynamic
	relocations if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elf_m68k_adjust_dynamic_symbol): Don't make symbol dynamic if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elf_m68k_relocate_section): Don't generate dynamic relocation
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 11:02:37 -07:00
H.J. Lu 60c1b909df hppa: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-hppa.c (ensure_undef_dynamic): Don't make undefined
	symbol dynamic if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_dynrelocs): Discard dynamic relocations if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elf32_hppa_relocate_section): Don't generate dynamic
	relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:55:06 -07:00
H.J. Lu db41f6eb52 ia64: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elfnn-ia64.c (elfNN_ia64_check_relocs): Don't allocate
	dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_fptr): Don't allocate function pointer if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_dynrel_entries): Don't allocate dynamic relocation
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(set_got_entry): Don't set GOT entry if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(set_pltoff_entry): Don't set PLTOFF entry if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(elfNN_ia64_relocate_section): Don't install dynamic relocation
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:53:56 -07:00
H.J. Lu ad95120309 mips: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elfxx-mips.c (mips_elf_calculate_relocation): Don't generate
	dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_dynrelocs): Don't allocate dynamic relocations if
	UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:52:33 -07:00
H.J. Lu 95b03e4ad6 arm: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-arm.c (elf32_arm_final_link_relocate): Don't generate
	dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(allocate_dynrelocs_for_symbol): Discard dynamic relocations
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:32:46 -07:00
H.J. Lu a3cd202aae tile: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elf32-tilepro.c (allocate_dynrelocs): Discard dynamic
	relocations if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(tilepro_elf_relocate_section): Don't generate dynamic
	relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	* elfxx-tilegx.c (allocate_dynrelocs): Discard dynamic
	relocations if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
	(tilegx_elf_relocate_section): Don't generate dynamic
	relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:25:48 -07:00
H.J. Lu ddb7fd0f7b aarch64: Check UNDEFWEAK_NO_DYNAMIC_RELOC
Don't generate dynamic relocation against weak undefined symbol if it
is resolved to zero.  FIXME: UNDEFWEAK_NO_DYNAMIC_RELOC may need to be
checked in more places.

	PR ld/22269
	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Don't
	generate dynamic relocation if UNDEFWEAK_NO_DYNAMIC_RELOC is
	true.
	(elfNN_aarch64_allocate_dynrelocs): Discard dynamic relocations
	if UNDEFWEAK_NO_DYNAMIC_RELOC is true.
2017-10-14 10:24:04 -07:00
H.J. Lu 62cd30f167 Move UNDEFWEAK_NO_DYNAMIC_RELOC to elf-bfd.h
Move UNDEFWEAK_NO_DYNAMIC_RELOC to elf-bfd.h so that it can be used by
other ELF linker backends.

	* elf32-ppc.c (UNDEFWEAK_NO_DYNAMIC_RELOC): Moved to ...
	* elf-bfd.h (UNDEFWEAK_NO_DYNAMIC_RELOC): Here.
	* elf64-ppc.c (UNDEFWEAK_NO_DYNAMIC_RELOC): Removed.
2017-10-14 10:20:30 -07:00
GDB Administrator 867d918419 Automatic date update in version.in 2017-10-14 00:00:20 +00:00
James Bowman 3b4b0a629a FT32: support for FT32B processor - part 1
FT32B is a new FT32 family member. It has a code
compression scheme, which requires the use of linker
relaxations. The change is quite large, so submission
is in several parts.

Part 1 adds a 15-bit instruction field, and CPU-specific functions for
the code compression that are used in binutils and GDB.

bfd/ChangeLog:

2017-10-12  James Bowman  <james.bowman@ftdichip.com>

	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
	* elf32-ft32.c: Add HOWTO R_FT32_15.
	* reloc.c: Add BFD_RELOC_FT32_15.

gas/ChangeLog:

2017-10-12  James Bowman  <james.bowman@ftdichip.com>

	* config/tc-ft32.c (md_assemble): Replace FT32_FLD_K8 with
	K15.
	(md_apply_fix, tc_gen_reloc): Add BFD_RELOC_FT32_15.

include/ChangeLog:

2017-10-12  James Bowman  <james.bowman@ftdichip.com>

	* elf/ft32.h: Add R_FT32_15.
	* opcode/ft32.h: Replace FT32_FLD_K8 with K15.
	(ft32_shortcode, sc_compar, ft32_split_shortcode,
	ft32_merge_shortcode, ft32_merge_shortcode): New functions.

opcodes/ChangeLog:

2017-10-12  James Bowman  <james.bowman@ftdichip.com>

	* opcodes/ft32-dis.c (print_insn_ft32): Replace FT32_FLD_K8 with K15.
	* opcodes/ft32-opc.c (ft32_opc_info): Replace FT32_FLD_K8 with
	K15. Add jmpix pattern.

sim/ChangeLog:

2017-10-12  James Bowman  <james.bowman@ftdichip.com>

	* sim/ft32/interp.c (step_once): Replace FT32_FLD_K8 with K15.
2017-10-12 18:41:29 -07:00
GDB Administrator 52a58c224d Automatic date update in version.in 2017-10-13 00:00:29 +00:00
Nick Clifton 1d75a8e26e Force the AArch64 linker backend to refuse to link when it encounters unresoleable relocations.
* reloc.c (enum bfd_reloc_status): Start values at 2.
	* bfd-in2.h: Regenerate.
	* elfnn-aarch64.c (aarch64_relocate): Invert sense of function, so
	that a TRUE return indicates success.  Compare the result of
	calling _bfd_aarch64_elf_put_addend against bfd_reloc_ok.
	(build_one_stub): Change sense of tests against aarch64_relocate
	return value.
	(elfNN_aarch64_tls_relax): Return bfd_reloc_notsupported, rather
	than FALSE, when an error is detected.
	(elfNN_aarch64_final_link_relocate): Likewise.

	* testsuite/ld-aarch64/pcrel_pic_defined.d: Expect errors not
	warnings.  Expect errors about unsupported relocations.
	* testsuite/ld-aarch64/pcrel_pic_undefined.d: Likewise.
2017-10-12 13:38:20 +01:00
H.J. Lu 9f8575350f x86: Add _bfd_x86_elf_hide_symbol
When there is no dynamic interpreter in PIE, make the undefined weak
symbol dynamic so that PC relative branch to the undefined weak symbol
will land to address 0.

	* elf32-i386.c (elf_backend_hide_symbol): New.
	* elf64-x86-64.c (elf_backend_hide_symbol): Likewise.
	* elfxx-x86.c (_bfd_x86_elf_hide_symbol): Likewise.
	* elfxx-x86.h (_bfd_x86_elf_hide_symbol): Likewise.
2017-10-12 02:14:34 -07:00
Alan Modra 559192d89d _bfd_elf_link_hash_hide_symbol calls in generic ELF code
This function shouldn't be called directly, except from backend code.

bfd/
	* elflink.c (_bfd_elf_adjust_dynamic_symbol): Call
	elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol.
	(bfd_elf_define_start_stop): Likewise.
ld/
	* emultempl/elf32.em (before_allocation): Call
	elf_backend_hide_symbol, not _bfd_elf_link_hash_hide_symbol.
	Formatting.
2017-10-12 13:13:06 +10:30
Alan Modra f5233a1611 Fix remaining targets using wrong .interp conditions
* elf32-nds32.c (nds32_elf_size_dynamic_sections): Set .interp
	when executable rather than non-PIC.
	* elf32-score.c (s3_bfd_score_elf_size_dynamic_sections): Likewise.
	* elf32-score7.c (s7_bfd_score_elf_size_dynamic_sections): Likewise.
2017-10-12 12:58:11 +10:30
GDB Administrator ff0769882d Automatic date update in version.in 2017-10-12 00:00:33 +00:00
Maciej W. Rozycki 3c9a7b0d6d ELF/BFD: Handle both variants of the 64-bit Linux core PRPSINFO note
Fix commit 70a38d42c5 ("New entry points for writing Linux NT_PRPSINFO
notes."), <https://sourceware.org/ml/binutils/2013-02/msg00023.html>,
and handle both variants of the 64-bit Linux core PRPSINFO note across
all targets.

The 64-bit Linux core PRPSINFO note matches the 64-bit kernel structure,
defined as follows:

(gdb) ptype struct elf_prpsinfo
type = struct elf_prpsinfo {
    char pr_state;
    char pr_sname;
    char pr_zomb;
    char pr_nice;
    unsigned long pr_flag;
    __kernel_uid_t pr_uid;
    __kernel_gid_t pr_gid;
    pid_t pr_pid;
    pid_t pr_ppid;
    pid_t pr_pgrp;
    pid_t pr_sid;
    char pr_fname[16];
    char pr_psargs[80];
}
(gdb)

where the individual data types of most members are the same across all
64-bit Linux ports, with the exception of `__kernel_uid_t' and
`__kernel_gid_t'.  These are defined in <asm-generic/posix_types.h> as
32-bit `unsigned int' by default, however overridden as 16-bit `unsigned
short' in port-specific <asm/posix_types.h> for the SuperH target.

The default is already handled, as from the commit referred.  Add the
other variant then and provide a backend flag to switch between the two
cases possible, with the 32-bit one being the default and the 16-bit one
explicitly selected.  Set the flag in the SuperH target backend.  This
arrangement is analogous to how the 32-bit Linux core PRPSINFO note is
handled.

	bfd/
	* elf-bfd.h (elf_backend_data): Add `linux_prpsinfo64_ugid16'
	member.
	* elf-linux-core.h (elf_external_linux_prpsinfo64): Rename to...
	(elf_external_linux_prpsinfo64_ugid32): ... this.
	(swap_linux_prpsinfo32_out): Rename to...
	(swap_linux_prpsinfo32_ugid32_out): ... this.
	(elf_external_linux_prpsinfo64_ugid16): New structure.
	(swap_linux_prpsinfo64_ugid16_out): New function.
	* elfxx-target.h [!elf_backend_linux_prpsinfo64_ugid16]
	(elf_backend_linux_prpsinfo64_ugid16): Define.
	(elfNN_bed): Initialize `linux_prpsinfo64_ugid16' member.
	* elf.c (elfcore_write_linux_prpsinfo64): Handle both variants
	of the 64-bit Linux core PRPSINFO note.
	* elf64-sh64.c (elf_backend_linux_prpsinfo64_ugid16): Define.
2017-10-11 15:01:41 +01:00
Maciej W. Rozycki a2f63b2e7a ELF/BFD,GDB: Handle both variants of the 32-bit Linux core PRPSINFO note
Fix commit 70a38d42c5 ("New entry points for writing Linux NT_PRPSINFO
notes."), <https://sourceware.org/ml/binutils/2013-02/msg00023.html>,
and commit b3ac9c7756 ("Put more info in NT_PRPSINFO Linux notes"),
<https://sourceware.org/ml/binutils/2013-02/msg00024.html>, and handle
both variants of the 32-bit Linux core PRPSINFO note across all targets.

The 32-bit Linux core PRPSINFO note matches the 32-bit kernel structure,
defined as follows:

(gdb) ptype struct elf_prpsinfo
type = struct elf_prpsinfo {
    char pr_state;
    char pr_sname;
    char pr_zomb;
    char pr_nice;
    unsigned long pr_flag;
    __kernel_uid_t pr_uid;
    __kernel_gid_t pr_gid;
    pid_t pr_pid;
    pid_t pr_ppid;
    pid_t pr_pgrp;
    pid_t pr_sid;
    char pr_fname[16];
    char pr_psargs[80];
}
(gdb)

where the individual data types of most members are the same across all
32-bit Linux ports, with the exception of `__kernel_uid_t' and
`__kernel_gid_t'.  These are defined in <asm-generic/posix_types.h> as
32-bit `unsigned int' by default, however overridden as 16-bit `unsigned
short' in port-specific <asm/posix_types.h> for a few targets, mostly
earlier ports of Linux, specifically: ARM, CRIS, FR-V, M32R, m68k,
MN10300/AM33, s390, SuperH, SPARC and i386.

The default is the same as the PowerPC variant already handled, as from
the commits referred.  Make the special PowerPC case generic then,
removing the GDB part, and provide a backend flag to switch between the
two cases possible, with the 32-bit one being the default and the 16-bit
one explicitly selected.  Set the flag in the target backends affected.

	bfd/
	* elf-bfd.h (elf_backend_data): Add `linux_prpsinfo32_ugid16'
	member.
	(elfcore_write_ppc_linux_prpsinfo32): Remove prototype.
	* elf32-ppc.c (elfcore_write_ppc_linux_prpsinfo32): Remove.
	(elf_external_ppc_linux_prpsinfo32)
	(swap_ppc_linux_prpsinfo32_out): Move to...
	* elf-linux-core.h (elf_external_linux_prpsinfo32_ugid32)
	(swap_linux_prpsinfo32_ugid32_out): ... these.
	(elf_external_linux_prpsinfo32): Rename to...
	(elf_external_linux_prpsinfo32_ugid16): ... this.
	(swap_linux_prpsinfo32_out): Rename to...
	(swap_linux_prpsinfo32_ugid16_out): ... this.
	* elfxx-target.h [!elf_backend_linux_prpsinfo32_ugid16]
	(elf_backend_linux_prpsinfo32_ugid16): Define.
	(elfNN_bed): Initialize `linux_prpsinfo32_ugid16' member.
	* elf.c (elfcore_write_linux_prpsinfo32): Handle both variants
	of the 32-bit Linux core PRPSINFO note.
	* elf32-am33lin.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-arm.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-cris.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-frv.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-i386.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-m32r.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-m68k.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-s390.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-sh.c (elf_backend_linux_prpsinfo32_ugid16): Define.
	* elf32-sparc.c (elf_backend_linux_prpsinfo32_ugid16): Define.

	gdb/
	* ppc-linux-tdep.c (ppc_linux_init_abi): Remove call to
	`set_gdbarch_elfcore_write_linux_prpsinfo'.
2017-10-11 15:01:40 +01:00
Maciej W. Rozycki 72bc1bb934 ELF/BFD: Fix padding in `elf_external_linux_prpsinfo64'
Fix commit 70a38d42c5 ("New entry points for writing Linux NT_PRPSINFO
notes."), <https://sourceware.org/ml/binutils/2013-02/msg00023.html>,
and move the padding of the `elf_external_linux_prpsinfo64' structure to
match the corresponding 64-bit Linux kernel `elf_prpsinfo' structure.

The 64-bit kernel structure is defined as follows:

(gdb) ptype struct elf_prpsinfo
type = struct elf_prpsinfo {
    char pr_state;
    char pr_sname;
    char pr_zomb;
    char pr_nice;
    unsigned long pr_flag;
    __kernel_uid_t pr_uid;
    __kernel_gid_t pr_gid;
    pid_t pr_pid;
    pid_t pr_ppid;
    pid_t pr_pgrp;
    pid_t pr_sid;
    char pr_fname[16];
    char pr_psargs[80];
}
(gdb) print /x &((struct elf_prpsinfo *)0)->pr_nice
$1 = 0x3
(gdb) print /x &((struct elf_prpsinfo *)0)->pr_flag
$2 = 0x8
(gdb) print /x &((struct elf_prpsinfo *)0)->pr_uid
$3 = 0x10
(gdb) print sizeof(((struct elf_prpsinfo *)0)->pr_flag)
$4 = 8
(gdb)

with implicit padding present before the `pr_flag' member, to correctly
align it to a multiple of 8.  Conversely `elf_external_linux_prpsinfo64'
has padding after its `pr_flag' member:

(top-gdb) ptype struct elf_external_linux_prpsinfo64
type = struct elf_external_linux_prpsinfo64 {
    char pr_state;
    char pr_sname;
    char pr_zomb;
    char pr_nice;
    char pr_flag[8];
    char gap[4];
    char pr_uid[4];
    char pr_gid[4];
    char pr_pid[4];
    char pr_ppid[4];
    char pr_pgrp[4];
    char pr_sid[4];
    char pr_fname[16];
    char pr_psargs[80];
}
(top-gdb) print /x &((struct elf_external_linux_prpsinfo64 *)0)->pr_nice
$1 = 0x3
(top-gdb) print /x &((struct elf_external_linux_prpsinfo64 *)0)->pr_flag
$2 = 0x4
(top-gdb) print /x &((struct elf_external_linux_prpsinfo64 *)0)->pr_uid
$3 = 0x10
(top-gdb)

and consequently `pr_flag' is misplaced.  Move `gap' ahead of `pr_flag'
then.

	bfd/
	* elf-linux-core.h (elf_external_linux_prpsinfo64): Move the
	`gap' member ahead of `pr_flag'.
2017-10-11 15:01:40 +01:00
Pedro Alves 8f314ad58e Rename _doprnt -> _bfd_doprnt to fix DJGPP bfd build (and likely others)
Building bfd/ for DJGPP, I see:

 ../../src/bfd/bfd.c:642:1: error: conflicting types for '_doprnt'
  _doprnt (FILE *stream, const char *format, va_list ap)
  ^~~~~~~
 In file included from ../../src/bfd/sysdep.h:37:0,
		  from ../../src/bfd/bfd.c:367:
 /usr/lib64/gcc/i586-pc-msdosdjgpp/6.1.0/include-fixed/stdio.h:171:5: note: previous declaration of '_doprnt' was here
  int _doprnt(const char *_fmt, va_list _args, FILE *_f);
      ^~~~~~~

Possible fixes the build on other systems too -- _doprnt was/is an
exported symbol on old Unix/BSD systems too.

bfd/ChangeLog:
2017-10-11  Pedro Alves  <palves@redhat.com>

	* bfd.c (_doprnt): Rename to ...
	(_bfd_doprnt): ... this.
	(error_handler_internal): Adjust.
2017-10-11 12:47:25 +01:00
GDB Administrator e8b8ffd3c0 Automatic date update in version.in 2017-10-11 00:00:22 +00:00
H.J. Lu 0f09b4d8d8 x86: Set GOT refcount to 1
Since x86 check_relocs is called after opening all inputs and garbage
collection, they never see the removed sections.  There is no need
for incrementing GOT refcount.  But since PLT refcount is also used in

  /* Don't create the PLT entry if there are only function pointer
     relocations which can be resolved at run-time.  */
  else if (htab->elf.dynamic_sections_created
           && (h->plt.refcount > eh->func_pointer_refcount
               || eh->plt_got.refcount > 0))
    {

we must increment it.

	* elf32-i386.c (elf_i386_check_relocs): Set GOT refcount to 1
	instead of incrementing it.
	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
2017-10-10 15:52:39 -07:00
Renlin Li 6c699715f6 [ARM] PR ld/21402, only override the symbol dynamic decision on undefined weak symbol.
Similar as aarch64 backend, arm backend only overrides the decision on undefined
weak symbols. arm backend part already emits necessary relative relocation for
this case.

bfd/

	PR ld/21402
	* elf32-arm.c (allocate_dynrelocs_for_symbol): Only make undefined weak
	symbols into dynamic.

ld/

	PR ld/21402
	* testsuite/ld-arm/tls-app.d: Update address.
	* testsuite/ld-arm/tls-app.r: Remove relocations.
	* testsuite/ld-arm/unresolved-1-dyn.d: Update.
2017-10-10 16:18:07 +01:00
H.J. Lu fc3c534364 riscv: Cache the max alignment of output sections
Cache the max alignment of output sections instead of scanning all
output sections for each input section, which can take a very long
time if there are millions of input/output sections.

	PR ld/22274
	* elfnn-riscv.c (riscv_elf_link_hash_table): Add max_alignment.
	(riscv_elf_link_hash_table_create): Initialize max_alignment to
	(bfd_vma) -1.
	(_bfd_riscv_relax_section): Cache the max alignment of output
	sections if possible.
2017-10-09 22:04:00 -07:00
Alan Modra b9399fcf4e Prepare powerpc64 for late check_relocs
check_relocs was setting up some data used by the --gc-sections
gc_mark_hook.  If we change ld to run check_relocs after gc_sections
that data needs to be set up elsewhere.  Done by this patch in the
backend check_directives function (ppc64_elf_before_check_relocs).

	* elf64-ppc.c (ppc64_elf_before_check_relocs): Set sec_type for
	.opd whenever .opd is present and non-zero size.  Move code
	setting abiversion to/from output file earlier.  Only set
	u.opd.func_sec when --gc-sections.  Read relocs and set up
	u.opd.func_sec values here..
	(ppc64_elf_check_relocs): ..rather than here.  Simplify opd
	section tests.
	(ppc64_elf_edit_opd): Don't set sec_type for .opd here.
2017-10-10 14:46:07 +10:30
GDB Administrator f8f762b2fd Automatic date update in version.in 2017-10-10 00:00:24 +00:00
H.J. Lu 478c006f9b mn10300: Don't free cached internal symbol table
Since ELF linker may cache internal symbol table in init_reloc_cookie,
we should check if it is cached, before free it.

	* elf-m10300.c (mn10300_elf_check_relocs): Don't free cached
	isymbuf.
2017-10-09 15:05:03 -07:00
H.J. Lu 9d45a7de8b bfin: Don't create .interp section for info->nointerp
Don't create the .interp section with "ld --no-dynamic-linker".  This
fixed:

FAIL: PR ld/20828 forcibly exported symbol version without section GC
FAIL: PR ld/20828 forcibly exported symbol version with section GC
FAIL: readelf version information

	* elf32-bfin.c (bfin_size_dynamic_sections): Don't create the
	.interp section with "ld --no-dynamic-linker".
2017-10-09 12:45:57 -07:00
Alan Modra b55ec8b676 PR22212, memory leak in nm
PR 22212
	* dwarf2.c (_bfd_dwarf2_cleanup_debug_info): Free
	funcinfo_hash_table and varinfo_hash_table.
2017-10-09 13:23:00 +10:30
H.J. Lu a72f95f776 sh: Dump dynamic relocation info to the map file
Dump dynamic relocation info to the map file when generating dynamic
relocation in read-only section relocations if -Map is used.

	* elf32-sh.c (readonly_dynrelocs): Dump dynamic relocation
	in read-only section with minfo.
	(sh_elf_size_dynamic_sections): Likewise.
2017-10-08 17:17:29 -07:00
H.J. Lu f9799aae8e sparc: Remove a strayed comment
* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Remove
	a strayed comment.
2017-10-08 17:11:07 -07:00
GDB Administrator effaa0a1e8 Automatic date update in version.in 2017-10-09 00:00:30 +00:00
H.J. Lu 4c7236d3cb tilegx: Set this_hdr.sh_entsize only if section size > 0
This fixes:

/export/build/gnu/binutils-cross/build-tilegx-linux/ld/ld-new   -o tmpdir/comm-data -z norelro -L/export/gnu/import/git/sources/binutils-gdb/ld/testsuite/ld-elf  -T comm-data2.ld -Ltmpdir -lcomm-data tmpdir/comm-data2.o
sh: line 1:  9208 Segmentation fault      (core dumped) /export/build/gnu/binutils-cross/build-tilegx-linux/ld/ld-new -o tmpdir/comm-data -z norelro -L/export/gnu/import/git/sources/binutils-gdb/ld/testsuite/ld-elf -T comm-data2.ld -Ltmpdir -lcomm-data tmpdir/comm-data2.o 2>&1
FAIL: Common symbol override test

	* elfxx-tilegx.c (tilegx_elf_finish_dynamic_sections): Set
	this_hdr.sh_entsize only if section size > 0.
2017-10-08 14:29:52 -07:00
H.J. Lu 70090aa5f6 Reformat elf_x86_allocate_dynrelocs
* elfxx-x86.c (elf_x86_allocate_dynrelocs): Reformat.
2017-10-08 13:20:17 -07:00
H.J. Lu f0f07ad182 sparc: Dump dynamic relocation info to the map file
Dump dynamic relocation info to the map file when generating dynamic
relocation in read-only section relocations if -Map is used.

	* elfxx-sparc.c (readonly_dynrelocs): Dump dynamic relocation
	in read-only section with minfo.
	(_bfd_sparc_elf_size_dynamic_sections): Likewise.
2017-10-07 17:30:54 -07:00
GDB Administrator b05c287c18 Automatic date update in version.in 2017-10-08 00:00:25 +00:00
GDB Administrator 0ee6e554c4 Automatic date update in version.in 2017-10-07 00:00:17 +00:00
H.J. Lu 99180bccaf x86: Update UNDEFINED_WEAK_RESOLVED_TO_ZERO comments
* elfxx-x86.h (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Update
	comments.
2017-10-06 16:45:37 -07:00
H.J. Lu 98b273dc13 x86: Use zero_undefweak in elf_x86_link_hash_entry
Replace has_got_reloc and has_non_got_reloc in elf_x86_link_hash_entry
with zero_undefweak:

Bit 0: Symbol has no GOT nor PLT relocations.
Bit 1: Symbol has non-GOT/non-PLT relocations in text sections.

zero_undefweak is initialized to 1 and undefined weak symbol should be
resolved to 0 if zero_undefweak > 0.

	* elf32-i386.c (elf_i386_check_relocs): Replace has_got_reloc
	and has_non_got_reloc with zero_undefweak.
	* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
	* elfxx-x86.c (_bfd_x86_elf_link_hash_newfunc): Initialize
	zero_undefweak to 1.
	(_bfd_x86_elf_copy_indirect_symbol): Replace has_got_reloc and
	has_non_got_reloc with zero_undefweak.
	* elfxx-x86.h (UNDEFINED_WEAK_RESOLVED_TO_ZERO): Replace
	has_got_reloc and has_non_got_reloc with zero_undefweak.
	(elf_x86_link_hash_entry): Likewise.
2017-10-06 15:29:32 -07:00
John Baldwin 544c67cda1 Account for padding in FreeBSD/mipsn32 NT_PRSTATUS notes.
Add a new ELF backend method to grok FreeBSD NT_PRSTATUS core dump
notes.  Define a method for MIPS N32 to override the default
elfcore_grok_freebsd_prstatus that accounts for additional padding
between pr_pid and pr_reg that is not present in other 32-bit FreeBSD
platforms.

	* elf-bfd.h (struct elf_backend_data): Add
	`elf_backend_grok_freebsd_prstatus'.
	* elf.c (elfcore_grok_freebsd_note): Call
	`elf_backend_grok_freebsd_prstatus' to handle NT_PRSTATUS if
	present.
	* elfn32-mips.c (elf_n32_mips_grok_freebsd_prstatus): New
	function.
	(elf_backend_grok_freebsd_prstatus): Define.
	* elfxx-target.h (elf_backend_grok_freebsd_prstatus): Define.
	(elfNN_bed): Initialize `elf_backend_grok_freebsd_prstatus'.
2017-10-06 11:43:07 -07:00
H.J. Lu e0d8f43169 Add "do/while(0);" to COPY_INPUT_RELOC_P/VERIFY_COPY_RELOC
Add "do/while(0);" to COPY_INPUT_RELOC_P/VERIFY_COPY_RELOC to avoid
potential dangling else problems.

	* elfxx-x86.h (COPY_INPUT_RELOC_P): Add "do/while(0);".
	(VERIFY_COPY_RELOC): Likewise.
2017-10-06 05:49:48 -07:00
H.J. Lu ff38b4cc55 x86: Add VERIFY_COPY_RELOC
Add VERIFY_COPY_RELOC to verify that symbol supports copy relocation.

	* elfxx-x86.h (VERIFY_COPY_RELOC): New.
	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use it.
	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
2017-10-06 00:51:40 -07:00
H.J. Lu f3180fa9ee x86: Add VERIFY_PLT_ENTRY
Add VERIFY_PLT_ENTRY to verify that symbol has an entry in the procedure
linkage table.

	* elfxx-x86.h (VERIFY_PLT_ENTRY): New.
	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use it.
	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
2017-10-06 00:48:26 -07:00
H.J. Lu e74399c47c x86: Add COPY_INPUT_RELOC_P
Add COPY_INPUT_RELOC_P which returns TRUE if input relocation should
be copied to output.

	* elfxx-x86.h (COPY_INPUT_RELOC_P): New.
	* elf32-i386.c (elf_i386_relocate_section): Use it.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
2017-10-06 00:44:38 -07:00
H.J. Lu aebcc8ffd2 x86: Add GENERATE_DYNAMIC_RELOCATION_P
Add GENERATE_DYNAMIC_RELOCATION_P which returns TRUE if dynamic
relocation should be generated.

	* elf32-i386.c (X86_SIZE_TYPE_P): New.
	(elf_i386_relocate_section): Use GENERATE_DYNAMIC_RELOCATION_P.
	* elf64-x86-64.c (X86_SIZE_TYPE_P): New.
	(elf_x86_64_relocate_section): Use GENERATE_DYNAMIC_RELOCATION_P.
	* elfxx-x86.h (GENERATE_DYNAMIC_RELOCATION_P): New.
2017-10-06 00:41:58 -07:00
H.J. Lu cf1070f1a1 x86: Add POINTER_LOCAL_IFUNC_P/PLT_LOCAL_IFUNC_P
Add POINTER_LOCAL_IFUNC_P which returns TRUE for pointer reference to
local IFUNC symbol.  Add PLT_LOCAL_IFUNC_P which returns TRUE for PLT
reference to local IFUNC symbol.

	* elfxx-x86.h (POINTER_LOCAL_IFUNC_P): New.
	(PLT_LOCAL_IFUNC_P): Likewise.
	* elf32-i386.c (elf_i386_relocate_section): Use them.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
2017-10-06 00:37:43 -07:00
H.J. Lu f70656b260 x86: Add GENERATE_RELATIVE_RELOC_P
Add GENERATE_RELATIVE_RELOC_P which returns TRUE if dynamic relative
relocation should be generated.

	* elfxx-x86.h (GENERATE_RELATIVE_RELOC_P): New.
	* elf32-i386.c (elf_i386_relocate_section): Use it.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
2017-10-06 00:32:43 -07:00
H.J. Lu 1f92404c50 x86: Add RESOLVED_LOCALLY_P
Add RESOLVED_LOCALLY_P which returns TRUE if symbol is resolved to
local definition at link-time.

	* elfxx-x86.h (RESOLVED_LOCALLY_P): New.
	* elf32-i386.c (elf_i386_relocate_section): Use it.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
2017-10-06 00:26:17 -07:00
H.J. Lu 2eba97c207 Add RESOLVED_LOCALLY_P 2017-10-06 00:24:23 -07:00
H.J. Lu daf1c414a4 x86: Add NEED_DYNAMIC_RELOCATION_P
Add NEED_DYNAMIC_RELOCATION_P which returns TRUE if dynamic relocation
is needed.

	* elf32-i386.c (X86_PCREL_TYPE_P): New.
	(elf_i386_check_relocs): Use NEED_DYNAMIC_RELOCATION_P.
	* elf64-x86-64.c (IS_X86_64_PCREL_TYPE): Renamed to ...
	(X86_PCREL_TYPE_P): This.
	(elf_x86_64_check_relocs): Use NEED_DYNAMIC_RELOCATION_P.
	Replace IS_X86_64_PCREL_TYPE with X86_PCREL_TYPE_P.
	(elf_x86_64_relocate_section): Replace IS_X86_64_PCREL_TYPE with
	X86_PCREL_TYPE_P.
	* elfxx-x86.h (NEED_DYNAMIC_RELOCATION_P): New.
2017-10-06 00:23:00 -07:00
H.J. Lu 51537393bd x86: Add TLS_TRANSITION_IE_TO_LE_P
Add TLS_TRANSITION_IE_TO_LE_P which returns TRUE if TLS IE->LE transition
is OK.

	* elfxx-x86.h (TLS_TRANSITION_IE_TO_LE_P): New.
	* elf32-i386.c (elf_i386_tls_transition): Use it.
	* elf64-x86-64.c (elf_x86_64_tls_transition): Likewise.
2017-10-06 00:13:52 -07:00
H.J. Lu 0caf6c82ab powerpc: Dump dynamic relocation info to the map file
Dump dynamic relocation info to the map file when generating dynamic
relocation in read-only section relocations if -Map is used.

	* elf32-ppc.c (readonly_dynrelocs): Add a link_info argument.
	Dump dynamic relocation in read-only section with minfo if
	needed.
	(ppc_elf_adjust_dynamic_symbol): Pass NULL to readonly_dynrelocs.
	(maybe_set_textrel): Likewise.
	(ppc_elf_size_dynamic_sections): Dump dynamic relocation in
	read-only section with minfo.
2017-10-05 18:09:19 -07:00
GDB Administrator 46e31de783 Automatic date update in version.in 2017-10-06 00:00:28 +00:00
John Baldwin 6d5be5d6b8 Handle the NT_ARM_VFP core dump note on FreeBSD.
bfd/ChangeLog:

	* elf.c (elfcore_grok_freebsd_note): Handle NT_ARM_VFP.
2017-10-05 09:50:01 -07:00
H.J. Lu 007873f54e tile: Dump dynamic relocation info to the map file
Dump dynamic relocation info to the map file when generating dynamic
relocation in read-only section relocations if -Map is used.

	* elf32-tilepro.c (readonly_dynrelocs): Dump dynamic relocation
	in read-only section with minfo.
	(tilepro_elf_size_dynamic_sections): Likewise.
	* elfxx-tilegx.c (readonly_dynrelocs): Likewise.
	(tilegx_elf_size_dynamic_sections): Likewise.
2017-10-05 06:01:30 -07:00
Pedro Alves 2ca7de3746 bfd_set_input_error
A downside to the 2017-10-04 PR22245 fix is that bfd_set_error can now
silently accept invalid errors if/when someone passes the a value of
the wrong enumeration type, which previously would be caught by the
-Wenum-conversion warning.

	PR 22245
	* bfd.c (bfd_set_error): Revert 2017-10-04 change.  Remove
	ellipsis parameter.  Split out bfd_error_on_input code to..
	(bfd_set_input_error): .. New function.
	* archive.c (_bfd_write_archive_contents): Use bfd_set_input_error.
	* vms-lib.c (_bfd_vms_lib_write_archive_contents): Likewise.
	* bfd-in2.h: Regenerate.
2017-10-05 12:03:47 +10:30
Alan Modra 8c6716e57e bfd_error_on_input is for archives
* elflink.c (elf_link_input_bfd): Correct ctor/dtor in init_array/
	fini_array error value.
2017-10-05 11:08:20 +10:30
GDB Administrator e6fef60069 Automatic date update in version.in 2017-10-05 00:00:13 +00:00
Alan Modra db4677b8bd PR21167, relocation sections not included in groups
This fixes a wart I've known about for years, but haven't done
anything about because BFD treats relocation sections as an adjunct to
the section they relocate.  SHF_GROUP on the section thus implicitly
applies to its relocation section(s), but it is an error that the
reloc sections aren't part of the group.

Like many patches to gas, this wasn't as straightforward as it could
be due to a number of backends, i386, cr16 and others, removing relocs
in tc_get_reloc rather than marking them as "done" earlier in
md_apply_reloc.  So it isn't possible for the group support to
reliably detect the presence of relocs by looking at fixups earlier
than write_relocs.  However the group support needs to create
signature symbols, and that must be done before the symbol table is
frozen, before write_relocs.  So split off the group sizing from
elf_adjust_symtab and put it in elf_frob_file_after_relocs.

bfd/
	PR 21167
	* elf.c (_bfd_elf_setup_sections): Don't trim reloc sections from
	groups.
	(_bfd_elf_init_reloc_shdr): Pass sec_hdr, use it to copy SHF_GROUP
	flag from section.
	(elf_fake_sections): Adjust calls.  Exit immediately on failure.
	(bfd_elf_set_group_contents): Add associated reloc section indices
	to group contents
gas/
	PR 21167
	* config/obj-elf.c (struct group_list): Delete elt_count.
	(groups): New static.
	(build_group_lists): Don't count elements.
	(elf_adjust_symtab): Use groups rather than auto list.  Set up
	pointer from group member to SHT_GROUP section.  Don't size
	SHT_GROUP section or clean up here..
	(elf_frob_file_after_relocs): ..do so here instead.
	* testsuite/gas/arc/jli-1.d,
	* testsuite/gas/elf/groupautob.d,
	* testsuite/gas/mips/compact-eh-eb-2.d,
	* testsuite/gas/mips/compact-eh-eb-5.d,
	* testsuite/gas/mips/compact-eh-el-2.d,
	* testsuite/gas/mips/compact-eh-el-5.d: Adjust.
ld/
	PR 21167
	* testsuite/ld-elf/group9b.d: Adjust for relocs included in group.
2017-10-05 08:38:11 +10:30
Alan Modra a5259595e7 PowerPC64 ELFv2 symbols not needed in get_synthetic_symtab
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't sort or
	classify symbols for ELFv2.
2017-10-04 14:25:37 +10:30
Pavel I. Kryukov 9ba5f27cdd PR22245, Fix potential UB in bfd_set_error
Passing enum as a first argument to variadic argument function
may lead to undefined behavior. The explanation on CERT site:
https://www.securecoding.cert.org/confluence/display/cplusplus/
EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start

The bug was found by Kirill Nedostoev (nedostoev.ka@phystech.edu)
when he tried to build GNU binutils with Clang 7.

	PR 22245
	* bfd.c (bfd_set_error): Avoid UB on passing arg to va_start that
	undergoes default promotion.
	* bfd-in2.h: Regenerate.
2017-10-04 14:24:21 +10:30
GDB Administrator ca2a727a5b Automatic date update in version.in 2017-10-04 00:00:20 +00:00
GDB Administrator 40c0777b17 Automatic date update in version.in 2017-10-03 00:00:16 +00:00
Alan Modra dcd2b8a014 Fix powerpc comment typo
* elf32-ppc.c (ppc_elf_relocate_section): Fix comment typo.
	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
2017-10-02 16:58:51 +10:30
GDB Administrator 7a0c60fea0 Automatic date update in version.in 2017-10-02 00:00:13 +00:00
Alan Modra 20230942fe PR21957, addr2line incorrectly handles non-increasing sequences in line table
PR 21957
	* dwarf2.c (new_line_sorts_after): Remove end_sequence comparison.
	(add_line_info): Always put end_sequence last.
2017-10-01 19:35:07 +10:30
Alan Modra 4b04bba2eb PR22047, Heap out of bounds read in parse_comp_unit
Like the PR22230 fix, we can allocate a buffer with an extra byte
rather than letting bfd_simple_get_relocated_section_contents malloc
and return a buffer.  Much better than allocating another buffer
afterwards.

	PR 22047
	* dwarf2.c (read_section): Allocate buffer with extra byte for
	bfd_simple_get_relocated_section_contents rather than copying
	afterwards.
2017-10-01 12:07:59 +10:30
GDB Administrator 3678b25d0c Automatic date update in version.in 2017-10-01 00:00:25 +00:00
GDB Administrator 1755697b1d Automatic date update in version.in 2017-09-30 00:00:28 +00:00
Alan Modra f6ac8c52c9 Fail when string merge can't alloc memory
I was looking at Debian bug #874674 again today, and think I might
have spotted the problem.  It appears that merge.c tries to cope with
memory allocation failures in some circumstances, but doesn't quite
manage to get everything right.  This patch will make ld report memory
allocation failures instead of silently not merging strings.

	* merge.c (merge_strings): Return FALSE on malloc failure.
	(_bfd_merge_sections): Return failures from record_section and
	merge_strings.
2017-09-29 14:42:36 +09:30
GDB Administrator 1b8f6c7f82 Automatic date update in version.in 2017-09-29 00:00:24 +00:00
Alan Modra 1a3b5c34fe PR22220, BFD linker wrongly marks symbols as PREVAILING_DEF_IRONLY
non_ir_ref_dynamic wasn't being set in the case where we have a
versioned dynamic symbol definition with a non-versioned matching IR
symbol.

bfd/
	PR 22220
	* elflink.c (_bfd_elf_merge_symbol): Set non_ir_ref_dynamic in
	a case where plugin_notice isn't called.
ld/
	* testsuite/ld-plugin/pr22220.h,
	* testsuite/ld-plugin/pr22220lib.cc,
	* testsuite/ld-plugin/pr22220lib.ver,
	* testsuite/ld-plugin/pr22220main.cc: New test.
	* testsuite/ld-plugin/lto.exp: Run it.
2017-09-28 17:36:36 +09:30
GDB Administrator 50300765aa Automatic date update in version.in 2017-09-28 00:00:30 +00:00
Kuan-Lin Chen cd28e7aaf3 nds32: Fix a tautological comparison. 2017-09-27 13:07:19 +08:00
GDB Administrator 25c7861f70 Automatic date update in version.in 2017-09-27 00:00:23 +00:00
H.J. Lu ac69a0d75b x86-64: Don't pass output_bfd to info->callbacks->minfo
Don't pass output_bfd to info->callbacks->minfo when dumping local IFUNC
functions in the map file.

	PR ld/22199
	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't pass
	output_bfd to info->callbacks->minfo.
2017-09-26 14:41:22 -07:00
Nick Clifton 262c0a877f Fix an assertion failure when parsing a fuzzed x86_64 ELF binary.
PR 22172
	* elf64-x86-64.c (elf_x86_64_info_to_howto): Do not trigger an
	assertion failure if elf_x86_64_rtype_to_howto has already issued
	an error message.
2017-09-26 16:03:10 +01:00
Alan Modra 33e0a9a056 Tidy reading data in read_formatted_entries
Using read_attribute_value accomplishes two things: It checks for
unexpected formats, and ensures the buffer pointer always increments.

	PR 22210
	* dwarf2.c (read_formatted_entries): Use read_attribute_value to
	read data.
2017-09-26 23:23:44 +09:30
Nick Clifton 30d0157a2a Avoid needless resource usage when processing a corrupt DWARF directory or file name table.
PR 22210
	* dwarf2.c (read_formatted_entries): Fail early if we know that
	the loop parsing data entries will overflow the end of the
	section.
2017-09-26 14:37:47 +01:00
Alan Modra 1b86808a86 PR22209, invalid memory read in find_abstract_instance_name
This patch adds bounds checking for DW_FORM_ref_addr die refs, and
calculates them relative to the first .debug_info section.  See the
big comment for why calculating relative to the current .debug_info
section was wrong for relocatable object files.

	PR 22209
	* dwarf2.c (struct comp_unit): Delete sec_info_ptr field.
	(find_abstract_instance_name): Calculate DW_FORM_ref_addr relative
	to stash->info_ptr_memory, and check die_ref is within that memory.
	Set info_ptr_end correctly when another CU is refd.  Check die_ref
	for DW_FORM_ref4 etc. is within CU.
2017-09-26 22:12:40 +09:30
Alan Modra a54018b72d PR22205, .debug_line file table NULL filename
The PR22200 fuzzer testcase found one way to put NULLs into .debug_line
file tables.  PR22205 finds another.  This patch gives up on trying to
prevent NULL files in the file table and instead just copes with them.
Arguably, this is better than giving up and showing no info from
.debug_line.  I've also fixed a case where the fairly recent DWARF5
support in handling broken DWARG could result in uninitialized memory
reads, and made a small tidy.

	PR 22205
	* dwarf2.c (concat_filename): Return "<unknown>" on NULL filename.
	(read_formatted_entries): Init "fe".
	(decode_line_info <DW_LNE_define_file>): Use line_info_add_file_name.
2017-09-26 09:38:26 +09:30
Alan Modra e338894dc2 PR22204, Lack of DW_LNE_end_sequence causes "infinite" loop
PR 22204
	* dwarf2.c (decode_line_info): Ensure line_ptr stays within
	bounds in inner loop.
2017-09-26 09:36:50 +09:30
GDB Administrator 898f57a89f Automatic date update in version.in 2017-09-26 00:00:21 +00:00
Alan Modra 1da5c9a485 PR22202, buffer overflow in parse_die
There was a complete lack of sanity checking in dwarf1.c

	PR 22202
	* dwarf1.c (parse_die): Sanity check pointer against section limit
	before dereferencing.
	(parse_line_table): Likewise.
2017-09-25 22:01:47 +09:30
Alan Modra 11855d8a1f PR22201, DW_AT_name with out of bounds reference
DW_AT_name ought to always have a string value.

	PR 22201
	* dwarf2.c (scan_unit_for_symbols): Ignore DW_AT_name unless it
	has string form.
	(parse_comp_unit): Likewise.
2017-09-25 22:01:47 +09:30
Alan Modra c361faae8d PR22200, DWARF5 .debug_line sanity check
The format_count entry can't be zero unless the count is also zero.

	PR 22200
	* dwarf2.c (read_formatted_entries): Error on format_count zero.
2017-09-25 22:01:47 +09:30
GDB Administrator 5b3fd0aac2 Automatic date update in version.in 2017-09-25 00:00:24 +00:00
Alan Modra 52b36c51e5 PR22197, buffer overflow in bfd_get_debug_link_info_1
PR 22197
	* opncls.c (bfd_get_debug_link_info_1): Properly check that crc is
	within section bounds.
2017-09-24 21:40:58 +09:30
Alan Modra a26a013f22 PR22191, memory leak in dwarf2.c
table->sequences is a linked list before it is replaced by a bfd_alloc
array in sort_line_sequences.

	PR 22191
	* dwarf2.c (decode_line_info): Properly free line sequences on error.
2017-09-24 21:01:30 +09:30
Alan Modra 52a93b95ec PR22187, infinite loop in find_abstract_instance_name
This patch prevents the simple case of infinite recursion in
find_abstract_instance_name by ensuring that the attributes being
processed are not the same as the previous call.

The patch also does a little cleanup, and leaves in place some changes
to the nested_funcs array that I made when I wrongly thought looping
might occur in scan_unit_for_symbols.

	PR 22187
	* dwarf2.c (find_abstract_instance_name): Add orig_info_ptr and
	pname param.  Return status.  Make name const.  Don't abort,
	return an error.  Formatting.  Exit if current info_ptr matches
	orig_info_ptr.  Update callers.
	(scan_unit_for_symbols): Start at nesting_level of zero.  Make
	nested_funcs an array of structs for extensibility.  Formatting.
2017-09-24 16:17:19 +09:30