Commit Graph

90322 Commits

Author SHA1 Message Date
Simon Marchi
434a402395 Standardize darwin's lm_info
Darwin's lm_info structure is used a little bit differently than the
other solib implementations.  The other implementations first allocate
an so_list object, then instanciate their specific lm_info structure,
and assign it to so_list::lm_info.

The Darwin implementation allocates both at the same time
(darwin_so_list).  This patch changes it to be like the others, so that
we'll be able to do some generalizations later.

gdb/ChangeLog:

	* solib-darwin.c (struct darwin_so_list): Remove.
	(darwin_current_sos): Allocate an so_list object instead of a
	darwin_so_list, separately allocate an lm_info object.
	(darwin_free_so): Free lm_info.
2017-04-28 17:16:12 -04:00
H.J. Lu
1670f9c154 x86: Add run-time tests for -mtls-dialect=gnu2
* testsuite/config/default.exp (GNU2_CFLAGS): New.  Set
	to -mtls-dialect=gnu2 if target compiler supports it.
	* testsuite/ld-i386/tls.exp: Run -mtls-dialect=gnu2 tests.
	* testsuite/ld-x86-64/tls.exp: Likewise.
	* testsuite/ld-i386/tlsdesc1a.c: New file.
	* testsuite/ld-i386/tlsdesc1b.c: Likewise.
	* testsuite/ld-x86-64/tlsdesc1a.c: Likewise.
	* testsuite/ld-x86-64/tlsdesc1b.c: Likewise.
2017-04-28 12:42:18 -07:00
H.J. Lu
d6f48aed23 ELF: Add run-time tests for -z now
* testsuite/ld-elf/shared.exp: Add run-time tests for -z now.
	* testsuite/ld-i386/tls.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-x86-64/tls.exp: Likewise.
2017-04-28 12:35:18 -07:00
John Baldwin
428544e8ae Consistently use fprintf_filtered when displaying MIPS registers.
One line was using printf_filtered instead of fprintf_filtered
to the requested file.

gdb/ChangeLog:

	* mips-tdep.c (print_gp_register_row): Replace printf_filtered
	with fprintf_filtered.
2017-04-28 09:35:14 -07:00
H.J. Lu
750eaa47f1 x86: Check plt_got before using .plt.got
Since the GOT procedure linkage table is supported only if plt_got
isn't NULL, we need to check plt_got before using it.

	* elf32-i386.c (elf_i386_allocate_dynrelocs): Check plt_got
	before using .plt.got.
	* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise.
2017-04-28 07:26:45 -07:00
Yao Qi
4621115fe5 Add constructor and destructor to regcache
This patch adds ctor and dtor to regcache.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* regcache.c (regcache::regcache): New function.
	(regcache::~regcache): New function.
	(regcache_xmalloc_1): Remove.
	(regcache_xmalloc): Call new regcache.
	(regcache_xfree): Call delete regcache.
	(get_thread_arch_aspace_regcache): Call new regcache.
2017-04-28 14:43:13 +01:00
Nick Clifton
b06b2c92c0 Fix off by one error when checking for empty note names.
PR binutils/21439
	* readelf.c (print_gnu_build_attribute_name): Allow for an empty
	name field.
2017-04-28 12:09:14 +01:00
Nick Clifton
4e3afec278 Fix heap-buffer address violation when reading version data from a corrupt binary.
PR binutils/21437
	* readelf.c (process_version_sections): Check for underflow when
	computing the start address of the auxillary version data.
2017-04-28 11:21:53 +01:00
Nick Clifton
d949ff5607 Fix heap-buffer overflow bugs caused when dumping debug information from a corrupt binary.
PR binutils/21438
	* dwarf.c (process_extended_line_op): Do not assume that the
	string extracted from the section is NUL terminated.
	(fetch_indirect_string): If the string retrieved from the section
	is not NUL terminated, return an error message.
	(fetch_indirect_line_string): Likewise.
	(fetch_indexed_string): Likewise.
2017-04-28 10:28:04 +01:00
Yao Qi
339053c29a Use ptid method lwp in mips_linux_new_thread
gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* mips-linux-nat.c (mips_linux_new_thread): Use ptid method
	lwp instead of ptid_get_lwp.
2017-04-28 09:50:51 +01:00
Yao Qi
7974a6050b [MIPS] Use lwpid from lwp_info instead of inferior_ptid
RAJESH reported that GDB gets "Couldn't write debug register: No such
process." on mips64 when GDB attaches to a multi threaded application.

Looks GDB nows PTRACE_GET_WATCH_REGS for inferior_ptid but
PTRACE_SET_WATCH_REGS for lwp->ptid, they may be different.

gdb:

2017-04-28  Yao Qi  <yao.qi@linaro.org>

	* mips-linux-nat.c (mips_linux_new_thread): Get lwpid from
	lwp_info instead of getting from inferior_ptid.
2017-04-28 09:33:16 +01:00
GDB Administrator
343b374c61 Automatic date update in version.in 2017-04-28 00:00:34 +00:00
Keith Seitz
e15c3eb45b Fix overload resolution involving rvalue references and cv qualifiers.
The following patch fixes several outstanding overload resolution problems
with rvalue references and cv qualifiers in the test suite. The tests for
these problems typically passed with one compiler version and failed with
another. This behavior occurs because of the ordering of the overloaded
functions in the debug info. So the first best match "won out" over the
a subsequent better match.

One of the bugs addressed by this patch is the failure of rank_one_type to
account for type equality of two overloads based on CV qualifiers.  This was
leading directly to problems evaluating rvalue reference overload quality,
but it is also highlighted in gdb.cp/oranking.exp, where two test KFAIL as
a result of this shortcoming.

I found the overload resolution code committed with the rvalue reference
patch (f9aeb8d49) needlessly over-complicated, and I have greatly simplified
it. This fixes some KFAILing tests in gdb.exp/rvalue-ref-overload.exp.

gdb/ChangeLog

	* gdbtypes.c (LVALUE_REFERENCE_TO_RVALUE_BINDING_BADNESS)
	DIFFERENT_REFERENCE_TYPE_BADNESS): Remove.
	(CV_CONVERSION_BADNESS): Define.
	(rank_one_type): Remove overly restrictive rvalue reference
	rank checks.
	Add cv-qualifier checks and subranks for type equality.
	* gdbtypes.h (REFERENCE_CONVERSION_RVALUE,
	REFERENCE_CONVERSION_CONST_LVALUE, CV_CONVERSION_BADNESS,
	CV_CONVERSION_CONST, CV_CONVERSION_VOLATILE): Declare.

gdb/testsuite/ChangeLog

	* gdb.cp/oranking.cc (test15): New function.
	(main): Call test15 and declare additional variables for testing.
	* gdb.cp/oranking.exp: Remove kfail status for "p foo4(&a)" and
	"p foo101('abc')" tests.
	* gdb.cp/rvalue-ref-overloads.exp: Remove kfail status for
	"lvalue reference overload" test.
	* gdb.cp/rvalue-ref-params.exp: Remove kfail status for
	"print value of f1 on Child&& in f2" test.
2017-04-27 15:58:54 -07:00
H.J. Lu
5b66fac4ba x86-64: Use "=" instead of "+=" to update 0
Use

  if (htab->elf.splt->size == 0)
    htab->elf.splt->size = GET_PLT_ENTRY_SIZE (output_bfd);

instead of

  if (htab->elf.splt->size == 0)
    htab->elf.splt->size += GET_PLT_ENTRY_SIZE (output_bfd);

	* elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Use "="
	instead of "+=" to update 0.
2017-04-27 15:25:30 -07:00
Simon Marchi
72bc1d2466 Add missing incref when creating Inferior Python object
The test py-inferior.exp fails when using a debug build of Python 3.6.  I don't
see it failing with my system's default Python, but it might be related to the
different memory allocation scheme used when doing a build with pydebug.

The issue is that we are missing a Py_INCREF in
inferior_to_inferior_object.  The PyObject_New function initializes the
object with a refcount of 1.  If we assume that this refcount
corresponds to the reference we are returning, then we are missing an
incref for the reference in the inferior data.

The counterpart for the incref that corresponds to the reference in the
inferior data is in py_free_inferior, in the form the gdbpy_ref instance.

Here's how I can get it to crash (with some debug output):

  $ ./gdb -nx -ex "set debug python 1"
  (gdb) add-inferior
  Added inferior 2
  (gdb) python infs = gdb.inferiors()
  Creating Python Inferior object inf = 1
  Creating Python Inferior object inf = 2
  (gdb) remove-inferiors 2
  py_free_inferior inf = 2
  infpy_dealloc inf = <unknown>
  (gdb) python infs = None
  Fatal Python error: Objects/tupleobject.c:243 object at 0x7f9cf1a568d8 has negative ref count -1

  Current thread 0x00007f9cf1b68780 (most recent call first):
    File "<string>", line 1 in <module>
  [1]    408 abort (core dumped)  ./gdb -nx -ex "set debug python 1"

After having created the inferiors object, their refcount is 1 (which
comes from PyObject_New), but it should be two.  The gdb inferior object
has a reference and the "infs" list has a reference.

When invoking remove-inferiors, py_free_inferior gets called.  It does
the decref that corresponds to the reference that the gdb inferior
object kept.  At this moment, the refcount drops to 0 and the object
gets deallocated, even though the "infs" list still has a reference.
When we set "infs" to None, Python tries to decref the already zero
refcount and the assert triggers.

With this patch, it looks better:

  (gdb) add-inferior
  Added inferior 2
  (gdb) python infs = gdb.inferiors()
  Creating Python Inferior object inf = 1
  Creating Python Inferior object inf = 2
  (gdb) remove-inferiors 2
  py_free_inferior inf = 2
  (gdb) python infs = None
  infpy_dealloc inf = <unknown>

gdb/ChangeLog:

	* python/py-inferior.c (inferior_to_inferior_object): Increment reference
	count when creating the object.
2017-04-27 17:03:25 -04:00
H.J. Lu
de9a3c4285 x86: Create dynamic sections in create_dynamic_sections
This patch creates dynamic sections in i386/x86-64 create_dynamic_sections
instead of creating them on demend.  Linker will strip them if they are
empty.  It changes order in x86-64 .eh_frame section.  The extra DW_CFA_nop
paddings is due to

https://sourceware.org/bugzilla/show_bug.cgi?id=21441

bfd/

	* elf32-i386.c (elf_i386_create_dynamic_sections): Create the
	.plt.got section here.
	(elf_i386_check_relocs): Don't create the .plt.got section.
	* elf64-x86-64.c (elf_x86_64_create_dynamic_sections): Create
	the .plt.got and .plt.bnd sections here.
	(elf_x86_64_check_relocs): Don't create the .plt.got nor
	.plt.bnd sections.

ld/

	* testsuite/ld-x86-64/pr21038a.d: Update DW_CFA_nop paddings
	in .eh_frame section.
	* testsuite/ld-x86-64/pr21038c.d: Update .eh_frame order.
2017-04-27 13:55:48 -07:00
H.J. Lu
da3d25afa2 Remove has_bnd_reloc from elf_x86_64_link_hash_entry
has_bnd_reloc was added to elf_x86_64_link_hash_entry track BND
relocations by

commit 0ff2b86e7c
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Nov 20 09:01:04 2013 -0800

    Create the second PLT for BND relocations

Since BND relocations have been deprecated by

commit d258b82828
Author: Igor Zamyatin <igor.zamyatin@intel.com>
Date:   Tue Nov 18 10:52:36 2014 +0300

    Add -z bndplt to generate BND prefix in PLT entries

This patch removes has_bnd_reloc from elf_x86_64_link_hash_entry and
checks bndplt instead of has_bnd_reloc.

	* elf64-x86-64.c (elf_x86_64_link_hash_entry): Remove
	has_bnd_reloc.
	(elf_x86_64_link_hash_newfunc): Don't clear has_bnd_reloc.
	(elf_x86_64_copy_indirect_symbol): Don't copy has_bnd_reloc.
	(elf_x86_64_check_relocs): Don't set has_bnd_reloc.
	(elf_x86_64_finish_dynamic_symbol): Check bndplt instead of
	has_bnd_reloc.

Remove has_bnd_reloc
2017-04-27 09:36:03 -07:00
H.J. Lu
fba37edd96 Change _bfd_elf_link_setup_gnu_properties to bfd *
Change setup_gnu_properties to return the first relocatable ELF input
with GNU properties so that a backend can make decision based on GNU
properties.

	* elf-bfd.h (elf_backend_data): Change setup_gnu_properties
	to return bfd *.
	(_bfd_elf_link_setup_gnu_properties): Return bfd *.
	* elf-properties.c (_bfd_elf_link_setup_gnu_properties): Return
	the first relocatable ELF input with GNU properties.
2017-04-27 09:07:34 -07:00
H.J. Lu
1f78f649e8 i386: Simplify VxWorks for non-PIC
Change

  if (PIC)
    {
      #1
    }
  else
    {
      #2
      if (VxWorks)
        {
          #3
        }
    }
  #4
  if (VxWorks && !PIC)
    {
      #5
    }

to

  #4
  if (PIC)
    {
      #1
    }
  else
    {
      #2
      if (VxWorks)
        {
          #3
          #5
        }
    }

	* elf32-i386.c (elf_i386_finish_dynamic_sections): Simplify
	VxWorks for non-PIC.
2017-04-27 08:55:36 -07:00
Ulrich Weigand
55bcecda57 Read corrrect auxiliary entry in AIX
Fix handling of XCOFF function auxiliary entries, in particular when
the xlc -qfuncsect or gcc -ffunction-sections compiler option is used
in AIX.  Also handle C_WEAKEXT storage class.

gdb/
2016-10-21  Sangamesh Mallayya  <sangamesh.swamy@in.ibm.com>
	    Ulrich Weigand  <uweigand@de.ibm.com>

	* xcoffread.c (read_xcoff_symtab): Read correct function auxiliary
	entry if xlc -qfuncsect or gcc -ffunction-sections compiler option
	is used in AIX.
	(read_xcoff_symtab): Handle C_WEAKEXT storage class.
	(process_xcoff_symbol): Likewise.
	(scan_xcoff_symtab): Likewise.

Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
2017-04-27 15:57:08 +02:00
Maciej W. Rozycki
14f72d45a2 MIPS16/GAS: Factor out duplicate symbol value conversion code
Factor out and consolidate duplicate section-relative to PC-relative
symbol value conversion in `mips16_extended_frag' and `md_convert_frag'
used for MIPS16 relaxation, observing that the final calculation in the
latter function implies `stretch == 0'.  Sanitize the formatting of code
moved.

	gas/
	* config/tc-mips.c (mips16_pcrel_val): New function, factored
	out from...
	(mips16_extended_frag): ... here.
	(md_convert_frag): Use `mips16_pcrel_val' rather than repeated
	code in MIPS16 relaxation, with `stretch' hardcoded to 0.
2017-04-27 12:21:58 +01:00
Maciej W. Rozycki
1425c41dcd MIPS16/GAS: Rename the LONG_BRANCH relaxation flag
Following commit 177b4a6ad0 ("infinite loop in mips16 assembler
relaxation"), <https://sourceware.org/ml/binutils/2002-03/msg00345.html>
the LONG_BRANCH flag used in MIPS16 relaxation has lost its use for
branches.  Complement commit 88a7ef1689 ("MIPS16/GAS: Restore
unsupported relocation diagnostics") then, which has removed the remains
of code deactivated by the former commit, and rename the flag to
ALWAYS_EXTENDED, more accurately reflecting its current use to select
the extended form of PC-relative ADDIU, DADDIU, LD and LW instructions.

	gas/
	* config/tc-mips.c (RELAX_MIPS16_LONG_BRANCH): Rename to...
	(RELAX_MIPS16_ALWAYS_EXTENDED): ... this.
	(RELAX_MIPS16_MARK_LONG_BRANCH): Rename to...
	(RELAX_MIPS16_MARK_ALWAYS_EXTENDED): ... this.
	(RELAX_MIPS16_CLEAR_LONG_BRANCH): Rename to...
	(RELAX_MIPS16_CLEAR_ALWAYS_EXTENDED): ... this.
	(mips16_extended_frag): Adjust accordingly.
2017-04-27 12:19:39 +01:00
Alan Hayward
5c99fcf803 Remove some MAX_REGISTER_SIZE uses in ia64-tdep.c
gdb/
	* ia64-tdep.c (examine_prologue): Use get_frame_register_unsigned.
	(ia64_sigtramp_frame_prev_register): Use read_memory_unsigned_integer.
	(ia64_access_reg): Use get_frame_register_unsigned.
	(ia64_access_rse_reg): Likewise.
	(ia64_libunwind_frame_prev_register): Likewise.
2017-04-27 11:38:14 +01:00
Alan Modra
f2d830a50d Tidy S_FORCE_RELOC
Separate out symbol flag reasons from section reasons to force a
reloc.  Yes, this adds another section test to the local symbol case
too.

	* symbols.c (S_FORCE_RELOC): Separate section and symbol tests.
2017-04-27 12:20:10 +09:30
Alan Modra
76c20d54ca Constify elf_backend_eh_frame_address_size
* elf-bfd.h (struct elf_backend_data): Make asection param of
	elf_backend_eh_frame_address_size const.
	(_bfd_elf_eh_frame_address_size): Likewise.
	* elf32-m32c.c (_bfd_m32c_elf_eh_frame_address_size): Likewise.
	* elf32-msp430.c (elf32_msp430_eh_frame_address_size): Likewise.
	* elfxx-mips.c (_bfd_mips_elf_eh_frame_address_size): Likewise.
	* elfxx-mips.h (_bfd_mips_elf_eh_frame_address_size): Likewise.
	* elf-eh-frame.c (_bfd_elf_eh_frame_address_size): Likewise.
	(next_cie_fde_offset): Constify params.
	(offset_adjust, adjust_eh_frame_local_symbols): Likewise.
2017-04-27 12:03:39 +09:30
Alan Modra
d7153c4ac3 Edit .eh_frame symbols
Experimental support for moving symbols defined in .eh_frame as their
CIEs/FDEs are edited or merged.

	* elf-bfd.h (struct eh_cie_fde): Add aug_str_len and aug_data_len.
	(_bfd_elf_adjust_eh_frame_global_symbol): Declare.
	* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Set aug_str_len and
	aug_data_len.
	(offset_adjust): New function.
	(_bfd_elf_adjust_eh_frame_global_symbol): Likewise.
	(adjust_eh_frame_local_symbols): Likewise.
	(_bfd_elf_discard_section_eh_frame): Call adjust_eh_frame_local_symbols
	after changing anything.  Return true if anything changed.
	* elflink.c (bfd_elf_discard_info): If .eh_frame changed, call
	_bfd_elf_adjust_eh_frame_global_symbol for globals.
2017-04-27 11:54:29 +09:30
Alan Modra
641338d8e9 Clear dynstr_index when forcing symbols local
This is really just cosmetic, but it does protect a little from
accidentally reading a stale value.

	* elflink.c (_bfd_elf_link_hash_hide_symbol): Clear dynstr_index
	when force_local.
2017-04-27 11:54:29 +09:30
Alan Modra
21d68fcd0c PowerPC undefweak handling
This patch fixes a number of cases where -z nodynamic-undefined-weak
was not effective in preventing dynamic relocations or linkage stubs.

	* elf32-ppc.c (UNDEFWEAK_NO_DYNAMIC_RELOC): Define.
	(ppc_elf_select_plt_layout, ppc_elf_tls_setup): Use it.
	(ppc_elf_adjust_dynamic_symbol, allocate_dynrelocs): Likewise.
	(ppc_elf_relocate_section): Likewise.  Delete silly optimisation
	for undef and undefweak dyn_relocs.
	* elf64-ppc.c (UNDEFWEAK_NO_DYNAMIC_RELOC): Define.
	(ppc64_elf_adjust_dynamic_symbol, ppc64_elf_tls_setup): Use it.
	(allocate_got, allocate_dynrelocs): Likewise.
	(ppc64_elf_relocate_section): Likewise.
2017-04-27 11:54:29 +09:30
Alan Modra
a61d92b7bd [GOLD] testsuite/plugin_section_order.c fix
* testsuite/plugin_section_order.c (onload): Add missing break.
2017-04-27 11:54:29 +09:30
GDB Administrator
7a81a73b2e Automatic date update in version.in 2017-04-27 00:00:56 +00:00
Maciej W. Rozycki
ce8ad87213 MIPS/GAS: Fix `.option picX' handling with relaxation
Correct the handling of `.option pic0' and `.option pic2' GAS pseudo-ops
in relaxation and use the setting of `mips_pic' (which these directives
control) as at the time a relaxed frag has been created rather than the
final `mips_pic' setting at the end of the source file processed.

To do so record whether `mips_pic' is NO_PIC or not in the frag itself
and use this information throughout relaxation instead of `mips_pic' to
decide which of NO_PIC or SVR4_PIC to produce machine code for, fixing
code generation and removing a possible fatal failure reproducible with:

$ as -32 --relax-branch -o option-pic-relax-3.o option-pic-relax-3.s
option-pic-relax-3.s: Assembler messages:
option-pic-relax-3.s:7: Warning: relaxed out-of-range branch into a jump
option-pic-relax-3.s: Internal error in cvt_frag_to_fill at .../gas/write.c:490.
Please report this bug.
$

using the test source included, due to a buffer overrun in filling the
variable part of a frag.

Likewise use the `fx_tcbit2' flag of a BFD_RELOC_16_PCREL_S2 fixup to
handle the simple case of substituting an out of range unconditional
branch with an equivalent absolute jump in NO_PIC code.

Retain the current way of VXWORKS_PIC use, which commit 41a1578ed1
("MIPS/GAS: Sanitize `.option picX' pseudo-op") has forbidden the use of
`.option picX' with.

	gas/
	* config/tc-mips.c (RELAX_ENCODE): Add `PIC' flag.
	(RELAX_PIC): New macro.
	(RELAX_USE_SECOND, RELAX_SECOND_LONGER, RELAX_NOMACRO)
	(RELAX_DELAY_SLOT, RELAX_DELAY_SLOT_16BIT)
	(RELAX_DELAY_SLOT_SIZE_FIRST, RELAX_DELAY_SLOT_SIZE_SECOND):
	Shift bits.
	(RELAX_BRANCH_ENCODE): Add `pic' flag.
	(RELAX_BRANCH_UNCOND, RELAX_BRANCH_LIKELY, RELAX_BRANCH_LINK)
	(RELAX_BRANCH_TOOFAR): Shift bits.
	(RELAX_BRANCH_PIC): New macro.
	(RELAX_MICROMIPS_ENCODE): Add `pic' flag.
	(RELAX_MICROMIPS_PIC): New macro.
	(RELAX_MICROMIPS_UNCOND, RELAX_MICROMIPS_COMPACT)
	(RELAX_MICROMIPS_LINK, RELAX_MICROMIPS_NODS)
	(RELAX_MICROMIPS_RELAX32): Shift bits.
	(relax_close_frag): Pass `mips_pic' setting to RELAX_ENCODE.
	(append_insn): Pass `mips_pic' setting to RELAX_BRANCH_ENCODE
	and RELAX_MICROMIPS_ENCODE, and record it in `fx_tcbit2' of the
	first fixup created.
	(md_apply_fix) <BFD_RELOC_16_PCREL_S2>: Use `fx_tcbit2' of the
	fixup processed rather than `mips_pic' in choosing to relax an
	out of range branch to a jump.
	(relaxed_branch_length): Use the `pic' flag of the relaxed frag
	rather than `mips_pic'.
	(relaxed_micromips_32bit_branch_length): Likewise.
	(md_estimate_size_before_relax): Likewise.
	(md_convert_frag): Likewise.

	* testsuite/gas/mips/option-pic-relax-0.d: New test.
	* testsuite/gas/mips/option-pic-relax-1.d: New test.
	* testsuite/gas/mips/option-pic-relax-2.d: New test.
	* testsuite/gas/mips/option-pic-relax-3.d: New test.
	* testsuite/gas/mips/option-pic-relax-3a.d: New test.
	* testsuite/gas/mips/option-pic-relax-4.d: New test.
	* testsuite/gas/mips/option-pic-relax-5.d: New test.
	* testsuite/gas/mips/option-pic-relax-2.l: New stderr output.
	* testsuite/gas/mips/option-pic-relax-3.l: New stderr output.
	* testsuite/gas/mips/option-pic-relax-4.l: New stderr output.
	* testsuite/gas/mips/option-pic-relax-5.l: New stderr output.
	* testsuite/gas/mips/option-pic-relax-0.s: New test source.
	* testsuite/gas/mips/option-pic-relax-1.s: New test source.
	* testsuite/gas/mips/option-pic-relax-2.s: New test source.
	* testsuite/gas/mips/option-pic-relax-3.s: New test source.
	* testsuite/gas/mips/option-pic-relax-4.s: New test source.
	* testsuite/gas/mips/option-pic-relax-5.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.
2017-04-27 00:50:57 +01:00
H.J. Lu
97d343d400 x86: Add DT_PLTRELSZ/DT_PLTREL/DT_JMPREL for PLT relocation
x86, PLT relocation may contain R_386_TLS_DESC or R_X86_64_TLSDESC
even though there is no real PLT.  We need to add DT_PLTRELSZ, DT_PLTREL
and DT_JMPREL if there is a .rel.plt/.rela.plt section.

bfd/

	* elf32-i386.c (elf_i386_size_dynamic_sections): Alwasys add
	DT_PLTRELSZ, DT_PLTREL and DT_JMPREL for .rel.plt section.
	* elf64-x86-64.c (elf_x86_64_size_dynamic_sections): Alwasys
	add DT_PLTRELSZ, DT_PLTREL and DT_JMPREL for .rela.plt section.

ld/

	* testsuite/ld-i386/tlsdesc2.d: New test.
	* testsuite/ld-x86-64/tlsdesc2.d: Likewise.
2017-04-26 15:34:00 -07:00
Nick Clifton
04b31182bf Fix a seg-fault when processing a corrupt binary containing reloc(s) with negative addresses.
PR binutils/21434
	* reloc.c (bfd_perform_relocation): Check for a negative address
	in the reloc.
2017-04-26 16:30:22 +01:00
Nick Clifton
d21f3ddb0d Fix PR number in ChangeLog comment. 2017-04-26 15:45:41 +01:00
Nick Clifton
740a463062 Fix invocation of stat() on a NULL pointer.
PR binutils/21407
	* bucomm.c (get_file_size): Return -1 if file_name is NULL.
	* ar.c (main): Fail with usage() invocation if no file names are
	provided.
2017-04-26 15:42:03 +01:00
Nick Clifton
3e6b644558 Improve decoding of corrupt/unrecognised gnu build attribute notes.
* readelf.c (process_section_headers): Warn about overlarge
	sections.
	(print_gnu_build_attribute_name): Print the number of unrecognised
	note types.  Fix formatting in the presence of errors.
	(testsuite/binutils-all/note-2-32.s): Fix encoding of numeric notes.
	(testsuite/binutils-all/note-2-64.s): Likewise.
2017-04-26 14:23:26 +01:00
Jiong Wang
b41c5a85a7 [gdbarch] New method "execute_dwarf_cfa_vendor_op" and migrate SPARC to it
Recently a feature called "return address signing" has been added to GCC to
prevent stack smash stack on AArch64.  For details please refer:

  https://gcc.gnu.org/ml/gcc-patches/2017-01/msg00376.html

GDB needs to be aware of this feature so it can restore the original return
address which is critical for unwinding.

On compiler side, whenever return address, i.e. LR register, is mangled or
restored by hardware instruction, compiler is expected to generate a
DW_CFA_AARCH64_negate_ra_state to toggle return address signing status.

DW_CFA_AARCH64_negate_ra_state is using the same CFI number and
therefore need to be multiplexed with DW_CFA_GNU_window_save which was designed
for SPARC.

A new gdbarch method "execute_dwarf_cfa_vendor_op" is introduced by this patch.
It's parameters has been restricted to those only needed by SPARC and AArch64
for multiplexing DW_CFA_GNU_window_save which is a CFI operation takes none
operand.  Should any further DWARF CFI operation want to be multiplexed in the
future,  the parameter list can be extended.  Below is the current function
prototype.

   typedef int (gdbarch_execute_dwarf_cfa_vendor_op_ftype)
     (struct gdbarch *gdbarch, gdb_byte op, struct dwarf2_frame_state *fs);

DW_CFA_GNU_window_save support for SPARC is migrated to this new gdbarch
method by this patch.

gdb/
	* gdbarch.sh: New gdbarch method execute_dwarf_cfa_vendor_op.
	* gdbarch.c: Regenerated.
	* gdbarch.h: Regenerated.
	* dwarf2-frame.c (dwarf2_frame_state_alloc_regs): Made the
	visibility external.
	(execute_cfa_program): Call execute_dwarf_cfa_vendor_op for CFI
	between DW_CFA_lo_user and DW_CFA_high_user inclusive.
	(enum cfa_how_kind): Move to ...
	(struct dwarf2_frame_state_reg_info): Likewise.
	(struct dwarf2_frame_state): Likewise.
	* dwarf2-frame.h: ... here.
	(dwarf2_frame_state_alloc_regs): New declaration.
	* sparc-tdep.c (sparc_execute_dwarf_cfa_vendor_op): New function.
	(sparc32_gdbarch_init): Register execute_dwarf_cfa_vendor_op hook.
2017-04-26 14:05:03 +01:00
Maciej W. Rozycki
23ec1e32b1 PR ld/21334: Always call `_bfd_elf_link_renumber_dynsyms' if required
Complement commit e17b0c351f ("MIPS/BFD: Respect the ELF gABI dynamic
symbol table sort requirement") and correct an inconsistency in dynamic
symbol accounting data causing an assertion failure in the MIPS backend:

ld: BFD (GNU Binutils) 2.28.51.20170330 assertion fail
../../binutils-gdb/bfd/elfxx-mips.c:3860

in the course of making a GOT entry in a static binary to satisfy a GOT
relocation present in input, due to the local dynamic symbol count not
having been established.

To do so let backends request `_bfd_elf_link_renumber_dynsyms' to be
always called, rather than where a dynamic binary is linked only, and
then make this request in the MIPS backend.

	bfd/
	PR ld/21334
	* elf-bfd.h (elf_backend_data): Add `always_renumber_dynsyms'
	member.
	* elfxx-target.h [!elf_backend_always_renumber_dynsyms]
	(elf_backend_always_renumber_dynsyms): Define.
	(elfNN_bed): Initialize `always_renumber_dynsyms' member.
	* elfxx-mips.h (elf_backend_always_renumber_dynsyms): Define.
	* elflink.c (bfd_elf_size_dynamic_sections): Also call
	`_bfd_elf_link_renumber_dynsyms' if the backend has requested
	it.
	(bfd_elf_size_dynsym_hash_dynstr): Likewise.

	ld/
	PR ld/21334
	* testsuite/ld-mips-elf/pr21334.dd: New test.
	* testsuite/ld-mips-elf/pr21334.gd: New test.
	* testsuite/ld-mips-elf/pr21334.ld: New test linker script.
	* testsuite/ld-mips-elf/pr21334.s: New test source.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2017-04-26 13:17:07 +01:00
Maciej W. Rozycki
c46cec3a8c ELF/BFD: Limit `_bfd_elf_link_renumber_dynsyms' call in section GC
Consistently call `_bfd_elf_link_renumber_dynsyms' only if linking a
dynamic binary, complementing code in `bfd_elf_size_dynsym_hash_dynstr'
and commit ccabcbe51e ("New attempt at fixing MIPS --gc-sections et
al."), <https://sourceware.org/ml/binutils/2005-08/msg00258.html>.

	bfd/
	* elflink.c (bfd_elf_size_dynamic_sections): Only call
	`_bfd_elf_link_renumber_dynsyms' after section GC if dynamic
	sections have been created.
2017-04-26 13:15:17 +01:00
Maciej W. Rozycki
bbdd9a6894 MIPS/readelf: With `-A' also dump GOT in static binaries
A static, non-relocated global offset table will be embedded in static
binaries produced from objects containing any kind of GOT relocations,
generally PIC code.  All symbols will have been resolved in static link
in such binaries making all GOT entries local and their values final as
there is no run-time load processing further performed.

Dump such GOT with `readelf -A' like already done with regular GOT, to
make it easier to examine static code that uses accesses via the GOT
pointer.  There will be no dynamic segment or section in a static binary
to get the GOT pointer (DT_PLTGOT) from, so use section headers to find
a `.got' section instead.

	binutils/
	* readelf.c (process_mips_specific): Add static GOT support.
2017-04-26 13:11:20 +01:00
Nick Clifton
e63d123268 Fix seg-fault attempting to compress a debug section in a corrupt binary.
PR binutils/21431
	* compress.c (bfd_init_section_compress_status): Check the return
	value from bfd_malloc.
2017-04-26 13:07:49 +01:00
Alan Hayward
c185f580b2 xtensa_pseudo_register_read/write - Use regcache_raw_read_unsigned
gdb/
	* xtensa-tdep.c (xtensa_pseudo_register_read): Use
	regcache_raw_read_unsigned.
	(xtensa_pseudo_register_write): Likewise.
2017-04-26 10:34:15 +01:00
Alan Hayward
19c4559475 nds32: Abort instead of returning REG_UNKNOWN
gdb/
	* nds32-tdep.c (nds32_pseudo_register_read): Abort on errors.
	(nds32_pseudo_register_write): Likewise.
2017-04-26 09:57:15 +01:00
GDB Administrator
03def0812a Automatic date update in version.in 2017-04-26 00:00:36 +00:00
Yao Qi
4658f12e9c Change readonly_p to bool
This patch changes readonly_p type to bool.

gdb:

2017-04-25  Yao Qi  <yao.qi@linaro.org>

	* regcache.c (struct regcache) <readonly_p>: Change its type
	to bool.
	(regcache_xmalloc_1): Update parameter type and callers update.
2017-04-25 21:32:05 +01:00
Maciej W. Rozycki
c4ab9505b5 MIPS/readelf: Simplify GOT[1] data availability check
Unavailable data is handled gracefully in MIPS GOT processing done by
`print_mips_got_entry', so all that is needed in special GOT[1] handling
is to verify whether data can be retrieved for the purpose of the GNU
marker check done with `byte_get'.  Remove the extra error reporting
code then, introduced with commit 75ec1fdbb7 ("Fix runtime seg-fault
in readelf when parsing a corrupt MIPS binary.") in the course of
addressing PR binutils/21344, and defer the error case to regular local
GOT entry processing.

	binutils/
	* readelf.c (process_mips_specific): Remove error reporting from
	GOT[1] processing.
2017-04-25 21:11:49 +01:00
Maciej W. Rozycki
919383ac71 MIPS/readelf: Remove extraneous null GOT data check
Null data is handled gracefully throughout in MIPS GOT processing, with
addresses printed normally and unavailable data shown as `<unknown>' by
`print_mips_got_entry', and special processing code for GOT[1] doing an
explicit check.  Remove an unwanted null GOT data check then, introduced
with commit 592458412f in the course of addressing PR binutils/12855.

	binutils/
	* readelf.c (process_mips_specific): Remove null GOT data check.
2017-04-25 21:10:53 +01:00
Claudiu Zissulescu
126124cc0f [ARC] Enhance enter/leave mnemonics.
enter/leave mnemonics are enhanced to not only accept register ranges
but also single register (i.e., r13) or even no GPR register at all.

gas/
2017-04-25  Claudiu Zissulescu  <claziss@synopsys.com>

	* testsuite/gas/arc/leave_enter.d: Update test.
	* testsuite/gas/arc/leave_enter.s: Likewise.

opcodes/
2017-04-25  Claudiu Zissulescu  <claziss@synopsys.com>

	* arc-dis.c (print_insn_arc): Smartly print enter/leave mnemonics.
	* arc-opc.c (insert_r13el): New function.
	(R13_EL): Define.
	* arc-tbl.h: Add new enter/leave variants.
2017-04-25 17:07:00 +02:00
Claudiu Zissulescu
be6a24d8ea [ARC] Prefer NOP instead of MOV 0,0
NOP and MOV 0,0 are having the same encoding. As MOV mnemonic is
located before NOP in the instruction table, the disassembler prints
MOV 0,0 for NOP. Reorder the instructions such that NOP is first.

gas/
2017-04-25  Claudiu Zissulescu  <claziss@synopsys.com>

	* testsuite/gas/arc/b.d: Update test.
	* testsuite/gas/arc/noargs_hs.d: Likewise.

opcode/
2017-04-25  Claudiu Zissulescu  <claziss@synopsys.com>

	* arc-tbl.h: Reorder NOP entry to be before MOV instructions.
2017-04-25 17:07:00 +02:00
Yao Qi
d581dda881 Change gdbarch_wchar_bit for AArch64 and ARM
The size of wchar_t on AArch64 and ARM is 4-byte, so we can use the
default value (4*TARGET_CHAR_BIT).

This patch fixes some fails in gdb.cp/wide_char_types.exp on
aarch64-linux.

gdb:

2017-04-25  Yao Qi  <yao.qi@linaro.org>

	* aarch64-tdep.c (aarch64_gdbarch_init): Don't call
	set_gdbarch_wchar_bit.
	* arm-tdep.c (arm_gdbarch_init): Likewise.
2017-04-25 15:15:54 +01:00