binutils-gdb.git
9 years agogdb/dwarf2read: Minimal handling of non-constant struct sizes.
Joel Brobecker [Mon, 23 Nov 2015 17:44:16 +0000 (09:44 -0800)]
gdb/dwarf2read: Minimal handling of non-constant struct sizes.

Using the gdb.ada/var_rec_arr.exp test, where the program declares
an array of variant records...

   type Record_Type (I : Small_Type := 0) is record
      S : String (1 .. I);
   end record;
   type Array_Type is array (Integer range <>) of Record_Type;

... and then a variable A1 of type Array_Type, the following command
ocassionally trigger an internal error trying to allocate more memory
than we have left:

    (gdb) ptype a1(1)
    [...]/utils.c:1089: internal-error: virtual memory exhausted.
    A problem internal to GDB has been detected,
    [...]

What happens is that recent versions of GNAT are able to generate
DWARF expressions for type Record_Type, and therefore the record's
DW_AT_byte_size is not a constant, which unfortunately breaks
an assumption made by dwarf2read.c:read_structure_type when it does:

   attr = dwarf2_attr (die, DW_AT_byte_size, cu);
   if (attr)
     {
       TYPE_LENGTH (type) = DW_UNSND (attr);
     }

As a result of this, when ada_evaluate_subexp tries to create
a value_zero for a1(1) while processing the OP_FUNCALL operator
as part of evaluating the subscripting operation in no-side-effect
mode, we try to allocate a value with a bogus size, potentially
triggering the out-of-memory internal error.

This patch avoids this issue by setting the length to zero in
this case.  Until we decide to start supporting dynamic type
lengths in GDB's type struct, and it's not clear yet that
this is worth the effort (see added comment), that's probably
the best we can do.

gdb/ChangeLog:

        * dwarf2read.c (read_structure_type): Set the type's length
        to zero if it has a DW_AT_byte_size attribute which is not
        a constant.

gdb/testsuite/ChangeLog:

        * testsuite/gdb.ada/var_rec_arr.exp: Add "ptype a1(1)" test.

9 years agoopcodes: handle mach-o for thumb/arm disambiguation.
Tristan Gingold [Fri, 20 Nov 2015 16:24:52 +0000 (17:24 +0100)]
opcodes: handle mach-o for thumb/arm disambiguation.

opcodes/
* arm-dis.c (print_insn): Also set is_thumb for Mach-O.

9 years agodarwin-nat: disable sstep cache.
Tristan Gingold [Wed, 8 Jul 2015 10:18:32 +0000 (12:18 +0200)]
darwin-nat: disable sstep cache.

Was not reliable after inferior call.

9 years agosolib-darwin: support PIE for spawned processes.
Tristan Gingold [Mon, 23 Nov 2015 10:45:05 +0000 (11:45 +0100)]
solib-darwin: support PIE for spawned processes.

solib-darwin is now able to read the load address of the executable
before any inferior execution.

9 years agodarwin-nat: rewrite darwin_read_write_inferior
Tristan Gingold [Thu, 9 Oct 2014 12:08:07 +0000 (14:08 +0200)]
darwin-nat: rewrite darwin_read_write_inferior

This is a little bit more efficient.

9 years agotarget.h: #include <sys/types.h>.
Doug Evans [Mon, 23 Nov 2015 01:24:03 +0000 (17:24 -0800)]
target.h: #include <sys/types.h>.

For musl.

9 years agoAutomatic date update in version.in
GDB Administrator [Mon, 23 Nov 2015 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agosim: common: set up CPPFLAGS/CXXFLAGS/LDFLAGS from configure [PR sim/18762]
Mike Frysinger [Sun, 22 Nov 2015 07:22:39 +0000 (23:22 -0800)]
sim: common: set up CPPFLAGS/CXXFLAGS/LDFLAGS from configure [PR sim/18762]

Make sure we pass down the CPP/CXX/LD flags that configure set up for us
like we already do for C flags.

9 years agosim: sim_do_commandf: fix call to va_end [PR sim/19273]
Mike Frysinger [Sun, 22 Nov 2015 07:10:04 +0000 (23:10 -0800)]
sim: sim_do_commandf: fix call to va_end [PR sim/19273]

Make sure we call va_end even in the error case.

9 years agosim: ppc: avoid use of $< in ordinary rules [PR sim/13834]
Mike Frysinger [Sun, 22 Nov 2015 06:56:04 +0000 (22:56 -0800)]
sim: ppc: avoid use of $< in ordinary rules [PR sim/13834]

POSIX does not define $< behavior in ordinary rules, so avoid its use
to fix building on non-GNU make setups.

Reported-by: Christopher January <chris.january@allinea.com>
9 years agosim: common: add PRI printf defines
Mike Frysinger [Sat, 20 Jun 2015 09:36:26 +0000 (15:21 +0545)]
sim: common: add PRI printf defines

Keeping track of the right printf formats for the various types can be
a pretty big hassle, especially in common code which has to support a
variety of bitsizes.  Take a page from the existing standards and add
a set of PRI macros which hide the details in a common header.

9 years agosim: avr: move global state to sim/cpu state
Mike Frysinger [Sun, 22 Nov 2015 06:00:57 +0000 (22:00 -0800)]
sim: avr: move global state to sim/cpu state

We don't want global variables in the sim as all state should be in the
sim state or in the cpu state.  This pushes down all that logic for avr.

9 years agosim: avr: switch to common sim-reg
Mike Frysinger [Sun, 22 Nov 2015 05:12:59 +0000 (21:12 -0800)]
sim: avr: switch to common sim-reg

This is not entirely useful as avr doesn't (yet) store its register
state in the cpu state, but it does allow for switching to the common
code for these functions.

9 years agosim: sh: delete global callback/argv
Mike Frysinger [Sun, 22 Nov 2015 04:47:33 +0000 (20:47 -0800)]
sim: sh: delete global callback/argv

We can use the sim state everywhere now to get these values on the fly.

9 years agosim: h8300: delete global callback/kind/name
Mike Frysinger [Sat, 21 Nov 2015 04:49:35 +0000 (20:49 -0800)]
sim: h8300: delete global callback/kind/name

We can use the sim state everywhere now to get these values on the fly.

9 years agosim: mn10300: drop global callback handle
Mike Frysinger [Sat, 21 Nov 2015 04:41:51 +0000 (20:41 -0800)]
sim: mn10300: drop global callback handle

It's used in one place and can easily be replaced by using the sim state.

9 years agoAutomatic date update in version.in
GDB Administrator [Sun, 22 Nov 2015 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agoAutomatic date update in version.in
GDB Administrator [Sat, 21 Nov 2015 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agoFix '-data-read-memory-bytes' typo/assertion
Don Breazeal [Fri, 20 Nov 2015 17:45:44 +0000 (09:45 -0800)]
Fix '-data-read-memory-bytes' typo/assertion

This patch fixes a typo in target.c:read_memory_robust, where
it calls read_whatever_is_readable with the function arguments
in the wrong order.  Depending on the address being read, it
can cause an xmalloc with a huge size, resulting in an assertion
failure, or just read something other than what was requested.

The problem only arises when GDB is handling an MI
"-data-read-memory-bytes" request and the initial target_read returns
an error status.  Note that read_memory_robust is only called from
the MI code.

gdb/ChangeLog:

* gdb/target.c (read_memory_robust): Call
read_whatever_is_readable with arguments in the correct order.

9 years agoMIPS/GAS/testsuite: Tighten negative-match NaN tests
Maciej W. Rozycki [Fri, 20 Nov 2015 16:14:33 +0000 (16:14 +0000)]
MIPS/GAS/testsuite: Tighten negative-match NaN tests

Fix a test quality regression introduced with commit 351cdf24 [[MIPS]
Implement O32 FPXX, FP64 and FP64A ABI extensions] where MIPS ABI flags
match patterns have been added to negative-match tests covering ELF file
header flags.  Negative-match tests succeed whenever there is a failure
in matching output produced and consequently the likelihood of a false
success increases when patterns to match irrelevant output are added.

Therefore remove the irrelevant paterns so that the tests complete as
soon as the line concerned has been seen.

gas/testsuite/
* gas/mips/nan-legacy-1.d: Remove MIPS ABI flags match patterns.
* gas/mips/nan-legacy-2.d: Likewise.
* gas/mips/nan-legacy-3.d: Likewise.
* gas/mips/nan-legacy-4.d: Likewise.
* gas/mips/nan-legacy-5.d: Likewise.

9 years agoMIPS/LD: Fix little-endian `mti' and `img' ELF emulations
Maciej W. Rozycki [Fri, 20 Nov 2015 16:11:22 +0000 (16:11 +0000)]
MIPS/LD: Fix little-endian `mti' and `img' ELF emulations

Make the little-endian emulation the default for the `mips*el-mti-elf*'
and `mips*el-img-elf*' targets, fixing the issue of LD rejecting, in its
default configuration, object files produced by GAS also in its default
configuration.

ld/
* configure.tgt <mips*el-mti-elf*, mips*el-img-elf*>: Add
targets.

9 years ago[AArch64] Add support for ARMv8.1 Virtulization Host Extensions.
Matthew Wahab [Fri, 20 Nov 2015 16:09:34 +0000 (16:09 +0000)]
[AArch64] Add support for ARMv8.1 Virtulization Host Extensions.

The ARMv8.1 architecture includes the Virtualization Host Extensions
which add a number of system registers. This patch adds support for
these system registers, making them available when -march=armv8.1-a is
selected.

include/opcode/
2015-11-20  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64.h (AARCH64_FEATURE_V8_1): New.
(AARCH64_ARCH_v8_1): Add AARCH64_FEATURE_V8_1.

opcodes/
2015-11-20  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64-opc.c (aarch64_sys_regs): Add spsr_el12, elr_el12,
sctlr_el12, cpacr_el12, ttbr1_el2, ttbr0_el12, ttbr1_el12,
tcr_el12, afsr0_el12, afsr1_el12, esr_el12, far_el12, mair_el12,
amair_el12, vbar_el12, contextidr_el2, contextidr_el12,
cntkctl_el12, cntp_tval_el02, cntp_ctl_el02, cntp_cval_el02,
cntv_tval_el02, cntv_ctl_el02, cntv_cval_el02, cnthv_tval_el2,
cnthv_ctl_el2, cnthv_cval_el2.
(aarch64_sys_reg_supported_p): Update for the new system
registers.

gas/testsuite/
2015-11-20  Matthew Wahab  <matthew.wahab@arm.com>

* gas/aarch64/virthostext-directive.d: New.
* gas/aarch64/virthostext.d: New.
* gas/aarch64/virthostext.s: New.

Change-Id: Iecb370591b1b6e9e00d81c8ccd9ae3b0f71794a2

9 years agoStop the ARM short mapping symbol test being run for the symbianelf target.
Matthew Wahab [Fri, 20 Nov 2015 15:53:41 +0000 (15:53 +0000)]
Stop the ARM short mapping symbol test being run for the symbianelf target.

* gas/arm/mapshort-elf.d: Fix typo in exclusion list.

9 years agoFix a problem with the maximum number of open files held in the cache when running...
Stefan Teleman [Fri, 20 Nov 2015 15:28:40 +0000 (15:28 +0000)]
Fix a problem with the maximum number of open files held in the cache when running on a 32-bit Solaris host.

PR ld/19260
* cache.c (bfd_cache_max_open): Avoid using getrlimit on 32-bit
Solaris as the result is unreliable.

9 years agoRemove a if-clause that is redundant because the same test has been performed earlier on.
Nick Clifton [Fri, 20 Nov 2015 14:15:20 +0000 (14:15 +0000)]
Remove a if-clause that is redundant because the same test has been performed earlier on.

PR binutils/19224
* h8300-dis.c (bfd_h8_disassemble): Remove redundant if clause.

9 years agoFix missing update in previous patch.
Tristan Gingold [Fri, 20 Nov 2015 14:14:38 +0000 (15:14 +0100)]
Fix missing update in previous patch.

bfd/
* mach-o-x86-64.c (x86_64_howto_table): Change name here too.

9 years agoFix building objcopy under mingw64 by replacing uses of strndup with xstrndup.
Ronald Hoogenboom [Fri, 20 Nov 2015 14:08:29 +0000 (14:08 +0000)]
Fix building objcopy under mingw64 by replacing uses of strndup with xstrndup.

* objcopy.c (parse_symflags): Use xstrndup in place of strndup.
(copy_main): Likewise.

9 years agobinutils: add support for arm-*-darwin and aarch64-*-darwin.
Tristan Gingold [Fri, 20 Nov 2015 10:33:33 +0000 (11:33 +0100)]
binutils: add support for arm-*-darwin and aarch64-*-darwin.

Currently only in bfd and binutils.

ChangeLog/
* configure.ac: Add aarch64-*-darwin* and arm-*-darwin*.
* configure: Regenerate.

bfd/ChangeLog/
* targets.c (aarch64_mach_o_vec, arm_mach_o_vec): Declare.
(_bfd_target_vector): Add new vectors.
* reloc.c (BFD_RELOC_MACH_O_SUBTRACTOR32)
(BFD_RELOC_MACH_O_SUBTRACTOR64, BFD_RELOC_MACH_O_ARM64_ADDEND)
(BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21)
(BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12)
(BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT): New relocations.
(BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32)
(BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64): Remove.
* mach-o-x86-64.c (bfd_mach_o_x86_64_swap_reloc_out): Change
name of subtractor relocations.
* config.bfd: Handle aarch64-*-darwin*, arm-*-darwin*.
* Makefile.am (BFD32_BACKENDS): Add mach-o-arm.lo.
(BFD32_BACKENDS_CFILES): Add mach-o-arm.c.
(BFD64_BACKENDS): Add mach-o-aarch64.lo.
(BFD64_BACKENDS_CFILES): Add mach-o-aarch64.c.
* configure.ac: Handle aarch64_mach_o_vec and arm_mach_o_vec.
* mach-o-aarch64.c: New file.
* mach-o-arm.c: New file.
* Makefile.in: Regenerate.
* bfd-in2.h: Regenerate.
* configure: Regenerate.
* libbfd.h: Regenerate.

9 years agoSynchronize PDP11 page size between BFD and LD.
David Bridgham [Fri, 20 Nov 2015 12:58:16 +0000 (12:58 +0000)]
Synchronize PDP11 page size between BFD and LD.

* pdp11.c (TARGET_PAGE_SIZE): Set to 256 to match definition in
ld/emulparams/pdp11.sh.

9 years agoUpdate translations.
Nick Clifton [Fri, 20 Nov 2015 12:35:43 +0000 (12:35 +0000)]
Update translations.

binutils * po/ca.po: New Catalan translation.
* configure.ac (ALL_LINGUAS): Add ca.
* configure: Regenerate.

gas * po/fr.po: Updated French translation.
* po/uk.po: Updated Ukraninan translation.
* po/zh_CN.po: New simplified Chinese translation.
* configure.ac (ALL_LINGUAS): Add zh_CN.
* configure: Regenerate.

opcodes * po/zh_CN.po: Updated simplified Chinese translation.

9 years agocallfuncs.exp: avoid spurious register differences in sparc64 targets.
Jose E. Marchesi [Fri, 20 Nov 2015 10:36:07 +0000 (11:36 +0100)]
callfuncs.exp: avoid spurious register differences in sparc64 targets.

The Linux kernel disables the FPU upon returning to userland.  This
introduces spurious failures in the register preservation tests in
callfuncs.exp, since the pstate.PEF bit gets cleared after system
calls.

This patch filters out the pstate register in sparc64-*-linux-gnu
targets, so the relevant tests are no longer fooled and pass.

gdb/testsuite/ChangeLog:

2015-11-20  Jose E. Marchesi  <jose.marchesi@oracle.com>

        * gdb.base/callfuncs.exp (fetch_all_registers): Filter out the
          pstate register when comparing registers values in
          sparc64-*-linux-gnu targets to avoid spurious differences.

9 years agosparc: fix build of gdb/testsuite/gdb.arch/sparc-sysstep.c
Jose E. Marchesi [Fri, 20 Nov 2015 09:48:56 +0000 (10:48 +0100)]
sparc: fix build of gdb/testsuite/gdb.arch/sparc-sysstep.c

This patch adds a missing include that makes the test program to not
be built (--Wimplicit-function-declaration).

gdb/testsuite/ChangeLog:

2015-11-20  Jose E. Marchesi  <jose.marchesi@oracle.com>

     * gdb.arch/sparc-sysstep.c: Include unistd.h for getpid.

9 years agoFix think-o in calls to gdb_compile.
Sandra Loosemore [Fri, 20 Nov 2015 00:22:04 +0000 (16:22 -0800)]
Fix think-o in calls to gdb_compile.

2015-11-19  Sandra Loosemore  <sandra@codesourcery.com>

gdb/testsuite/
* gdb.base/nested-subp1.exp: Pass executable, not executable name,
as type argument to gdb_compile.
* gdb.base/nested-subp2.exp: Likewise.
* gdb.base/nested-subp3.exp: Likewise.

9 years agoAutomatic date update in version.in
GDB Administrator [Fri, 20 Nov 2015 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agogdbserver: Fix qSupported:xmlRegisters=i386;UnknownFeature+ handling
Pedro Alves [Thu, 19 Nov 2015 18:31:50 +0000 (18:31 +0000)]
gdbserver: Fix qSupported:xmlRegisters=i386;UnknownFeature+ handling

The target_process_qsupported method is called for each qSupported
feature that the common code does not recognize.  The only current
implementation, for x86 Linux (x86_linux_process_qsupported), assumes
that it either is called with the "xmlRegisters=i386" feature, or that
it is isn't called at all, indicating the connected GDB predates x86
XML descriptions.

That's a bad assumption however.  If GDB sends in a new/unknown (to
core gdbserver) feature after "xmlRegisters=i386", say, something like
qSupported:xmlRegisters=i386;UnknownFeature+, then when
target_process_qsupported is called for "UnknownFeature+",
x86_linux_process_qsupported clears the 'use_xml' global and calls
x86_linux_update_xmltarget, and gdbserver ends up _not_ reporting a
XML description...

This commit changes the target_process_qsupported API to instead pass
down a vector of unprocessed qSupported features in one go.

(There's an early call to target_process_qsupported(NULL) that
indicates "starting qSupported processing".  There's no matching call
to mark the end of processing, though.  I first fixed this by passing
(char *)-1 to indicate that, and adjusted the x86 backend to only
clear 'use_xml' when qSupported processing starts, and then only call
x86_linux_update_xmltarget() when (char *)-1 was passed.  However, I
wasn't that happy with the hack and came up this alternative version.)

gdb/gdbserver/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* linux-low.c (linux_process_qsupported): Change prototype.
Adjust.
* linux-low.h (struct linux_target_ops) <process_qsupported>:
Change prototype.
* linux-x86-low.c (x86_linux_process_qsupported): Change prototype
and adjust to loop over all features.
* server.c (handle_query) <qSupported>: Adjust to call
target_process_qsupported once, passing it a vector of unprocessed
features.
* target.h (struct target_ops) <process_qsupported>: Change
prototype.
(target_process_qsupported): Adjust.

9 years agogdb: Workaround bad gdbserver qSupported:xmlRegisters=i386;UnknwnFeat+ handling
Pedro Alves [Thu, 19 Nov 2015 18:31:49 +0000 (18:31 +0000)]
gdb: Workaround bad gdbserver qSupported:xmlRegisters=i386;UnknwnFeat+ handling

gdbserver's target_process_qsupported is called for each feature that
the gdbserver common code does not recognize.  The only current
implementation, for x86 Linux, does this:

  static void
  x86_linux_process_qsupported (const char *query)
  {
    /* Return if gdb doesn't support XML.  If gdb sends "xmlRegisters="
       with "i386" in qSupported query, it supports x86 XML target
       descriptions.  */
    use_xml = 0;
    if (query != NULL && startswith (query, "xmlRegisters="))
      {
char *copy = xstrdup (query + 13);
char *p;

for (p = strtok (copy, ","); p != NULL; p = strtok (NULL, ","))
  {
    if (strcmp (p, "i386") == 0)
      {
use_xml = 1;
break;
      }
  }

free (copy);
      }

    x86_linux_update_xmltarget ();
  }

Notice that this clears use_xml and calls x86_linux_update_xmltarget
each time target_process_qsupported is called.  So if gdb sends in any
unknown feature after "xmlRegisters=i386", like e.g.,
"xmlRegisters=i386;UnknownFeature+" gdbserver ends up not reporting a
XML description...

Work around this by having GDB send the "xmlRegisters=" feature last.

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* remote.c (remote_query_supported): Send the "xmlRegisters="
feature last.

9 years agoFix iov_len calculation in aarch64_linux_set_debug_regs
Simon Marchi [Thu, 19 Nov 2015 15:17:36 +0000 (10:17 -0500)]
Fix iov_len calculation in aarch64_linux_set_debug_regs

There is this build failure when building in C++:

/home/simark/src/binutils-gdb/gdb/nat/aarch64-linux-hw-point.c: In function â€˜void aarch64_linux_set_debug_regs(const aarch64_debug_reg_state*, int, int)’:
/home/simark/src/binutils-gdb/gdb/nat/aarch64-linux-hw-point.c:564:64: error: â€˜count’ cannot appear in a constant-expression
   iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1])
                                                                ^
We can simplify the computation and make g++ happy at the same time by
formulating as:

  size of fixed part + size of variable part

thus...

  size of fixed part + count * size of one variable part element

thus...

  offsetof (struct user_hwdebug_state, dbg_regs) + count * sizeof (regs.dbg_reg[0]);

gdb/ChangeLog:

* nat/aarch64-linux-hw-point.c (aarch64_linux_set_debug_regs): Change
form of iov_len computation.

9 years ago[C++] Default to -Werror in C++ mode too
Pedro Alves [Thu, 19 Nov 2015 14:32:54 +0000 (14:32 +0000)]
[C++] Default to -Werror in C++ mode too

Both x86_64 GNU/Linux and x86_64 mingw-w64 build cleanly with
--enable-targets=all.  This enables -Werror by default in C++ mode
too, in order to let the buildbot catch C++ build regressions for us.

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* configure.ac (ERROR_ON_WARNING): Don't check whether in C++
mode.
* configure: Regenerate.

gdb/gdbserver/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* configure.ac (ERROR_ON_WARNING): Don't check whether in C++
mode.
* configure: Regenerate.

9 years ago[C++] Drop -fpermissive hack
Pedro Alves [Thu, 19 Nov 2015 14:32:54 +0000 (14:32 +0000)]
[C++] Drop -fpermissive hack

Both x86_64 GNU/Linux and x86_64 mingw-w64 build cleanly with
--enable-targets=all.  Let's drop the -fpermissive hack, in order to
let the buildbot catch C++ build regressions for us.

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* build-with-cxx.m4 (GDB_AC_BUILD_WITH_CXX): Remove -fpermissive.
* configure: Regenerate.

gdb/gdbserver/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* configure: Regenerate.

9 years ago[C++] breakpoint.c: "no memory" software watchpoints and enum casts
Pedro Alves [Thu, 19 Nov 2015 14:32:53 +0000 (14:32 +0000)]
[C++] breakpoint.c: "no memory" software watchpoints and enum casts

Fixes:

 src/gdb/breakpoint.c: In function ‘void update_watchpoint(watchpoint*, int)’:
 src/gdb/breakpoint.c:2147:31: error: invalid conversion from ‘int’ to ‘target_hw_bp_type’ [-fpermissive]
     base->loc->watchpoint_type = -1;
^

Seems better to rely on "address == -1 && length == -1" than on a enum
value that's not really part of the set of supposedly valid enum
values.  Also, factor that out to separate functions for better
localization of the concept.

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* breakpoint.c (software_watchpoint_add_no_memory_location)
(is_no_memory_software_watchpoint): New functions.
(update_watchpoint): Use
software_watchpoint_add_memoryless_location.
(breakpoint_address_bits): Use is_no_memory_software_watchpoint.

9 years ago[C++] s390: Fix enum gdb_syscall conversion
Simon Marchi [Thu, 19 Nov 2015 14:32:53 +0000 (14:32 +0000)]
[C++] s390: Fix enum gdb_syscall conversion

Fixes:

 src/gdb/s390-linux-tdep.c: In function ‘gdb_syscall s390_canonicalize_syscall(int, s390_abi_kind)’:
 src/gdb/s390-linux-tdep.c:2622:16: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall;
 ^
 src/gdb/s390-linux-tdep.c:2722:16: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall;
 ^
 src/gdb/s390-linux-tdep.c:2725:24: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall + 2;
 ^
 src/gdb/s390-linux-tdep.c:2728:24: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall + 5;
 ^
 src/gdb/s390-linux-tdep.c:2731:24: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall + 6;
 ^
 src/gdb/s390-linux-tdep.c:2734:24: error: invalid conversion from ‘int’ to ‘gdb_syscall’ [-fpermissive]
  return syscall + 7;
 ^

gdb/ChangeLog:
2015-11-19  Simon Marchi  <simon.marchi@ericsson.com>
    Pedro Alves  <palves@redhat.com>

* s390-linux-tdep.c (s390_canonicalize_syscall): Add casts and
intermediate 'int' variable.

9 years ago[C++] linux-thread-db.c: dladdr cast
Pedro Alves [Thu, 19 Nov 2015 14:32:53 +0000 (14:32 +0000)]
[C++] linux-thread-db.c: dladdr cast

Fixes:

 src/gdb/linux-thread-db.c: In function ‘int try_thread_db_load_1(thread_db_info*)’:
 src/gdb/linux-thread-db.c:769:53: error: invalid conversion from ‘td_err_e (*)(ps_prochandle*, td_thragent_t**) {aka td_err_e (*)(ps_prochandle*, td_thragent**)}’ to ‘const void*’ [-fpermissive]
library = dladdr_to_soname (*info->td_ta_new_p);
      ^
 src/gdb/linux-thread-db.c:637:1: error:   initializing argument 1 of ‘const char* dladdr_to_soname(const void*)’ [-fpermissive]
  dladdr_to_soname (const void *addr)
  ^

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* linux-thread-db.c (try_thread_db_load_1): Add cast.

9 years ago[C++] remote.c: Avoid enum arithmetic
Pedro Alves [Thu, 19 Nov 2015 14:32:53 +0000 (14:32 +0000)]
[C++] remote.c: Avoid enum arithmetic

Fixes:

  src/gdb/remote.c: In function ‘void remote_unpush_target()’:
  src/gdb/remote.c:4610:45: error: invalid conversion from ‘int’ to ‘strata’ [-fpermissive]
     pop_all_targets_above (process_stratum - 1);
       ^
  In file included from src/gdb/inferior.h:38:0,
   from src/gdb/remote.c:25:
  src/gdb/target.h:2299:13: error:   initializing argument 1 of ‘void pop_all_targets_above(strata)’ [-fpermissive]
   extern void pop_all_targets_above (enum strata above_stratum);
       ^

I used to carry a patch in the C++ branch that just did:

 -  pop_all_targets_above (process_stratum - 1);
 +  pop_all_targets_above ((enum strata) (process_stratum - 1));

But then thought that maybe adding a routine that does exactly what we
need results in clearer code.  This is the result.

gdb/ChangeLog:
2015-11-19  Pedro Alves  <palves@redhat.com>

* remote.c (remote_unpush_target): Use
pop_all_targets_at_and_above instead of pop_all_targets_above.
* target.c (unpush_target_and_assert): New function, factored out
from ...
(pop_all_targets_above): ... here.
(pop_all_targets_at_and_above): New function.
* target.h (pop_all_targets_at_and_above): Declare.

9 years ago[AArch64] Reject invalid immediate operands to MSR PAN
Matthew Wahab [Thu, 19 Nov 2015 14:13:45 +0000 (14:13 +0000)]
[AArch64] Reject invalid immediate operands to MSR PAN

The support for accessing the ARMv8.1 PSTATE field PAN allows
instructions of the form MSR PAN, #<imm> with <imm> any unsigned 4-bit
integer. However, the architecture specification requires that the
immediate is either 0 or 1.

This patch implements the constraint on the immediate, generating an
error if the immediate operand is invalid, and adds tests for the
illegal forms.

opcodes/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64-opc.c (operand_general_constraint_met_p): Check validity
of MSR PAN immediate operand.

gas/testsuite/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* gas/aarch64/pan-illegal.d: New.
* gas/aarch64/pan-illegal.l: New.
* gas/aarch64/pan.s: Add tests for invalid immediates.

Change-Id: Ibb3056c975eb792104da138d94594224f56a993e

9 years agoChange argument opcode type from enum aarch64_opcodes to uint32_t
Yao Qi [Thu, 19 Nov 2015 13:58:29 +0000 (13:58 +0000)]
Change argument opcode type from enum aarch64_opcodes to uint32_t

The patch fixes the following errors in C++ build,

gdb/gdbserver/linux-aarch64-low.c: In function 'int emit_data_processing(uint32_t*, aarch64_opcodes, aarch64_register, aarch64_register, aarch64_operand)':
gdb/gdbserver/linux-aarch64-low.c:1071:52: error: invalid conversion from 'unsigned int' to 'aarch64_opcodes' [-fpermissive]
       return emit_data_processing_reg (buf, opcode | operand_opcode, rd,
                                                    ^
gdb/gdbserver:

2015-11-19  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-low.c (emit_data_processing_reg): Change opcode
type to uint32_t.

9 years agoDefine enum out of the scope of struct
Yao Qi [Thu, 19 Nov 2015 13:58:29 +0000 (13:58 +0000)]
Define enum out of the scope of struct

This patch moves the enum definition out of the scope of struct, and
fixes the following error.

gdb/gdbserver/linux-aarch64-low.c:681:18: error: 'OPERAND_REGISTER' was not declared in this scope
   operand.type = OPERAND_REGISTER;
                  ^
gdb/gdbserver:

2015-11-19  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-low.c (enum aarch64_operand_type): New.
(struct aarch64_operand): Move enum out.

9 years agoCast void * to user_fpsimd_state *.
Yao Qi [Thu, 19 Nov 2015 13:58:29 +0000 (13:58 +0000)]
Cast void * to user_fpsimd_state *.

This patch fixes the following build error in GDBserver,

gdb/gdbserver/linux-aarch64-low.c: In function 'void aarch64_fill_fpregset(regcache*, void*)':
gdb/gdbserver/linux-aarch64-low.c:134:38: error: invalid conversion from 'void*' to 'user_fpsimd_state*' [-fpermissive]
   struct user_fpsimd_state *regset = buf;
                                      ^
gdb/gdbserver/linux-aarch64-low.c: In function 'void aarch64_store_fpregset(regcache*, const void*)':
gdb/gdbserver/linux-aarch64-low.c:146:44: error: invalid conversion from 'const void*' to 'const user_fpsimd_state*' [-fpermissive]
   const struct user_fpsimd_state *regset = buf;
                                            ^
gdb/gdbserver:

2015-11-19  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-low.c (aarch64_fill_fpregset): Cast buf to
struct user_fpsimd_state *.
(aarch64_store_fpregset): Likewise.

9 years agoCast void * to struct user_pt_regs *
Yao Qi [Thu, 19 Nov 2015 13:58:29 +0000 (13:58 +0000)]
Cast void * to struct user_pt_regs *

This patch fixes the following GDBserver build errors in C++.

gdb/gdbserver/linux-aarch64-low.c:108:33: error: invalid conversion from 'void*' to 'user_pt_regs*' [-fpermissive]
   struct user_pt_regs *regset = buf;
                                 ^
gdb/gdbserver/linux-aarch64-low.c: In function 'void aarch64_store_gregset(regcache*, const void*)':
gdb/gdbserver/linux-aarch64-low.c:121:39: error: invalid conversion from 'const void*' to 'const user_pt_regs*' [-fpermissive]
   const struct user_pt_regs *regset = buf;

gdb/gdbserver:

2015-11-19  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-low.c (aarch64_fill_gregset): Cast buf to
struct user_pt_regs *.
(aarch64_store_gregset): Likewise.

9 years ago[S/390] Add null ptr check + port GOTOFF handling from 32 bit over to 64 bit
Andreas Krebbel [Thu, 19 Nov 2015 10:10:06 +0000 (11:10 +0100)]
[S/390] Add null ptr check + port GOTOFF handling from 32 bit over to 64 bit

bfd/ChangeLog:

2015-11-19  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

PR ld/19263
* elf32-s390.c (elf_s390_gc_sweep_hook): Add null ptr check.
* elf64-s390.c (elf_s390_check_relocs): Port the GOTOFF handling
over from the 32 bit code.
(elf_s390_relocate_section): Likewise.

9 years ago[ARM] Add ARMv8.2 architecture feature and command line option.
Matthew Wahab [Thu, 19 Nov 2015 09:24:14 +0000 (09:24 +0000)]
[ARM] Add ARMv8.2 architecture feature and command line option.

ARMv8.2 is an architectural extension of ARMv8. This patch adds an
architecture feature macro for ARMv8.2 to the binutils ARM target
with GAS command line option -march=armv8.2-a.

gas/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* config/tc-arm.c (arm_archs): Add "armv8.2-a".
* doc/c-arm.texi (-march): Add "armv8.2-a".

include/opcode/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* arm.h (ARM_EXT2_V8_2A): New.
(ARM_ARCH_V8_2A): New.

Change-Id: I9e0f50e3c6cea24e6b87b8b862fd4e1cdcc1052e

9 years ago[AArch64] Add ARMv8.2 command line option and feature flag.
Matthew Wahab [Thu, 19 Nov 2015 09:12:49 +0000 (09:12 +0000)]
[AArch64] Add ARMv8.2 command line option and feature flag.

ARMv8.2 is an architectural extension of ARMv8. This patch adds an
architecture feature macro for ARMv8.2 to the binutils AArch64 target
with GAS command line option -march=armv8.2-a.

gas/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* config/tc-aarch64.c (aarch64_archs): Add "armv8.2-a".
* doc/c-aarch64.texi (-march): Likewise.

include/opcode/
2015-11-19  Matthew Wahab  <matthew.wahab@arm.com>

* aarch64.h (AARCH64_FEATURE_V8_2): New.
(AARCH64_ARCH_V8_2): New.

Change-Id: I129232ab00234a07d18ce4b619607344acb3cbaf

9 years agooutput_big_leb128 comment
Alan Modra [Thu, 19 Nov 2015 06:31:59 +0000 (17:01 +1030)]
output_big_leb128 comment

* read.c (output_big_leb128): Describe "sign" parameter.

9 years ago[GOLD] PowerPC TOC16 and GOT16 relocs are relative
Alan Modra [Thu, 19 Nov 2015 06:29:36 +0000 (16:59 +1030)]
[GOLD] PowerPC TOC16 and GOT16 relocs are relative

* powerpc.cc (Target_powerpc::Scan::get_reference_flags): Correct
GOT16 and TOC16 relocs to RELATIVE_REF.

9 years agoRecent powerpc testcase fails
Alan Modra [Thu, 19 Nov 2015 06:27:49 +0000 (16:57 +1030)]
Recent powerpc testcase fails

On powerpcle-cygwin a couple of tests fail due to alignment.

* gas/ppc/altivec3.d: Allow for padding at end of section.
* gas/testsuite/gas/ppc/power9.d: Likewise.

9 years agoUse default sub-segment align for non-ELF powerpc
Alan Modra [Thu, 19 Nov 2015 06:23:43 +0000 (16:53 +1030)]
Use default sub-segment align for non-ELF powerpc

Defining this to zero for COFF and PE meant that code sections were
padded with zeros.  The fact that no one has complained since 2006
says these targets are dead, I guess.

* config/tc-ppc.h (SUB_SEGMENT_ALIGN): Define only for ELF.

9 years agoAccount for .tbss alignment when adjusting start of relro
Alan Modra [Thu, 19 Nov 2015 04:30:13 +0000 (15:00 +1030)]
Account for .tbss alignment when adjusting start of relro

Another option might be to not bump "dot" for .tbss alignment in the
main section sizing loop, but that could leak some of the following
section into the TLS segment.  Leakage shouldn't matter since it will
be to bytes past the end of .tdata, but for now this is a safer
option.

PR ld/19264
* ldlang.c (lang_size_sections): Don't ignore .tbss when
adjusting start of relro region.

9 years agoAutomatic date update in version.in
GDB Administrator [Thu, 19 Nov 2015 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agoConstify value_string
Simon Marchi [Wed, 18 Nov 2015 16:20:22 +0000 (11:20 -0500)]
Constify value_string

If we constify value_cstring, we might as well constify this one.

gdb/ChangeLog:

* valops.c (value_string): Constify 'ptr' parameter.
* value.h (value_string): Constify 'ptr' parameter.

9 years ago[C++] Add casts to obstack_base calls
Simon Marchi [Tue, 17 Nov 2015 13:07:24 +0000 (13:07 +0000)]
[C++] Add casts to obstack_base calls

The recent libiberty import of upstream obstack.h (314dee8ea9be) makes
obstack_base return a 'void *', with the consequence that a few places
in gdb need a (char *) cast.

gdb/ChangeLog:
2015-11-18  Simon Marchi  <simon.marchi@ericsson.com>
    Pedro Alves  <palves@redhat.com>

* break-catch-sig.c (signal_catchpoint_print_one): Add cast.
* c-exp.y (parse_string_or_char, yylex): Add casts.
* c-lang.c (evaluate_subexp_c): Add casts.
* d-exp.y (parse_string_or_char, yylex): Add casts.
* go-exp.y (parse_string_or_char, build_packaged_name): Add casts.
* p-valprint.c (pascal_object_print_value_fields): Add casts.
* valprint.c (generic_emit_char, generic_printstr): Add casts.

9 years agoConstify value_cstring
Simon Marchi [Wed, 18 Nov 2015 15:51:17 +0000 (15:51 +0000)]
Constify value_cstring

gdb/ChangeLog:
2015-11-18  Simon Marchi  <simon.marchi@ericsson.com>

* valops.c (value_cstring): Constify 'ptr' parameter.
* value.h (value_cstring): Constify 'ptr' parameter.

9 years agomach-o: decode and display arm64 compact unwind entries.
Tristan Gingold [Wed, 18 Nov 2015 15:45:03 +0000 (16:45 +0100)]
mach-o: decode and display arm64 compact unwind entries.

9 years agomach-o: use a per-target reloc canonicalize function.
Tristan Gingold [Wed, 18 Nov 2015 14:43:27 +0000 (15:43 +0100)]
mach-o: use a per-target reloc canonicalize function.

bfd/
* mach-o.h (bfd_mach_o_swap_in_non_scattered_reloc)
(bfd_mach_o_canonicalize_non_scattered_reloc)
(bfd_mach_o_pre_canonicalize_one_reloc): Declare.
(bfd_mach_o_backend_data): Rename field
_bfd_mach_o_swap_reloc_in to _bfd_mach_o_canonicalize_one_reloc.
* mach-o.c (bfd_mach_o_swap_in_non_scattered_reloc): Now public.
(bfd_mach_o_canonicalize_non_scattered_reloc): Renames from
bfd_mach_o_canonicalize_one_reloc.
(bfd_mach_o_pre_canonicalize_one_reloc): New function.
(bfd_mach_o_canonicalize_relocs): Adjust.
(bfd_mach_o_canonicalize_relocs): Rename define from
bfd_mach_o_swap_reloc_in.
* mach-o-target.c (TARGET_NAME_BACKEND): Use
bfd_mach_o_canonicalize_one_reloc instead of
bfd_mach_o_swap_reloc_in.
* mach-o-i386.c (bfd_mach_o_i386_canonicalize_one_reloc): Renames
from bfd_mach_o_i386_swap_reloc_in and adjust.
(bfd_mach_o_canonicalize_one_reloc): Renames from
bfd_mach_o_i386_canonicalize_one_reloc.
* mach-o-x86_64.c (bfd_mach_o_x86_64_canonicalize_one_reloc): Renames
from bfd_mach_o_x86_64_swap_reloc_in and adjust.
(bfd_mach_o_canonicalize_one_reloc): Renames from
bfd_mach_o_x86_64_canonicalize_one_reloc.

9 years ago[gdbserver/ipa] Fix build dependencies
Pedro Alves [Wed, 18 Nov 2015 13:02:21 +0000 (13:02 +0000)]
[gdbserver/ipa] Fix build dependencies

Commit 91ee7171d088 (MinGW and attribute format(printf/gnu_printf))
made common/common-defs.h depend on gnulib's substitute headers.
Turns out that that broke the gdbserver/ipa build (as the buildbots
discovered) because nothing is making sure that gnulib is built before
the ipa is.

gdb/gdbserver/ChangeLog:
2015-11-18  Pedro Alves  <palves@redhat.com>

* Makefile.in (all_object_files): Add $IPA_OBJS.

9 years agoFix out of boundary access in pass_in_v
Yao Qi [Wed, 18 Nov 2015 11:49:32 +0000 (11:49 +0000)]
Fix out of boundary access in pass_in_v

Hi,
I build GDB with -fsanitize=address, and run testsuite.  In
gdb.base/callfuncs.exp, I see the following error,

p t_float_values(0.0,0.0)
=================================================================
==8088==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000cb650 at pc 0x6e195c bp 0x7fff164f9770 sp 0x7fff164f9768
READ of size 16 at 0x6020000cb650 thread T0^
    #0 0x6e195b in regcache_raw_write /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:912
    #1 0x6e1e52 in regcache_cooked_write /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:945
    #2 0x466d69 in pass_in_v /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1101
    #3 0x467512 in pass_in_v_or_stack /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1196
    #4 0x467d7d in aarch64_push_dummy_call /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1335

The code in pass_in_v read contents from V registers (128 bit), but the
data passed through V registers can be less than 128 bit.  In this case,
float is passed.  So writing V registers contents into contents buff
will cause overflow.  In this patch, we add an array reg[V_REGISTER_SIZE],
which is to hold the contents from V registers, and then copy useful
bits to buf.

gdb:

2015-11-18  Yao Qi  <yao.qi@linaro.org>

* aarch64-tdep.c (pass_in_v): Add argument len.  Add local array
reg.  Callers updated.

9 years agoPrevent looping in archives
Alan Modra [Wed, 18 Nov 2015 11:42:23 +0000 (22:12 +1030)]
Prevent looping in archives

PR 19256
* archive.c (bfd_generic_openr_next_archived_file): Don't allow
backward file movement via "negative" sizes.
* coff-alpha.c (alpha_ecoff_openr_next_archived_file): Likewise.

9 years agomach-o cleanup: remove useless calls to bfd_seek.
Tristan Gingold [Wed, 18 Nov 2015 09:33:11 +0000 (10:33 +0100)]
mach-o cleanup: remove useless calls to bfd_seek.

Also support new commands.

bfd/
* mach-o.h (struct mach_o_data_struct): Add hdr_offset field.
(bfd_mach_o_fat_archive_p): Renames prototype.
(bfd_mach_o_fat_openr_next_archived_file): Renames.
(bfd_mach_o_header_p): Add argument.
* mach-o.c (bfd_mach_o_read_header): Add hdr_off argument and
use it.
(bfd_mach_o_read_section_32, bfd_mach_o_read_section_64)
(bfd_mach_o_read_section): Remove offset argument.
(bfd_mach_o_read_dylinker): Remove bfd_seek call.
(bfd_mach_o_read_dylib, bfd_mach_o_read_prebound_dylib)
(bfd_mach_o_read_prebind_cksum, bfd_mach_o_read_twolevel_hints)
(bfd_mach_o_read_fvmlib, bfd_mach_o_read_dysymtab)
(bfd_mach_o_read_symtab, bfd_mach_o_read_uuid)
(bfd_mach_o_read_linkedit, bfd_mach_o_read_str)
(bfd_mach_o_read_dyld_info, bfd_mach_o_read_version_min)
(bfd_mach_o_read_encryption_info): Likewise.
(bfd_mach_o_read_encryption_info_64): New function.
(bfd_mach_o_read_main, bfd_mach_o_read_source_version)
(bfd_mach_o_read_segment): Remove call to bfd_seek.
(bfd_mach_o_read_command): Use hdr_offset in bfd_seek.
Handle BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT,
BFD_MACH_O_LC_ENCRYPTION_INFO_64, BFD_MACH_O_LC_VERSION_MIN_WATCHOS.
(bfd_mach_o_header_p): Add hdr_off argument.
(bfd_mach_o_gen_object_p, bfd_mach_o_gen_core_p): Adjust calls.
(bfd_mach_o_fat_archive_p): Renames.
(bfd_mach_o_fat_openr_next_archived_file): Renames.
(bfd_mach_o_close_and_cleanup): Remove useless code.
(bfd_mach_o_close_and_cleanup): Define.
* mach-o-x86-64.c (bfd_mach_o_x86_64_object_p)
(bfd_mach_o_x86_64_core_p): Adjust calls.
* mach-o-target.c: Move defines for archive from mach-o.c.
Remove check on TARGET_ARCHIVE.
* mach-o-i386.c (bfd_mach_o_i386_object_p)
(bfd_mach_o_i386_core_p): Adjust calls.

9 years agosim: mn10300/v850: drop unused WITH_CORE define
Mike Frysinger [Tue, 17 Nov 2015 08:24:35 +0000 (00:24 -0800)]
sim: mn10300/v850: drop unused WITH_CORE define

This was dropped from the sim core in 1997, so no point in having these
sim ports continue to define it.

9 years agosim: always enable modulo memory
Mike Frysinger [Tue, 17 Nov 2015 08:19:56 +0000 (00:19 -0800)]
sim: always enable modulo memory

Having this be a config option doesn't make sense: the code size is
pretty much the same (as all the logic is still active), and if it's
disabled, the sim throws an error if you try to use it.  That means
we can't break sims that weren't using it before by enabling it all
the time.

9 years agoAutomatic date update in version.in
GDB Administrator [Wed, 18 Nov 2015 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years ago[sim/ppc] Fix printf_filtered reference
Pedro Alves [Tue, 17 Nov 2015 19:21:21 +0000 (19:21 +0000)]
[sim/ppc] Fix printf_filtered reference

Building a gdb that includes the PPC sim in C++ mode fails to link with:

(...)s.o compile-object-load.o compile-object-run.o compile-loc2c.o compile-c-support.o inflow.o    init.o \
          ../sim/ppc/libsim.a ../readline/libreadline.a ../opcodes/libopcodes.a ../bfd/libbfd.a -lz  ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a    -ldl -ldl -lncurses -lm -ldl  -lguile-2.0 -lgc  -lpthread -ldl -lutil -lm -lpython2.7 -Xlinker -export-dynamic -lexpat -llzma -lbabeltrace -lbabeltrace-ctf  ../libiberty/libiberty.a  build-gnulib/import/libgnu.a
../sim/ppc/libsim.a(sim_calls.o): In function `sim_open':
/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:73: undefined reference to `printf_filtered'
/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:73: undefined reference to `printf_filtered'
../sim/ppc/libsim.a(sim_calls.o): In function `sim_close':
/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:93: undefined reference to `printf_filtered'
/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:93: undefined reference to `printf_filtered'
../sim/ppc/libsim.a(sim_calls.o): In function `sim_load':
/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:102: undefined reference to `printf_filtered'
../sim/ppc/libsim.a(sim_calls.o):/home/pedro/gdb/mygit/cxx-convertion/src/sim/ppc/sim_calls.c:102: more undefined references to `printf_filtered' follow
collect2: error: ld returned 1 exit status

The undefined references come from TRACE macro calls, which expand to
calls to printf_filtered.

But note that the sim's 'printf_filtered' is actually a #define to
'sim_io_printf_filtered', in sim_callbacks.h :

 #define printf_filtered sim_io_printf_filtered

AFAICS, this is not meant to call gdb's printf_filtered function.  The
ChangeLog entry that added the printf_filtered macro reads:

 Tue Jul 30 21:12:24 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

 * sim_callbacks.h (sim_io_printf_filtered): Replace
 printf_filtered with a local simulator specific version.  Add
 #define printf_filtered to simplify updating of existing code.

That is, just another incomplete/partial transition.  Maybe prior to
1996 this was really meant to call gdb's printf_filtered version.

The reference to printf_filtered appears because sim_calls.c, the
compilation unit that fails to link, has this at the top:

 #undef printf_filtered /* blow away the mapping */

presumably so that this further below:

 void
 sim_io_printf_filtered(const char *fmt,
...)
 {
   (...)
   callbacks->printf_filtered(callbacks, "%s", message);
 }

works.  So those TRACE macros instances in sim_calls.c just happen to
work because gdb is linked in, which satisfies the 'printf_filtered'
reference, when GDB is built in C mode.  When built in C++ mode, the
problem is exposed, as GDB's printf_filtered is mangled.

The fix here is to make the TRACE macro call sim_io_printf_filtered
directly.

(Standalone "run" doesn't fail to link simply because the offending
routines are not part of its link.)

sim/ppc/ChangeLog
2015-11-17  Pedro Alves  <palves@redhat.com>

* debug.h (TRACE, ITRACE, DTRACE, DITRACE, PTRACE): Call
sim_io_printf_filtered instead of printf_filtered.

9 years agoFix gdb.threads/multiple-step-overs.exp fails on arm
Yao Qi [Tue, 17 Nov 2015 15:40:29 +0000 (15:40 +0000)]
Fix gdb.threads/multiple-step-overs.exp fails on arm

Hi,
Some tests in gdb.threads/multiple-step-overs.exp fail on arm target
when the displaced stepping on, but they pass when displaced stepping
is off.

 FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: step: step
 FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: next: next
 FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: continue: continue
 FAIL: gdb.threads/multiple-step-overs.exp: displaced=on: signal thr1: continue to sigusr1_handler

when displaced stepping is on,

Sending packet: $vCont;c#a8...infrun: infrun_async(1)^M <--- [1]
infrun: prepare_to_wait^M
infrun: target_wait (-1.0.0, status) =^M
infrun:   -1.0.0 [Thread 0],^M
infrun:   status->kind = ignore^M
infrun: TARGET_WAITKIND_IGNORE^M
infrun: prepare_to_wait^M
Packet received: T05swbreak:;0b:f8faffbe;0d:409ee7b6;0f:d0880000;thread:p635.636;core:0;^M
infrun: target_wait (-1.0.0, status) =^M
infrun:   1589.1590.0 [Thread 1590],^M
infrun:   status->kind = stopped, signal = GDB_SIGNAL_TRAP^M
infrun: TARGET_WAITKIND_STOPPED^M
infrun: stop_pc = 0x88d0^M
infrun: context switch^M
infrun: Switching context from Thread 1591 to Thread 1590^

GDB resumes the whole process (all threads) rather than the specific
thread for which GDB wants to step over the breakpoint (as shown in [1]).
That is wrong because we resume a single thread and leave others stopped
when doing a normal step over where we temporarily remove the breakpoint,
single-step, reinsert the breakpoint, is that if we let other threads run
in the period while the breakpoint is removed, then these other threads
could miss the breakpoint.  Since with displaced stepping, we don't ever
remove the breakpoint, it should be fine to let other threads run.  However,
there's another reason that we should not let other threads run: that is
the case where some of those threads are also stopped for a breakpoint that
itself needs to be stepped over.  If we just let those threads run, then
they immediately re-trap their breakpoint again.

when displaced stepping is off, GDB behaves correctly, only resumes
the specific thread (as shown in [2]).

Sending packet: $vCont;c:p611.613#b2...infrun: infrun_async(1)^M <-- [2]
infrun: prepare_to_wait^M
infrun: target_wait (-1.0.0, status) =^M
infrun:   -1.0.0 [Thread 0],^M
infrun:   status->kind = ignore^M
infrun: TARGET_WAITKIND_IGNORE^M
infrun: prepare_to_wait^M
Packet received: T05swbreak:;0b:f8faffbe;0d:409e67b6;0f:48880000;thread:p611.613;core:1;^M
infrun: target_wait (-1.0.0, status) =^M
infrun:   1553.1555.0 [Thread 1555],^M
infrun:   status->kind = stopped, signal = GDB_SIGNAL_TRAP^M
infrun: TARGET_WAITKIND_STOPPED^M
infrun: clear_step_over_info^M
infrun: stop_pc = 0x8848

The current logic in GDB on deciding the set of threads to resume is:

  /* Decide the set of threads to ask the target to resume.  */
  if ((step || thread_has_single_step_breakpoints_set (tp))
      && tp->control.trap_expected)
    {
      /* We're allowing a thread to run past a breakpoint it has
 hit, by single-stepping the thread with the breakpoint
 removed.  In which case, we need to single-step only this
 thread, and keep others stopped, as they can miss this
 breakpoint if allowed to run.  */
      resume_ptid = inferior_ptid;
    }
  else
    resume_ptid = internal_resume_ptid (user_step);

it doesn't handle the case correctly that GDB continue (instead of
single step) the thread for displaced stepping.

I also update the comment below to reflect the code.  I remove the
"with the breakpoint removed" comment, because GDB doesn't remove
breakpoints in displaced stepping, so we don't have to worry that
other threads may miss the breakpoint.

Patch is regression tested on both x86_64-linux and arm-linux.

gdb:

2015-11-17  Yao Qi  <yao.qi@linaro.org>

* infrun.c (resume): Check control.trap_expected only
when deciding the set of threads to resume.

9 years agoIntroduce null_block_symbol
Pedro Alves [Tue, 17 Nov 2015 13:12:23 +0000 (13:12 +0000)]
Introduce null_block_symbol

... in the spirit of null_ptid, null_frame_id, etc.

Fixes two instances of:

  /root/binutils-gdb/gdb/cp-namespace.c: In function 'block_symbol cp_lookup_nested_symbol(type*, const char*, const block*, domain_enum)':
  /root/binutils-gdb/gdb/cp-namespace.c:1010: warning: jump to case label
  /root/binutils-gdb/gdb/cp-namespace.c:1008: error:   crosses initialization of 'block_symbol <anonymous>'

Compiler info:

  Reading specs from /usr/lib/gcc-lib/amd64-unknown-openbsd5.8/4.2.1/specs
  Target: amd64-unknown-openbsd5.8
  Configured with: OpenBSD/amd64 system compiler
  Thread model: posix
  gcc version 4.2.1 20070719

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* cp-namespace.c (cp_lookup_bare_symbol)
(cp_search_static_and_baseclasses, cp_lookup_symbol_via_imports)
(cp_lookup_symbol_via_all_imports, cp_lookup_nested_symbol_1)
(cp_lookup_nested_symbol): Use null_block_symbol.
* d-namespace.c (d_lookup_symbol, d_lookup_nested_symbol)
(d_lookup_symbol_imports, d_lookup_symbol_module): Use
null_block_symbol.
* symtab.c (null_block_symbol): New global.
* symtab.h (null_block_symbol): Declare.

9 years ago[C++] Always use setjmp/longjmp for exceptions
Pedro Alves [Tue, 17 Nov 2015 15:17:46 +0000 (15:17 +0000)]
[C++] Always use setjmp/longjmp for exceptions

We currently throw exceptions from signal handlers (e.g., for
Quit/ctrl-c).  But throwing C++ exceptions from signal handlers is
undefined.  (That doesn't restore signal masks, like siglongjmp does,
and, because asynchronous signals can arrive at any instruction, we'd
have to build _everything_ with -fasync-unwind-tables to make it
reliable.)  It happens to work on x86_64 GNU/Linux at least, but it's
likely broken on other ports.

Until we stop throwing from signal handlers, use setjmp/longjmp based
exceptions in C++ mode as well.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* common/common-exceptions.h (GDB_XCPT_SJMP, GDB_XCPT_TRY)
(GDB_XCPT_RAW_TRY, GDB_XCPT): Define.
Replace __cplusplus checks with GDB_XCPT checks throughout.
* common/common-exceptions.c: Replace __cplusplus checks with
GDB_XCPT checks throughout.

9 years agoMinGW and attribute format(printf/gnu_printf)
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
MinGW and attribute format(printf/gnu_printf)

Cross building gdbserver for --host=x86_64-w64-mingw32 with gcc 4.8.4
20141219 (Fedora MinGW 4.8.4-1.fc20), I get:

  src/gdb/gdbserver/tracepoint.c: In function 'cmd_qtdp':
  src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=]
 trace_debug ("Defined %stracepoint %d at 0x%s, "
 ^
  src/gdb/gdbserver/tracepoint.c:2577:7: error: unknown conversion type character 'l' in format [-Werror=format=]
  src/gdb/gdbserver/tracepoint.c:2577:7: error: too many arguments for format [-Werror=format-extra-args]
  src/gdb/gdbserver/tracepoint.c: In function 'stop_tracing':
  src/gdb/gdbserver/tracepoint.c:3447:7: error: unknown conversion type character 'l' in format [-Werror=format=]
 trace_debug ("Stopping the trace because "
 ^
  src/gdb/gdbserver/tracepoint.c:3447:7: error: too many arguments for format [-Werror=format-extra-args]
  src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_tracepoint':
  src/gdb/gdbserver/tracepoint.c:4651:3: error: unknown conversion type character 'l' in format [-Werror=format=]
     trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64,
     ^
  src/gdb/gdbserver/tracepoint.c:4651:3: error: too many arguments for format [-Werror=format-extra-args]
  src/gdb/gdbserver/tracepoint.c: In function 'collect_data_at_step':
  src/gdb/gdbserver/tracepoint.c:4687:3: error: unknown conversion type character 'l' in format [-Werror=format=]
     trace_debug ("Making new step traceframe for "
     ^

trace_debug is a macro that calls:

  static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);

The calls that fail checking use PRIu64, etc., like:

      trace_debug ("Defined %stracepoint %d at 0x%s, "
   "enabled %d step %" PRIu64 " pass %" PRIu64,
   tpoint->type == fast_tracepoint ? "fast "
   : tpoint->type == static_tracepoint ? "static " : "",
   tpoint->number, paddress (tpoint->address), tpoint->enabled,
   tpoint->step_count, tpoint->pass_count);

gnulib's stdio/printf module replacements may make %llu, etc. work on
mingw, instead of the MS-specific %I64u, and thus may make PRIu64
expand to %llu.  However, gcc isn't aware of that, because libiberty's
ansidecl.h defines ATTRIBUTE_PRINTF as using attribute format(printf).
But, with that format, gcc checks for MS-style format strings (%I64u).
In order to have gcc expect gnu/standard formats, we need to use
gnu_printf format instead.  Which version to use (printf/gnu_printf)
depends on msvcrt and mingw version, and so gnulib has a
configure-time check, and defines _GL_ATTRIBUTE_FORMAT_PRINTF
accordingly.

Since _GL_ATTRIBUTE_FORMAT_PRINTF is compatible with ATTRIBUTE_PRINTF,
the fix is simply to make use of the former.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* common/common-defs.h (ATTRIBUTE_PRINTF): Redefine in terms of
_GL_ATTRIBUTE_FORMAT_PRINTF after including ansidecl.h.

9 years ago[C++] Define __STDC_CONSTANT_MACROS / __STDC_LIMIT_MACROS for stdint.h
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++] Define __STDC_CONSTANT_MACROS / __STDC_LIMIT_MACROS for stdint.h

With some toolchains, building in C++ mode stumbles on many instances
of:

 In file included from ../../src/gdb/../include/splay-tree.h:43:0,
                  from ../../src/gdb/dcache.c:26:
 build-gnulib/import/inttypes.h:61:3: error: #error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
  # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
    ^
 make: *** [dcache.o] Error 1

That's:

 #if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
 # error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
 #endif

I see it when cross building for --host=x86_64-w64-mingw32 using
Fedora 20's g++ (gcc version 4.8.4 20141219 (Fedora MinGW
4.8.4-1.fc20)), Simon reports seeing this on several cross compilers
too.

The issue is that on some hosts that predate C++11, when using C++ one
must define __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS to make visible
the definitions of INTMAX_C / INTMAX_MAX etc.

This was a C99 requirement that later C++11 -- the first to define
stdint.h -- removed, and then C11 removed it as well.

https://www.gnu.org/software/gnulib/manual/html_node/stdint_002eh.html
says that gnulib's stdint.h fixes this, but because we run gnulib's
configure tests with a C compiler, gnulib determines that mingw's
stdint.h is C99-compliant, and doesn't actually replace it.  Actually,
even though configuring gnulib with a C++ compiler does result in
gnulib replacing stdint.h, the resulting replacement is broken for
mingw, because it defines uintptr_t incorrectly.  I sent a gnulib
patch upstream to fix that, here:

  https://lists.gnu.org/archive/html/bug-gnulib/2015-11/msg00004.html

but then even with that, gnulib still stumbles on other
configured-with-C++-compiler problems.

So for now, until gnulib + C++ is fixed upstream and then gdb's copy
is updated, which may take a while, I think it's best to keep
configuring gnulib in C, and define
__STDC_LIMIT_MACROS/__STDC_CONSTANT_MACROS ourselves, just like C99
intended.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* common/common-defs.h (__STDC_CONSTANT_MACROS)
(__STDC_LIMIT_MACROS): Define before including stdint.h.

9 years ago[C++/mingw] Simplify first chance exception handling
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] Simplify first chance exception handling

Building in C++ errors out with:

../../src/gdb/windows-nat.c: In function 'int get_windows_debug_event(target_ops*, int, target_waitstatus*)':
../../src/gdb/windows-nat.c:1503:13: warning: invalid conversion from 'int' to 'gdb_signal' [-fpermissive]
    last_sig = 1;
             ^
../../src/gdb/windows-nat.c:1533:43: warning: invalid conversion from 'int' to 'gdb_signal' [-fpermissive]
  windows_resume (ops, minus_one_ptid, 0, 1);
                                           ^
../../src/gdb/windows-nat.c:1228:1: warning:   initializing argument 4 of 'void windows_resume(target_ops*, ptid_t, int, gdb_signal)' [-fpermissive]
 windows_resume (struct target_ops *ops,
 ^

Looking at the code, I can't figure out why we treat first chance
exceptions any different here.

AFAICS, we set last_sig to 1, and then call windows_resume passing
signal==1, so the DBG_EXCEPTION_NOT_HANDLED code path in win32_resume
is taken:

~~~
  if (sig != GDB_SIGNAL_0)
    {
      if (current_event.dwDebugEventCode != EXCEPTION_DEBUG_EVENT)
{
  OUTMSG (("Cannot continue with signal %d here.\n", sig));
}
      else if (sig == last_sig)
continue_status = DBG_EXCEPTION_NOT_HANDLED;
      else
OUTMSG (("Can only continue with recieved signal %d.\n", last_sig));
    }
~~~

Fix this by removing this special casing.  gdbserver also goes
straight to continuing with DBG_EXCEPTION_NOT_HANDLED, AFAICS.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* windows-nat.c (handle_exception): Return 0 for first chance
exceptions.
(get_windows_debug_event): Adjust.

9 years ago[C++/mingw] gdbserver: gdb/host signal mixup
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] gdbserver: gdb/host signal mixup

Building in C++ caught a buglet here:

../../../src/gdb/gdbserver/win32-low.c: In function 'void win32_resume(thread_resume*, size_t)':
../../../src/gdb/gdbserver/win32-low.c:929:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive]
       sig = resume_info[0].sig;
           ^
../../../src/gdb/gdbserver/win32-low.c:934:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive]
       sig = 0;
           ^

Signals in the "struct thread_resume" structure are host signals, not
gdb signals.  The current code happens to work because the only
signals that the Windows port supports have the same number as the gdb
equivalent (see handle_exception for the win32 exception -> gdb signal
mapping).

gdb/gdbserver/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* win32-low.c (win32_resume): Use gdb_signal_from_host,
GDB_SIGNAL_0 and gdb_signal_to_string.

9 years ago[C++/mingw] Fix windows-nat.c::xlate
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] Fix windows-nat.c::xlate

Fixes:

../../src/gdb/windows-nat.c:287:11: error: invalid conversion from 'int' to 'gdb_signal' [-fpermissive]
   {-1, -1}};
           ^

The signal number here doesn't really matter.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* windows-nat.c (xslate): Use GDB_SIGNAL_UNKNOWN instead of -1 as
signal number for terminator.

9 years ago[C++/mingw] handle_output_debug_string
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] handle_output_debug_string

Fixes:

 ../../../src/gdb/gdbserver/win32-low.c: In function 'int win32_kill(int)':
 ../../../src/gdb/gdbserver/win32-low.c:823:46: error: invalid conversion from 'int' to 'target_waitkind' [-fpermissive]
     struct target_waitstatus our_status = { 0 };
       ^

handle_output_debug_string doesn't use the parameter for anything
(it's an output parameter in the gdb version), so just remove it.

gdb/gdbserver/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* win32-low.c (handle_output_debug_string): Remove parameter.
(win32_kill): Remove our_status local and adjust call to
handle_output_debug_string.
(get_child_debug_event): Adjust call to
handle_output_debug_string.

9 years ago[C++/mingw] ser-tcp.c casts
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] ser-tcp.c casts

Fixes a few errors like these:

../../src/gdb/ser-tcp.c: In function 'int net_open(serial*, const char*)':
../../src/gdb/ser-tcp.c:286:73: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
     res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len);
                                                                         ^

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* ser-tcp.c (net_open) : Cast getsockopt argument to char *
instead of void *.  Update comment.
(net_read_prim): Cast recv argument to char * instead of void *.
(net_write_prim): Cast send argument to char *.  Add comment.

9 years ago[C++/mingw] gdbserver casts
Pedro Alves [Tue, 17 Nov 2015 15:17:45 +0000 (15:17 +0000)]
[C++/mingw] gdbserver casts

A set of obviously-needed C++ casts.

gdb/gdbserver/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* win32-i386-low.c (update_debug_registers_callback)
(win32_get_current_dr): Add cast.
* win32-low.c (thread_rec, delete_thread_info)
(continue_one_thread): Add casts.
(strwinerror): Cast FormatMessage argument to LPTSTR instead of
LPVOID.
(win32_create_inferior, suspend_one_thread): Add casts.

9 years ago[C++/mingw] windows-nat.c casts
Pedro Alves [Tue, 17 Nov 2015 15:17:44 +0000 (15:17 +0000)]
[C++/mingw] windows-nat.c casts

Fixes a set of errors like:

../../src/gdb/windows-nat.c: In function 'void _initialize_loadable()':
../../src/gdb/windows-nat.c:2778:30: error: invalid conversion from 'void*' to 'BOOL (*)(DWORD) {aka int (*)(long unsigned int)}' [-fpermissive]
       DebugActiveProcessStop = (void *)
                              ^

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* windows-nat.c (AdjustTokenPrivileges_ftype)
(DebugActiveProcessStop_ftype, DebugBreakProcess_ftype)
(DebugSetProcessKillOnExit_ftype, EnumProcessModules_ftype)
(GetCurrentConsoleFont_ftype, GetModuleInformation_ftype)
(LookupPrivilegeValueA_ftype, OpenProcessToken_ftype)
(GetConsoleFontSize_ftype): New typedefs.
(AdjustTokenPrivileges, DebugActiveProcessStop)
(DebugBreakProcess, DebugSetProcessKillOnExit, EnumProcessModules)
(GetConsoleFontSize, GetCurrentConsoleFont, GetModuleInformation)
(LookupPrivilegeValueA, OpenProcessToken, GetConsoleFontSize):
Adjust.
(GetModuleFileNameEx_ftype): New typedef.
(GetModuleFileNameEx): Use it.
(_initialize_loadable): Define GPA macro and use it.

9 years ago[C++/mingw] gdb-dlfcn.c casts
Pedro Alves [Tue, 17 Nov 2015 15:17:44 +0000 (15:17 +0000)]
[C++/mingw] gdb-dlfcn.c casts

Fixes:

../../src/gdb/gdb-dlfcn.c: In function 'void* gdb_dlsym(void*, const char*)':
../../src/gdb/gdb-dlfcn.c:105:49: error: invalid conversion from 'void*' to 'HMODULE {aka HINSTANCE__*}' [-fpermissive]
   return (void *) GetProcAddress (handle, symbol);
                                                 ^

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* gdb-dlfcn.c (gdb_dlsym, gdb_dlclose) [__MINGW32__]: Add casts to
HMODULE.

9 years ago[C++/mingw] Misc alloca casts
Pedro Alves [Tue, 17 Nov 2015 15:17:44 +0000 (15:17 +0000)]
[C++/mingw] Misc alloca casts

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* exec.c (exec_file_attach, symfile_bfd_open) [__GO32__ || _WIN32
|| __CYGWIN__]: Add casts.
* utils.c (gdb_filename_fnmatch): Add cast.
* windows-nat.c (windows_create_inferior): Add cast.

9 years ago[C++/mingw] ser-mingw.c casts
Pedro Alves [Tue, 17 Nov 2015 15:17:44 +0000 (15:17 +0000)]
[C++/mingw] ser-mingw.c casts

2015-11-17  Pedro Alves  <palves@redhat.com>

* ser-mingw.c (CancelIo_ftype): New typedef.
(CancelIo): Use CancelIo_ftype.
(ser_windows_close, ser_windows_wait_handle)
(ser_windows_read_prim, stop_select_thread)
(console_select_thread, pipe_select_thread, file_select_thread)
(ser_console_wait_handle, ser_console_done_wait_handle)
(ser_console_close, cleanup_pipe_state, pipe_windows_close)
(pipe_windows_write, pipe_wait_handle, pipe_done_wait_handle)
(net_windows_socket_check_pending, net_windows_select_thread)
(net_windows_wait_handle, net_windows_done_wait_handle)
(net_windows_close): Add casts.
(_initialize_ser_windows): Cast to CancelIo_ftype* instead of
void*.

9 years agoMach-O: add new defines and struct for darwin 14.5
Tristan Gingold [Tue, 17 Nov 2015 13:56:04 +0000 (14:56 +0100)]
Mach-O: add new defines and struct for darwin 14.5

include/mach-o/
* arm64.h: New file.
* unwind.h: Add arm64 encodings.
* loader.h (bfd_mach_o_cpu_subtype): Add arm64 literals.
(BFD_MACH_O_LC_ENCRYPTION_INFO_64, BFD_MACH_O_LC_LINKER_OPTIONS)
(BFD_MACH_O_LC_LINKER_OPTIMIZATION_HINT)
(BFD_MACH_O_LC_VERSION_MIN_WATCHOS): Define.
* external.h (mach_o_encryption_info_64_command_external):
(mach_o_linker_option_command_external)
(mach_o_dyld_cache_header_external)
(mach_o_dyld_cache_mapping_info_external)
(mach_o_dyld_cache_image_info_external): New types.

9 years agoConvert c_string_type to an enum flags type
Simon Marchi [Tue, 17 Nov 2015 13:31:29 +0000 (13:31 +0000)]
Convert c_string_type to an enum flags type

c_string_type contains values meant to be OR'ed together (even though
some bits are mutually exclusive), so it makes sense to make it an
enum flags type.

gdb/ChangeLog:
2015-11-17  Simon Marchi  <simon.marchi@ericsson.com>

* c-exp.y (exp): Adjust, change enum c_string_type to
c_string_type.
(parse_string_or_char): Likewise.
* c-lang.c (charset_for_string_type): Likewise.
(classify_type): Likewise.
(c_printchar): Likewise.
(c_printstr): Likewise.
(evaluate_subexp_c): Likewise.  And change cast to enum
c_string_type_values.
* c-lang.h: Include "common/enum_flags.h".
(enum c_string_type): Rename to...
(enum c_string_type_values): ...this.
(c_string_type): Define new enum flags type.

9 years agoType-safe wrapper for enum flags
Pedro Alves [Tue, 17 Nov 2015 13:31:29 +0000 (13:31 +0000)]
Type-safe wrapper for enum flags

This patch fixes C++ build errors like this:

/home/pedro/gdb/mygit/cxx-convertion/src/gdb/linux-tdep.c:1126:35: error: invalid conversion from ‘int’ to ‘filterflags’ [-fpermissive]
       | COREFILTER_HUGETLB_PRIVATE);
                                   ^

This is a case of enums used as bit flags.  Unlike "regular" enums,
these values are supposed to be or'ed together.  However, in C++, the
type of "(ENUM1 | ENUM2)" is int, and you then can't assign an int to
an enum variable without a cast.  That means that this:

  enum foo_flags flags = 0;

  if (...)
    flags |= FOO_FLAG1;
  if (...)
    flags |= FOO_FLAG2;

... would have to be written as:

  enum foo_flags flags = (enum foo_flags) 0;

  if (...)
    flags = (enum foo_flags) (flags | FOO_FLAG1);
  if (...)
    flags = (enum foo_flags) (flags | FOO_FLAG2);

which is ... ugly.  Alternatively, we'd have to use an int for the
variable's type, which isn't ideal either.

This patch instead adds an "enum flags" class.  "enum flags" are
exactly the enums where the values are bits that are meant to be ORed
together.

This allows writing code like the below, while with raw enums this
would fail to compile without casts to enum type at the assignments to
'f':

  enum some_flag
  {
     flag_val1 = 1 << 1,
     flag_val2 = 1 << 2,
     flag_val3 = 1 << 3,
     flag_val4 = 1 << 4,
  };
  DEF_ENUM_FLAGS_TYPE(enum some_flag, some_flags)

  some_flags f = flag_val1 | flag_val2;
  f |= flag_val3;

It's also possible to assign literal zero to an enum flags variable
(meaning, no flags), dispensing either adding an awkward explicit "no
value" value to the enumeration or the cast to assignments from 0.
For example:

  some_flags f = 0;
  f |= flag_val3 | flag_val4;

Note that literal integers other than zero do fail to compile:

  some_flags f = 1; // error

C is still supported -- DEF_ENUM_FLAGS_TYPE is just a typedef in that
case.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* btrace.h: Include common/enum-flags.h.
(btrace_insn_flags): Define.
(struct btrace_insn) <flags>: Change type.
(btrace_function_flags): Define.
(struct btrace_function) <flags>: Change type.
(btrace_thread_flags): Define.
(struct btrace_thread_info) <flags>: Change type.
* c-exp.y (token_flags): Rename to ...
(token_flag): ... this.
(token_flags): Define.
(struct token) <flags>: Change type.
* common/enum-flags.h: New file.
* compile/compile-c-types.c (convert_qualified): Change type of
'quals' local.
* compile/compile-internal.h: Include "common/enum-flags.h".
(gcc_qualifiers_flags): Define.
* completer.c (enum reg_completer_targets): Rename to ...
(enum reg_completer_target): ... this.
(reg_completer_targets): Define.
(reg_or_group_completer_1): Change type of 'targets' parameter.
* disasm.c (do_mixed_source_and_assembly_deprecated): Change type
of 'psl_flags' local.
(do_mixed_source_and_assembly): Change type of 'psl_flags' local.
* infrun.c: Include "common/enum-flags.h".
(enum step_over_what): Rename to ...
(enum step_over_what_flag): ... this.
(step_over_what): Change type.
(start_step_over): Change type of 'step_what' local.
(thread_still_needs_step_over): Now returns a step_over_what.
Adjust.
(keep_going_pass_signal): Change type of 'step_what' local.
* linux-tdep.c: Include "common/enum-flags.h".
(enum filterflags): Rename to ...
(enum filter_flag): ... this.
(filter_flags): Define.
(dump_mapping_p): Change type of 'filterflags' parameter.
(linux_find_memory_regions_full): Change type of 'filterflags'
local.
(linux_find_memory_regions_full): Pass the address of an unsigned
int to sscanf instead of the address of an enum.
* record-btrace.c (btrace_print_lines): Change type of local
'psl_flags'.
(btrace_call_history): Replace 'flags' parameter
with 'int_flags' parameter.  Adjust.
(record_btrace_call_history, record_btrace_call_history_range)
(record_btrace_call_history_from): Rename 'flags' parameter to
'int_flags'.  Use record_print_flags.
* record.h: Include "common/enum-flags.h".
(record_print_flags): Define.
* source.c: Include "common/enum-flags.h".
(print_source_lines_base, print_source_lines): Change type of
flags parameter.
* symtab.h: Include "common/enum-flags.h".
(enum print_source_lines_flags): Rename to ...
(enum print_source_lines_flag): ... this.
(print_source_lines_flags): Define.
(print_source_lines): Change prototype.

9 years agoguile disassembly hardcode TARGET_XFER_E_IO
Pedro Alves [Tue, 17 Nov 2015 13:31:28 +0000 (13:31 +0000)]
guile disassembly hardcode TARGET_XFER_E_IO

Instead of adding a cast at the memory_error call, as needed for C++,
and have the reader understand the indirection, make it simple and
hardcode the generic memory error at the memory_error call site.

gdb/ChangeLog:
2015-11-17  Pedro Alves  <palves@redhat.com>

* guile/scm-disasm.c (gdbscm_disasm_read_memory): Return -1 on
error instead of TARGET_XFER_E_IO.
(gdbscm_disasm_memory_error): Always pass TARGET_XFER_E_IO to
memory_error.

9 years agoFix a problematic message with the STM32L4XX fixup on 32-bit hosts.
Christophe Lyon [Tue, 17 Nov 2015 11:35:08 +0000 (11:35 +0000)]
Fix a problematic message with the STM32L4XX fixup on 32-bit hosts.

* elf32-arm.c (elf32_arm_write_section): Force offset output as
long (%ld).

9 years agoFix the disassembly of conditional instructions will illegal condition selections.
Nick Clifton [Mon, 16 Nov 2015 14:26:07 +0000 (14:26 +0000)]
Fix the disassembly of conditional instructions will illegal condition selections.

* rx-dis.c (condition_names): Replace always and never with
invalid, since the always/never conditions can never be legal.

9 years agogdb/testsuite: Fix left shift of negative value.
Dominik Vogt [Tue, 17 Nov 2015 09:56:32 +0000 (10:56 +0100)]
gdb/testsuite: Fix left shift of negative value.

This patch fixes all occurences of left-shifting negative constants in C cod
which is undefined by the C standard.

gdb/testsuite/ChangeLog:

        * lib/dwarf.exp (_note): Fix left shift of negative value.
        * gdb.trace/trace-condition.exp: Likewise.

9 years agogdb: Fix left shift of negative value.
Dominik Vogt [Tue, 17 Nov 2015 09:56:32 +0000 (10:56 +0100)]
gdb: Fix left shift of negative value.

This patch fixes all occurences of left-shifting negative constants in C cod
which is undefined by the C standard.

gdb/ChangeLog:

        * hppa-tdep.c (hppa_sign_extend, hppa_low_hppa_sign_extend)
        (prologue_inst_adjust_sp, hppa_frame_cache): Fix left shift of negative
        value.
        * dwarf2read.c (read_subrange_type): Likewise.

9 years agosim: sim-close: use XCONCAT2 helper
Mike Frysinger [Mon, 16 Nov 2015 08:12:23 +0000 (00:12 -0800)]
sim: sim-close: use XCONCAT2 helper

No point in open coding this logic when we've got nifty helpers to do it.

9 years agogas: microblaze: fix shift overflow
Mike Frysinger [Sun, 15 Nov 2015 07:46:03 +0000 (02:46 -0500)]
gas: microblaze: fix shift overflow

This code tries to shift an integer 31 bits which triggers a werror:
gas/config/tc-microblaze.c:742:21: error: integer overflow in expression [-Werror=overflow]
  e->X_add_number |= -(1 << 31);

Cast the 1 to offsetT to match X_add_number to fix things.

9 years agoAutomatic date update in version.in
GDB Administrator [Tue, 17 Nov 2015 00:00:09 +0000 (00:00 +0000)]
Automatic date update in version.in

9 years agoFix stack buffer overflow in aarch64_extract_return_value
Yao Qi [Mon, 16 Nov 2015 15:37:03 +0000 (15:37 +0000)]
Fix stack buffer overflow in aarch64_extract_return_value

Hi,
I build GDB with -fsanitize=address, and run testsuite.  In
gdb.base/callfuncs.exp, I see the following error,

p/c fun1()
=================================================================^M
==9601==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fffee858530 at pc 0x6df079 bp 0x7fffee8583a0 sp 0x7fffee858398
WRITE of size 16 at 0x7fffee858530 thread T0
    #0 0x6df078 in regcache_raw_read /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:673
    #1 0x6dfe1e in regcache_cooked_read /home/yao/SourceCode/gnu/gdb/git/gdb/regcache.c:751
    #2 0x4696a3 in aarch64_extract_return_value /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1708
    #3 0x46ae57 in aarch64_return_value /home/yao/SourceCode/gnu/gdb/git/gdb/aarch64-tdep.c:1918

We are extracting return value from V registers (128 bit), but only
allocate X_REGISTER_SIZE-byte array, which isn't sufficient.  This
patch changes the array to V_REGISTER_SIZE.

gdb:

2015-11-16  Yao Qi  <yao.qi@linaro.org>

* aarch64-tdep.c (aarch64_extract_return_value):  Change array
buf's length to V_REGISTER_SIZE.

9 years agoPass value * instead of bfd_byte * to pass_* functions in aarch64-tdep.c
Yao Qi [Mon, 16 Nov 2015 14:50:29 +0000 (14:50 +0000)]
Pass value * instead of bfd_byte * to pass_* functions in aarch64-tdep.c

This patch changes the last argument of functions pass_in_x_or_stack,
pass_in_v_or_stack, pass_on_stack, and pass_in_x to type value *.

gdb:

2015-11-16  Yao Qi  <yao.qi@linaro.org>

* aarch64-tdep.c (pass_in_x_or_stack): Change argument type
from bfd_byte * to value *.  Caller updated.
(pass_in_x): Likewise.
(pass_in_v_or_stack): Likewise.
(pass_on_stack): Likewise.

9 years agoUse value_contents instead of value_contents_writeable
Yao Qi [Mon, 16 Nov 2015 14:47:50 +0000 (14:47 +0000)]
Use value_contents instead of value_contents_writeable

Both aarch64_push_dummy_call and bfin_push_dummy_call only use args[i]
contents but then never write to them, so that we can use
value_contents instead.

gdb:

2015-11-16  Yao Qi  <yao.qi@linaro.org>

* aarch64-tdep.c (aarch64_push_dummy_call): Call value_contents instead
of value_contents_writeable.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.

9 years agoFix bug in arm_push_dummy_call by -fsanitize=address
Yao Qi [Mon, 16 Nov 2015 14:44:19 +0000 (14:44 +0000)]
Fix bug in arm_push_dummy_call by -fsanitize=address

When I build GDB with -fsanitize=address, and run testsuite,
some gdb.base/*.exp test triggers the ERROR below,

=================================================================
==7646==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x603000242810 at pc 0x487844 bp 0x7fffe32e84e0 sp 0x7fffe32e84d8
READ of size 4 at 0x603000242810 thread T0
    #0 0x487843 in push_stack_item /home/yao/SourceCode/gnu/gdb/git/gdb/arm-tdep.c:3405
    #1 0x48998a in arm_push_dummy_call /home/yao/SourceCode/gnu/gdb/git/gdb/arm-tdep.c:3960

In that path, GDB passes value on stack, in an INT_REGISTER_SIZE slot,
but the value contents' length can be less than INT_REGISTER_SIZE, so
the contents will be accessed out of the bound.  This patch adds an
array buf[INT_REGISTER_SIZE], and copy val to buf before writing them
to stack.

gdb:

2015-11-16  Yao Qi  <yao.qi@linaro.org>

* arm-tdep.c (arm_push_dummy_call): New array buf.  Store regval
to buf.  Pass buf instead of val to push_stack_item.