binutils-gdb.git
7 years agoravenscar: update inferior ptid with event ptid
Jerome Guitton [Tue, 21 Nov 2017 22:10:01 +0000 (14:10 -0800)]
ravenscar: update inferior ptid with event ptid

When debugging a program using a ravenscar runtime, the thread
layer sometimes gets confused, and even missing some threads.
This was traced to an assumption that ravenscar_wait was making,
which is that calling the "to_wait" target_ops method would
set the inferior_ptid, so that we could then use that assumption
to update our thread_list and current ptid. However, this has not
been the case for quite a while now. This patch fixes the problem
by assigning inferior_ptid the ptid returned by "to_wait".

gdb/ChangeLog:

* ravenscar-thread.c (ravenscar_wait): Update inferior ptid
with event ptid from the lower layer before doing the
ravenscar-specific update.

7 years ago(Ada) crash connecting to TSIM simulator
Joel Brobecker [Tue, 21 Nov 2017 22:04:38 +0000 (14:04 -0800)]
(Ada) crash connecting to TSIM simulator

Connecting to a TSIM simulator over the remote protocol causes GDB
to crash with the following failed assertion:

    (gdb) tar remote :1234
    Remote debugging using :1234
    /[...]/gdb/ravenscar-thread.c:182: internal-error: ravenscar_update_inferior_ptid: Assertion `!is_ravenscar_task (inferior_ptid)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) y

What happens is the following. Upon connection to the target, GDB
sends a 'qfThreadInfo' query, which is the query asking the target
for the ID of the first thread, and TSIM replies 'm0':

    Sending packet: $qfThreadInfo#bb...Ack
    Packet received: m0

As a result of this, GDB takes the '0' as the TID, and because of it,
constructs a ptid whose value is {42000, 0, 0}. This trips our
!is_ravenscar_task check, because all it does to identify threads
corresponding to ravenscar tasks is that their lwp is null, because
that's how we construct their ptid.

But this is unfortunatly not sufficient when debugging with TSIM,
because the thread ID that TSIM returns causes the creation of
a ptid whose lwp is zero, which matches the current identification
scheme and yet is clearly not a ravenscar task.

The fix is to also make sure that the ptid's tid field is nonzero.

gdb/ChangeLog:

        * ravenscar-thread.c (is_ravenscar_task): Also verify that
        the ptid's TID is nonzero.

7 years agoproblem debugging ravenscar programs if runtime is stripped
Joel Brobecker [Tue, 21 Nov 2017 22:03:06 +0000 (14:03 -0800)]
problem debugging ravenscar programs if runtime is stripped

Trying to debug a program using a stripped version of the ravenscar
runtime, we can get the following error:

    (gdb) cont
    Continuing.
    Cannot find Ada_Task_Control_Block type. Aborting

This is because the ravenscar-thread layer makes the assumption that
the runtime is built the way we expect it, meaning that the Ada tasking
units we rely on for Ada tasking debugging, are built with debugging
information, and that this debug information has not been stripped from
the runtime.

When this assumption is not true, resuming such a program can trigger
the error above, which then leads GDB a little confused. For instance,
we can see things like:

     (gdb) bt
     Target is executing.

This patch fixes the issue by disabling the ravenscar thread layer
if we detect that the runtime is missing some of the debugging info
we need in order to support Ada task debugging. This is the best
we can do, as the ravenscar-thread layer actually depends on the
ada-tasks layer to implement thread debugging.

gdb/ChangeLog:

        * ada-lang.h (ada_get_tcb_types_info): Add declaration.
        * ada-tasks.c (ada_get_tcb_types_info): Renames get_tcb_types_info.
        Make non-static.  Change return type to char *.  Adjust code
        accordingly.  Rewrite the function's documentation.
        (read_atcb): Adjust call to get_tcb_types_info accordingly.
        * ravenscar-thread.c (ravenscar_inferior_created): Check that
        we have enough debugging information in the runtime to support
        Ada task debugging before we enable the ravenscar-thread layer.

7 years agoAdd multiple-CPU support in ravenscar-thread.c
Joel Brobecker [Tue, 21 Nov 2017 22:00:30 +0000 (14:00 -0800)]
Add multiple-CPU support in ravenscar-thread.c

This patch reworks the ravenscar-thread layer to remove the
assumption that the target only has 1 CPU. In particular,
when connected to a QEMU target over the remote protocol,
QEMU reports each CPU as one thread. This patch adapts
the ravenscar-thread layer to this, and adds a large comment
explaining the general design of this unit.

gdb/ChangeLog:

        * ada-lang.h (ada_get_task_info_from_ptid): Add declaration.
        * ada-tasks.c (ada_get_task_info_from_ptid): New function.
        * ravenscar-thread.c: Add into comment.
        (base_magic_null_ptid): Delete.
        (base_ptid): Change documentation.
        (ravenscar_active_task): Renames ravenscar_running_thread.
        All callers updated throughout.
        (is_ravenscar_task, ravenscar_get_thread_base_cpu): New function.
        (ravenscar_task_is_currently_active): Likewise.
        (get_base_thread_from_ravenscar_task): Ditto.
        (ravenscar_update_inferior_ptid): Adjust to handle multiple CPUs.
        (ravenscar_runtime_initialized): Likewise.
        (get_running_thread_id): Add new parameter "cpu".  Adjust
        implementation to handle this new parameter.
        (ravenscar_fetch_registers): Small adjustment to use
        is_ravenscar_task and ravenscar_task_is_currently_active in
        order to decide whether to use the target beneath or this
        module's arch_ops.
        (ravenscar_store_registers, ravenscar_prepare_to_store): Likewise.
        (ravenscar_stopped_by_sw_breakpoint): Use
        get_base_thread_from_ravenscar_task to get the underlying
        thread, rather than using base_ptid.
        (ravenscar_stopped_by_hw_breakpoint, ravenscar_stopped_by_watchpoint)
        (ravenscar_stopped_data_address, ravenscar_core_of_thread):
        Likewise.
        (ravenscar_inferior_created): Do not set base_magic_null_ptid.

7 years agoProvide the "Base CPU" in output of "info task" (if set by runtime).
Joel Brobecker [Tue, 21 Nov 2017 21:58:00 +0000 (13:58 -0800)]
Provide the "Base CPU" in output of "info task" (if set by runtime).

At the user level, this patch enhances the debugger to print the ID
of the base CPU a task is running on:

        (gdb) info task 3
        Ada Task: 0x13268
        Name: raven1
        Thread: 0x13280
        LWP: 0
 !!!->  Base CPU: 1
        No parent
        Base Priority: 127
        State: Runnable

This new field is only printed when the base CPU is nonzero or, in
other words, if the base CPU info is being provided by the runtime.
For instance, on native systems, where threads/processes can "jump"
from CPU to CPU, the info is not available, and the output of the
command above then remains unchanged.

At the internal level, the real purpose of this change is to prepare
the way for ravenscar-thread to start handling SMP systems. For that,
we'll need to know which CPU each task is running on...  More info
on that in the commit that actually adds support for it.

gdb/ChangeLog:

        * ada-lang.h (struct ada_task_info) <base_cpu>: New field.
        * ada-lang.c (struct atcb_fieldno) <base_cpu>: New field.
        (get_tcb_types_info): Set fieldnos.base_cpu.
        (read_atcb): Set task_info->base_cpu.
        (info_task): Print "Base CPU" info if set by runtime.

7 years agowatchpoint regression debugging with remote protocol (bare metal)
Joel Brobecker [Tue, 21 Nov 2017 21:42:48 +0000 (13:42 -0800)]
watchpoint regression debugging with remote protocol (bare metal)

We have noticed a regression in our watchpoint support when debugging
through the remote protocol a program running on a bare metal platform,
when the program uses what we call the Ravenscar Runtime.

This runtime is a subset of the Ada runtime defined by the Ravenscar
Profile.  One of the nice things about this runtime is that it provides
tasking, which is equivalent to the concept of threads in C (it is
actually often mapped to threads, when available). For bare metal
targets, however, there is no OS, and therefore no thread layer.
What we did, then, was add a ravenscar-thread layer, which has insider
knowledge of the runtime to get the list of threads, but also all
necessary info to perform thread switching.

For the record, the commit which caused the regression is:

    commit 799a2abe613be0645b84f5aaa050f2f91e6ae3f7
    Date:   Mon Nov 30 16:05:16 2015 +0000
    Subject: remote: stop reason and watchpoint data address per thread

    Running local-watch-wrong-thread.exp with "maint set target-non-stop
    on" exposes that gdb/remote.c only records whether the target stopped
    for a breakpoint/watchpoint plus the watchpoint data address *for the
    last reported remote event*.  But in non-stop mode, we need to keep
    that info per-thread, as each thread can end up with its own
    last-status pending.

Our testcase is very simple. We have a package defining a global
variable named "Watch"...

    package Pck is
       Watch : Integer := 1974;
    end Pck;

... and a main subprogram which changes its value

    procedure Foo is
    begin
       Pck.Watch := Pck.Watch + 1;
    end Foo;

To reproduce, we built our program as usual, started it in QEMU,
and then connected GDB to QEMU...

    (gdb) target remote :4444
    (gdb) break _ada_foo
    (gdb) cont  <--- this is to make sure the program is started
                     and the variable we want to watch is initialized

... at which point we try to use a watchpoint on our global variable:

    (gdb) watch watch

... but, upon resuming the execution with a "cont", we expected to
get a watchpoint-hit notification, such as...

    (gdb) cont
    Hardware watchpoint 2: watch

    Old value = 1974
    New value = 1975
    0xfff00258 in foo () at /[...]/foo.adb:6
    6       end Foo;

... but unfortunately, we get a SIGTRAP instead:

    (gdb) cont
    Program received signal SIGTRAP, Trace/breakpoint trap.
    foo () at /[...]/foo.adb:6
        6   end Foo;

What happens is that, on the one hand, the change in remote.c
now stores the watchpoint-hit notification info in the thread
that received it; and on the other hand, we have a ravenscar-thread
layer which manages the thread list on top of the remote protocol
layer. The two of them get disconnected, and this eventually results
in GDB not realizing that we hit a watchpoint.  Below is how:

First, once connected and just before inserting our watchpoint,
we have the ravenscar-thread layer which built the list of threads
by extracting some info from inferior memory, giving us the following
two threads:

      (gdb) info threads
      Id   Target Id         Frame
      1    Thread 0 "0Q@" (Ravenscar task) foo () at /[...]/foo.adb:5
    * 2    Thread 0x24618 (Ravenscar task) foo () at /[...]/foo.adb:5

The first thread is the only thread QEMU told GDB about. The second
one is a thread that the ravenscar-thread added. QEMU has now way
to know about those threads, since they are really embedded inside
the program; that's why we have the ravenscar layer, which uses
inside-knowledge to extract the list of threads.

Next, we insert a watchpoint, which applies to all threads. No problem
so far.

Then, we continue; meaning that GDB sends a Z2 packet to QEMU to
get the watchpoint inserted, then a vCont to resume the program's
execution. The program hits the watchpoints, and thererfore QEMU
reports it back:

        Packet received: T05thread:01;watch:000022c4;

Since QEMU knows about one thread and one thread only, it stands
to reason that it would say that the event applies to thread:01,
which is our first thread in the "info threads" listing. That
thread has a ptid of {42000, lwp=1, tid=0}.

This is where Pedro's change kicks in: Seeing this event, and
having determined that the event was reported for thread 01,
and therefore ptid {42000, lwp=1, tid=0}, it saves the watchpoint-hit
event info in the private area of that thread/ptid. Once this is
done, remote.c's event-wait layer returns.

Enter the ravenscar-thread layer of the event-wait, which does
a little dance to delegate the wait to underlying layers with
ptids that those layers know about, and then when the target_beneath's
to_wait is done, tries to figure out which thread is now the active
thread. The code looks like this:

  1.    inferior_ptid = base_ptid;
  2.    beneath->to_wait (beneath, base_ptid, status, 0);
  3.    [...]
  4.        ravenscar_update_inferior_ptid ();
  5.
  6.    return inferior_ptid;

Line 1 is where we reset inferior_ptid to the ptid that
the target_beneath layer knows about, allowing us to then
call its to_wait implementation (line 2). And then, upon
return, we call ravenscar_update_inferior_ptid, which reads
inferior memory to determine which thread is actually active,
setting inferior_ptid accordingly. Then we return that
inferior_ptid (which, again, neither QEMU and therefore nor
the remote.c layer knows about).

Upon return, we eventually arrive to the part where we try
to handle the inferior event: we discover that we got a SIGTRAP
and, as part of its handling, we call watchpoints_triggered,
which calls target_stopped_by_watchpoint, which eventually
remote_stopped_by_watchpoint, where Pedro's change kicks in
again:

    struct thread_info *thread = inferior_thread ();
    return (thread->priv != NULL
            && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);

Because the ravenscar-thread layer changed the inferior_ptid
to the ptid of the active thread, inferior_thread now returns
the private data of that thread. This is not the thread that
QEMU reported the watchpoint-hit on, and thus, the function
returns "no watchpoint hit, mister". Hence GDB not understanding
the SIGTRAP, thus reporting it verbatim.

The way we chose to fix the issue is by making sure that the
ravenscar-thread layer doesn't let the remote layer be called
with inferior_ptid being set to a thread that the remote layer
does not know about.

gdb/ChangeLog:

        * ravenscar-thread.c (ravenscar_stopped_by_sw_breakpoint)
        (ravenscar_stopped_by_hw_breakpoint, ravenscar_stopped_by_watchpoint)
        (ravenscar_stopped_data_address, ravenscar_core_of_thread):
        New functions.
        (init_ravenscar_thread_ops): Set the to_stopped_by_sw_breakpoint,
        to_stopped_by_hw_breakpoint, to_stopped_by_watchpoint,
        to_stopped_data_address and to_core_of_thread fields of
        ravenscar_ops.

7 years agoAdd a test for PR binutils/22451
H.J. Lu [Tue, 21 Nov 2017 21:41:10 +0000 (13:41 -0800)]
Add a test for PR binutils/22451

Check in the object file generated from the older assembler as a
compressed file.

PR binutils/22451
* testsuite/binutils-all/x86-64/objects.exp: New file.
* testsuite/binutils-all/x86-64/pr22451.o.bz2: Likewise.

7 years ago[PowerPC] Detect different long double floating-point formats
Ulrich Weigand [Tue, 21 Nov 2017 17:50:59 +0000 (18:50 +0100)]
[PowerPC] Detect different long double floating-point formats

Current versions of GCC support switching the format used for "long double"
to either IBM double double or IEEE-128.  The resulting binary is marked
via different setting of the Tag_GNU_Power_ABI_FP GNU attribute.

This patch checks this attribute to detect the format of the default
"long double" type and sets GDB's notion of the format accordingly.

The patch also adds support for the "__ibm128" type, which always uses
IBM double double format independent of the format used for "long double".

A new test case verifies that all three types, "long double", "__float128",
and "__ibm128" are correctly detected in all three compiler settings,
the default setting, -mabi=ieeelongdouble, and -mabi=ibmlongdouble.

gdb/ChangeLog:
2017-11-21  Ulrich Weigand  <uweigand@de.ibm.com>

* ppc-tdep.h (enum powerpc_long_double_abi): New data type.
(struct gdbarch_tdep): New member long_double_abi.
* rs6000-tdep.c (rs6000_gdbarch_init): Initialize long_double_abi
member of tdep struct based on Tag_GNU_Power_ABI_FP attribute.
* ppc-linux-tdep.c (ppc_linux_init_abi): Install long double data
format depending on long_double_abi tdep member.
(ppc_floatformat_for_type): Handle __ibm128 type.

gdb/testsuite/ChangeLog:
2017-11-21  Ulrich Weigand  <uweigand@de.ibm.com>

* gdb.arch/ppc-longdouble.exp: New file.
* gdb.arch/ppc-longdouble.c: Likewise.

7 years agogdb.ada/minsyms.exp: Don't hardcode the variable's address
Pedro Alves [Tue, 21 Nov 2017 16:04:42 +0000 (16:04 +0000)]
gdb.ada/minsyms.exp: Don't hardcode the variable's address

This new testcase has a test that fails like this here:

  $1 = (<data variable, no debug info> *) 0x60208c <some_minsym>
  (gdb) FAIL: gdb.ada/minsyms.exp: print &some_minsym

The problem is that the testcase hardcodes an expected address for the
"some_minsym" variable, which obviously isn't stable.

Fix that by expecting $hex instead.

gdb/testsuite/ChangeLog:
2017-11-21  Pedro Alves  <palves@redhat.com>

* gdb.ada/minsyms.exp: Accept any address for 'some_minsym'.

7 years agoStop the v850 linker from converting to other output formats whilst linking.
Nick Clifton [Tue, 21 Nov 2017 14:15:51 +0000 (14:15 +0000)]
Stop the v850 linker from converting to other output formats whilst linking.

PR 22419
* emultempl/v850elf.em (v850_create_output_section_statements):
New function.  Generate an error if attempting to convert the
format of the output file.
* testsuite/ld-unique/pr21529.d: Skip for the V850.
* testsuite/ld-elf/pr21884.d: Skip for the V850.

7 years ago[ARC] [COMMITTED] Update test pattern patching.
claziss [Tue, 21 Nov 2017 14:04:22 +0000 (15:04 +0100)]
[ARC] [COMMITTED] Update test pattern patching.

2017-11-21  Claudiu Zissulescu  <claziss@synopsys.com>

* testsuite/binutils-all/arc/objdump.exp: Update pattern matching
expression.

7 years ago[ARC] Improve printing of pc-relative instructions.
claziss [Tue, 21 Nov 2017 13:03:03 +0000 (14:03 +0100)]
[ARC] Improve printing of pc-relative instructions.

opcodes/
2017-11-21  Claudiu Zissulescu <claziss@synopsys.com>

* arc-dis.c (print_insn_arc): Pretty print pc-relative offsets.
* arc-opc.c (SIMM21_A16_5): Make it pc-relative.

gas/
2017-11-21  Claudiu Zissulescu <claziss@synopsys.com>

* testsuite/gas/arc/b.d : Update test.
* testsuite/gas/arc/bl.d: Likewise.
* testsuite/gas/arc/jli-1.d: Likewise.
* testsuite/gas/arc/lp.d: Likewise.
* testsuite/gas/arc/pcl-relocs.d: Likewise.
* testsuite/gas/arc/pcrel-relocs.d: Likewise.
* testsuite/gas/arc/pic-relocs.d: Likewise.
* testsuite/gas/arc/plt-relocs.d: Likewise.
* testsuite/gas/arc/pseudos.d: Likewise.
* testsuite/gas/arc/relax-avoid2.d: Likewise.
* testsuite/gas/arc/relax-avoid3.d: Likewise.
* testsuite/gas/arc/relax-b.d: Likewise.
* testsuite/gas/arc/tls-relocs.d: Likewise.
* testsuite/gas/arc/relax-add01.d: Likewise.
* testsuite/gas/arc/relax-add04.d: Likewise.
* testsuite/gas/arc/relax-ld01.d: Likewise.
* testsuite/gas/arc/relax-sub01.d: Likewise.
* testsuite/gas/arc/relax-sub02.d: Likewise.
* testsuite/gas/arc/relax-sub04.d: Likewise.
* testsuite/gas/arc/pcl-print.s: New file.
* testsuite/gas/arc/pcl-print.d: Likewise.
* testsuite/gas/arc/nps400-12.d: Likewise.

ld/
2017-11-21  Claudiu Zissulescu <claziss@synopsys.com>

* testsuite/ld-arc/jli-simple.d: Update test.

7 years agoAdd ability to follow dwo links to readelf/objdump.
Nick Clifton [Tue, 21 Nov 2017 13:12:04 +0000 (13:12 +0000)]
Add ability to follow dwo links to readelf/objdump.

* dwarf.c (dwo_name, dwo_dir, dwo_id, dwo_id_len): New variables.
(read_and_display_attr_value): Record dwo variables if requested.
(display_augmentation_data): Rename to display_data and make
generic.
(load_dwo_file): New function.  Loads a separate dwarf object
file.
(load_separate_debug_file): Add reporting and loading of separate
dwarf objet files.
* readelf.c (process_section_headers): Add do_debug_links to list
of flags requiring a debug dump.
(display_debug_section): Tidy up code.
* doc/debug.options.texi: Add note that dwo links will also be
followed.
* testsuite/binutils-all/debuglink.s: Tidy code.
* testsuite/binutils-all/dwo.s: New test file.
* testsuite/binutils-all/readelf.wk2: New file - expected output
from readelf.
* testsuite/binutils-all/readelf.exp: Run the new test.

7 years agoFix build failure in darwin-nat.c
Simon Marchi [Tue, 21 Nov 2017 04:29:10 +0000 (23:29 -0500)]
Fix build failure in darwin-nat.c

Fix:

/Users/simark/src/binutils-gdb/gdb/darwin-nat.c:2404:3: error: no matching function for call to 'add_setshow_boolean_cmd'
  add_setshow_boolean_cmd ("mach-exceptions", class_support,
  ^~~~~~~~~~~~~~~~~~~~~~~

gdb/ChangeLog:

* darwin-nat.c (set_enable_mach_exceptions): Constify parameter.

7 years agoAdd NULL bfd test to elf_symbol_from
Alan Modra [Mon, 20 Nov 2017 23:34:05 +0000 (10:04 +1030)]
Add NULL bfd test to elf_symbol_from

A followup to PR22443.

* elf-bfd.h (elf_symbol_from): Check for NULL symbol bfd.
* elfcode.h (elf_slurp_reloc_table_from_section): Add FIXME comment.

7 years agoxtensa error message
Alan Modra [Mon, 20 Nov 2017 23:55:18 +0000 (10:25 +1030)]
xtensa error message

* config/tc-xtensa.c (finish_vinsn): Avoid multiple ngettext calls
in error message.

7 years agoFix mapped_index::find_name_components_bounds upper bound computation
Pedro Alves [Tue, 21 Nov 2017 00:02:46 +0000 (00:02 +0000)]
Fix mapped_index::find_name_components_bounds upper bound computation

Here we want to find where we'd insert "after", so we want
std::lower_bound, not std::upper_bound.

gdb/ChangeLog:
2017-11-21  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (mapped_index::find_name_components_bounds)
<completion mode, upper bound>: Use std::lower_bound instead of
std::upper_bound.
(test_mapped_index_find_name_component_bounds): Remove incorrect
"t1_fund" from expected symbols.

7 years agoUnit test name-component bounds searching directly
Pedro Alves [Tue, 21 Nov 2017 00:02:46 +0000 (00:02 +0000)]
Unit test name-component bounds searching directly

This commit factors out the name-components-vector building and bounds
searching out of dw2_expand_symtabs_matching_symbol into separate
functions, and adds unit tests that:

 - expose both the latent bug mentioned in the previous commit, and
   also,

 - for completeness exercise the 0xff character handling fixed in the
   previous commit more directly.

The actual fix for the now-exposed bug is left for the following
patch.

gdb/ChangeLog:
2017-11-21  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (mapped_index::name_components_casing): New field.
(mapped_index) <build_name_components,
find_name_components_bounds): Declare new methods.
(mapped_index::find_name_components_bounds)
(mapped_index::build_name_components): New methods, factored out
from dw2_expand_symtabs_matching_symbol.
(check_find_bounds_finds)
(test_mapped_index_find_name_component_bounds): New.
(run_test): Rename to ...
(test_dw2_expand_symtabs_matching_symbol): ... this.
(run_test): Reimplement.

7 years ago0xff chars in name components table; cp-name-parser lex UTF-8 identifiers
Pedro Alves [Tue, 21 Nov 2017 00:02:46 +0000 (00:02 +0000)]
0xff chars in name components table; cp-name-parser lex UTF-8 identifiers

The find-upper-bound-for-completion algorithm in the name components
accelerator table in dwarf2read.c increments a char in a string, and
asserts that it's not incrementing a 0xff char, but that's incorrect.

First, we shouldn't be calling gdb_assert on input.

Then, if "char" is signed, comparing a caracther with "0xff" will
never yield true, which is caught by Clang with:

  error: comparison of constant 255 with expression of type '....' (aka 'char') is always true [-Werror,-Wtautological-constant-out-of-range-compare]
    gdb_assert (after.back () != 0xff);
~~~~~~~~~~~~~ ^  ~~~~

And then, 0xff is a valid character on non-UTF-8/ASCII character sets.
E.g., it's 'ΓΏ' in Latin1.  While GCC nor Clang support !ASCII &&
!UTF-8 characters in identifiers (GCC supports UTF-8 characters only
via UCNs, see https://gcc.gnu.org/onlinedocs/cpp/Character-sets.html),
but other compilers might (Visual Studio?), so it doesn't hurt to
handle it correctly.  Testing is covered by extending the
dw2_expand_symtabs_matching unit tests with relevant cases.

However, without further changes, the unit tests still fail...  The
problem is that cp-name-parser.y assumes that identifiers are ASCII
(via ISALPHA/ISALNUM).  This commit fixes that too, so that we can
unit test the dwarf2read.c changes.  (The regular C/C++ lexer in
c-lang.y needs a similar treatment, but I'm leaving that for another
patch.)

While doing this, I noticed a thinko in the computation of the upper
bound for completion in dw2_expand_symtabs_matching_symbol.  We're
using std::upper_bound but we should use std::lower_bound.  I extended
the unit test with a case that I thought would expose it, this one:

 +  /* These are used to check that the increment-last-char in the
 +     matching algorithm for completion doesn't match "t1_fund" when
 +     completing "t1_func".  */
 +  "t1_func",
 +  "t1_func1",
 +  "t1_fund",
 +  "t1_fund1",

The algorithm actually returns "t1_fund1" as lower bound, so "t1_fund"
matches incorrectly.  But turns out the problem is masked because
later here:

  for (;lower != upper; ++lower)
    {
      const char *qualified = index.symbol_name_at (lower->idx);

      if (!lookup_name_matcher.matches (qualified)

the lookup_name_matcher.matches check above filters out "t1_fund"
because that doesn't start with "t1_func".

I'll fix the latent bug in follow up patches, after factoring things
out a bit in a way that allows unit testing the relevant code more
directly.

gdb/ChangeLog:
2017-11-21  Pedro Alves  <palves@redhat.com>

* cp-name-parser.y (cp_ident_is_alpha, cp_ident_is_alnum): New.
(symbol_end): Use cp_ident_is_alnum.
(yylex): Use cp_ident_is_alpha and cp_ident_is_alnum.
* dwarf2read.c (make_sort_after_prefix_name): New function.
(dw2_expand_symtabs_matching_symbol): Use it.
(test_symbols): Add more symbols.
(run_test): Add tests.

7 years agoAutomatic date update in version.in
GDB Administrator [Tue, 21 Nov 2017 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoFix gdb.base/whatis-ptype-typedefs.exp on 32-bit archs
Pedro Alves [Mon, 20 Nov 2017 23:03:17 +0000 (23:03 +0000)]
Fix gdb.base/whatis-ptype-typedefs.exp on 32-bit archs

The gdb.base/whatis-ptype-typedefs.exp testcase has several tests that
fail on 32-bit architectures.  E.g., on 'x86-64 -m32', I see:

 ...
 FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: whatis (float_typedef) v_uchar_array_t_struct_typedef (invalid)
 FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: ptype (float_typedef) v_uchar_array_t_struct_typedef (invalid)
 ...

gdb.log:

 (gdb) whatis (float_typedef) v_uchar_array_t_struct_typedef
 type = float_typedef
 (gdb) FAIL: gdb.base/whatis-ptype-typedefs.exp: lang=c: cast: whatis (float_typedef) v_uchar_array_t_struct_typedef (invalid)

As Simon explained [1], the issue boils down to the fact that on
64-bit, this is an invalid cast:

 (gdb) p (float_typedef) v_uchar_array_t_struct_typedef
 Invalid cast.

while on 32 bits it is valid:

 (gdb) p (float_typedef) v_uchar_array_t_struct_typedef
 $1 = 1.16251721e-41

The expression basically tries to cast an array (which decays to a
pointer) to a float.  The cast works on 32 bits because a float and a
pointer are of the same size, and value_cast works in that case:

~~~
   More general than a C cast: accepts any two types of the same length,
   and if ARG2 is an lvalue it can be cast into anything at all.  */
~~~

On 64 bits, they are not the same size, so it ends throwing the
"Invalid cast" error.

The testcase is expecting the invalid cast behavior, thus the FAILs.

A point of these tests was to cover as many code paths in value_cast
as possible, as a sort of documentation of the current behavior:

    # The main idea here is testing all the different paths in the
    # value casting code in GDB (value_cast), making sure typedefs are
    # preserved.
...
    # We try all combinations, even those that don't parse, or are
    # invalid, to catch the case of a regression making them
    # inadvertently valid.  For example, these convertions are
    # invalid:
...

In that spirit, this commit makes the testcase adjust itself depending
on size of floats and pointers, and also test floats of different
sizes.

Passes cleanly on x86-64 GNU/Linux both -m64/-m32.

[1] - https://sourceware.org/ml/gdb-patches/2017-11/msg00382.html

gdb/ChangeLog:
2017-11-20  Pedro Alves  <palves@redhat.com>

* gdb.base/whatis-ptype-typedefs.c (double_typedef)
(long_double_typedef): New typedefs.
Use DEF on double and long double.
* gdb.base/whatis-ptype-typedefs.exp: Add double and long double
cases.
(run_tests): New 'float_ptr_same_size', 'double_ptr_same_size',
and 'long_double_ptr_same_size' locals.  Use them to decide
whether cast from array/function to float is valid/invalid.

7 years agoFix handling of GNU Property notes that are not in a GNU NOTE PROPERTY section.
Nick Clifton [Mon, 20 Nov 2017 15:32:55 +0000 (15:32 +0000)]
Fix handling of GNU Property notes that are not in a GNU NOTE PROPERTY section.

PR 22450
gas * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Skip
objects without a GNU_PROPERTY note section when looking for a bfd
onto which notes can be accumulated.

ld * testsuite/ld-elf/elf.exp: Add --defsym ALIGN=2|3 to assembler
command line depending upon the size of the target address space.
* testsuite/ld-elf/pr22450.s: New test file.
* testsuite/ld-elf/pr22450.d: New test driver.
* testsuite/config/default.exp: Add note that LD_CLASS refers to
the size of the host linker not the size of the target linker.

7 years agomingw gas testsuite fix
Alan Modra [Mon, 20 Nov 2017 11:34:30 +0000 (22:04 +1030)]
mingw gas testsuite fix

Some x86_64 targets pad sections with nops.

* testsuite/gas/i386/x86-64-reg-bad.l: Accept trailing padding.

7 years agoPR22451, strip no longer works on older object files
Alan Modra [Mon, 20 Nov 2017 11:05:09 +0000 (21:35 +1030)]
PR22451, strip no longer works on older object files

Setting SHF_GROUP unconditionally on rel/rela sections associated with
SHF_GROUP sections fails badly with objcopy/strip and ld -r if the
input file SHT_GROUP section didn't specify the rel/rela sections.
This patch rearranges where SHF_GROUP is set for rel/rela sections.

PR 22451
PR 22460
* elf.c (_bfd_elf_init_reloc_shdr): Delete "sec_hdr" parameter
and leave rel_hdr->sh_flags zero.  Update calls.
(bfd_elf_set_group_contents): Check input rel/rela SHF_GROUP
flag when !gas before adding rel/rela section to group.  Set
output rel/rela SHF_GROUP flags.

7 years agoRemove usage of find_inferior when calling kill_one_lwp_callback
Simon Marchi [Mon, 20 Nov 2017 03:23:28 +0000 (22:23 -0500)]
Remove usage of find_inferior when calling kill_one_lwp_callback

Replace with for_each_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (kill_one_lwp_callback): Return void, take
argument directly, don't filter on pid.
(linux_kill): Use for_each_thread.

7 years agoRemove usages of find_thread when calling need_step_over_p
Simon Marchi [Mon, 20 Nov 2017 03:23:27 +0000 (22:23 -0500)]
Remove usages of find_thread when calling need_step_over_p

Replace with find_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (need_step_over_p): Return bool, remove dummy
argument.
(linux_resume, proceed_all_lwps): Use find_thread.

7 years agoRemove usage of find_thread when calling resume_status_pending_p
Simon Marchi [Mon, 20 Nov 2017 03:23:26 +0000 (22:23 -0500)]
Remove usage of find_thread when calling resume_status_pending_p

Replace with find_thread.  Instead of setting the flag in the callback,
make the callback return true/false, and check the result against NULL
in the caller.

gdb/gdbserver/ChangeLog:

* linux-low.c (resume_status_pending_p): Return bool, remove
flag_p argument.
(linux_resume): Use find_thread.

7 years agoRemove usage of find_inferior when calling linux_set_resume_request
Simon Marchi [Mon, 20 Nov 2017 03:23:26 +0000 (22:23 -0500)]
Remove usage of find_inferior when calling linux_set_resume_request

Replace it with for_each_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (struct thread_resume_array): Remove.
(linux_set_resume_request): Return void, take arguments
directly.
(linux_resume): Use for_each_thread.

7 years agoRemove usage of find_inferior in linux_stabilize_threads
Simon Marchi [Mon, 20 Nov 2017 03:23:25 +0000 (22:23 -0500)]
Remove usage of find_inferior in linux_stabilize_threads

Simply replace with find_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (stuck_in_jump_pad_callback): Change prototype,
return bool, remove data argument.
(linux_stabilize_threads): Use find_thread.

7 years agoRemove usage of find_inferior in unsuspend_all_lwps
Simon Marchi [Mon, 20 Nov 2017 03:23:24 +0000 (22:23 -0500)]
Remove usage of find_inferior in unsuspend_all_lwps

Replace with for_each_thread.  I inlined unsuspend_one_lwp in
unsuspend_all_lwps, since it is very simple.

gdb/gdbserver/ChangeLog:

* linux-low.c (unsuspend_one_lwp): Remove.
(unsuspend_all_lwps): Use for_each_thread, inline code from
unsuspend_one_lwp.

7 years agoRemove usage of find_inferior in iterate_over_lwps
Simon Marchi [Mon, 20 Nov 2017 03:23:23 +0000 (22:23 -0500)]
Remove usage of find_inferior in iterate_over_lwps

Replace find_inferior with find_thread.  Since it may be useful in the
future, I added another overload to find_thread which filters based on a
ptid (using ptid_t::matches), so now iterate_over_lwps doesn't have to
do the filtering itself.  iterate_over_lwps_filter is removed and
inlined into iterate_over_lwps.

gdb/gdbserver/ChangeLog:

* gdbthread.h (find_thread): Add overload with ptid_t filter.
* linux-low.c (struct iterate_over_lwps_args): Remove.
(iterate_over_lwps_filter): Remove.
(iterate_over_lwps): Use find_thread.

7 years agoRemove usage of find_inferior in reset_lwp_ptrace_options_callback
Simon Marchi [Mon, 20 Nov 2017 03:23:22 +0000 (22:23 -0500)]
Remove usage of find_inferior in reset_lwp_ptrace_options_callback

Replace with for_each_thread, and inline code from
reset_lwp_ptrace_options_callback.

gdb/gdbserver/ChangeLog:

* linux-low.c (reset_lwp_ptrace_options_callback): Remove.
(linux_handle_new_gdb_connection): Use for_each_thread, inline
code from reset_lwp_ptrace_options_callback.

7 years agoRemove usages of find_inferior in linux-arm-low.c
Simon Marchi [Mon, 20 Nov 2017 03:23:22 +0000 (22:23 -0500)]
Remove usages of find_inferior in linux-arm-low.c

Replace two usages with the overload of for_each_thread that filters on
pid.  It allows to simplify the callback a little bit.

gdb/gdbserver/ChangeLog:

* linux-arm-low.c (struct update_registers_data): Remove.
(update_registers_callback): Return void, take arguments
directly, don't check thread's pid.
(arm_insert_point, arm_remove_point): Use for_each_thread.

7 years agoRemove usage of find_inferior in win32-low.c
Simon Marchi [Mon, 20 Nov 2017 03:23:21 +0000 (22:23 -0500)]
Remove usage of find_inferior in win32-low.c

Replace with for_each_thread.

gdb/gdbserver/ChangeLog:

* win32-low.c (continue_one_thread): Return void, take argument
directly.
(child_continue): Use for_each_thread.

7 years agoRemove usage of find_inferior in win32-i386-low.c
Simon Marchi [Mon, 20 Nov 2017 03:23:20 +0000 (22:23 -0500)]
Remove usage of find_inferior in win32-i386-low.c

Straightforward replacement of find_inferior with the overload of
for_each_thread that filters on pid.  I am able to build-test this
patch, but not run it.

gdb/gdbserver/ChangeLog:

* win32-i386-low.c (update_debug_registers_callback): Rename
to ...
(update_debug_registers): ... this, return void, remove pid_p arg.
(x86_dr_low_set_addr, x86_dr_low_set_control): Use for_each_thread.

7 years agoFix typo in ChangeLog entry.
Cary Coutant [Mon, 20 Nov 2017 02:02:31 +0000 (18:02 -0800)]
Fix typo in ChangeLog entry.

7 years agoFix DWARF reader to use correct size for DW_FORM_ref_addr.
Cary Coutant [Mon, 20 Nov 2017 01:56:30 +0000 (17:56 -0800)]
Fix DWARF reader to use correct size for DW_FORM_ref_addr.

2017-11-19  Ian Lance Taylor  <iant@google.com>
    Cary Coutant  <ccoutant@gmail.com>

gold/
* gold/dwarf_reader.h (class Dwarf_info_reader): Add ref_addr_size
method.
* gold/dwarf_reader.cc (Dwarf_die::read_attributes): Use ref_addr_size
for DW_FORM_ref_addr_size.
(Dwarf_die::skip_attributes): Likewise.

7 years agoAutomatic date update in version.in
GDB Administrator [Mon, 20 Nov 2017 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoFix error message typo.
Jim Wilson [Sun, 19 Nov 2017 01:03:08 +0000 (17:03 -0800)]
Fix error message typo.

bfd/
* elfnn-riscv.c (_bfd_riscv_relax_align): Add space between alignment
and to in error message.

7 years agoAutomatic date update in version.in
GDB Administrator [Sun, 19 Nov 2017 00:00:28 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoPR22443, Global buffer overflow in _bfd_elf_get_symbol_version_string
Alan Modra [Sat, 18 Nov 2017 12:48:22 +0000 (23:18 +1030)]
PR22443, Global buffer overflow in _bfd_elf_get_symbol_version_string

Symbols like *ABS* defined in bfd/section.c:global_syms are not
elf_symbol_type.  They can appear on relocs and perhaps other places
in an ELF bfd, so a number of places in nm.c and objdump.c are wrong
to cast an asymbol based on the bfd being ELF.  I think we lose
nothing by excluding all section symbols, not just the global_syms.

PR 22443
* nm.c (sort_symbols_by_size): Don't attempt to access
section symbol internal_elf_sym.
(print_symbol): Likewise.  Don't call bfd_get_symbol_version_string
for section symbols.
* objdump.c (compare_symbols): Don't attempt to access
section symbol internal_elf_sym.
(objdump_print_symname): Don't call bfd_get_symbol_version_string
for section symbols.

7 years agoAutomatic date update in version.in
GDB Administrator [Sat, 18 Nov 2017 00:00:10 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoFinish fixing riscv gas lns-common-1 failure, and lns-duplicate.
Jim Wilson [Fri, 17 Nov 2017 22:47:52 +0000 (14:47 -0800)]
Finish fixing riscv gas lns-common-1 failure, and lns-duplicate.

binutils/
* readelf.c (elf/riscv.h): Alphabetize include.
(is_32bit_inplace_add_reloc, is_32bit_inplace_sub_reloc)
(is_64bit_inplace_add_reloc, is_64bit_inplace_sub_reloc)
(is_16bit_inplace_add_reloc, is_16bit_inplace_sub_reloc)
(is_8bit_inplace_add_reloc, is_8bit_inplace_sub_reloc): New.
(apply_relocations): New locals reloc_inplace and reloc_subtract.
Call the new functions and set the new locals.  Call byte_get if
reloc_inplace.  Subtract sym->st_value if reloc_subtract.

7 years agoUse an enum to represent subclasses of symbol
Tom Tromey [Fri, 17 Nov 2017 19:05:58 +0000 (12:05 -0700)]
Use an enum to represent subclasses of symbol

This changes struct symbol to use an enum to encode the concrete
subclass of a particular symbol.  Note that "enum class" doesn't work
properly with bitfields, so a plain enum is used.

2017-11-17  Tom Tromey  <tom@tromey.com>

* symtab.h (enum symbol_subclass_kind): New.
(struct symbol) <is_cplus_template_function, is_rust_vtable>:
Remove.
<subclass>: New member.
(SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION): Update.
* rust-lang.c (rust_get_trait_object_pointer): Update.
* dwarf2read.c (read_func_scope): Update.
(read_variable): Update.

7 years agoMake template_symbol derive from symbol
Tom Tromey [Fri, 17 Nov 2017 18:55:38 +0000 (11:55 -0700)]
Make template_symbol derive from symbol

This changes template_symbol to derive from symbol, which seems a bit
cleaner; and also more consistent with rust_vtable_symbol.

2017-11-17  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (read_func_scope): Update.
* symtab.h (struct template_symbol): Derive from symbol.
<base>: Remove.

7 years agoHandle dereferencing Rust trait objects
Tom Tromey [Thu, 6 Jul 2017 12:44:38 +0000 (06:44 -0600)]
Handle dereferencing Rust trait objects

In Rust, virtual tables work a bit differently than they do in C++.  In
C++, as you know, they are connected to a particular class hierarchy.
Rust, instead, can generate a virtual table for potentially any type --
in fact, one such virtual table for each trait (a trait is similar to an
abstract class or to a Java interface) that a type implements.

Objects that are referenced via a trait can't currently be inspected by
gdb.  This patch implements the Rust equivalent of "set print object".

gdb relies heavily on the C++ ABI to decode virtual tables; primarily to
make "set print object" work; but also "info vtbl".  However, Rust does
not currently have a specified ABI, so this approach seems unwise to
emulate.

Instead, I've changed the Rust compiler to emit some DWARF that
describes trait objects (previously their internal structure was
opaque), vtables (currently just a size -- but I hope to expand this in
the future), and the concrete type for which a vtable was emitted.

The concrete type is expressed as a DW_AT_containing_type on the
vtable's type.  This is a small extension to DWARF.

This patch adds a new entry to quick_symbol_functions to return the
symtab that holds a data address.  Previously there was no way in gdb to
look up a full (only minimal) non-text symbol by address.  The psymbol
implementation of this method works by lazily filling in a map that is
added to the objfile.  This avoids slowing down psymbol reading for a
feature that is likely to not be used too frequently.

I did not update .gdb_index.  My thinking here is that the DWARF 5
indices will obsolete .gdb_index soon-ish, meaning that adding a new
feature to them is probably wasted work.  If necessary I can update the
DWARF 5 index code when it lands in gdb.

Regression tested on x86-64 Fedora 25.

2017-11-17  Tom Tromey  <tom@tromey.com>

* symtab.h (struct symbol) <is_rust_vtable>: New member.
(struct rust_vtable_symbol): New.
(find_symbol_at_address): Declare.
* symtab.c (find_symbol_at_address): New function.
* symfile.h (struct quick_symbol_functions)
<find_compunit_symtab_by_address>: New member.
* symfile-debug.c (debug_qf_find_compunit_symtab_by_address): New
function.
(debug_sym_quick_functions): Link to
debug_qf_find_compunit_symtab_by_address.
* rust-lang.c (rust_get_trait_object_pointer): New function.
(rust_evaluate_subexp) <case UNOP_IND>: New case.  Call
rust_get_trait_object_pointer.
* psymtab.c (psym_relocate): Clear psymbol_map.
(psym_fill_psymbol_map, psym_find_compunit_symtab_by_address): New
functions.
(psym_functions): Link to psym_find_compunit_symtab_by_address.
* objfiles.h (struct objfile) <psymbol_map>: New member.
* dwarf2read.c (dwarf2_gdb_index_functions): Update.
(process_die) <DW_TAG_variable>: New case.  Call read_variable.
(rust_containing_type, read_variable): New functions.

2017-11-17  Tom Tromey  <tom@tromey.com>

* gdb.rust/traits.rs: New file.
* gdb.rust/traits.exp: New file.

7 years agoRemove DEF_VEC_I (int)
Simon Marchi [Fri, 17 Nov 2017 18:02:25 +0000 (13:02 -0500)]
Remove DEF_VEC_I (int)

Now that all its usages are removed, we can get rid of DEF_VEC_I (int).

gdb/ChangeLog:

* common/gdb_vecs.h (DEF_VEC_I (int)): Remove.

7 years agoMake process_info::syscalls_to_catch an std::vector
Simon Marchi [Fri, 17 Nov 2017 18:02:25 +0000 (13:02 -0500)]
Make process_info::syscalls_to_catch an std::vector

This patch makes the syscalls_to_catch field of process_info an
std::vector<int>.  The process_info structure must now be
newed/deleted.

In handle_extended_wait, the code that handles exec events destroys the
existing process_info and creates a new one.  It moves the content of
syscalls_to_catch from the old to the new vector.  I used std::move for
that (through an intermediary variable), which should have the same
behavior as the old code.

gdb/gdbserver/ChangeLog:

* inferiors.h (struct process_info): Add constructor, initialize
fields..
<syscalls_to_catch>: Change type to std::vector<int>.
* inferiors.c (add_process): Allocate process_info with new.
(remove_process): Free process_info with delete.
* linux-low.c (handle_extended_wait): Adjust.
(gdb_catching_syscalls_p, gdb_catch_this_syscall_p): Adjust.
* server.c (handle_general_set): Adjust.

7 years agoMake open_fds an std::vector
Simon Marchi [Fri, 17 Nov 2017 18:02:24 +0000 (13:02 -0500)]
Make open_fds an std::vector

Simple replacement of VEC with std::vector.

gdb/ChangeLog:

* common/filestuff.c: Include <algorithm>.
(open_fds): Change type to std::vector<int>.
(do_mark_open_fd): Adjust.
(unmark_fd_no_cloexec): Adjust.
(do_close): Adjust.

7 years agoMake output_thread_groups take an std::vector<int>
Simon Marchi [Fri, 17 Nov 2017 18:02:23 +0000 (13:02 -0500)]
Make output_thread_groups take an std::vector<int>

A simple replacement of VEC with std::vector.

gdb/ChangeLog:

* breakpoint.c (output_thread_groups): Take an std::vector.
(print_one_breakpoint_location): Adjust.

7 years ago(Ada) fix handling of minimal symbols (UNOP_CAST and UNOP_ADDR)
Joel Brobecker [Thu, 16 Nov 2017 00:02:33 +0000 (19:02 -0500)]
(Ada) fix handling of minimal symbols (UNOP_CAST and UNOP_ADDR)

Consider a program which provides a symbol without debugging
information. For instance, compiling the following code without -g:

    Some_Minimal_Symbol : Integer := 1234;
    pragma Export (C, Some_Minimal_Symbol, "some_minsym");

Trying to print this variable with GDB now causes an error, which
is now expected:

    (gdb) p some_minsym
    'some_minsym' has unknown type; cast it to its declared type

However, trying to cast this symbol, or to take its address
does not work:

    (gdb) p integer(some_minsym)
    'some_minsym' has unknown type; cast it to its declared type
    (gdb) p &some_minsym
    'some_minsym' has unknown type; cast it to its declared type

Another manisfestation of this issue can be seen when trying to
insert an Ada exception catchpoint for a specific standard exception
(this only occurs if the Ada runtime is built without debugging
information, which is the default).  For instance:

    $ (gdb) catch exception constraint_error
    warning: failed to reevaluate internal exception condition for catchpoint 0: 'constraint_error' has unknown type; cast it to its declared type

This is because, internally, the cachtpoint uses a condition referencing
a minimal symbol, more precisely:

   long_integer (e) = long_integer (&constraint_error)

This patch fixes all issues listed above:

  1. resolve_subexp: Special-case the handling of OP_VAR_MSYM_VALUE
     expression elements, where there are no ambiguities to be resolved
     in that situation;

  2. ada_evaluate_subexp: Enhance the handling of the UNOP_CAST
     handling so as to process the case where the target of
     the cast is a minimal symbol (as well as a symbol with debugging
     information). This mimics what's done in C.

gdb/ChangeLog:

        * ada-lang.c (resolve_subexp): Add handling of OP_VAR_MSYM_VALUE.
        (ada_evaluate_subexp_for_cast): New function.
        (ada_evaluate_subexp) <UNOP_CAST>: Replace code by call to
        ada_evaluate_subexp_for_cast.
        (ada_evaluate_subexp) <nosideret>: Replace code by call to
        eval_skip_value.
        * eval.c (evaluate_var_value): Make non-static.
        (evaluate_var_msym_value, eval_skip_value): Likewise.
        * value.h (evaluate_var_value, evaluate_var_msym_value)
        (eval_skip_value): Declare.

gdb/testsuite/ChangeLog:

        * gdb.ada/minsyms: New testcase.

Tested on x86_64-linux. No regression. Fixes the following failures:

    catch_ex.exp: continuing to Program_Error exception
    catch_ex.exp: continuing to failed assertion
    catch_ex.exp: continuing to unhandled exception
    catch_ex.exp: continuing to program completion
    complete.exp: p <Exported_Capitalized>
    complete.exp: p Exported_Capitalized
    complete.exp: p exported_capitalized
    mi_catch_ex.exp: catch Program_Error (unexpected output)
    mi_catch_ex.exp: continue to exception catchpoint hit (unknown output after running)
    mi_catch_ex.exp: continue to assert failure catchpoint hit (unknown output after running)
    mi_catch_ex.exp: continue to unhandled exception catchpoint hit (unknown output after running)
    mi_ex_cond.exp: catch C_E if i = 2 (unexpected output)

7 years agoFix a memory leak when processing archives.
Nick Clifton [Fri, 17 Nov 2017 12:44:16 +0000 (12:44 +0000)]
Fix a memory leak when processing archives.

PR 22449
* ar.c (write_archive): Free the temporary file name.

7 years agox86: Pass "%F%P:" to linker callback in case of error
H.J. Lu [Fri, 17 Nov 2017 12:09:12 +0000 (04:09 -0800)]
x86: Pass "%F%P:" to linker callback in case of error

We should pass "%F%P:" to  linker callback in case of error.  Otherwise,
linker will report:

: failed to create GNU property section

* elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Pass
"%F%P:", instead of "%F:", to linker callback in case of error.

7 years agoFix a snafu in a previous update to readelf that stopped it from printing archive...
Nick Clifton [Fri, 17 Nov 2017 12:05:34 +0000 (12:05 +0000)]
Fix a snafu in a previous update to readelf that stopped it from printing archive member names along with the archive file name.

--
This patch causes problems for glibc linknamespace tests because of how it
changes the output format of readelf on .a files.

Previously, "readelf -W -s libc.a" would produce output starting e.g.:

File: /scratch/jmyers/glibc/many8/build/glibcs/x86_64-linux-gnu/glibc/libc.a(init-first.o)

Symbol table '.symtab' contains 30 entries:

and continuing with symbol information for each object in that .a file.
After this commit, instead it starts:

File: /scratch/jmyers/glibc/many8/build/glibcs/x86_64-linux-gnu/glibc/libc.a

Symbol table '.symtab' contains 30 entries:

and every object's symbol information starts with the same File: line,
missing any information about which object's symbols (within libc.a) are
being listed.

I think the previous File: lines that said libc.a(init-first.o) etc.,
identifying the particular object within libc.a, were clearly preferable,
and the glibc linknamespace tests rely on having that information about
the individual object within libc.a.
--

binutils * readelf.c (process_archive): Include member name in the
file_name of the filedata structure.

7 years agoada-lang.c::ada_value_cast: remove unused parameter noside
Joel Brobecker [Fri, 17 Nov 2017 00:15:13 +0000 (16:15 -0800)]
ada-lang.c::ada_value_cast: remove unused parameter noside

gdb/ChangeLog:

        * ada-lang.c (ada_value_cast): Remove parameter "noside".
        Update all callers.

7 years agoAutomatic date update in version.in
GDB Administrator [Fri, 17 Nov 2017 00:00:18 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoTest breakpoint commands w/ "continue" + Ctrl-C
Pedro Alves [Thu, 16 Nov 2017 18:44:44 +0000 (18:44 +0000)]
Test breakpoint commands w/ "continue" + Ctrl-C

This adds the testcase that exposed the multiple problems with Ctrl-C
handling fixed by the previous patches, when run against both native
and gdbserver GNU/Linux.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* gdb.base/bp-cmds-continue-ctrl-c.c: New file.
* gdb.base/bp-cmds-continue-ctrl-c.exp: New file.

7 years agoPython unwinder sniffer: PyExc_KeyboardInterrupt -> Quit
Pedro Alves [Thu, 16 Nov 2017 18:44:44 +0000 (18:44 +0000)]
Python unwinder sniffer: PyExc_KeyboardInterrupt -> Quit

If you happen to press Ctrl-C while GDB is running the Python unwinder
machinery, the Ctrl-C is swallowed by the Python unwinder machinery.

For example, with:

 break foo
 commands
 > c
 > end

and

  while (1)
    foo ();

and then let the inferior hit "foo" repeatedly, sometimes Ctrl-C
results in:

~~~
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);
  ^C
  Breakpoint 2, Python Exception <class 'KeyboardInterrupt'> <class 'KeyboardInterrupt'>:
  foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);

  Breakpoint 2, foo () at gdb.base/bp-cmds-continue-ctrl-c.c:23
  23        usleep (100);
~~~

Notice the Python exception above.  The interesting thing here is that
GDB continues as if nothing happened, doesn't really stop and give
back control to the user.  Instead, the Ctrl-C aborted the Python
unwinder sniffer and GDB moved on to just use another unwinder.

Fix this by translating a PyExc_KeyboardInterrupt back into a Quit
exception once back in GDB.

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* python/py-unwind.c (pyuw_sniffer): Translate
PyExc_KeyboardInterrupt to a GDB Quit exception.

7 years agoDon't ever Quit out of resume
Pedro Alves [Thu, 16 Nov 2017 18:44:43 +0000 (18:44 +0000)]
Don't ever Quit out of resume

If you have a breakpoint command that re-resumes the target, like:

  break foo
  commands
  > c
  > end

and then let the inferior run, hitting the breakpoint, and then press
Ctrl-C at just the right time, between GDB processing the stop at
"foo", and re-resuming the target, you'll hit the QUIT call in
infrun.c:resume.

With this hack, we can reproduce the bad case consistently:

  --- a/gdb/inf-loop.c
  +++ b/gdb/inf-loop.c
  @@ -31,6 +31,8 @@
   #include "top.h"
   #include "observer.h"

  +bool continue_hack;
  +
   /* General function to handle events in the inferior.  */

   void
  @@ -64,6 +66,8 @@ inferior_event_handler (enum inferior_event_type event_type,
  {
    check_frame_language_change ();

  +         continue_hack = true;
  +
    /* Don't propagate breakpoint commands errors.  Either we're
       stopping or some command resumes the inferior.  The user will
       be informed.  */
  diff --git a/gdb/infrun.c b/gdb/infrun.c
  index d425664..c74b14c 100644
  --- a/gdb/infrun.c
  +++ b/gdb/infrun.c
  @@ -2403,6 +2403,10 @@ resume (enum gdb_signal sig)
     gdb_assert (!tp->stop_requested);
     gdb_assert (!thread_is_in_step_over_chain (tp));

  +  extern bool continue_hack;
  +
  +  if (continue_hack)
  +    set_quit_flag ();
     QUIT;

The GDB backtrace looks like this:

  (top-gdb) bt
  ...
  #3  0x0000000000612e8b in throw_quit(char const*, ...) (fmt=0xaf84a1 "Quit") at src/gdb/common/common-exceptions.c:408
  #4  0x00000000007fc104 in quit() () at src/gdb/utils.c:748
  #5  0x00000000006a79d2 in default_quit_handler() () at src/gdb/event-top.c:954
  #6  0x00000000007fc134 in maybe_quit() () at src/gdb/utils.c:762
  #7  0x00000000006f66a3 in resume(gdb_signal) (sig=GDB_SIGNAL_0) at src/gdb/infrun.c:2406
  #8  0x0000000000700c3d in keep_going_pass_signal(execution_control_state*) (ecs=0x7ffcf3744e60) at src/gdb/infrun.c:7793
  #9  0x00000000006f5fcd in start_step_over() () at src/gdb/infrun.c:2145
  #10 0x00000000006f7b1f in proceed(unsigned long, gdb_signal) (addr=18446744073709551615, siggnal=GDB_SIGNAL_DEFAULT)
      at src/gdb/infrun.c:3135
  #11 0x00000000006ebdd4 in continue_1(int) (all_threads=0) at src/gdb/infcmd.c:842
  #12 0x00000000006ec097 in continue_command(char*, int) (args=0x0, from_tty=0) at src/gdb/infcmd.c:938
  #13 0x00000000004b5140 in do_cfunc(cmd_list_element*, char*, int) (c=0x2d18570, args=0x0, from_tty=0)
      at src/gdb/cli/cli-decode.c:106
  #14 0x00000000004b8219 in cmd_func(cmd_list_element*, char*, int) (cmd=0x2d18570, args=0x0, from_tty=0)
      at src/gdb/cli/cli-decode.c:1952
  #15 0x00000000007f1532 in execute_command(char*, int) (p=0x7ffcf37452b1 "", from_tty=0) at src/gdb/top.c:608
  #16 0x00000000004bd127 in execute_control_command(command_line*) (cmd=0x3a88ef0) at src/gdb/cli/cli-script.c:485
  #17 0x00000000005cae0c in bpstat_do_actions_1(bpstat*) (bsp=0x37edcf0) at src/gdb/breakpoint.c:4513
  #18 0x00000000005caf67 in bpstat_do_actions() () at src/gdb/breakpoint.c:4563
  #19 0x00000000006e8798 in inferior_event_handler(inferior_event_type, void*) (event_type=INF_EXEC_COMPLETE, client_data=0x0)
      at src/gdb/inf-loop.c:72
  #20 0x00000000006f9447 in fetch_inferior_event(void*) (client_data=0x0) at src/gdb/infrun.c:3970
  #21 0x00000000006e870e in inferior_event_handler(inferior_event_type, void*) (event_type=INF_REG_EVENT, client_data=0x0)
      at src/gdb/inf-loop.c:43
  #22 0x0000000000494d58 in remote_async_serial_handler(serial*, void*) (scb=0x3585ca0, context=0x2cd1b80)
      at src/gdb/remote.c:13820
  #23 0x000000000044d682 in run_async_handler_and_reschedule(serial*) (scb=0x3585ca0) at src/gdb/ser-base.c:137
  #24 0x000000000044d767 in fd_event(int, void*) (error=0, context=0x3585ca0) at src/gdb/ser-base.c:188
  #25 0x00000000006a5686 in handle_file_event(file_handler*, int) (file_ptr=0x45997d0, ready_mask=1)
      at src/gdb/event-loop.c:733
  #26 0x00000000006a5c29 in gdb_wait_for_event(int) (block=1) at src/gdb/event-loop.c:859
  #27 0x00000000006a4aa6 in gdb_do_one_event() () at src/gdb/event-loop.c:347
  #28 0x00000000006a4ade in start_event_loop() () at src/gdb/event-loop.c:371

and when that happens, you end up with GDB's run control in quite a
messed up state.  Something like this:

  thread_function1 (arg=0x1) at threads.c:107
  107             usleep (SLEEP);  /* Loop increment.  */
  Quit
  (gdb) c
  Continuing.
  ** nothing happens, time passes..., press ctrl-c again **
  ^CQuit
  (gdb) info threads
    Id   Target Id         Frame
    1    Thread 1462.1462 "threads" (running)
  * 2    Thread 1462.1466 "threads" (running)
    3    Thread 1462.1465 "function0" (running)
  (gdb) c
  Cannot execute this command while the selected thread is running.
  (gdb)

The first "Quit" above is thrown from within "resume", and cancels run
control while GDB is in the middle of stepping over a breakpoint.
with step_over_info_valid_p() true.  The next "c" didn't actually
resume anything, because GDB throught that the step-over was still in
progress.  It wasn't, because the thread that was supposed to be
stepping over the breakpoint wasn't actually resumed.

So at this point, we press Ctrl-C again, and this time, the default
quit handler is called directly from the event loop
(event-top.c:default_quit_handler -> quit()), because gdb was left
owning the terminal (because the previous resume was cancelled before
we reach target_resume -> target_terminal::inferior()).

Note that the exception called from within resume ends up calling
normal_stop via resume_cleanups.  That's very borked though, because
normal_stop is going to re-handle whatever was the last reported
event, possibly even re-running a hook stop...  I think that the only
sane way to safely cancel the run control state machinery is to push
an event via handle_inferior_event like all other events.

The fix here does two things, and either alone would fix the problem
at hand:

#1 - passes the terminal to the inferior earlier, so that any QUIT
     call from the point we declare the target as running goes to the
     inferior directly, protecting run control from unsafe QUIT calls.

#2 - gets rid of this QUIT call in resume and of its related unsafe
     resume_cleanups.

Aboout #2, the comment describing resume says:

  /* Resume the inferior, but allow a QUIT.  This is useful if the user
     wants to interrupt some lengthy single-stepping operation
     (for child processes, the SIGINT goes to the inferior, and so
     we get a SIGINT random_signal, but for remote debugging and perhaps
     other targets, that's not true).

but that's a really old comment that predates a lot of fixes to Ctrl-C
handling throughout both GDB core and the remote target, that made
sure that a Ctrl-C isn't ever lost.  In any case, if some target
depended on this, a much better fix would be to make the target return
a SIGINT stop out of target_wait the next time that is called.

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* infrun.c (resume_cleanups): Delete.
(resume): No longer install a resume_cleanups cleanup nor call
QUIT.
(proceed): Pass the terminal to the inferior.
(keep_going_pass_signal): No longer install a resume_cleanups
cleanup.

7 years agoFix stdin ending up not registered after a Quit
Pedro Alves [Thu, 16 Nov 2017 18:44:43 +0000 (18:44 +0000)]
Fix stdin ending up not registered after a Quit

If you press Ctrl-C while GDB is processing breakpoint commands the
TRY/CATCH in inferior_event_handler catches the Quit exception and
prints it, and then if the interpreter was running a foreground
execution command, nothing re-adds stdin back in the event loop,
meaning the debug session ends up busted, because the user can't type
anything...

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* inf-loop.c (inferior_event_handler): Don't swallow the exception
if the prompt is blocked.

7 years agoFix swallowed "Quit" when inserting breakpoints
Pedro Alves [Thu, 16 Nov 2017 18:44:42 +0000 (18:44 +0000)]
Fix swallowed "Quit" when inserting breakpoints

If GDB is inserting a breakpoint and you type Ctrl-C at the exact
"right" time, you'll hit a QUIT call in target_read, and the
breakpoint insertion is cancelled.  However, the related TRY/CATCH
code in insert_bp_location does:

    CATCH (e, RETURN_MASK_ALL)
      {
      bp_err = e.error;
      bp_err_message = e.message;
    }

The problem with that is that a RETURN_QUIT exception has e.error ==
0, which means that further below, in the places that check for error
with:

      if (bp_err != GDB_NO_ERROR)

because GDB_NO_ERROR == 0, GDB continues as if the breakpoint was
inserted succesfully, and resumes the inferior.  Since the breakpoint
wasn't inserted the inferior runs free, out of our control...

Fix this by having insert_bp_location store a copy of the whole
exception instead of just a error/message parts, and then checking
"gdb_exception::reason" instead.

This was exposed by the new gdb.base/bp-cmds-continue-ctrl-c.exp
testcase added later in the series.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* breakpoint.c (insert_bp_location): Replace bp_err and
bp_err_message locals by a gdb_exception local.

7 years agogdb/inflow.c: Move SIGTTOU temporary ignoring to a RAII class
Pedro Alves [Thu, 16 Nov 2017 18:44:42 +0000 (18:44 +0000)]
gdb/inflow.c: Move SIGTTOU temporary ignoring to a RAII class

I expect to use this in more places (in inflow.c) in follow up
patches, but I think this is still good on its own.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* inflow.c (scoped_ignore_sigttou): New class.
(child_terminal_ours_1, new_tty): Use it.

7 years agoFix testing gdb.rust/modules.exp against gdbserver
Pedro Alves [Thu, 16 Nov 2017 18:07:41 +0000 (18:07 +0000)]
Fix testing gdb.rust/modules.exp against gdbserver

Currently several tests in gdb.rust/modules.exp fail with
 --target_board=native-gdbserver:

 Running src/gdb/testsuite/gdb.rust/modules.exp ...
 FAIL: gdb.rust/modules.exp: call f3()
 FAIL: gdb.rust/modules.exp: call self::f2()
 FAIL: gdb.rust/modules.exp: call self::super::f2()
 FAIL: gdb.rust/modules.exp: call super::f2()
 FAIL: gdb.rust/modules.exp: call self::super::super::f2()
 FAIL: gdb.rust/modules.exp: call super::super::f2()
 FAIL: gdb.rust/modules.exp: call ::f2()
 FAIL: gdb.rust/modules.exp: call extern modules::mod1::f2()

This is because these tests rely on matching inferior output.
However, when testing with gdbserver, inferior output goes to a
separate terminal instead of to gdb's terminal, and so gdb_test won't
cut it, as that is only reading from gdb's pty/gdb_spawn_id:

 (gdb) call f3()
 (gdb) FAIL: gdb.rust/modules.exp: call f3()
 call self::f2()
 (gdb) FAIL: gdb.rust/modules.exp: call self::f2()

Fix this by using gdb_test_stdio instead, which handles output coming
out of gdbserver's pty.

Also, skip the tests if the target/board doesn't support inferior I/O
at all.

gdb/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* gdb.rust/modules.exp: Skip tests that rely on inferior I/O if
gdb,noinferiorio is set, and use gdb_test_stdio otherwise.

7 years agoRefactor endian handling in DFP routines
Ulrich Weigand [Thu, 16 Nov 2017 17:49:11 +0000 (18:49 +0100)]
Refactor endian handling in DFP routines

This patch moves endian conversion into the decimal_from_number and
decimal_to_number routines, and removes it from all their callers,
making the code simpler overall.  No functional change.

gdb/ChangeLog:
2017-11-16  Ulrich Weigand  <uweigand@de.ibm.com>

* target-float.c (decimal_from_number): Add byte_order argument and
call match_endianness.  Error if unknown floating-point type.
(decimal_to_number): Add byte_order argument and call match_endianness.
(decimal_from_longest): Update call.  Do not call match_endianness.
(decimal_from_ulongest): Likewise.
(decimal_binop): Likewise.
(decimal_is_zero): Likewise.
(decimal_compare): Likewise.
(decimal_convert): Likewise.

7 years agoAdd new AArch64 FP16 FM{A|S} instructions.
Tamar Christina [Thu, 16 Nov 2017 16:19:37 +0000 (16:19 +0000)]
Add new AArch64 FP16 FM{A|S} instructions.

This patch separates the new FP16 instructions backported from Armv8.4-a to Armv8.2-a
into a new flag order to distinguish them from the rest of the already existing optional
FP16 instructions in Armv8.2-a.

The new flag "+fp16fml" is available from Armv8.2-a and implies +fp16 and is mandatory on
Armv8.4-a.

gas/

* config/tc-aarch64.c (fp16fml): New.
* doc/c-aarch64.texi (fp16fml): New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16.d (fp16): Make fp16fml.
* testsuite/gas/aarch64/armv8_3-a-crypto-fp16.d (fp16): Make fp16fml.

include/

* opcode/aarch64.h: (AARCH64_FEATURE_F16_FML): New.
(AARCH64_ARCH_V8_4): Enable AARCH64_FEATURE_F16_FML by default.

opcodes/

* aarch64-tbl.h (aarch64_feature_fp_16_v8_2): Require AARCH64_FEATURE_F16_FML
and AARCH64_FEATURE_F16.

7 years agoCorrect AArch64 crypto dependencies.
Tamar Christina [Thu, 16 Nov 2017 16:15:51 +0000 (16:15 +0000)]
Correct AArch64 crypto dependencies.

The crypto options depend on SIMD and FP, the documentation states so but the dependency is not there the code.

We have mostly gotten away with this due to the default flags
for the architectures (e.g. Armv8.2-a  implies +simd) but this
discrepancy needs to be addressed.

gas/

2017-11-16  Tamar Christina  <tamar.christina@arm.com>

* opcodes/aarch64-tbl.h
(aarch64_feature_crypto): Add ARCH64_FEATURE_SIMD and AARCH64_FEATURE_FP.
(aarch64_feature_crypto_v8_2, aarch64_feature_sm4): Likewise.
(aarch64_feature_sha3): Likewise.

7 years agoUpdate documentation for Arvm8.4-A changes to AArch64.
Tamar Christina [Thu, 16 Nov 2017 16:13:01 +0000 (16:13 +0000)]
Update documentation for Arvm8.4-A changes to AArch64.

gas/

2017-11-16  Tamar Christina  <tamar.christina@arm.com>

* doc/c-aarch64.texi (armv8.4-a, sha2, sha3, sm4): New.
(dotprod): Update default note.

7 years agoAdd assembler and disassembler support for the new Armv8.4-a instructions for AArch64.
Tamar Christina [Thu, 16 Nov 2017 16:07:07 +0000 (16:07 +0000)]
Add assembler and disassembler support for the new Armv8.4-a instructions for AArch64.

Some of these instructions have been back-ported as optional extensions to
Armv8.2-a and higher, but others are only available for Armv8.4-a.

opcodes/

* aarch64-tbl.h (sha512h, sha512h2, sha512su0, sha512su1, eor3): New.
(rax1, xar, bcax, sm3ss1, sm3tt1a, sm3tt1b, sm3tt2a, sm3tt2b): New.
(sm3partw1, sm3partw2, sm4e, sm4ekey, fmlal, fmlsl): New.
(fmlal2, fmlsl2, cfinv, rmif, setf8, setf16, stlurb): New.
(ldapurb, ldapursb, stlurh, ldapurh, ldapursh, stlur): New.
(ldapur, ldapursw, stlur): New.
* aarch64-dis-2.c: Regenerate.

gas/

* testsuite/gas/aarch64/armv8_4-a-illegal.d: New.
* testsuite/gas/aarch64/armv8_4-a-illegal.l: New.
* testsuite/gas/aarch64/armv8_4-a-illegal.s: New.
* testsuite/gas/aarch64/armv8_4-a.d: New.
* testsuite/gas/aarch64/armv8_4-a.s: New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16.s: New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16.d: New.
* testsuite/gas/aarch64/armv8_3-a-crypto-fp16.d: New.
* testsuite/gas/aarch64/armv8_4-a-crypto-fp16.d: New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.s: New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.l: New.
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.d: New.

7 years agoGDBserver: Fix ignored Ctrl-C after reconnection
Pedro Alves [Thu, 16 Nov 2017 14:58:51 +0000 (14:58 +0000)]
GDBserver: Fix ignored Ctrl-C after reconnection

This fixes the issue reported by Dmitry Antipov <dantipov@nvidia.com>
here:
  https://sourceware.org/ml/gdb/2017-10/msg00048.html

The problem is that GDBserver stops listening to Ctrl-C/interrupt
requests if you disconnect and reconnect back.

Dmitry wrote:

~~~
Currently gdbserver installs SIGIO handler just once, in
initialize_async_io() called from captured_main(), and this handler is
removed when remote_desc is closed in remote_close().  Next, when a
new instance of remote_desc is fetched from accept() and has '\003'
arrived, input_interrupt() is never called because it is not
registered as SIGIO handler.
~~~

The fix here is not remove the SIGIO handler in the first place, thus
going back to the original before-first-connection state.

(I haven't gone back to try it, but I think this was a regression
caused by commit 8b2073398477 ("[GDBserver] Block and unblock SIGIO"),
which was what made remote_close remove the signal handler.)

New test included.

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

* remote-utils.c (remote_close): Block SIGIO signals instead of
uninstalling the SIGIO handler.

gdb/testsuite/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* gdb.server/reconnect-ctrl-c.c: New file.
* gdb.server/reconnect-ctrl-c.exp: New file.

7 years agoPrevent illegal memory accesses when parsing incorrecctly formated core notes.
Nick Clifton [Thu, 16 Nov 2017 14:53:32 +0000 (14:53 +0000)]
Prevent illegal memory accesses when parsing incorrecctly formated core notes.

PR 22421
* elf.c (elfcore_grok_netbsd_procinfo): Check that the note is big enough.
(elfcore_grok_openbsd_procinfo): Likewise.
(elfcore_grok_nto_status): Likewise.

7 years agoAdd Python rbreak command.
Phil Muldoon [Thu, 16 Nov 2017 14:14:03 +0000 (14:14 +0000)]
Add Python rbreak command.

gdb/Changelog

2017-11-16  Phil Muldoon  <pmuldoon@redhat.com>

* python/python.c (gdbpy_rbreak): New function.
        * NEWS: Document Python rbreak feature.

testsuite/Changelog

2017-11-16  Phil Muldoon  <pmuldoon@redhat.com>

* gdb.python/py-rbreak.exp: New file.
* gdb.python/py-rbreak.c: New file.
* gdb.python/py-rbreak-func2.c: New file.

doc/Changelog

2017-11-16  Phil Muldoon  <pmuldoon@redhat.com>

* python.texi (Basic Python): Add rbreak documentation.

7 years agoPrevent a possible seg-fault in the section merging code, by always creating a paddin...
Nick Clifton [Thu, 16 Nov 2017 13:06:22 +0000 (13:06 +0000)]
Prevent a possible seg-fault in the section merging code, by always creating a padding buffer.

* merge.c (sec_merge_emit): Always create padding buffer.  Add
asserts to make sure that the buffer is long enough.

7 years agox86: ignore high register select bit(s) in 32- and 16-bit modes
Jan Beulich [Thu, 16 Nov 2017 12:56:45 +0000 (13:56 +0100)]
x86: ignore high register select bit(s) in 32- and 16-bit modes

While commits 9889cbb14e ("Check invalid mask registers") and
abfcb414b9 ("X86: Ignore REX_B bit for 32-bit XOP instructions") went a
bit into the right direction, this wasn't quite enough:
- VEX.vvvv has its high bit ignored
- EVEX.vvvv has its high bit ignored together with EVEX.v'
- the high bits of {,E}VEX.vvvv should not be prematurely zapped, to
  allow proper checking of them when the fields has to hold al ones
- when the high bits of an immediate specify a register, bit 7 is
  ignored

7 years agoFix gdb.base/starti.exp racy test
Pedro Alves [Thu, 16 Nov 2017 11:57:01 +0000 (11:57 +0000)]
Fix gdb.base/starti.exp racy test

This commit fixes a couple problems with gdb.base/starti.exp, causing
spurious FAILs.

The first is a double-prompt problem:

~~~
 (gdb) PASS: gdb.base/starti.exp: hook-stop
 starti
 [....]
 gdb_expect_list pattern: /\$1 = 0/
 $1 = 0

 gdb_expect_list pattern: //
 0x00007ffff7ddcc80 in _start () from /lib64/ld-linux-x86-64.so.2

 (gdb)                                         # EXPECTED PROMPT
 (gdb) PASS: gdb.base/starti.exp: starti       # ANOTHER PROMPT!
 break main
~~~

This happens because the test uses gdb_test_sequence with no command,
like this:

 gdb_test_sequence "" "starti" {
     "Program stopped."
     "\\$1 = 0"
 }

but gdb_test_sequence doesn't have a check for empty command like
gdb_test_multiple does, and so sends "\n" to GDB:

 proc gdb_test_sequence { command test_name expected_output_list } {
     global gdb_prompt
     if { $test_name == "" } {
 set test_name $command
     }
     lappend expected_output_list ""; # implicit ".*" before gdb prompt
     send_gdb "$command\n"
     return [gdb_expect_list $test_name "$gdb_prompt $" $expected_output_list]
 }

"starti" is a no-repeat command, so pressing <ret> just makes another
prompt appear, confusing the following gdb_test/gdb_test_multiple/etc.

Even with that fixed, the testcase is still racy though.

The second problem is that sometimes the "continue" test times out
here:

~~~
 continue
 Continuing.
 $2 = 1

 gdb_expect_list pattern: /.*Breakpoint .*main \(\) at .*starti.c.*/
 Breakpoint 1, main () at /home/pedro/src/gdb/testsuite/gdb.base/starti.c:29
 29   return 0;
 (gdb) gdb_expect_list pattern: //
 * hung here *
~~~

The problem is that the too-greedy ".*" trailing match in
gdb_expect_list's pattern ends up consuming GDB's prompt too soon.
Fix that by removing the unnecessary trailing ".*".  While at it,
remove all ".*"s to be stricter.

Tested on x86_64 GNU/Linux.

gdb/testsuite/ChangeLog:
2017-11-16  Pedro Alves  <palves@redhat.com>

* gdb.base/starti.exp ("continue" test): Remove ".*"s from
pattern.
* lib/gdb.exp (gdb_test_sequence): Don't send empty command to
GDB.

7 years agoix86/Intel: don't require memory operand size specifier for PTWRITE
Jan Beulich [Thu, 16 Nov 2017 11:28:06 +0000 (12:28 +0100)]
ix86/Intel: don't require memory operand size specifier for PTWRITE

Other than in 64-bit mode, in 32- and 16-bit modes operand size isn't
ambiguous.

7 years agoi386: Replace .code64/.code32 with .byte
H.J. Lu [Thu, 16 Nov 2017 10:50:33 +0000 (02:50 -0800)]
i386: Replace .code64/.code32 with .byte

Since .code64 directive isn't available for 32-bit BFD and ELF directive
isn't available for non-ELF directive, we should avoid them.

* testsuite/gas/i386/noextreg.s: Replace .code64/.code32 and
64-bit instructions with .byte.  Remove ELF directive.

7 years agoRemove non-linux tic6x target descriptions
Yao Qi [Thu, 16 Nov 2017 10:17:25 +0000 (10:17 +0000)]
Remove non-linux tic6x target descriptions

They are not used by GDB nor by GDBserver.  This patch removes them.

gdb:

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

* features/tic6x-c62x.xml: Remove.
* features/tic6x-c64x.xml: Remove.
* features/tic6x-c64xp.xml: Remove.

7 years agoAllow osabi to be optional in target descriptions
Alan Hayward [Thu, 16 Nov 2017 10:05:21 +0000 (10:05 +0000)]
Allow osabi to be optional in target descriptions

gdbserver/
* tdesc.c (tdesc_get_features_xml): Allow null osabi.

7 years agoFix tic6x-uclinux GDBserver build failure
Yao Qi [Thu, 16 Nov 2017 10:05:27 +0000 (10:05 +0000)]
Fix tic6x-uclinux GDBserver build failure

I can't find a c6x-uclinux c++ compiler, so I use my host g++ to build
tic6x-uclinux GDBserver, and find the following build failures.  They are
not target specific, so I believe they are real errors.  This patch fixes
them.

../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c:313:34: error: invalid
conversion from 'void*' to 'tic6x_register*' [-fpermissive]
   union tic6x_register *regset = buf;
                                  ^
../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c: In function 'void tic6x_store_gregset(regcache*, const void*)':
../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c:324:40: error: invalid
conversion from 'const void*' to 'const tic6x_register*' [-fpermissive]
   const union tic6x_register *regset = buf;
                                        ^

../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c: At global scope:
../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c:359:28: error: redefinition of 'usrregs_info tic6x_usrregs_info'
 static struct usrregs_info tic6x_usrregs_info =
                            ^
../binutils-gdb/gdb/gdbserver/linux-tic6x-low.c:186:28: note: 'usrregs_info tic6x_usrregs_info' previously declared here
 static struct usrregs_info tic6x_usrregs_info;
                            ^

gdb/gdbserver:

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

* linux-tic6x-low.c (tic6x_fill_gregset): Cast buf.
(tic6x_store_gregset): Likewise.
(tic6x_usrregs_info): Move it up.

7 years agoAutomatic date update in version.in
GDB Administrator [Thu, 16 Nov 2017 00:00:23 +0000 (00:00 +0000)]
Automatic date update in version.in

7 years agoInclude <array> to declare std::array<>.
John Baldwin [Wed, 15 Nov 2017 19:36:42 +0000 (11:36 -0800)]
Include <array> to declare std::array<>.

gdb/ChangeLog:

* symtab.h: Include <array>.

7 years agoConstify the 'arg' passed to commands in bsd-kvm.c.
John Baldwin [Wed, 15 Nov 2017 19:35:15 +0000 (11:35 -0800)]
Constify the 'arg' passed to commands in bsd-kvm.c.

gdb/ChangeLog:

* bsd-kvm.c (bsd_kvm_cmd): Constify 'arg'.
(bsd_kvm_proc_cmd): Likewise.

7 years agotui-win: Replace VEC with std::vector
Simon Marchi [Wed, 15 Nov 2017 14:22:48 +0000 (09:22 -0500)]
tui-win: Replace VEC with std::vector

This patch replaces an instance of VEC (const_char_ptr) with
std::vector<const char *>.  Tested by running gdb.tui/completion.exp,
which exercises this function.

gdb/ChangeLog:

* tui/tui-win.c (window_name_completer): Replace VEC with
std::vector.

7 years agoFix gdb.tui/completion.exp test
Simon Marchi [Wed, 15 Nov 2017 16:07:02 +0000 (11:07 -0500)]
Fix gdb.tui/completion.exp test

When I run it locally, the test gdb.tui/completion.exp test fails
because of a timeout:

Running /home/emaisin/src/binutils-gdb/gdb/testsuite/gdb.tui/completion.exp ...
FAIL: gdb.tui/completion.exp: completion of layout names: tab completion (timeout)

The problem seems to be this regex, which confirms that after doing
layout<TAB>, "layout" is printed again after the gdb prompt:

  -re "^$input_line$"

The problem is that there's a trailing space in the output after
"layout".  Since the regex has an anchored end (the $), it doesn't
match.  Adding a space fixes the test.

gdb/testsuite/ChangeLog:

* gdb.tui/completionn.exp (test_tab_completion): Add space in
regex.

7 years agoSeparate the new FP16 instructions backported from Armv8.4-a to Armv8.2-a into a...
Tamar Christina [Wed, 15 Nov 2017 15:56:23 +0000 (15:56 +0000)]
Separate the new FP16 instructions backported from Armv8.4-a to Armv8.2-a into a new flag order to distinguish them from the rest of the already existing optional FP16 instructions in Armv8.2-a.

The new flag "+fp16fml" is available from Armv8.2-a and implies +fp16 and is mandatory
from Armv8.4-a.

gas/

* config/tc-arm.c (arm_ext_fp16_fml, fp16fml): New.
(do_neon_fmac_maybe_scalar_long): Use arm_ext_fp16_fml.
* doc/c-arm.texi (fp16, fp16fml): New.
* testsuite/gas/arm/armv8_2-a-fp16.d (fp16): Make fp16fml.
* testsuite/gas/arm/armv8_3-a-fp16.d (fp16): Make fp16fml.
* testsuite/gas/arm/armv8_2-a-fp16-illegal.d (fp16): Make fp16fml.
* testsuite/gas/arm/armv8_2-a-fp16-thumb2.d (fp16): Make fp16fml.

include/

* opcode/arm.h: (ARM_EXT2_FP16_FML): New.
(ARM_AEXT2_V8_4A): Add ARM_EXT2_FP16_FML.

7 years agoRemove no-longer applicable maintainer entries
Andrew Cagney [Wed, 15 Nov 2017 15:26:59 +0000 (10:26 -0500)]
Remove no-longer applicable maintainer entries

2017-11-15  Andrew Cagney  <cagney@gnu.org>

       * MAINTAINERS: Remove no-longer applicable entries.

7 years agoMove self to Past Maintainers.
Andrew Cagney [Wed, 15 Nov 2017 15:12:12 +0000 (10:12 -0500)]
Move self to Past Maintainers.

2017-11-15  Andrew Cagney  <cagney@gnu.org>

      * MAINTAINERS: Move self to Past Maintainers.

7 years agoRemove features/nios2-linux.c
Yao Qi [Wed, 15 Nov 2017 12:03:03 +0000 (12:03 +0000)]
Remove features/nios2-linux.c

tdesc_nios2_linux is not used at all.  Remove features/nios2-linux.c,
and don't generate it anymore.

gdb:

2017-11-15  Yao Qi  <yao.qi@linaro.org>

* features/Makefile (XMLTOC): Remove nios2-linux.xml.
* features/nios2-linux.c: Remove.
* nios2-linux-tdep.c (_initialize_nios2_linux_tdep): Don't call
initialize_tdesc_nios2_linux.

7 years agoobjcopy memory leak
Alan Modra [Wed, 15 Nov 2017 11:53:22 +0000 (22:23 +1030)]
objcopy memory leak

PR 22426
* objcopy.c (copy_main): Free tmpname.

7 years agoHandle ' and I format flags
Alan Modra [Wed, 15 Nov 2017 11:46:08 +0000 (22:16 +1030)]
Handle ' and I format flags

Also a little tidying and error checking.

* bfd.c (union _bfd_doprnt_args): Add "Bad".
(_bfd_doprnt): Handle more flags.
(_bfd_doprnt_scan): Likewise.  Tidy setting of args array.
(error_handler_internal): Init args type to Bad.

7 years agoAdd support to readelf and objdump for following links to separate debug information...
Nick Clifton [Wed, 15 Nov 2017 11:34:03 +0000 (11:34 +0000)]
Add support to readelf and objdump for following links to separate debug information files.

Hi Guys,

  I am applying the rather large patch attached to this email to enhance
  the readelf and objdump programs so that they now have the ability to
  follow links to separate debug info files.  (As requested by PR
  15152).  So for example whereas before we had this output:

    $ readelf -wi main.exe

    Contents of the .debug_info section:
    [...]
    <15>   DW_AT_comp_dir    : (alt indirect string, offset: 0x30c)
    [...]

  With the new option enabled we get:

    $ readelf -wiK main.exe

    main.exe: Found separate debug info file: dwz.debug
    Contents of the .debug_info section (loaded from main.exe):
    [...]
    <15>   DW_AT_comp_dir    : (alt indirect string, offset: 0x30c) /home/nickc/Downloads/dwzm
    [...]

  The link following feature also means that we can get two lots of
  output if the same section exists in both the main file and the
  separate debug info file:

    $ readelf -wiK main.exe
    main.exe: Found separate debug info file: dwz.debug
    Contents of the .debug_info section (loaded from main.exe):
    [...]
    Contents of the .debug_info section (loaded from dwz.debug):
    [...]

  The patch also adds the ability to display the contents of debuglink
  sections:

    $ readelf -wk main.exe
    Contents of the .gnu_debugaltlink section:

      Separate debug info file: dwz.debug
      Build-ID (0x14 bytes):
     c4 a8 89 8d 64 cf 70 8a 35 68 21 f2 ed 24 45 3e 18 7a 7a 93

  Naturally there are long versions of these options (=follow-links and
  =links).  The documentation has been updated as well, and since both
  readelf and objdump use the same set of debug display options, I have
  moved the text into a separate file.  There are also a couple of new
  binutils tests to exercise the new behaviour.

  There are a couple of missing features in the current patch however,
  although I do intend to address them in follow up submissions:

  Firstly the code does not check the build-id inside separate debug
  info files when it is searching for a file specified by a
  .gnu_debugaltlink section.  It just assumes that if the file is there,
  then it contains the information being sought.

  Secondly I have not checked the DWARF-5 version of these link
  features, so there will probably be code to add there.

  Thirdly I have only implemented link following for the
  DW_FORM_GNU_strp_alt format.  Other alternate formats (eg
  DW_FORM_GNU_ref_alt) have yet to be implemented.

  Lastly, whilst implementing this feature I found it necessary to move
  some of the global variables used by readelf (eg section_headers) into
  a structure that can be passed around.  I have moved all of the global
  variables that were necessary to get the patch working, but I need to
  complete the operation and move the remaining, file-specific variables
  (eg dynamic_strings).

Cheers
  Nick

binutils PR 15152
* dwarf.h (enum dwarf_section_display_enum): Add gnu_debuglink,
gnu_debugaltlink and separate_debug_str.
(struct dwarf_section): Add filename field.
Add prototypes for load_separate_debug_file, close_debug_file and
open_debug_file.
* dwarf.c (do_debug_links): New.
(do_follow_links): New.
(separate_debug_file, separate_debug_filename): New.
(fetch_alt_indirect_string): New function.  Retrieves a string
from the debug string table in the separate debug info file.
(read_and_display_attr_value): Use it with DW_FORM_GNU_strp_alt.
(load_debug_section_with_follow): New function.  Like
load_debug_section, but if the first attempt fails, then tries
again in the separate debug info file.
(introduce): New function.
(process_debug_info): Use load_debug_section_with_follow and
introduce.
(load_debug_info): Likewise.
(display_debug_lines_raw): Likewise.
(display_debug_lines_decoded): Likewise.
(display_debug_macinfo): Likewise.
(display_debug_macro): Likewise.
(display_debug_abbrev): Likewise.
(display_debug_loc): Likewise.
(display_debug_str): Likewise.
(display_debug_aranges): Likewise.
(display_debug_addr); Likewise.
(display_debug_frames): Likewise.
(display_gdb_index): Likewise.
(process_cu_tu_index): Likewise.
(load_cu_tu_indexes): Likewise.
(display_debug_links): New function.  Displays the contents of a
.gnu_debuglink or .gnu_debugaltlink section.
(calc_gnu_debuglink_ctc32):New function.  Calculates a CRC32
value.
(check_gnu_debuglink): New function.  Checks the CRC of a
potential separate debug info file.
(parse_gnu_debuglink): New function.  Reads a CRC value out of a
.gnu_debuglink section.
(check_gnu_debugaltlink): New function.
(parse_gnu_debugaltlink): New function.  Reads the build-id value
out of a .gnu_debugaltlink section.
(load_separate_debug_info): New function.  Finds and loads a
separate debug info file.
(load_separate_debug_file): New function. Attempts to find and
follow a link to a separate debug info file.
(free_debug_memory): Free the separate debug info file
information.
(opts_table): Add "follow-links" and "links".
(dwarf_select_sections_by_letters): Add "k" and "K".
(debug_displays): Reformat.  Add .gnu-debuglink and
.gnu_debugaltlink.
Add an extra entry for .debug_str in a separate debug info file.
* doc/binutils.texi: Move description of debug dump features
common to both readelf and objdump into...
* objdump.c (usage): Add -Wk and -WK.
(load_specific_debug_section): Initialise the filename field in
the dwarf_section structure.
(close_debug_file): New function.
(open_debug_file): New function.
(dump_dwarf): Load and dump the separate debug info sections.
* readelf.c (struct filedata): New structure.  Contains various
variables that used to be global:
(current_file_size, string_table, string_table_length, elf_header)
(section_headers, program_headers, dump_sects, num_dump_sects):
Move into filedata structure.
(cmdline): New global variable.  Contains list of sections to dump
by number, as specified on the command line.
Add filedata parameter to most functions.
(load_debug_section): Load the string table if it has not already
been retrieved.
(close_file): New function.
(close_debug_file): New function.
(open_file): New function.
(open_debug_file): New function.
(process_object): Process sections in any separate debug info files.
* doc/debug.options.texi: New file.  Add description of =links and
=follow-links options.
* NEWS: Mention the new feature.
* elfcomm.c: Have the byte gte functions take a const pointer.
* elfcomm.h: Update prototypes.
* testsuite/binutils-all/dw5.W: Update expected output.
* testsuite/binutils-all/objdump.WL: Update expected output.
* testsuite/binutils-all/objdump.exp: Add test of -WK and -Wk.
* testsuite/binutils-all/readelf.exp: Add test of -wK and -wk.
* testsuite/binutils-all/readelf.k: New file.
* testsuite/binutils-all/objdump.Wk: New file.
* testsuite/binutils-all/objdump.WK2: New file.
* testsuite/binutils-all/linkdebug.s: New file.
* testsuite/binutils-all/debuglink.s: New file.

gas * testsuite/gas/avr/large-debug-line-table.d: Update expected
output.
* testsuite/gas/elf/dwarf2-11.d: Likewise.
* testsuite/gas/elf/dwarf2-12.d: Likewise.
* testsuite/gas/elf/dwarf2-13.d: Likewise.
* testsuite/gas/elf/dwarf2-14.d: Likewise.
* testsuite/gas/elf/dwarf2-15.d: Likewise.
* testsuite/gas/elf/dwarf2-16.d: Likewise.
* testsuite/gas/elf/dwarf2-17.d: Likewise.
* testsuite/gas/elf/dwarf2-18.d: Likewise.
* testsuite/gas/elf/dwarf2-5.d: Likewise.
* testsuite/gas/elf/dwarf2-6.d: Likewise.
* testsuite/gas/elf/dwarf2-7.d: Likewise.

ld * testsuite/ld-avr/gc-section-debugline.d: Update expected
output.

7 years agoBetter make rule for arch/ files built for IPA
Alan Hayward [Wed, 15 Nov 2017 09:59:12 +0000 (09:59 +0000)]
Better make rule for arch/ files built for IPA

gdbserver/
* Makefile.in: Update arch rules.
* configure.srv: Explicitly mark arch/ files.

7 years agoFix M68HC11_NUM_REGS
Yao Qi [Wed, 15 Nov 2017 09:36:51 +0000 (09:36 +0000)]
Fix M68HC11_NUM_REGS

M68HC11_LAST_HARD_REG is 8, but m68hc11 register number is started from 0,
so there are 9 raw registers, but M68HC11_NUM_REGS is 8 by mistake.

My following unit test can find this issue (GDB is built with asan)

=================================================================
==15555==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000113150 at pc 0x51393f bp 0x7fffcec36f60 sp 0x7fffcec36f58
WRITE of size 2 at 0x602000113150 thread T0
    #0 0x51393e in m68hc11_pseudo_register_read gdb/m68hc11-tdep.c:320
    #1 0xc4b620 in gdbarch_pseudo_register_read(gdbarch*, regcache*, int, unsigned char*) gdb/gdbarch.c:1974
    #2 0xddad88 in regcache::cooked_read(int, unsigned char*) gdb/regcache.c:710
    #3 0xddff2b in cooked_read_test gdb/regcache.c:1850
    #4 0xdf8cfb in selftests::gdbarch_selftest::operator()() const gdb/selftest-arch.c:73

gdb:

2017-11-15  Yao Qi  <yao.qi@linaro.org>

* m68hc11-tdep.c (M68HC11_NUM_REGS): Change it to
M68HC11_LAST_HARD_REG + 1.

7 years agox86: use correct register names
Jan Beulich [Wed, 15 Nov 2017 07:52:05 +0000 (08:52 +0100)]
x86: use correct register names

VEX.W may be legitimately set (and is then ignored by the CPU) for
non-64-bit code. Don't print 64-bit register names in such a case, by
utilizing that REX_W would never be set for non-64-bit code, and that
it is being set from VEX.W by generic decoding.

A test for this is going to be introduced in the next patch of this
series.

7 years agox86: drop VEXI4_Fixup()
Jan Beulich [Wed, 15 Nov 2017 07:51:03 +0000 (08:51 +0100)]
x86: drop VEXI4_Fixup()

The low four bits of an immediate being set when the high bits specify a
fourth register operand is not a problem: CPUs ignore these bits rather
than raising #UD. Take care of incrementing codep in OP_EX_VexW()
instead.

7 years agox86-64: don't allow use of %axl as accumulator
Jan Beulich [Wed, 15 Nov 2017 07:48:51 +0000 (08:48 +0100)]
x86-64: don't allow use of %axl as accumulator

Just like %cxl can't be used as shift count register. Otherwise for
consistency %cxl would need to gain "ShiftCount" and use of both ought
to properly cause REX prefixes to be emitted.

7 years agold einfo positional arg support
Alan Modra [Wed, 15 Nov 2017 01:05:21 +0000 (11:35 +1030)]
ld einfo positional arg support

To allow translators to reorder values in translated strings.  This
should mean that all binutils messages now have support for
reordering.

Note to translators:  Not all % letters take arguments, so for example
the following only has two arguments, the two %s strings.
"%P%F: output format %s cannot represent section called %s: %E\n"

You could reorder this if you liked to:
"%P%F: %E: section %2$s cannot be represented in output format %1$s\n"

einfo lacks support for flags, field width, precision and length
modifier (apart from %ld and %lu) so don't try to use them in
translations.  Both ld and bfd lack support to use a positional arg
twice.  These features could be added if needed..

* ldmisc.c (vfinfo): Support up to 9 positional args.

7 years agoFirst part of fix for riscv gas lns-common-1 failure.
Jim Wilson [Wed, 15 Nov 2017 01:23:14 +0000 (17:23 -0800)]
First part of fix for riscv gas lns-common-1 failure.

gas/
* testsuite/gas/lns/lns.exp (lns-common-1): Add riscv*-*-* to alt list.

7 years agoAdd modified file I missed in last commit.
Jim Wilson [Wed, 15 Nov 2017 01:07:32 +0000 (17:07 -0800)]
Add modified file I missed in last commit.

7 years agoFix riscv ld testsuite failure for compressed1d.
Jim Wilson [Wed, 15 Nov 2017 01:02:43 +0000 (17:02 -0800)]
Fix riscv ld testsuite failure for compressed1d.

ld/
* testsuite/ld-elf/compress1-alt.s: New.
* testsuite/ld-elf/compressed1d-alt.d: New.
* testsuite/ld-elf/compressed1d.d: Add riscv*-*-* to notarget list.