external/binutils.git
10 years agoMove ELF section headers to end of object file
Alan Modra [Wed, 10 Sep 2014 04:56:25 +0000 (14:26 +0930)]
Move ELF section headers to end of object file

Currently, section ordering differs a little for non-loaded reloc
sections output by ld -emit-relocs or ld -r and that after passing
such objects through objcopy.  Not that it really matters, but it
would be better for a simple objcopy to produce an unchanged output
object file.  Also, section headers are put somewhere in the middle of
the non-loaded sections, again slightly differently for ld and
objcopy.  This patch fixes these discrepancies and puts section
headers last, which is where gold puts them, and is where
bfd_from_remote_memory wrongly assumed they will be found.

bfd/
* elf.c (assign_file_positions_except_relocs): Move section header
placement to..
(_bfd_elf_assign_file_positions_for_relocs): ..here.  Make static.
* elf-bfd.h (_bfd_elf_assign_file_positions_for_relocs): Delete.
* elflink.c (bfd_elf_final_link): Don't call above function.
gas/testsuite/
* gas/arm/got_prel.d: Adjust for changed section header placement.
* gas/i386/ilp32/x86-64-size-1.d: Likewise.
* gas/i386/ilp32/x86-64-size-3.d: Likewise.
* gas/i386/ilp32/x86-64-size-5.d: Likewise.
* gas/i386/ilp32/x86-64-unwind.d: Likewise.
* gas/i386/size-1.d: Likewise.
* gas/i386/size-3.d: Likewise.
* gas/i386/x86-64-size-1.d: Likewise.
* gas/i386/x86-64-size-3.d: Likewise.
* gas/i386/x86-64-size-5.d: Likewise.
* gas/i386/x86-64-unwind.d: Likewise.
* gas/ia64/alias-ilp32.d: Likewise.
* gas/ia64/alias.d: Likewise.
* gas/ia64/group-1.d: Likewise.
* gas/ia64/group-2.d: Likewise.
* gas/ia64/secname-ilp32.d: Likewise.
* gas/ia64/secname.d: Likewise.
* gas/ia64/unwind-ilp32.d: Likewise.
* gas/ia64/unwind.d: Likewise.
* gas/mmix/bspec-1.d: Likewise.
* gas/mmix/bspec-2.d: Likewise.
* gas/mmix/byte-1.d: Likewise.
* gas/mmix/loc-1.d: Likewise.
* gas/mmix/loc-2.d: Likewise.
* gas/mmix/loc-3.d: Likewise.
* gas/mmix/loc-4.d: Likewise.
* gas/mmix/loc-5.d: Likewise.
* gas/tic6x/scomm-directive-4.d: Likewise.
ld/testsuite/
* ld-aarch64/emit-relocs-local-addend.d: Adjust for changed
section header placement.
* ld-aarch64/local-addend-r.d: Likewise.
* ld-mmix/bspec1.d: Likewise.
* ld-mmix/bspec2.d: Likewise.
* ld-mmix/local1.d: Likewise.
* ld-mmix/local3.d: Likewise.
* ld-mmix/local5.d: Likewise.
* ld-mmix/local7.d: Likewise.
* ld-mmix/undef-3.d: Likewise.
* ld-sh/sh64/crange3-cmpct.rd: Likewise.
* ld-sh/sh64/crange3-media.rd: Likewise.
* ld-sh/sh64/crangerel1.rd: Likewise.
* ld-sh/sh64/crangerel2.rd: Likewise.
* ld-tic6x/common.d: Likewise.
* ld-tic6x/shlib-1.rd: Likewise.
* ld-tic6x/shlib-1b.rd: Likewise.
* ld-tic6x/shlib-1r.rd: Likewise.
* ld-tic6x/shlib-1rb.rd: Likewise.
* ld-tic6x/shlib-app-1.rd: Likewise.
* ld-tic6x/shlib-app-1b.rd: Likewise.
* ld-tic6x/shlib-app-1r.rd: Likewise.
* ld-tic6x/shlib-app-1rb.rd: Likewise.
* ld-tic6x/shlib-noindex.rd: Likewise.
* ld-tic6x/static-app-1.rd: Likewise.
* ld-tic6x/static-app-1b.rd: Likewise.
* ld-tic6x/static-app-1r.rd: Likewise.
* ld-tic6x/static-app-1rb.rd: Likewise.
* ld-x86-64/ilp32-4.d: Likewise.
* ld-x86-64/split-by-file-nacl.rd: Likewise.
* ld-x86-64/split-by-file.rd: Likewise.

10 years agoAIX: Remove exec_one_dummy_insn hack
Ulrich Weigand [Wed, 10 Sep 2014 13:59:33 +0000 (15:59 +0200)]
AIX: Remove exec_one_dummy_insn hack

Old AIX versions required GDB to update the stack pointer register and
execute at least one instruction before accessing the space newly allocated
on the user stack.  This was done using the exec_one_dummy_insn routine
in rs6000-nat.c

However, in currently supported AIX versions (tested on AIX 6.1), this hack
is no longer necessary.  In fact, removing the hack actually fixed several
test case failures, and removes a call to deprecated_insert_raw_breakpoint.

gdb/ChangeLog:

* rs6000-nat.c (exec_one_dummy_insn): Remove.
(store_register): Do not call exec_one_dummy_insn.

10 years agodynarr-ptr.exp: Add ptype tests.
Joel Brobecker [Mon, 1 Sep 2014 16:42:52 +0000 (18:42 +0200)]
dynarr-ptr.exp: Add ptype tests.

This patch adds a number of "ptype" tests to gdb.dwarf2/dynarr-ptr.exp.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dynarr-ptr.exp: Add a few ptype tests.

10 years agoAda: Print bounds/length of pointer to array with dynamic bounds
Joel Brobecker [Fri, 29 Aug 2014 17:56:25 +0000 (19:56 +0200)]
Ada: Print bounds/length of pointer to array with dynamic bounds

Trying to print the bounds or the length of a pointer to an array
whose bounds are dynamic results in the following error:

    (gdb) p foo.three_ptr.all'first
    Location address is not set.
    (gdb) p foo.three_ptr.all'length
    Location address is not set.

This is because, after having dereferenced our array pointer, we
use the type of the resulting array value, instead of the enclosing
type.  The former is the original type where the bounds are unresolved,
whereas we need to get the actual array bounds.

Similarly, trying to apply those attributes to the array pointer
directly (without explicitly dereferencing it with the '.all'
operator) yields the same kind of error:

    (gdb) p foo.three_ptr'first
    Location address is not set.
    (gdb) p foo.three_ptr'length
    Location address is not set.

This is caused by the fact that the dereference was done implicitly
in this case, and perform at the type level only, which is not
sufficient in order to resolve the array type.

This patch fixes both issues, thus allowing us to get the expected output:

    (gdb) p foo.three_ptr.all'first
    $1 = 1
    (gdb) p foo.three_ptr.all'length
    $2 = 3
    (gdb) p foo.three_ptr'first
    $3 = 1
    (gdb) p foo.three_ptr'length
    $4 = 3

gdb/ChangeLog:

        * ada-lang.c (ada_array_bound): If ARR is a TYPE_CODE_PTR,
        dereference it first.  Use value_enclosing_type instead of
        value_type.
        (ada_array_length): Likewise.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dynarr-ptr.exp: Add 'first, 'last and 'length tests.

10 years agoAda subscripting of pointer to array with dynamic bounds
Joel Brobecker [Fri, 29 Aug 2014 17:50:03 +0000 (19:50 +0200)]
Ada subscripting of pointer to array with dynamic bounds

Consider a pointer to an array which dynamic bounds, described in
DWARF as follow:

        <1><25>: Abbrev Number: 4 (DW_TAG_array_type)
           <26>   DW_AT_name        : foo__array_type
        [...]
        <2><3b>: Abbrev Number: 5 (DW_TAG_subrange_type)
           [...]
           <40>   DW_AT_lower_bound : 5 byte block: 97 38 1c 94 4
                  (DW_OP_push_object_address; DW_OP_lit8; DW_OP_minus;
                   DW_OP_deref_size: 4)
           <46>   DW_AT_upper_bound : 5 byte block: 97 34 1c 94 4
                  (DW_OP_push_object_address; DW_OP_lit4; DW_OP_minus;
                   DW_OP_deref_size: 4)

GDB is now able to correctly print the entire array, but not one
element of the array. Eg:

    (gdb) p foo.three_ptr.all
    $1 = (1, 2, 3)
    (gdb) p foo.three_ptr.all(1)
    Cannot access memory at address 0xfffffffff4123a0c

The problem occurs because we are missing a dynamic resolution of
the variable's array type when subscripting the array. What the current
code does is "fix"-ing the array type using the GNAT encodings, but
that operation ignores any of the array's dynamic properties.

This patch fixes the issue by using ada_value_ind to dereference
the array pointer, which takes care of the array type resolution.
It also continues to "fix" arrays described using GNAT encodings,
so backwards compatibility is preserved.

gdb/ChangeLog:

        * ada-lang.c (ada_value_ptr_subscript): Remove parameter "type".
        Adjust function implementation and documentation accordingly.
        (ada_evaluate_subexp) <OP_FUNCALL>: Only assign "type" if
        NOSIDE is EVAL_AVOID_SIDE_EFFECTS.
        Update call to ada_value_ptr_subscript.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dynarr-ptr.exp: Add subscripting tests.

10 years agoprint PTR.all where PTR is an Ada thin pointer
Joel Brobecker [Fri, 29 Aug 2014 15:50:13 +0000 (17:50 +0200)]
print PTR.all where PTR is an Ada thin pointer

Consider the following declaration:

   type Array_Type is array (Natural range <>) of Integer;
   type Array_Ptr is access all Array_Type;
   for Array_Ptr'Size use 64;
   Three_Ptr : Array_Ptr := new Array_Type'(1 => 1, 2 => 2, 3 => 3);

This creates a pointer to an array where the bounds are stored
in a memory region just before the array itself (aka a "thin pointer").
In DWARF, this is described as a the usual pointer type to an array
whose subrange has dynamic values for its bounds:

    <1><25>: Abbrev Number: 4 (DW_TAG_array_type)
       <26>   DW_AT_name        : foo__array_type
    [...]
    <2><3b>: Abbrev Number: 5 (DW_TAG_subrange_type)
       [...]
       <40>   DW_AT_lower_bound : 5 byte block: 97 38 1c 94 4
              (DW_OP_push_object_address; DW_OP_lit8; DW_OP_minus;
               DW_OP_deref_size: 4)
       <46>   DW_AT_upper_bound : 5 byte block: 97 34 1c 94 4
              (DW_OP_push_object_address; DW_OP_lit4; DW_OP_minus;
               DW_OP_deref_size: 4)

GDB is currently printing the value of the array incorrectly:

    (gdb) p foo.three_ptr.all
    $1 = (26629472 => 1, 2,
    value.c:819: internal-error: value_contents_bits_eq: [...]

The dereferencing (".all" operator) is done by calling ada_value_ind,
which itself calls value_ind. It first produces a new value where
the bounds of the array were correctly resolved to their actual value,
but then calls readjust_indirect_value_type which replaces the resolved
type by the original type.

The problem starts when ada_value_print does not take this situation
into account, and starts using the type of the resulting value, which
has unresolved array bounds, instead of using the value's enclosing
type.

After fixing this issue, the debugger now correctly prints:

    (gdb) p foo.three_ptr.all
    $1 = (1, 2, 3)

gdb/ChangeLog:

        * ada-valprint.c (ada_value_print): Use VAL's enclosing type
        instead of VAL's type.

gdb/testsuite/ChangeLog:

        * gdb.dwarf2/dynarr-ptr.c: New file.
        * gdb.dwarf2/dynarr-ptr.exp: New file.

10 years agoAdd <sys/uio.h> #include back in amd64-linux-nat.c.
Joel Brobecker [Wed, 10 Sep 2014 13:06:50 +0000 (09:06 -0400)]
Add <sys/uio.h> #include back in amd64-linux-nat.c.

This include is needed to access the definition of "struct iovec".

gdb/ChangeLog:

        * amd64-linux-nat.c: Add <sys/uio.h> #include.

10 years agoPR guile/17367
Doug Evans [Wed, 10 Sep 2014 04:18:25 +0000 (21:18 -0700)]
PR guile/17367

gdb/ChangeLog:

* acinclude.m4 (GDB_GUILE_PROGRAM_NAMES): Pass guile version as
last parameter to pkg-config, not first.
* configure.ac: Pass --with-guile provided pkg-config path to
GDB_GUILE_PROGRAM_NAMES.
* configure: Regenerate.

10 years agoAdd myself as write-after-approval GDB maintainer.
Gabriel Krisman Bertazi [Wed, 10 Sep 2014 03:03:43 +0000 (00:03 -0300)]
Add myself as write-after-approval GDB maintainer.

gdb/ChangeLog:

* MAINTAINERS (Write After Approval): Add "Gabriel Krisman
Bertazi".

10 years agoDisable gdb for nds32*-*-* until it is supported.
Chung-Ju Wu [Fri, 5 Sep 2014 19:54:47 +0000 (03:54 +0800)]
Disable gdb for nds32*-*-* until it is supported.

10 years agodaily update
Alan Modra [Wed, 10 Sep 2014 00:01:19 +0000 (09:31 +0930)]
daily update

10 years agoMIPS: Don't infer IRIX OS ABI from generic section names
Maciej W. Rozycki [Tue, 9 Sep 2014 22:41:28 +0000 (23:41 +0100)]
MIPS: Don't infer IRIX OS ABI from generic section names

There are `.MIPS.abiflags', `.MIPS.options' and `.MIPS.stubs' sections
also present in Linux executables, so we can't infer IRIX OS ABI solely
from the existence of these sections.  This is not going to be a problem
as there are bound to be other sections whose names start with `.MIPS.'
in IRIX executables and this selection only matters for a non-default OS
ABI in a multiple-target GDB executable.  As a last resort the automatic
selection can be overridden with `set osabi'.

* mips-irix-tdep.c (mips_irix_elf_osabi_sniff_abi_tag_sections):
Exclude `.MIPS.abiflags', `.MIPS.options' and `.MIPS.stubs' from
the list of sections determining GDB_OSABI_IRIX.

10 years agoAdd myself as write-after-approval GDB maintainer
James Hogan [Tue, 9 Sep 2014 20:59:34 +0000 (21:59 +0100)]
Add myself as write-after-approval GDB maintainer

gdb/ChangeLog:

* MAINTAINERS (Write After Approval): Add "James Hogan".

10 years agoGDB/testsuite: Correct gdb.base/watchpoint-solib.exp timeout tweak
Maciej W. Rozycki [Tue, 9 Sep 2014 16:39:17 +0000 (17:39 +0100)]
GDB/testsuite: Correct gdb.base/watchpoint-solib.exp timeout tweak

Similarly to the previous changes to gdb.reverse/sigall-reverse.exp and
gdb.reverse/until-precsave.exp this corrects the timeout tweak in
gdb.base/watchpoint-solib.exp.

This test case executes a large amount of code with a software watchpoint
enabled.  This means single-stepping all the way through and takes a lot
of time, e.g. for an ARMv7 Panda board and a `-march=armv5te' multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 714

for the same board and a `-mthumb -march=armv5te' multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 1275

and for QEMU in the system emulation mode and a `-march=armv4t'
multilib:

PASS: gdb.base/watchpoint-solib.exp: continue to foo again
elapsed: 115

(values in seconds) -- all of which having the default timeout of 60s,
set based on the requirement of the remaining test cases (other than
gdb.reverse ones).

Here again the timeout extension to have a meaning should be calculated
by scaling rather than using an arbitrary constant, and a larger factor
of 30 will do, leaving some margin.  Hopefully for everyone or otherwise
we'll probably have to come up with a smarter solution.

OTOH the other test cases in this script do not require the extension so
they can be moved outside its umbrella so as to avoid unnecessary delays
if something goes wrong and a genuine timeout triggers.

* gdb.base/watchpoint-solib.exp: Increase the timeout by a factor
of 30 rather than hardcoding 120 for a slow test case.  Take the
`gdb,timeout' target setting into account for this calculation.
Don't extend the timeout for the test cases that don't need it.

10 years agoGDB/testsuite: Add/correct gdb.reverse timeout tweaks
Maciej W. Rozycki [Tue, 9 Sep 2014 16:03:24 +0000 (17:03 +0100)]
GDB/testsuite: Add/correct gdb.reverse timeout tweaks

There are three cases in two scripts in the gdb.reverse subset that
take a particularly long time.  Two of them are already attempted to
take care of by extending the timeout from the default.  The remaining
one has no precautions taken.  The timeout extension is ineffective
though, it is done by adding a constant rather than by scaling and as
a result while it may work for target boards that get satisfied with
the detault test timeout of 10s, it does not serve its purpose for
slower ones.

Here are indicative samples of execution times (in seconds) observed
for these cases respectively, for an ARMv7 Panda board running Linux
and a `-march=armv5te' multilib:

PASS: gdb.reverse/sigall-reverse.exp: continue to signal exit
elapsed: 385
PASS: gdb.reverse/until-precsave.exp: run to end of main
elapsed: 4440
PASS: gdb.reverse/until-precsave.exp: save process recfile
elapsed: 965

for the same board and a `-mthumb -march=armv5te' multilib:

PASS: gdb.reverse/sigall-reverse.exp: continue to signal exit
elapsed: 465
PASS: gdb.reverse/until-precsave.exp: run to end of main
elapsed: 4191
PASS: gdb.reverse/until-precsave.exp: save process recfile
elapsed: 669

and for QEMU in the system emulation mode and a `-march=armv4t'
multilib:

PASS: gdb.reverse/sigall-reverse.exp: continue to signal exit
elapsed: 45
PASS: gdb.reverse/until-precsave.exp: run to end of main
elapsed: 433
PASS: gdb.reverse/until-precsave.exp: save process recfile
elapsed: 104

Based on the performance of other tests these two test configurations
have their default timeout set to 450s and 60s respectively.

The remaining two multilibs (`-mthumb -march=armv4t' and `-mthumb
-march=armv7-a') do not produce test results usable enough to have data
available for these cases.

 Based on these results I have tweaked timeouts for these cases as
follows.  This, together with a suitable board timeout setting, removes
timeouts for these cases.  Note that for the default timeout of 10s the
new setting for the first case in gdb.reverse/until-precsave.exp is
compatible with the old one, just a bit higher to keep the convention
of longer timeouts to remain multiples of 30s.  The second case there
does not need such a high setting so I have lowered it a bit to avoid
an unnecessary delay where this test case genuinely times out.

* gdb.reverse/sigall-reverse.exp: Increase the timeout by
a factor of 2 for a slow test case.  Take the `gdb,timeout'
target setting into account for this calculation.
* gdb.reverse/until-precsave.exp: Increase the timeout by
a factor of 15 and 3 respectively rather than adding 120
for a pair of slow test cases.  Take the `gdb,timeout'
target setting into account for this calculation.

10 years agoGDB/testsuite: Avoid timeout lowering
Maciej W. Rozycki [Tue, 9 Sep 2014 15:39:16 +0000 (16:39 +0100)]
GDB/testsuite: Avoid timeout lowering

The recent change to introduce `gdb_reverse_timeout' turned out
ineffective for board setups that set the `gdb,timeout' target variable.
A lower `gdb,timeout' setting takes precedence and defeats the effect of
`gdb_reverse_timeout'.  This is because the global timeout is overridden
in gdb_test_multiple and then again in gdb_expect.

Three timeout variables are taken into account in these two places, in
this precedence:

1. The `gdb,timeout' target variable.

2. The caller's local `timeout' variable (upvar timeout)

3. The global `timeout' variable.

This precedence is obeyed by gdb_test_multiple strictly.  OTOH
gdb_expect will select the higher of the two formers and will only take
the latter into account if none of the formers is present.  However the
two timeout selections are conceptually the same and gdb_test_multiple
does its only for the purpose of passing it down to gdb_expect.

Therefore I decided there is no point to keep carrying on this
duplication and removed the sequence from gdb_test_multiple, however
retaining the `upvar timeout' variable definition.  This way gdb_expect
will still access gdb_test_multiple's caller `timeout' variable (if any)
via its own `upvar timeout' reference.

Now as to the sequence in gdb_expect.  In addition to the three
variables described above it also takes a timeout argument into account,
as the fourth value to choose from.  It is currently used if it is
higher than the timeout selected from the variables as described above.

With the timeout selection code from gdb_test_multiple gone, gone is
also the most prominent use of this timeout argument, it's now used in
a couple of places only, mostly within this test framework library code
itself for preparatory commands or suchlike.  With this being the case
this timeout selection code can be simplified as follows:

1. Among the three timeout variables, the highest is always chosen.
   This is so that a test case doesn't inadvertently lower a high value
   timeout needed by slow target boards.  This is what all test cases
   use.

2. Any timeout argument takes precedence.  This is for special cases
   such as within the framework library code, e.g. it doesn't make sense
   to send `set height 0' with a timeout of 7200 seconds.  This is a
   local command that does not interact with the target and setting a
   high timeout here only risks a test suite run taking ages if it goes
   astray for some reason.

3. The fallback timeout of 60s remains.

* lib/gdb.exp (gdb_test_multiple): Remove code to select the
timeout, don't pass one down to gdb_expect.
(gdb_expect): Rework timeout selection.

10 years agoRemove trad_frame_set_reg_unknown declaration
James Hogan [Tue, 9 Sep 2014 13:59:18 +0000 (14:59 +0100)]
Remove trad_frame_set_reg_unknown declaration

The trad_frame_set_reg_unknown declaration was added in commit
0db9b4b70969 (March 2004), but apparently never defined or referenced.

gdb/ChangeLog:

* trad-frame.h (trad_frame_set_reg_unknown): Remove declaration.

10 years agogdbserver-support: Handle gdbserver start failures
Maciej W. Rozycki [Tue, 9 Sep 2014 15:17:38 +0000 (16:17 +0100)]
gdbserver-support: Handle gdbserver start failures

As it happens we have a board that fails a gdb.base/gcore-relro.exp
test case reproducibly and moreover the case appears to trigger a
kernel bug making the it less than usable.  Specifically the board
remains responsive to some extent, however processes do not appear
to be able to successfully complete termination anymore and perhaps
more importantly further gdbserver processes can be started, but they
never reach the stage of listening on the RSP socket.

This change handles timeouts in gdbserver start properly, by throwing
a TCL error exception when gdbserver does not report listening on the
RSP socket in time.  This is then caught at the outer level and
reported, and 2 rather than 1 is returned so that the caller may tell
the failure to start gdbserver and other issues apart and act
accordingly (or do nothing).

I thought letting the exception unwind further on might be a good idea
for any test harnesses out there to break outright where a gdbserver
start error is silently ignored right now, however I figured out the
calls to gdbserver-support.exp are buried down too deep in the GDB test
suite for such a change to be made easily.  I think returning a distinct
return value is good enough (the API says "non-zero", so 2 is as good as
1) and we can always make the error harder in a later step if required.

With config/gdbserver.exp being used this change remains transparent
to the target board, the return value is passed up by gdb_reload and
the error exception unwinds through gdbserver_gdb_load and is caught
and handled by mi_gdb_target_load.  A call to perror is still made,
reporting the timeout, and in the case of mi_gdb_target_load the
procedure returns a value denoting unsuccessful completion.  An
unsuccessful completion of gdb_reload is already handled elsewhere.

An alternative gdbserver board configuration can interpret the return
value in its gdb_reload implementation and catch the error in
gdbserver_gdb_load in an attempt to recover a target board that has
gone astray, for example by rebooting the board somehow.  This has
proved effective with our failing board, that now completes the
remaining test cases with no further hiccups.

* lib/gdbserver-support.exp (gdbserver_start): Throw an error
exception on timeout.
(gdbserver_run): Catch any `gdbserver_spawn' error exceptions.
(gdbserver_start_extended): Catch any `gdbserver_start' error
exceptions.
(gdbserver_start_multi, mi_gdbserver_start_multi): Likewise.
* lib/mi-support.exp (mi_gdb_target_load): Catch any
`gdbserver_gdb_load' error exceptions.

10 years agoGDB/testsuite: Extend the time gdbserver is waited for
Maciej W. Rozycki [Tue, 9 Sep 2014 15:06:15 +0000 (16:06 +0100)]
GDB/testsuite: Extend the time gdbserver is waited for

Gdbserver support code uses the global timeout value to determine when
to stop waiting for a gdbserver process being started to respond before
continuing anyway.  This timeout is usually as low as 10s and may not
be enough in this context, for example on the first run where the
filesystem cache is cold, even if it is elsewhere.

E.g. I observe this reliably with gdbserver started the first time in
QEMU running in the system emulation mode:

(gdb) file .../gdb.base/advance
Reading symbols from .../gdb.base/advance...done.
(gdb) delete breakpoints
(gdb) info breakpoints
No breakpoints or watchpoints.
(gdb) break main
Breakpoint 1 at 0x87f8: file .../gdb.base/advance.c,
line 41.
(gdb) set remotetimeout 15
(gdb) kill
The program is not being run.
(gdb)
[...]
.../bin/gdbserver --once :6014 advance
target remote localhost:6014
Remote debugging using localhost:6014
Remote communication error.  Target disconnected.: Connection reset by peer.
(gdb) continue
The program is not being run.
(gdb) Process advance created; pid = 999
Listening on port 6014
FAIL: gdb.base/advance.exp: Can't run to main

-- notice how the test harness proceeded with the `target remote ...'
command even though gdbserver hasn't completed its startup yet.  A
while later when it's finally ready it's too late already.  I checked
the timing here and it takes gdbserver roughly 25 seconds to start in
this scenario.  Subsequent gdbserver starts in the same test run take
less time and usually complete within 10 seconds although occasionally
`target remote ...' precedes the corresponding `Listening on port...'
message again.

Therefore I have fixed this problem by setting an explicit timeout to
120s on the expect call in question.  If this turns out too arbitrary
sometime, then perhaps a separate `gdbserver_timeout' setting might be
due.

* lib/gdbserver-support.exp (gdbserver_start): Set timeout to
120 on waiting for the TCP socket to open.

10 years agoFix missing "struct iovec" definition on some x86-linux.
Joel Brobecker [Tue, 9 Sep 2014 14:49:13 +0000 (16:49 +0200)]
Fix missing "struct iovec" definition on some x86-linux.

The following patch...

    commit 3116063bd617de56fbc3bad046a692b1fb363a9d
    Date:   Fri Jun 27 09:52:29 2014 +0100
    Subject: Tidy #include lists

... introduced a build failure on certain x86 GNU/Linux distributions
(reproduced on SuSE 10 and RHES4) due to "struct iovec" not being
defined. This struct is defined in <sys/uio.h>, which used to be
explicitly included, but no longer is after the commit above was
applied.

    [...]/i386-linux-nat.c: In function 'fetch_xstateregs':
    [...]/i386-linux-nat.c:325:16: error: storage size of 'iov' isn't known
    [...]/i386-linux-nat.c: In function 'store_xstateregs':
    [...]/i386-linux-nat.c:348:16: error: storage size of 'iov' isn't known
    make[2]: *** [i386-linux-nat.o] Error 1

It seems to be working on newer GNU/Linux distros thanks to indirect
inclusion of <sys/uio.h>, but it does not work on some other versions
of the same distros. This is why indirect includes of public APIs
should be avoided if at all possible.

This patch fixes the issue by adding the explicit include back.

gdb/ChangeLog:

        * i386-linux-nat.c, x86-linux-nat.c: Add <sys/uio.h> #include.

10 years ago[PATCH][ARM] Add Cortex-A17 support to gas
Kyrylo Tkachov [Tue, 9 Sep 2014 09:10:00 +0000 (10:10 +0100)]
[PATCH][ARM] Add Cortex-A17 support to gas

     * config/tc-arm.c (arm_cpus): Add cortex-a17.

10 years agoFix regression in default.exp caused by _caller_is, etc.
Doug Evans [Tue, 9 Sep 2014 06:01:01 +0000 (23:01 -0700)]
Fix regression in default.exp caused by _caller_is, etc.

gdb/testsuite/ChangeLog:

* gdb.base/default.exp (show_conv_list): Add _caller_is,
_caller_matches, _any_caller_is, _any_caller_matches.

10 years agoFix for PR 17247: Block SIGCHLD while initializing Guile.
Doug Evans [Tue, 9 Sep 2014 05:45:34 +0000 (22:45 -0700)]
Fix for PR 17247: Block SIGCHLD while initializing Guile.

The problem here is that if a thread other than gdb's main thread
gets a SIGCHLD (it's an asynchronous signal so the kernel will
essentially pick a random thread) then gdb will hang if it is
in sigsuspend when the SIGCHLD is delivered.  The other thread
will see the signal and the sigsuspend won't "wake up".

Guile and libgc should be blocking SIGCHLD in their threads,
but we need to work with Guile 2.0 and libgc 7.4.
The problem first shows up in libgc 7.4 because it is the first
release that enables multiple marker threads by default.

gdb/ChangeLog:

PR 17247
* guile.c: #include <signal.h>.
(_initialize_guile): Block SIGCHLD while initializing Guile.

Replaces the following, which is reverted.

2014-07-26  Doug Evans  <xdje42@gmail.com>

PR 17185
* configure.ac: Add check for header gc/gc.h.
Add check for function setenv.
* configure: Regenerate.
* config.in: Regenerate.
* guile/guile.c (_initialize_guile): Add workaround for libgc 7.4.0.

10 years agogdb.guile/scm-error.exp: Handle guile 2.2 backtrace output.
Doug Evans [Tue, 9 Sep 2014 05:19:32 +0000 (22:19 -0700)]
gdb.guile/scm-error.exp: Handle guile 2.2 backtrace output.

gdb/testsuite/ChangeLog:

* gdb.guile/scm-error.exp: Handle guile 2.2 backtrace output.

10 years agoReplace use of magic number with named constant.
Doug Evans [Tue, 9 Sep 2014 03:47:57 +0000 (20:47 -0700)]
Replace use of magic number with named constant.

gdb/ChangeLog:

* guile/scm-cmd.c (gdbscm_parse_command_name): Replace magic number
with named constant.  Fix style of pointer comparison.
* python/py-cmd.c (gdbpy_parse_command_name): Ditto.

10 years agoSet print symbol off in mi-var-display.exp
Yao Qi [Sat, 30 Aug 2014 09:46:21 +0000 (17:46 +0800)]
Set print symbol off in mi-var-display.exp

Hi,
I see the following fail on arm-none-eabi target,

-var-evaluate-expression -f nat foo^M
^done,value="0x3 <_ftext+2>"^M
(gdb) ^M
FAIL: gdb.mi/mi-var-display.exp: eval variable -f nat foo

the "<_ftext+2>" isn't expected in the test, so "set print symbol off"
can prevent printing it.  It is obvious and I'll commit it in three
days if no comments.

gdb/testsuite:

2014-09-09  Yao Qi  <yao@codesourcery.com>

* gdb.mi/mi-var-display.exp: Set print symbol off.

10 years agodaily update
Alan Modra [Tue, 9 Sep 2014 00:01:20 +0000 (09:31 +0930)]
daily update

10 years agoChange pe/coff build-id section name to '.buildid'
Jon TURNEY [Sat, 30 Aug 2014 14:02:49 +0000 (15:02 +0100)]
Change pe/coff build-id section name to '.buildid'

The section name used to store the build-id on pe/coff is arbitrary, as it's
contents should be located using the pe/coff header's DataDirectory debug data
entry, not by using the section name.

But '.build-id' is not a good choice for that section name, as it is 9
characters long, and hence truncated to 8 characters when
--disable-long-section-names is used (which is the default, when producing an
executable with no dwarf debug sections, e.g. using ld --strip-all --build-id)

This truncation then breaks 'objcopy --only-keep-debug', which does use the
section name, due to concerns that keeping an arbitrary section which contains
the debug directory is not sensible.

binutils/ChangeLog

2014-09-01  Jon TURNEY  <jon.turney@dronecode.org.uk>

* objcopy.c (is_nondebug_keep_contents_section): Change pe/coff
build-id section name from '.build-id' to '.buildid'.

ld/ChangeLog

2014-09-01  Jon TURNEY  <jon.turney@dronecode.org.uk>

* emultempl/pe.em (write_build_id, setup_build_id): Change pe/coff
build-id section name from '.build-id' to '.buildid'.
* emultempl/pep.em (write_build_id, setup_build_id): Ditto.

Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
10 years agoFix ppc_collect/supply_ptrace_register() routines
Edjunior Barbosa Machado [Mon, 8 Sep 2014 16:37:23 +0000 (13:37 -0300)]
Fix ppc_collect/supply_ptrace_register() routines

This patch fixes the routines to collect and supply ptrace registers on ppc64le
gdbserver. Originally written for big endian arch, they were causing several
issues on little endian. With this fix, the number of unexpected failures in
the testsuite dropped from 263 to 72 on ppc64le.

gdb/gdbserver/ChangeLog

* linux-ppc-low.c (ppc_collect_ptrace_register): Adjust routine to take
endianness into account.
(ppc_supply_ptrace_register): Likewise.

10 years agodaily update
Alan Modra [Mon, 8 Sep 2014 00:00:39 +0000 (09:30 +0930)]
daily update

10 years agoFix PR gdb/17035: "show user" doesn't list user-defined commands that
Gabriel Krisman Bertazi [Sun, 7 Sep 2014 23:12:19 +0000 (20:12 -0300)]
Fix PR gdb/17035: "show user" doesn't list user-defined commands that
have empty bodies.

User-defined commands that have empty bodies weren't being shown because
the print function returned too soon.  Now, it prints the command's name
before checking if it has any body at all.  This also fixes the same
problem on "show user <myemptycommand>", which wasn't being printed due
to a similar reason.

gdb/Changelog:

* cli/cli-cmds.c (show_user): Use cli_user_command_p to
decide whether we display the command on "show user".
* cli/cli-script.c (show_user_1): Only verify cmdlines after
printing command name.
* cli/cli-decode.h (cli_user_command_p): Declare new function.
* cli/cli-decode.c (cli_user_command_p): Create helper function
to verify whether cmd_list_element is a user-defined command.

gdb/testsuite/Changelog:

* gdb.base/commands.exp: Add tests to verify user-defined
commands with empty bodies.
* gdb.python/py-cmd.exp: Test that we don't show user-defined
python commands in `show user command`.
* gdb.python/scm-cmd.exp: Test that we don't show user-defined
scheme commands in `show user command`.

10 years agoFix crash on Python frame filters with unreadable arg
Jan Kratochvil [Sun, 7 Sep 2014 12:09:59 +0000 (14:09 +0200)]
Fix crash on Python frame filters with unreadable arg

https://bugzilla.redhat.com/show_bug.cgi?id=1126177

ERROR: AddressSanitizer: SEGV on unknown address 0x000000000050 (pc 0x000000992bef sp 0x7ffff9039530 bp 0x7ffff9039540
T0)
    #0 0x992bee in value_type .../gdb/value.c:925
    #1 0x87c951 in py_print_single_arg python/py-framefilter.c:445
    #2 0x87cfae in enumerate_args python/py-framefilter.c:596
    #3 0x87e0b0 in py_print_args python/py-framefilter.c:968

It crashes because frame_arg::val is documented it may contain NULL
(frame_arg::error is then non-NULL) but the code does not handle it.

Another bug is that py_print_single_arg() calls goto out of its TRY_CATCH
which messes up GDB cleanup chain crashing GDB later.

It is probably 7.7 regression (I have not verified it) due to the introduction
of Python frame filters.

gdb/ChangeLog

PR python/17355
* python/py-framefilter.c (py_print_single_arg): Handle NULL FA->VAL.
Fix goto out of TRY_CATCH.

gdb/testsuite/ChangeLog

PR python/17355
* gdb.python/amd64-py-framefilter-invalidarg.S: New file.
* gdb.python/py-framefilter-invalidarg-gdb.py.in: New file.
* gdb.python/py-framefilter-invalidarg.exp: New file.
* gdb.python/py-framefilter-invalidarg.py: New file.

10 years agodaily update
Alan Modra [Sun, 7 Sep 2014 00:00:40 +0000 (09:30 +0930)]
daily update

10 years agoMIPS testsuite cleanup - part 4
Matthew Fortune [Tue, 2 Sep 2014 07:25:23 +0000 (08:25 +0100)]
MIPS testsuite cleanup - part 4

ld/testsuite/

* ld-mips-elf/abiflags-strip1-ph.d: Ignore big/little endian
differences. Ignore program headers other than PT_MIPS_ABIFLAGS.
Do not force -32, -EB and ld emulation but instead rely on the
test driver to build for some form of O32.
* ld-mips-elf/abiflags-strip2-ph.d: Likewise.
* ld-mips-elf/abiflags-strip3-ph.d: Likewise.
* ld-mips-elf/abiflags-strip4-ph.d: Likewise.
* ld-mips-elf/abiflags-strip5-ph.d: Likewise.
* ld-mips-elf/abiflags-strip6-ph.d: Likewise.
* ld-mips-elf/abiflags-strip7-ph.d: Likewise.
* ld-mips-elf/abiflags-strip8-ph.d: Likewise.
* ld-mips-elf/abiflags-strip9-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-0-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-05.d: Likewise.
* ld-mips-elf/attr-gnu-4-06.d: Likewise.
* ld-mips-elf/attr-gnu-4-07.d: Likewise.
* ld-mips-elf/attr-gnu-4-1-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-10.d: Likewise.
* ld-mips-elf/attr-gnu-4-15.d: Likewise.
* ld-mips-elf/attr-gnu-4-16.d: Likewise.
* ld-mips-elf/attr-gnu-4-17.d: Likewise.
* ld-mips-elf/attr-gnu-4-2-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-25.d: Likewise.
* ld-mips-elf/attr-gnu-4-26.d: Likewise.
* ld-mips-elf/attr-gnu-4-27.d: Likewise.
* ld-mips-elf/attr-gnu-4-3-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-35.d: Likewise.
* ld-mips-elf/attr-gnu-4-36.d: Likewise.
* ld-mips-elf/attr-gnu-4-37.d: Likewise.
* ld-mips-elf/attr-gnu-4-4-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-45.d: Likewise.
* ld-mips-elf/attr-gnu-4-46.d: Likewise.
* ld-mips-elf/attr-gnu-4-47.d: Likewise.
* ld-mips-elf/attr-gnu-4-5-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-50.d: Likewise.
* ld-mips-elf/attr-gnu-4-51.d: Likewise.
* ld-mips-elf/attr-gnu-4-52.d: Likewise.
* ld-mips-elf/attr-gnu-4-53.d: Likewise.
* ld-mips-elf/attr-gnu-4-54.d: Likewise.
* ld-mips-elf/attr-gnu-4-55.d: Likewise.
* ld-mips-elf/attr-gnu-4-56.d: Likewise.
* ld-mips-elf/attr-gnu-4-57.d: Likewise.
* ld-mips-elf/attr-gnu-4-58.d: Likewise.
* ld-mips-elf/attr-gnu-4-6-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-60.d: Likewise.
* ld-mips-elf/attr-gnu-4-61.d: Likewise.
* ld-mips-elf/attr-gnu-4-62.d: Likewise.
* ld-mips-elf/attr-gnu-4-63.d: Likewise.
* ld-mips-elf/attr-gnu-4-64.d: Likewise.
* ld-mips-elf/attr-gnu-4-65.d: Likewise.
* ld-mips-elf/attr-gnu-4-66.d: Likewise.
* ld-mips-elf/attr-gnu-4-67.d: Likewise.
* ld-mips-elf/attr-gnu-4-68.d: Likewise.
* ld-mips-elf/attr-gnu-4-7-ph.d: Likewise.
* ld-mips-elf/attr-gnu-4-70.d: Likewise.
* ld-mips-elf/attr-gnu-4-71.d: Likewise.
* ld-mips-elf/attr-gnu-4-72.d: Likewise.
* ld-mips-elf/attr-gnu-4-73.d: Likewise.
* ld-mips-elf/attr-gnu-4-74.d: Likewise.
* ld-mips-elf/attr-gnu-4-75.d: Likewise.
* ld-mips-elf/attr-gnu-4-76.d: Likewise.
* ld-mips-elf/attr-gnu-4-77.d: Likewise.
* ld-mips-elf/attr-gnu-4-78.d: Likewise.
* ld-mips-elf/mips-elf.exp: Update default abi_asflags(o32) to explicitly
pass -32 for the 'no abi' configurations.  Modify the way attr-gnu* tests
are run to use O32 flags appropriate for the current target.

10 years agoMIPS testsuite cleanup - part 3
Matthew Fortune [Tue, 2 Sep 2014 07:25:23 +0000 (08:25 +0100)]
MIPS testsuite cleanup - part 3

gas/testsuite/

* gas/mips/attr-gnu-abi-fp-1.d: Relax expected output.
* gas/mips/elf_ase_micromips-2.d: Likewise.
* gas/mips/elf_ase_micromips.d: Likewise.
* gas/mips/elf_ase_mips16-2.d: Likewise.
* gas/mips/elf_ase_mips16.d: Likewise.
* gas/mips/module-mfp32.d: Likewise.
* gas/mips/module-msingle-float.d: Likewise.
* gas/mips/module-msoft-float.d: Likewise.

10 years agoMIPS testsuite cleanup - part 2
Matthew Fortune [Tue, 2 Sep 2014 07:25:23 +0000 (08:25 +0100)]
MIPS testsuite cleanup - part 2

gas/testsuite/

* gas/mips/module-defer-warn2.l: Ignore differences in output from
64-bit vs 32-bit targets using O32.

10 years agoMIPS testsuite cleanup - part 1
Matthew Fortune [Tue, 2 Sep 2014 07:25:23 +0000 (08:25 +0100)]
MIPS testsuite cleanup - part 1

binutils/testsuite/

* binutils-all/readelf.ss-mips: Account for new sections.

gas/testsuite/

* gas/elf/type.e: Account for new sections.
* gas/mips/mips16-e.d: Likewise.
* gas/mips/mips16-f.d: Likewise.
* gas/mips/mipsel16-e.d: Likewise.
* gas/mips/mipsel16-f.d: Likewise.
* gas/mips/tmips16-e.d: Appropriately escape dots.
* gas/mips/tmips16-f.d: Likewise.
* gas/mips/tmipsel16-e.d: Likewise.
* gas/mips/tmipsel16-f.d: Likewise.

10 years agoAdd missing author to previous entry (PR 15276).
Doug Evans [Sat, 6 Sep 2014 16:22:57 +0000 (09:22 -0700)]
Add missing author to previous entry (PR 15276).

10 years agoPR 15276: Add $_caller_is, $_caller_matches, $_any_caller_is, $_any_caller_matches
Doug Evans [Sat, 6 Sep 2014 16:15:44 +0000 (09:15 -0700)]
PR 15276: Add $_caller_is, $_caller_matches, $_any_caller_is, $_any_caller_matches

gdb/ChangeLog:

PR 15276
* NEWS: Mention $_caller_is, $_caller_matches, $_any_caller_is,
$_any_caller_matches.
* data-directory/Makefile.in (PYTHON_FILE_LIST): Add caller_is.py.
* python/lib/gdb/function/caller_is.py: New file.

gdb/testsuite/ChangeLog:

PR 15276
* gdb.python/py-caller-is.c: New file.
* gdb.python/py-caller-is.exp: New file.

gdb/doc/ChangeLog:

PR 15276
* gdb.texinfo (Convenience Funs): Document $_caller_is,
$_caller_matches, $_any_caller_is, $_any_caller_matches.

10 years agoinfcmd.c (program_info): Fix typo.
Doug Evans [Sat, 6 Sep 2014 15:24:56 +0000 (08:24 -0700)]
infcmd.c (program_info): Fix typo.

gdb/ChangeLog:

* infcmd.c (program_info): Fix typo.

10 years agodaily update
Alan Modra [Sat, 6 Sep 2014 00:00:42 +0000 (09:30 +0930)]
daily update

10 years agoRegenerate top-level configure.
Joel Brobecker [Fri, 5 Sep 2014 19:19:56 +0000 (12:19 -0700)]
Regenerate top-level configure.

Our top-level configure somehow got out of sync the current
configure.ac, so this patch regenerates it.

ChangeLog:

* configure: Regenerate.

10 years agoFix for PR gdb/17235: possible bug extracting systemtap probe operand
Sergio Durigan Junior [Fri, 5 Sep 2014 19:21:44 +0000 (15:21 -0400)]
Fix for PR gdb/17235: possible bug extracting systemtap probe operand

This patch is a fix to PR gdb/17235.  The bug is about an unused
variable that got declared and set during one of the parsing phases of
an SDT probe's argument.  I took the opportunity to rewrite some of the
code to improve the parsing.  The bug was actually a thinko, because
what I wanted to do in the code was to discard the number on the string
being parsed.

During this portion, the code identifies that it is dealing with an
expression that begins with a sign ('+', '-' or '~').  This means that
the expression could be:

- a numeric literal (e.g., '+5')
- a register displacement (e.g., '-4(%rsp)')
- a subexpression (e.g., '-(2*3)')

So, after saving the sign and moving forward 1 char, now the code needs
to know if there is a digit followed by a register displacement prefix
operand (e.g., '(' on x86_64).  If yes, then it is a register
operation.  If not, then it will be handled recursively, and the code
will later apply the requested operation on the result (either a '+', a
'-' or a '~').

With the bug, the code was correctly discarding the digit (though using
strtol unnecessarily), but it wasn't properly dealing with
subexpressions when the register indirection prefix was '(', like on
x86_64.  This patch also fixes this bug, and includes a testcase.  It
passes on x86_64 Fedora 20.

10 years agodaily update
Alan Modra [Fri, 5 Sep 2014 00:01:04 +0000 (09:31 +0930)]
daily update

10 years agoparse_number("0") reads uninitialized memory
Pedro Alves [Thu, 4 Sep 2014 20:46:28 +0000 (21:46 +0100)]
parse_number("0") reads uninitialized memory

valgrind caught that parse_number reads uninitialized memory when we
parse literal "0":

 $ valgrind ./gdb -q -nx -ex "set height 0"
 (...)
 ==10378== Conditional jump or move depends on uninitialised value(s)
 ==10378==    at 0x548A10: parse_number (c-exp.y:1828)
 ==10378==    by 0x54A340: lex_one_token (c-exp.y:2638)
 ==10378==    by 0x54B4BB: c_lex (c-exp.y:3089)
 ==10378==    by 0x544951: c_parse_internal (c-exp.c:2208)
 ==10378==    by 0x54BF8C: c_parse (c-exp.y:3260)
 ==10378==    by 0x6502E7: parse_exp_in_context_1 (parse.c:1221)
 ==10378==    by 0x650064: parse_exp_in_context (parse.c:1122)
 ==10378==    by 0x65001F: parse_exp_1 (parse.c:1114)
 ==10378==    by 0x650421: parse_expression (parse.c:1266)
 ==10378==    by 0x5A74B7: parse_and_eval_long (eval.c:92)
 ==10378==    by 0x501ABD: do_set_command (cli-setshow.c:302)
 ==10378==    by 0x721059: execute_command (top.c:452)
 ==10378==
 (gdb)

I've pushed the obvious fix.

Tested on x86_64 Fedora 20.

gdb/ChangeLog:
* c-exp.y (parse_number): Skip handling base-switching prefixes if
the input is only one character long.

10 years agoFix PR fortran/17237: bug in f-valprint.c
Sergio Durigan Junior [Thu, 4 Sep 2014 14:28:31 +0000 (10:28 -0400)]
Fix PR fortran/17237: bug in f-valprint.c

This commit fixes the PR mentioned in $subject.  It is about a set but
unused variable that refers to the output format of integer values
printed in Fortran.

This was probably a thinko (like most set-but-unused-vars), but it
could cause an internal error depending on the scenario.  I am sending
a testcase which triggers this error as well.

gdb/ChangeLog:
2014-09-04  Sergio Durigan Junior  <sergiodj@redhat.com>

PR fortran/17237
* f-valprint.c (f_val_print): Specify the correct print option to
use when printing integer values.

gdb/testsuite/ChangeLog:
2014-09-04  Sergio Durigan Junior  <sergiodj@redhat.com>

PR fortran/17237
* gdb.fortran/print-formatted.exp: New file.
* gdb.fortran/print-formatted.f90: Likewise.

10 years agoRemove code to cope with LWPs wrapped as PIDs
Gary Benson [Thu, 4 Sep 2014 14:07:46 +0000 (15:07 +0100)]
Remove code to cope with LWPs wrapped as PIDs

Historically the Linux x86 watchpoint code did not cope with multi-
threaded processes and LWP IDs were passed to it wrapped as PIDs.
Not all entry points were converted when the Linux x86 watchpoint
code was made multi-thread-aware, so a handler was left in place to
cope with wrapped LWPs.  Since then all such entry points have been
converted to pass regular LWPs and the handler is now redundant.
This commit removes the handler and adds assertions to ensure no
wrapped LWPs are passed in future.

gdb/ChangeLog:

* x86-linux-nat.c (x86_linux_dr_get, x86_linux_dr_set):
Remove code to cope with LWPs wrapped as PIDs.
Add assertions to ensure no wrapped LWPs are passed.

10 years agoRegression for i686 gdb.dwarf2/pieces-optimized-out.exp
Pedro Alves [Thu, 4 Sep 2014 11:12:41 +0000 (12:12 +0100)]
Regression for i686 gdb.dwarf2/pieces-optimized-out.exp

Git 9a0dc9e3 regressed gdb.dwarf2/pieces-optimized-out.exp, visible on
i686 (the test doesn't run on x86_64):

 (gdb) p s
 -$1 = {a = 5, b = <optimized out>, c = <optimized out>, d = <optimized out>}
 +$1 = {a = 5, b = <optimized out>, c = 0, d = 0}
 -(gdb) PASS: gdb.dwarf2/pieces-optimized-out.exp: print s
 +(gdb) FAIL: gdb.dwarf2/pieces-optimized-out.exp: print s

The regression was caused by this removal in cp-valprint.c:

  @@ -293,12 +293,6 @@ cp_print_value_fields (struct type *type, struct type *real_type,
  {
    fputs_filtered (_("<synthetic pointer>"), stream);
  }
  -             else if (!value_bits_valid (val,
  -                                         TYPE_FIELD_BITPOS (type, i),
  -                                         TYPE_FIELD_BITSIZE (type, i)))
  -               {
  -                 val_print_optimized_out (val, stream);
  -               }
else
  {
    struct value_print_options opts = *options;

The idea was that we'd just fallback to calling value_field_bitfield,
which handles unavailable values (in unpack_value_bits_as_long_1) so
should be able to handle optimized out values too.  Alas, it doesn't.
This is currently a bit too messy.  Instead of teaching
unpack_value_bits_as_long_1 about optimized out bits, let's bite the
bullet and teach the value code to handle partially optimized out
bitfield, by having it unpack a bitfield and then propagate the range
metadata.  Turns out the resulting code looks simpler and clearer.

Tested on x86_64 Fedora 20, -m64/-m32.

gdb/ChangeLog:

* value.c (value_ranges_copy_adjusted): New function, factored out
from ...
(value_contents_copy_raw): ... here.
(unpack_value_bits_as_long_1): Rename back to ...
(unpack_bits_as_long): ... this.  Remove 'original_value' and
'result' parameters.  Change return type to LONGEST.
(unpack_value_bits_as_long): Delete.
(unpack_value_field_as_long_1): Delete.
(unpack_value_field_as_long, unpack_field_as_long): Reimplement.
(unpack_value_bitfield): New function.
(value_field_bitfield): Reimplement using unpack_value_bitfield.
(value_fetch_lazy): Use unpack_value_bitfield.
* value.h (unpack_value_bits_as_long): Delete declaration.

10 years agoMIPS: Update the list of addr32 targets
Matthew Fortune [Thu, 4 Sep 2014 08:38:45 +0000 (09:38 +0100)]
MIPS: Update the list of addr32 targets

gas/testsuite/

* gas/mips/mips.exp: Add mipsisa32 and mipsisa32el to
the list of addr32 targets.

10 years agodaily update
Alan Modra [Thu, 4 Sep 2014 00:00:40 +0000 (09:30 +0930)]
daily update

10 years agoImprove Type.template_argument docs in Python API.
Justin Lebar [Wed, 3 Sep 2014 23:40:22 +0000 (16:40 -0700)]
Improve Type.template_argument docs in Python API.

gdb/doc/ChangeLog:

* python.texi (Types In Python): Type.template_argument(n) returns a
gdb.Value or a gdb.Type and throws an exception if n is out of
range.

10 years agoAdd support for reading frame registers to Python API.
Sasha Smundak [Wed, 3 Sep 2014 23:34:47 +0000 (16:34 -0700)]
Add support for reading frame registers to Python API.

The ability to read registers is needed to use Frame Filter API to
display the frames created by JIT compilers.

gdb/ChangeLog:

2014-08-29  Sasha Smundak  <asmundak@google.com>

* python/py-frame.c (frapy_read_register): New function.

gdb/doc/ChangeLog:

2014-08-26  Sasha Smundak  <asmundak@google.com>

* python.texi (Frames in Python): Add read_register description.

gdb/testsuite/ChangeLog:

2014-08-26  Sasha Smundak  <asmundak@google.com>

* gdb.python/py-frame.exp: Test Frame.read_register.

10 years agoReset errno before PTRACE_PEEKUSER for MIPS DSP_CONTROL
James Hogan [Mon, 1 Sep 2014 21:48:40 +0000 (22:48 +0100)]
Reset errno before PTRACE_PEEKUSER for MIPS DSP_CONTROL

PTRACE_PEEKUSER can return -1, which is usually used to determine whether
a system call has reported an error, so errno must be used alone to
determine whether an error occurred. However errno isn't modified by a
successful system call so it must be reset to a known value (0) before the
syscall call.

Add the missing errno reset when reading the DSP_CONTROL register in the
native MIPS Linux backend and the MIPS gdbserver backend.

gdb/:
* mips-linux-nat.c (mips_linux_read_description): Reset errno to 0
prior to reading DSP_CONTROL with PTRACE_PEEKUSER ptrace call.

gdb/gdbserver/:
* linux-mips-low.c (mips_read_description): Reset errno to 0 prior
to reading DSP_CONTROL with PTRACE_PEEKUSER ptrace call.

10 years agoPR python/16699: GDB Python command completion with overriden complete vs. completer...
Sergio Durigan Junior [Wed, 3 Sep 2014 20:30:28 +0000 (16:30 -0400)]
PR python/16699: GDB Python command completion with overriden complete vs. completer class

This PR came from a Red Hat bug that was filed recently.  I checked and
it still exists on HEAD, so here's a proposed fix.  Although this is
marked as a Python backend bug, this is really about the completion
mechanism used by GDB.  Since this code reminds me of my first attempt
to make a good noodle, it took me quite some time to fix it in a
non-intrusive way.

The problem is triggered when one registers a completion method inside a
class in a Python script, rather than registering the command using a
completer class directly.  For example, consider the following script:

    class MyFirstCommand(gdb.Command):
          def __init__(self):
              gdb.Command.__init__(self,'myfirstcommand',gdb.COMMAND_USER,gdb.COMPLETE_FILENAME)

              def invoke(self,argument,from_tty):
                  raise gdb.GdbError('not implemented')

    class MySecondCommand(gdb.Command):
          def __init__(self):
              gdb.Command.__init__(self,'mysecondcommand',gdb.COMMAND_USER)

              def invoke(self,argument,from_tty):
                  raise gdb.GdbError('not implemented')

                  def complete(self,text,word):
                      return gdb.COMPLETE_FILENAME

    MyFirstCommand ()
    MySecondCommand ()

When one loads this into GDB and tries to complete filenames for both
myfirstcommand and mysecondcommand, she gets:

    (gdb) myfirstcommand /hom<TAB>
    (gdb) myfirstcommand /home/
                               ^
    ...
    (gdb) mysecondcommand /hom<TAB>
    (gdb) mysecondcommand /home
                                ^

(The "^" marks the final position of the cursor after the TAB).

So we see that myfirstcommand honors the COMPLETE_FILENAME class (as
specified in the command creation), but mysecondcommand does not.  After
some investigation, I found that the problem lies with the set of word
break characters that is used for each case.  The set should be the same
for both commands, but it is not.

During the process of deciding which type of completion should be used,
the code in gdb/completer.c:complete_line_internal analyses the command
that requested the completion and tries to determine the type of
completion wanted by checking which completion function will be called
(e.g., filename_completer for filenames, location_completer for
locations, etc.).

This all works fine for myfirstcommand, because immediately after the
command registration the Python backend already sets its completion
function to filename_completer (which then causes the
complete_line_internal function to choose the right set of word break
chars).  However, for mysecondcommand, this decision is postponed to
when the completer function is evaluated, and the Python backend uses an
internal completer (called cmdpy_completer).  complete_line_internal
doesn't know about this internal completer, and can't choose the right
set of word break chars in time, which then leads to a bad decision when
completing the "/hom" word.

So, after a few attempts, I decided to create another callback in
"struct cmd_list_element" that will be responsible for handling the case
when there is an unknown completer function for complete_line_internal
to work with.  So far, only the Python backend uses this callback, and
only when the user provides a completer method instead of registering
the command directly with a completer class.  I think this is the best
option because it not very intrusive (all the other commands will still
work normally), but especially because the whole completion code is so
messy that it would be hard to fix this without having to redesign
things.

I have regtested this on Fedora 18 x86_64, without regressions.  I also
included a testcase.

gdb/ChangeLog:
2014-09-03  Sergio Durigan Junior  <sergiodj@redhat.com>

PR python/16699
* cli/cli-decode.c (set_cmd_completer_handle_brkchars): New
function.
(add_cmd): Set "completer_handle_brkchars" to NULL.
* cli/cli-decode.h (struct cmd_list_element)
<completer_handle_brkchars>: New field.
* command.h (completer_ftype_void): New typedef.
(set_cmd_completer_handle_brkchars): New prototype.
* completer.c (set_gdb_completion_word_break_characters): New
function.
(complete_line_internal): Call "completer_handle_brkchars"
callback from command.
* completer.h: Include "command.h".
(set_gdb_completion_word_break_characters): New prototype.
* python/py-cmd.c (cmdpy_completer_helper): New function.
(cmdpy_completer_handle_brkchars): New function.
(cmdpy_completer): Adjust to use cmdpy_completer_helper.
(cmdpy_init): Set completer_handle_brkchars to
cmdpy_completer_handle_brkchars.

gdb/testsuite/ChangeLog:
2014-09-03  Sergio Durigan Junior  <sergiodj@redhat.com>

PR python/16699
* gdb.python/py-completion.exp: New file.
* gdb.python/py-completion.py: Likewise.

10 years agoAdd NaCl (NativeClient) specific classes Target_mips_nacl and
Sasa Stankovic [Wed, 3 Sep 2014 16:44:11 +0000 (09:44 -0700)]
Add NaCl (NativeClient) specific classes Target_mips_nacl and
Target_selector_mips_nacl.

gold/
* mips.cc (Target_mips_nacl): New class.
(Target_selector_mips_nacl): New class.
(target_selector_mips32): Rename from target_selector_mips32be and use
Target_selector_mips_nacl instead of Target_selector_mips.
(target_selector_mips32el): Rename from target_selector_mips32 and use
Target_selector_mips_nacl instead of Target_selector_mips.
(target_selector_mips64): Rename from target_selector_mips64be and use
Target_selector_mips_nacl instead of Target_selector_mips.
(target_selector_mips64el): Rename from target_selector_mips64 and use
Target_selector_mips_nacl instead of Target_selector_mips.
(Target_mips::mips_info): Add const attribute.

10 years ago[PATCH/AArch64] Generic support for all system registers using mrs and msr
Jiong Wang [Wed, 3 Sep 2014 13:45:26 +0000 (14:45 +0100)]
[PATCH/AArch64] Generic support for all system registers using mrs and msr

  2014-09-03  Jiong Wang  <jiong.wang@arm.com>

  opcode/
    * aarch64-tbl.h (aarch64_opcode_table): Update encoding for mrs/msr.
    * aarch64-dis-2.c: Update auto-generated file.

  gas/
    * config/tc-aarch64.c (parse_sys_reg): Remove the restriction on op0 field.

  gas/testsuite/
    * gas/aarch64/illegal.s: Update testcase.
    * gas/aarch64/illegal.d: Likewise.
    * gas/aarch64/sysreg-1.s: Likewise.
    * gas/aarch64/sysreg-1.d: Likewise.

10 years ago[PATCH/AArch64] Implement LSE feature
Jiong Wang [Wed, 3 Sep 2014 13:40:41 +0000 (14:40 +0100)]
[PATCH/AArch64] Implement LSE feature

2014-09-03  Jiong Wang  <jiong.wang@arm.com>

  gas/
* config/tc-aarch64.c (parse_operands): Recognize PAIRREG.
(aarch64_features): Add entry for lse extension.

  include/opcode/
* aarch64.h (AARCH64_FEATURE_LSE): New feature added.
(aarch64_opnd): Add AARCH64_OPND_PAIRREG.
(aarch64_insn_class): Add lse_atomic.
(F_LSE_SZ): New field added.
(opcode_has_special_coder): Recognize F_LSE_SZ.

  opcode/
* aarch64-tbl.h (QL_R4NIL): New qualifiers.
(aarch64_feature_lse): New feature added.
(LSE): New Added.
(aarch64_opcode_table): New LSE instructions added.  Improve
descriptions for ldarb/ldarh/ldar.
(aarch64_opcode_table): Describe PAIRREG.
* aarch64-opc.h (aarch64_field_kind): Add FLD_lse_sz.
* aarch64-opc.c (fields): Add entry for F_LSE_SZ.
(aarch64_print_operand): Recognize PAIRREG.
(operand_general_constraint_met_p): Check reg pair constraints for CASP
instructions.
* aarch64-dis.c (aarch64_ext_regno_pair): New extractor for paired reg.
(do_special_decoding): Recognize F_LSE_SZ.
* aarch64-asm.c (do_special_encoding): Recognize F_LSE_SZ.

  gas/testsuite/
* gas/aarch64/lse-atomic.d: New.
* gas/aarch64/lse-atomic.s: Likewise.
* gas/aarch64/illegal-lse.d: Likewise.
* gas/aarch64/illegal-lse.l: Likewise.
* gas/aarch64/illegal-lse.s: Likewise.
* gas/aarch64/diagnostic.s: Check processor feature detect for lse
instruction.
* gas/aarch64/diagnostic.l: Likewise.

10 years agox86 debug address register clarifications
Gary Benson [Wed, 3 Sep 2014 11:05:50 +0000 (12:05 +0100)]
x86 debug address register clarifications

The loop macro ALL_DEBUG_REGISTERS does not iterate over the status or
control registers, so its name is misleading.  This commit renames it
as ALL_DEBUG_ADDRESS_REGISTERS and updates all uses.  This commit also
updates its loop conditions to an equivalent but better form, and
makes two functions use it that had previously hardwired the loop.
A comment on a related field in the x86_debug_reg_state structure is
also updated to reflect that the field refers specifically to address
registers only.

gdb/ChangeLog:

* nat/x86-dregs.h (ALL_DEBUG_REGISTERS): Renamed as...
(ALL_DEBUG_ADDRESS_REGISTERS): New macro.  All uses updated.
Loop conditions changed to equivalent form.
(struct x86_debug_reg_state): Updated dr_ref_count comment.
* x86-linux-nat.c (x86_linux_prepare_to_resume): Use
ALL_DEBUG_ADDRESS_REGISTERS.

gdb/gdbserver/ChangeLog:

* linux-x86-low.c (x86_linux_prepare_to_resume): Use
ALL_DEBUG_ADDRESS_REGISTERS.

10 years agoFix dwarf2loc.h::dwarf2_evaluate_property function description.
Joel Brobecker [Wed, 3 Sep 2014 08:07:46 +0000 (10:07 +0200)]
Fix dwarf2loc.h::dwarf2_evaluate_property function description.

gdb/ChangeLog:

        * dwarf2loc.h (dwarf2_evaluate_property): Minor function
        description fix.

10 years agodaily update
Alan Modra [Wed, 3 Sep 2014 00:00:52 +0000 (09:30 +0930)]
daily update

10 years agotypeprint.c (find_global_typedef): Fix comment.
Doug Evans [Tue, 2 Sep 2014 23:29:16 +0000 (16:29 -0700)]
typeprint.c (find_global_typedef): Fix comment.

gdb/ChangeLog:

* typeprint.c (find_global_typedef): Fix comment.

10 years agoMake Elf_file::section_name() a const function, so that it can be used in
Cary Coutant [Wed, 2 Jul 2014 23:12:51 +0000 (16:12 -0700)]
Make Elf_file::section_name() a const function, so that it can be used in
places where we have only a const Elf_file*.

elfcpp/
* elfcpp_file.h (Elf_file::shnum): New const function.
(Elf_file::shstrndx): New const function.
(Elf_file::large_shndx_offset): New const function.
(Elf_file::section_name): Add const attribute.
(Elf_file::section_header_offset): Likewise.

gold/
* dwp.cc (Sized_relobj_dwo::do_section_name): Add const attribute.
* dynobj.h (Sized_dynobj::do_section_name): Likewise.
* incremental.cc (Sized_relobj_incr::do_section_name): Likewise.
(Sized_incr_dynobj::do_section_name): Likewise.
* incremental.h (Sized_relobj_incr::do_section_name): Likewise.
(Sized_incr_dynobj::do_section_name): Likewise.
* object.h (Object::section_name): Likewise.
(Object::do_section_name): Likewise.
(Sized_relobj_file::do_section_name): Likewise.
* plugin.cc (Sized_pluginobj::do_section_name): Likewise.
* plugin.h (Sized_pluginobj::do_section_name): Likewise.

10 years agoFix problem with optimization of .eh_frame section and --sort-section option.
Cary Coutant [Wed, 2 Jul 2014 16:39:41 +0000 (09:39 -0700)]
Fix problem with optimization of .eh_frame section and --sort-section option.

When --sort-section=name is used, gold will sort the linker-generated contents
of .eh_frame (after optimization) after the endcap provided by crtendS.o.
This causes two problems: the .eh_frame_hdr section is generated assuming that
the optimized .eh_frame contents will be placed at the very beginning of the
section, and the endcap no longer appears at the end of the section.

This patch fixes the first problem by adjusting FDE offsets to take into account
the actual starting offset within the output section, and fixes the second
problem by sorting linker-generated (Output_section_data) sections based on the
name of the output section.

gold/
PR gold/17005
* ehframe.cc (Fde::write): Add output_offset parameter.
(Cie::write): Likewise.
(Eh_frame::set_final_data_size): Account for offset within output
section.
(Eh_frame::do_sized_write): Likewise.
* ehframe.h (Fde::write): Add output_offset parameter.
(Cie::write): Likewise.
* output.cc (Output_section::Input_section_sort_entry): Remove
section_has_name_; add output_section_name parameter. Use
output section name for non-input sections.
(Output_section::Input_section_sort_entry::section_has_name): Remove.
(Output_section::Input_section_sort_entry::section_has_name_): Remove.
(Output_section::Input_section_sort_compare): Remove logic for
sections without names.
(Output_section::Input_section_sort_init_fini_compare): Likewise.
(Output_section::Input_section_sort_section_prefix_special_ordering_compare):
Likewise.
(Output_section::Input_section_sort_section_name_compare): Likewise.

10 years agoRename 32- and 64-bit Intel files from "i386" to "x86"
Gary Benson [Tue, 19 Aug 2014 14:16:11 +0000 (15:16 +0100)]
Rename 32- and 64-bit Intel files from "i386" to "x86"

This commit renames nine files that contain code used by both 32- and
64-bit Intel ports such that their names are prefixed with "x86"
rather than "i386".  All types, functions and variables within these
files are likewise renamed such that their names are prefixed with
"x86" rather than "i386".  This makes GDB follow the convention used
by gdbserver such that 32-bit Intel code lives in files called
"i386-*", 64-bit Intel code lives in files called "amd64-*", and code
for both 32- and 64-bit Intel lives in files called "x86-*".

This commit only renames OS-independent files.  The Linux ports of
both GDB and gdbserver now follow the i386/amd64/x86 convention fully.
Some ports still use the old convention where "i386" in file/function/
type/variable names can mean "32-bit only" or "32- and 64-bit" but I
don't want to touch ports I can't fully test except where absolutely
necessary.

gdb/ChangeLog:

* i386-nat.h: Renamed as...
* x86-nat.h: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.
* i386-nat.c: Renamed as...
* x86-nat.c: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.
* common/i386-xstate.h: Renamed as...
* common/x86-xstate.h: New file.  All type, function and variable
name prefixes changed from "i386_" to "x86_".  All references
updated.
* nat/i386-cpuid.h: Renamed as...
* nat/x86-cpuid.h: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.
* nat/i386-gcc-cpuid.h: Renamed as...
* nat/x86-gcc-cpuid.h: New file.  All type, function and variable
name prefixes changed from "i386_" to "x86_".  All references
updated.
* nat/i386-dregs.h: Renamed as...
* nat/x86-dregs.h: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.
* nat/i386-dregs.c: Renamed as...
* nat/x86-dregs.c: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.

gdb/gdbserver/ChangeLog:

* i386-low.h: Renamed as...
* x86-low.h: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.
* i386-low.c: Renamed as...
* x86-low.c: New file.  All type, function and variable name
prefixes changed from "i386_" to "x86_".  All references updated.

10 years agoUse XCNEW rather than xcalloc (1, ...) in linux-x86-low.c
Gary Benson [Tue, 2 Sep 2014 15:28:54 +0000 (16:28 +0100)]
Use XCNEW rather than xcalloc (1, ...) in linux-x86-low.c

This commit replaces two uses of xcalloc (1, ...) with XCNEW.

gdb/gdbserver/ChangeLog:

* linux-x86-low.c (x86_linux_new_process): Use XCNEW.
(x86_linux_new_thread): Likewise.

10 years agodaily update
Alan Modra [Tue, 2 Sep 2014 00:00:41 +0000 (09:30 +0930)]
daily update

10 years agoMove `_initialize_varobj' to the end of varobj.c
Maciej W. Rozycki [Mon, 1 Sep 2014 14:09:59 +0000 (15:09 +0100)]
Move `_initialize_varobj' to the end of varobj.c

* varobj.c (_initialize_varobj): Move to the end of file.

10 years agodaily update
Alan Modra [Mon, 1 Sep 2014 00:00:42 +0000 (09:30 +0930)]
daily update

10 years agodaily update
Alan Modra [Sun, 31 Aug 2014 00:00:41 +0000 (09:30 +0930)]
daily update

10 years agoThe 3rd patch for aarch64 gold.
Han Shen [Sat, 30 Aug 2014 00:53:03 +0000 (17:53 -0700)]
The 3rd patch for aarch64 gold.

This enables -
1. static linking hello world
2. limited support for TLSIE and TLSLE
3. limited support for linking shared library, linking executable against shared
   library.

gold/ChangeLog
2014-08-29 Han Shen <shenhan@google.com>
       Jing Yu <jingyu@google.com>

    * aarch64-reloc-property.cc
    (AArch64_reloc_property_table::reloc_name_in_error_message): Fix bug in
    reference reloc property in the table.
    * aarch64-reloc.def: Add TLSLE reloc types and fix some errors in
    3 other entries.
    * aarch64.cc: (Output_data_got_aarch64::add_static_reloc):
    2 new overloaded methods.
    (Output_data_got_aarch64::do_write): Add code to write out
    static relocs.
    (class Output_data_got_aarch64::Static_reloc): New class to wrap
    static relocs.
    (Output_data_got_aarch64::static_relocs): New vector to
    hold static relocs.
    (Target_aarch64::TCB_SIZE): New const static memeber.
    (Target_aarch64::tcb_size): New method.
    (Target_aarch64::Relocate::relocate): Add code handling new reloc types.
    (Target_aarch64::Relocate::relocate_tls): New method.
    (Target_aarch64::Scan::local): Add code handling new reloc types.
    (Target_aarch64::Scan::global): Add code handling new reloc types.

10 years agoppc476 patch area size miscalculation
Alan Modra [Sat, 30 Aug 2014 00:14:47 +0000 (09:44 +0930)]
ppc476 patch area size miscalculation

ppc476 sections that end exactly on a page boundary need the
workaround applied when a function ends in "bctr", or when pasting
together code from multiple sections.  The space allocated for the
patch area didn't allow for this case, while the code in
relocate_section performing the patches did, leading to an assertion
failure.

* elf32-ppc.c (ppc_elf_relax_section): Fix off by one error.

10 years agodaily update
Alan Modra [Sat, 30 Aug 2014 00:00:43 +0000 (09:30 +0930)]
daily update

10 years agoUse exceptions and cleanups in gdbserver
Gary Benson [Fri, 8 Aug 2014 14:37:41 +0000 (15:37 +0100)]
Use exceptions and cleanups in gdbserver

This commit replaces the hacky "exception" system in gdbserver with
the exceptions and cleanups subsystem from GDB.

Only the catch/cleanup code in what was "main" has been updated to
use the new system.  Other parts of gdbserver can now be converted
to use TRY_CATCH and cleanups on an as-needed basis.

A side-effect of this commit is that some error messages will change
slightly, and in cases with multiple errors the error messages will
be printed in a different order.

gdb/gdbserver/ChangeLog:

* server.h (setjmp.h): Do not include.
(toplevel): Do not declare.
(common-exceptions.h): Include.
(cleanups.h): Likewise.
* server.c (toplevel): Do not define.
(exit_code): New static global.
(detach_or_kill_for_exit_cleanup): New function.
(main): New function.  Original main renamed to...
(captured_main): New function.
* utils.c (verror) [!IN_PROCESS_AGENT]: Use throw_verror.

10 years agoIntroduce common/common-exceptions.[ch]
Gary Benson [Thu, 7 Aug 2014 15:29:19 +0000 (16:29 +0100)]
Introduce common/common-exceptions.[ch]

This commit moves the exception throwing and catching code
into gdb/common/.  All exception printing code remains in
gdb/exceptions.[ch].

gdb/ChangeLog:

* common/common-exceptions.h: New file.
* common/common-exceptions.c: Likewise.
* Makefile.in (SFILES): Add common/common-exceptions.c.
(HFILES_NO_SRCDIR): Add common/common-exceptions.h.
(COMMON_OBS): Add common-exceptions.o.
(common-exceptions.o): New rule.
* exceptions.h (common-exceptions.h): Include.
(gdb_setjmp.h): Do not include.
(return_reason): Moved to common-exceptions.h.
(enum return_reason): Likewise.
(RETURN_MASK): Likewise.
(typedef return_mask): Likewise.
(enum errors): Likewise.
(struct gdb_exception): Likewise.
(exceptions_state_mc_init): Likewise.
(exceptions_state_mc_action_iter): Likewise.
(exceptions_state_mc_action_iter_1): Likewise.
(TRY_CATCH): Likewise.
(throw_exception): Likewise.
(throw_verror): Likewise.
(throw_vquit): Likewise.
(throw_error): Likewise.
(throw_quit): Likewise.
* exceptions.c (enum catcher_state): Moved to common-exceptions.c.
(enum catcher_action): Likewise.
(struct catcher): Likewise.
(current_catcher): Likewise.
(catcher_list_size): Likewise.
(exceptions_state_mc_init): Likewise.
(catcher_pop): Likewise.
(exceptions_state_mc): Likewise.
(exceptions_state_mc_action_iter): Likewise.
(exceptions_state_mc_action_iter_1): Likewise.
(throw_exception): Likewise.
(exception_messages): Likewise.
(exception_messages_size): Likewise.
(throw_it): Likewise.
(throw_verror): Likewise.
(throw_vquit): Likewise.
(throw_error): Likewise.
(throw_quit): Likewise.
(prepare_to_throw_exception): New function.

gdb/gdbserver/ChangeLog:

* Makefile.in (SFILES): Add common/common-exceptions.c.
(OBS): Add common-exceptions.o.
(common-exceptions.o): New rule.
* utils.c (prepare_to_throw_exception): New function.

10 years agoIntroduce common/gdb_setjmp.h
Gary Benson [Thu, 7 Aug 2014 14:53:21 +0000 (15:53 +0100)]
Introduce common/gdb_setjmp.h

This commit creates a new file, common/gdb_setjmp.h, to hold some
portability macros for setjmp/longjmp et al. that are used by the
exceptions subsystem and by the demangler crash catcher.

gdb/ChangeLog:

* common/gdb_setjmp.h: New file.
* Makefile.in (HFILES_NO_SRCDIR): Add common/gdb_setjmp.h.
* configure.ac: Move sigsetjmp check...
* common/common.m4: ...here.
* configure: Regenerate.
* cp-support.c (SIGJMP_BUF): Delete.
(SIGSETJMP): Likewise.
(SIGLONGJMP): Likewise.
* exceptions.h (gdb_setjmp.h): Include.
(setjmp.h): Do not include.
(EXCEPTIONS_SIGJMP_BUF): Delete.
(EXCEPTIONS_SIGSETJMP): Likewise.
(EXCEPTIONS_SIGLONGJMP): Likewise.
Replace all uses of EXCEPTIONS_SIG* macros with SIG* macros
from gdb_setjmp.h.
* exceptions.c: Likewise.

gdb/gdbserver/ChangeLog:

* config.in: Regenerate.
* configure: Likewise.

10 years agoMove cleanups.[ch] to common
Gary Benson [Mon, 4 Aug 2014 10:37:44 +0000 (11:37 +0100)]
Move cleanups.[ch] to common

This commit moves cleanups.[ch] into gdb/common/.  The only change to
the content of the files is that cleanups.c's include list was altered
to match its new location.

gdb/ChangeLog:

* cleanups.h: Moved to...
* common/cleanups.h: New file.
* cleanups.c: Moved to...
* common/cleanups.c: New file.  Include common-defs.h and
cleanups.h.  Do not include defs.h.
* Makefile.in (SFILES): Replace cleanups.c with common/cleanups.c.
(HFILES_NO_SRCDIR): Replace cleanups.h with common/cleanups.h.
(cleanups.o): New rule.

gdb/gdbserver/ChangeLog:

* Makefile.in (SFILES): Add common/cleanups.c.
(OBS): cleanups.o.
(cleanups.o): New rule.

10 years agoMove internal_{,v}warning to common/errors.[ch]
Gary Benson [Mon, 4 Aug 2014 11:04:02 +0000 (12:04 +0100)]
Move internal_{,v}warning to common/errors.[ch]

This commit moves internal_warning and internal_vwarning into
common/errors.[ch].

gdb/ChangeLog:

* common/errors.h (internal_warning): New declaration.
(internal_vwarning): Likewise.
* common/errors.c (internal_warning): New function.
* utils.h (internal_warning): Don't declare.
(internal_vwarning): Likewise.
* utils.c (internal_warning): Removed.

gdb/gdbserver/ChangeLog:

* utils.c (internal_vwarning): New function.

10 years agoUnify startup and option-parsing warnings
Gary Benson [Tue, 5 Aug 2014 15:18:51 +0000 (16:18 +0100)]
Unify startup and option-parsing warnings

Various warnings are emitted during startup and option-parsing using
fprintf_unfiltered.  One warning is prefixed with the command name,
the others are not.  This commit replaces these hardwired warnings
with calls to warning.  It also sets warning_pre_print to prefix all
warnings with the command name until option parsing is complete.

gdb/ChangeLog:

* main.c (captured_main): Use warning during startup.
Prefix startup warning messages with command name.

10 years agoReplace all usage errors with calls to error
Gary Benson [Tue, 5 Aug 2014 15:12:01 +0000 (16:12 +0100)]
Replace all usage errors with calls to error

This commit replaces the hardwired fprintf/exit error handlers
for usage errors with calls to error.

gdb/ChangeLog:

* main.c (captured_main): Handle usage errors with error.

10 years agoReplace hardwired error handler in go32_create_inferior
Gary Benson [Mon, 4 Aug 2014 13:44:56 +0000 (14:44 +0100)]
Replace hardwired error handler in go32_create_inferior

go32_create_inferior invokes a hardwired fprintf/exit error handler
if v2loadimage fails.  I could find no reason for this other than that
the block seems to have been copy-and-pasted from v2loadimage's
manpage.  This commit replaces the hardwired handler with a call to
error.

gdb/ChangeLog:

* go32-nat.c (go32_create_inferior): Replace a fprintf/
exit pair with a call to error.  Wrap the message with _().

10 years agoReplace hardwired error handler in captured_main
Gary Benson [Mon, 4 Aug 2014 13:08:46 +0000 (14:08 +0100)]
Replace hardwired error handler in captured_main

If the requested interpreter cannot be set captured_main reports the
error with a hardwired fprintf/exit pair.  A fprintf/exit pair on the
previous line was replaced with a call to error in March 2003
(https://sourceware.org/ml/gdb-patches/2003-03/msg00444.html) but I
found no documentation as to why this particular hardwired handler
was left untouched.  I was also unable to come up with a situation
where error would not be suitable, so I have replaced it with a call
to error.

gdb/ChangeLog:

* main.c (captured_main): Replace a fprintf/exit
pair with a call to error.  Wrap the message with _().

10 years agoReplace hardwired error handlers in tui_initialize_io
Gary Benson [Mon, 4 Aug 2014 13:03:21 +0000 (14:03 +0100)]
Replace hardwired error handlers in tui_initialize_io

tui_initialize_io contains a pair of hardwired fprintf/exit error
handlers.  I was unable to find any documentation as to why they're
hardwired (the code appeared in a monolithic block back in 2001:
https://sourceware.org/ml/gdb-patches/2001-07/msg00490.html) and I
was also unable to come up with a situation where error would not
be suitable, so I have replaced both handlers with calls to error.

gdb/ChangeLog:

* tui/tui-io.c (tui_initialize_io): Replace two fprintf/exit
pairs with calls to error.  Wrap the message with _().

10 years agoMake warning usable earlier
Gary Benson [Tue, 5 Aug 2014 12:27:49 +0000 (13:27 +0100)]
Make warning usable earlier

warning will crash if called before the first call to set_width.  This
commit makes the warning usable from the moment gdb_stderr is set up.

gdb/ChangeLog:

* utils.c (vwarning): Protect calls to target_terminal_ours
and wrap_here.

10 years agoMake error usable earlier
Gary Benson [Tue, 5 Aug 2014 12:25:48 +0000 (13:25 +0100)]
Make error usable earlier

error (and other exception-throwing functions) are callable from the
first line of captured_main, but the exception printing code will
crash if called before the first call to set_width.  This commit makes
the exception printing code usable from the moment gdb_stderr is set
up.

gdb/ChangeLog:

* exceptions.c (print_flush): Protect calls to
target_terminal_ours and wrap_here.

10 years agoMake internal_vproblem always work
Gary Benson [Tue, 5 Aug 2014 10:42:21 +0000 (11:42 +0100)]
Make internal_vproblem always work

internal_vproblem can be called (via malloc_failure) from almost the
first line of captured_main, but it will crash if called before the
first call to set_width.  This commit makes internal_vproblem work
at any time.

There are two parts to this.  If called before gdb_stderr is set up,
internal_vproblem will fall back to printing the message on regular
stderr and aborting.  If called after gdb_stderr is set up but before
filtered printing is set up, internal_vproblem will operate as usual
except that it can not query whether to quit and/or dump core so it
defaults to doing both.

gdb/ChangeLog:

* utils.h (filtered_printing_initialized): New declaration.
* utils.c (abort_with_message): New function.
(internal_vproblem): Use abort_with_message for first level
recursive internal problems, and if gdb_stderr is not set up.
Protect calls to target_terminal_ours, begin_line and query.

10 years agoPowerPC64 call lacks nop error
Alan Modra [Fri, 29 Aug 2014 01:22:50 +0000 (10:52 +0930)]
PowerPC64 call lacks nop error

* elf64-ppc.c (ppc64_elf_relocate_section): Report a different
error for calls via a toc adjusting stub without a nop.

10 years agoPrevent alpha_vms_object_p stopping bfd_check_format_matches scan
Alan Modra [Fri, 29 Aug 2014 01:07:52 +0000 (10:37 +0930)]
Prevent alpha_vms_object_p stopping bfd_check_format_matches scan

Any error other than bfd_error_wrong_format returned from object_p()
is effectively a fatal error.

* vms-alpha.c (alpha_vma_object_p): Don't return file_truncated
error.  Remove redundant bfd_set_error.

10 years agoReport an error for S-records with less than the miniumum size
Alan Modra [Fri, 29 Aug 2014 01:06:29 +0000 (10:36 +0930)]
Report an error for S-records with less than the miniumum size

* srec.c (srec_scan): Revert last change.  Report an error for
S-records with less than the miniumum byte count.

10 years agoFix testsuite ld_simple_link_defsyms for windows targets
Alan Modra [Fri, 29 Aug 2014 00:57:44 +0000 (10:27 +0930)]
Fix testsuite ld_simple_link_defsyms for windows targets

* lib/ld-lib.exp (ld_simple_link_defsyms): Provide both __main
and ___main for windows targets.

10 years agodaily update
Alan Modra [Fri, 29 Aug 2014 00:00:41 +0000 (09:30 +0930)]
daily update

10 years agoMove definition of some prologue-related functions to a better location.
Doug Evans [Thu, 28 Aug 2014 23:15:23 +0000 (16:15 -0700)]
Move definition of some prologue-related functions to a better location.

gdb/ChangeLog:

* symtab.c (in_prologue): Move definition to better spot.
(skip_prologue_using_sal): Ditto.

10 years agosymtab.c (find_function_start_sal): Move definition to better spot.
Doug Evans [Thu, 28 Aug 2014 23:09:50 +0000 (16:09 -0700)]
symtab.c (find_function_start_sal): Move definition to better spot.

gdb/ChangeLog:

* symtab.c (find_function_start_sal): Move definition to better spot.

10 years agoRewrite {amd64,i386}-pseudo.c to better specify register liveness.
Doug Evans [Thu, 28 Aug 2014 18:38:22 +0000 (11:38 -0700)]
Rewrite {amd64,i386}-pseudo.c to better specify register liveness.

clang was using eax to construct %0 here:

  asm ("mov %%eax, 0(%0)\n\t"
       "mov %%ebx, 4(%0)\n\t"
       "mov %%ecx, 8(%0)\n\t"
       "mov %%edx, 12(%0)\n\t"
       "mov %%esi, 16(%0)\n\t"
       "mov %%edi, 20(%0)\n\t"
       : /* no output operands */
       : "r" (data)
       : "eax", "ebx", "ecx", "edx", "esi", "edi");

which caused amd64-word.exp (and others similarly) to fail.
It's a perfectly legit thing for clang to do given the available data.
The patch fixes this by marking the registers as live from the
time of the preceding breakpoint.

gdb/testsuite/ChangeLog:

* gdb.arch/amd64-pseudo.c (main): Rewrite to better specify when
eax,etc. are live with values set by gdb and thus the compiler can't
use them.
* gdb.arch/i386-pseudo.c (main): Ditto.

10 years agoCheck S-record with 0 size
H.J. Lu [Thu, 28 Aug 2014 15:22:42 +0000 (08:22 -0700)]
Check S-record with 0 size

* srec.c (srec_scan): Return error for 0 size.

10 years agoRemove fatal function and prototype
Gary Benson [Wed, 6 Aug 2014 12:23:59 +0000 (13:23 +0100)]
Remove fatal function and prototype

This commit removes the now-unused fatal function and prototype.

gdb/gdbserver/ChangeLog:

* utils.h (fatal): Remove declaration.
* utils.c (fatal): Remove function.

10 years agoConvert fatal to perror_with_name in IPA code
Gary Benson [Wed, 6 Aug 2014 13:43:17 +0000 (14:43 +0100)]
Convert fatal to perror_with_name in IPA code

This commit converts four calls to fatal into calls to
perror_with_name.  perror_with_name calls error, which
in IPA terminates with exit (1) rather than longjmp, so
there is no functional change here.

gdb/gdbserver/ChangeLog:

* tracepoint.c (gdb_agent_init): Replace fatal with
perror_with_name.
(initialize_tracepoint): Likewise.

10 years agoConvert fatal to error in remote_prepare
Gary Benson [Wed, 6 Aug 2014 12:47:55 +0000 (13:47 +0100)]
Convert fatal to error in remote_prepare

This commit converts a call to fatal in remote_prepare with a call to
error.  remote_prepare is called precisely once, from main, at a point
where jumping to toplevel will call exit (1), so error and fatal are
functionally equivalent at this point.  Note that remote_prepare calls
perror_with_name (which calls error) so callers of remote_prepare must
already handle the fact that it may exit via longjmp.

gdb/gdbserver/ChangeLog:

* remote-utils.c (remote_prepare): Replace fatal with error.

10 years agoDowngrade fatal to warning in linux_async
Gary Benson [Wed, 6 Aug 2014 10:57:14 +0000 (11:57 +0100)]
Downgrade fatal to warning in linux_async

This commit downgrades a fatal error to a warning in linux_async.
linux_async is called from two different places in gdbserver:

 Via target_async from handle_accept_event.  The argument
   is always zero, so the warning will never be printed here.

 Via start_non_stop from handle_general_set.  This prints
   its own error message to stderr on failure, which will
   be preceded by the warning if it is emitted.

gdb/gdbserver/ChangeLog:

* linux-low.c (linux_async): Replace fatal with warning.
Tidy up and return.
(linux_start_non_stop): Return -1 if linux_async failed.

10 years agoConvert fatal to gdb_assert in both i386_dr_low_set_addr
Gary Benson [Wed, 6 Aug 2014 13:00:14 +0000 (14:00 +0100)]
Convert fatal to gdb_assert in both i386_dr_low_set_addr

This commit converts if..fatal checks in both i386_dr_low_set_addr
implementations to gdb_asserts.  It's not obvious from the context,
but the conditional in both cases is changed to match the equivalent
conditional in the i386_dr_low_get_addr implementations.  Nothing
fundamental has changed because DR_FIRSTADDR is zero.  This commit
also removes a vague comment in Linux i386_dr_low_get_addr.  I could
have reworded the comment (and replicated it three times for the other
identical assertions) but I think the existence of specific functions
for the status and control registers makes it fairly obvious what is
going on.

gdb/gdbserver/ChangeLog:

* linux-x86-low.c (i386_dr_low_set_addr): Replace check with
gdb_assert.
(i386_dr_low_get_addr): Remove vague comment.
* win32-i386-low.c (i386_dr_low_set_addr): Replace check with
gdb_assert.

10 years agoStraightforward fatal to internal_error conversions
Gary Benson [Wed, 6 Aug 2014 10:56:25 +0000 (11:56 +0100)]
Straightforward fatal to internal_error conversions

This commit replaces most of the calls to fatal that represent
internal errors with calls to internal_error, either directly
or via gdb_assert and gdb_assert_not_reached.

gdb/gdbserver/ChangeLog:

* inferiors.c (get_thread_process): Replace check with gdb_assert.
* linux-low.c (linux_wait_for_event_filtered): Replace fatal with
internal_error.
(linux_resume_one_lwp): Likewise.
* linux-x86-low.c (x86_siginfo_fixup): Replace checks with
gdb_assert.
* mem-break.c (raw_bkpt_type_to_target_hw_bp_type): Replace fatal
with internal_error.
* regcache.c (get_thread_regcache): Replace check with gdb_assert.
(init_register_cache): Replace fatal with gdb_assert_not_reached.
(find_register_by_name): Replace fatal with internal_error.
(find_regno): Likewise.
* tdesc.c (init_target_desc): Replace check with gdb_assert.
* thread-db.c (thread_db_create_event): Likewise.
(thread_db_load_search): Likewise.
(try_thread_db_load_1): Likewise.
* tracepoint.c (get_jump_space_head): Replace fatal with
internal_error.
(claim_trampoline_space): Likewise.
(have_fast_tracepoint_trampoline_buffer): Likewise.
(cmd_qtstart): Likewise.
(stop_tracing): Likewise.
(fast_tracepoint_collecting): Likewise.
(target_malloc): Likewise.
(download_tracepoint): Likewise.
(download_trace_state_variables): Replace check with gdb_assert.
(upload_fast_traceframes): Replace fatal with internal_error.