binutils-gdb.git
6 years agoAvoid crash when calling warning too early
Tom Tromey [Fri, 5 Oct 2018 20:54:35 +0000 (14:54 -0600)]
Avoid crash when calling warning too early

I noticed that if you pass the name of an existing file (not a
directory) as the argument to --data-directory, gdb will crash:

    $ ./gdb -nx  --data-directory  ./gdb
    ../../binutils-gdb/gdb/target.c:590:56: runtime error: member call on null pointer of type 'struct target_ops'

This was later reported as PR gdb/23838.

This happens because warning ends up calling
target_supports_terminal_ours, which calls current_top_target, which
returns nullptr this early.

This fixes the problem by handling this case specially in
target_supports_terminal_ours.  I also changed
target_supports_terminal_ours to return bool.

gdb/ChangeLog
2018-11-08  Tom Tromey  <tom@tromey.com>

PR gdb/23555:
PR gdb/23838:
* target.h (target_supports_terminal_ours): Return bool.
* target.c (target_supports_terminal_ours): Handle case where
current_top_target returns nullptr.  Return bool.

gdb/testsuite/ChangeLog
2018-11-08  Tom Tromey  <tom@tromey.com>

PR gdb/23555:
PR gdb/23838:
* gdb.base/warning.exp: New file.

6 years ago(AArch64) wrong value returned by "finish" for HFA
Joel Brobecker [Thu, 8 Nov 2018 15:27:31 +0000 (10:27 -0500)]
(AArch64) wrong value returned by "finish" for HFA

Consider the gdb.ada/array_return.exp testcase, and in particular,
consider the following code...

   type Small_Float_Vector is array (1 .. 2) of Float;

   function Create_Small_Float_Vector return Small_Float_Vector is
   begin
      return (others => 4.25);
   end Create_Small_Float_Vector;

... which declares a type which is an array with 2 floats in it
(floats are 4 bytes on AArch64), trying to get GDB to print
the return value from that function does not work:

    (gdb) fin
    Run till exit from #0  pck.create_small_float_vector () at /[...]/pck.adb:15
    0x000000000000062c in p () at /[...]/p.adb:11
    11         Vector := Create_Small_Float_Vector;
    Value returned is $1 = (4.25, 0.0)
                                  ^^^
                                  |||

We expected the value shown to be:

    (gdb) fin
    Run till exit from #0  pck.create_small_float_vector () at /[...]/pck.adb:15
    0x000000000000062c in p () at /[...]/p.adb:11
    11         Vector := Create_Small_Float_Vector;
    Value returned is $1 = (4.25, 4.25)

Because the return type is an HFA, it is returned via the first two
SIMD registers. However, what happens is that the current implementation
fails to realize that this is an HFA, and therefore fetches the return
value from the wrong location. And the reason why it fails to realize
this is because it thinks that our array has 8 elements (HFAs have
a maximum of 4). Looking at aapcs_is_vfp_call_or_return_candidate_1,
where this is determined, we can easily see why (looks like a thinko):

        | case TYPE_CODE_ARRAY:
        | [...]
        |         struct type *target_type = TYPE_TARGET_TYPE (type);
        |         int count = aapcs_is_vfp_call_or_return_candidate_1
        |                       (target_type, fundamental_type);
        |
        |         if (count == -1)
        |           return count;
        |
  !! -> |         count *= TYPE_LENGTH (type);
        |           return count;

Here, we first determine the count for one element of our array,
and so we should then be multiplying that count by the number
of elements in our array (2 in our case). But instead, we multiply it
by the total size (8). As a result, we do not classify the return
type as an HFA, and thus pick the wrong location for fetching
the return value.

gdb/ChangeLog:

        * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1):
        return the correct count for potential HFAs.

Tested on aarch64-linux, fixes:

    array_return.exp: value printed by finish of Create_Small_Float_Vector

6 years agox86-64: fix ZMM register state tracking
Jan Beulich [Thu, 8 Nov 2018 11:12:05 +0000 (12:12 +0100)]
x86-64: fix ZMM register state tracking

The three AVX512 state components are entirely independent - one being
in its "init state" has no implication whatsoever on either of the other
two. Fully separate X86_XSTATE_ZMM_H and X86_XSTATE_ZMM handling, to
prevent upper halves of the upper 16 ZMM registers to display as if they
were zero (when they aren't) after e.g. VZEROALL/VZEROUPPER.

6 years agogdb/riscv: Update test to support targets without FP hardware
Andrew Burgess [Mon, 5 Nov 2018 22:00:31 +0000 (22:00 +0000)]
gdb/riscv: Update test to support targets without FP hardware

Update gdb.arch/riscv-reg-aliases.exp test to support targets without
floating point registers.

gdb/testsuite/ChangeLog:

* gdb.arch/riscv-reg-aliases.exp: Handle targets without floating
point hardware.

6 years agogdb/riscv: Handle errors while setting the frame id
Andrew Burgess [Mon, 29 Oct 2018 15:14:03 +0000 (15:14 +0000)]
gdb/riscv: Handle errors while setting the frame id

When we connect to a remote target one of the first things GDB does is
establish a frame id.  If an error is thrown while building this frame
id then GDB will disconnect from the target.

This can mean that, if the user is attempting to connect to a target
that doesn't yet have a program loaded, or the program the user is
going to load onto the target doesn't match what is already loaded, or
the target is just in some undefined state, then the very first
request for a frame id can fail (for example, by trying to load from
an invalid memory address), and GDB will disconnect.  It is then
impossible for the user to connect to the target and load a new
program at all.

An example of such a session might look like this:

    Reading symbols from ./gdb/testsuite/outputs/gdb.arch/riscv-reg-aliases/riscv-reg-aliases...
    (gdb) target remote :37191
    Remote debugging using :37191
    0x0000000000000100 in ?? ()
    Cannot access memory at address 0x0
    (gdb) load
    You can't do that when your target is `exec'
    (gdb) info frame
    /path/to/gdb/gdb/thread.c:93: internal-error: thread_info* inferior_thread(): Assertion `tp' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n)

The solution is to handle errors in riscv_frame_this_id, and leave the
this_id variable with its default value, which is the predefined
'outermost' frame.

With this fix in place, connecting to the same target now looks like
this:

    (gdb) target remote :37191
    Remote debugging using :37191
    0x0000000000000100 in ?? ()
    (gdb) info frame
    Stack level 0, frame at 0x0:
     pc = 0x100; saved pc = <not saved>
     Outermost frame: outermost
     Arglist at unknown address.
     Locals at unknown address, Previous frame's sp in sp

gdb/ChangeLog:

* riscv-tdep.c (riscv_insn::decode): Update header comment.
(riscv_frame_this_id): Catch errors thrown while building the
frame cache, leave the frame id as the default, which is the outer
frame id.

6 years agoMake gold testsuite work with CC and CXX specifying -B
Alan Modra [Fri, 2 Nov 2018 10:57:02 +0000 (21:27 +1030)]
Make gold testsuite work with CC and CXX specifying -B

The patch allows the gold testsuite to pass when using something like
the following configure line, which works for the rest of the binutils
testsuite.  At least, it does if you don't configure your gcc with any
of the options that force a particular path to as or ld.

gccdir="/home/alan/build/gcc/prev-"
gccsrc="/home/alan/src/gcc.git"
gcctarg="x86_64-linux"
CC="${gccdir}gcc/xgcc -B${gccdir}gcc/" \
CXX="${gccdir}gcc/xg++ -B${gccdir}gcc/ -I${gccdir}$gcctarg/libstdc++-v3/include -I${gccdir}$gcctarg/libstdc++-v3/include/$gcctarg -I${gccsrc}/libstdc++-v3/libsupc++ -L${gccdir}$gcctarg/libstdc++-v3/src/.libs/" \
~/src/binutils-gdb/configure ...

gold's -Bgcctestdir/ option must come before the -B supplied by $CC
or $CXX, in order to pick up the linker we want to test.  Also when
using a not-yet-installed gcc, it is necessary to provide a collect-ld
in gcctestdir/ as otherwise a collect-ld script in -B${gccdir}gcc/
will be used and the wrong linker tested.

Besides this, the patch fixes some bugs: The $COMPILE -D_FORTIFY_SOURCE
edit was wrong (but worked for usual values), and the $CXXLINK_S edit
unnecessarily but harmlessly used extra backslash quoting.  See
posix shell documentation regarding quoting, or
www.gnu.org/software/bash/manual/bashref.html#Command-Substitution

Also, -Bgcctestdir/ in one place makes it less likely a new test will
be added that accidentally lacks the option.

* Makefile.am (gcctestdir1/ld): Use $@ and absolute paths.
(gcctestdir1/collect-ld): New.
(ld1_DEPENDENCIES): Add gcctestdir1/collect-ld.
(ld1_LDFLAGS): Remove -Bgcctestdir1/.
(editcc1, ld1_LINK): Define.
(gcctestdir2/ld, gcctestdir2/collect-ld, ld2_DEPENDENCIES),
(ld2_LDFLAGS, editcc2, ld2_LINK),
(ld1_r_DEPENDENCIES, ld1_r_LDFLAGS, ld1_r_LINK),
(gcctestdir2-r/ld, gcctestdir2-r/collect-ld, ld2_r_DEPENDENCIES),
(ld2_r_LDFLAGS, editcc2r, ld2_r_LINK),
(gcctestdir3/ld, gcctestdir3/collect-ld, ld3_DEPENDENCIES),
(ld3_LDFLAGS, editcc3, ld3_LINK),
(gcctestdir4/ld, gcctestdir4/collect-ld, ld4_DEPENDENCIES),
(ld4_LDFLAGS, editcc4, ld4_LINK): Similarly.
* Makefile.in: Regenerate.
* testsuite/Makefile.am (editcc): Define sed command to put
our -B option first.  Remove other occurrences of -Bgcctestdir/
throughout file.
(editcc1): Define for -D_FORTIFY_SOURCE stripping.
(editcc2): Define for -static-libgcc/libstdc++ stripping.
(LINK1, CXXLINK1): Don't use CCLD or CXXLD.
(CCLD, CXXLD, COMPILE, LINK, CXXCOMPILE, CXXLINK, CXXLINK_S): Define
using editcc macros.
(gcctestdir/collect-ld): New rule, add as a dependency of..
(gcctestdir/ld): ..this.  Use $@ and abs_top_buildir.
(gcctestdir/as): Use $@.
* testsuite/Makefile.in: Regenerate.
* testsuite/incremental_test.sh (actual): Match collect-ld too.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 8 Nov 2018 00:00:32 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago(Ada/tasking) fix array or string index out of range warning
Joel Brobecker [Wed, 7 Nov 2018 21:04:13 +0000 (16:04 -0500)]
(Ada/tasking) fix array or string index out of range warning

A recent change in the compiler highlighted a small weakness in
the function reading the contents of the Ada Task Control Block
(ATCB -- the data that allows us to inspect Ada tasks). As a result,
anytime we read it, we started getting some warnings. For instance,
using the gdb.ada/tasks.exp testcase...

        $ gnatmake -g foo.adb
        $ gdb foo
        (gdb) b foo.adb:60
        Breakpoint 1 at 0x403e07: file foo.adb, line 60.
        (gdb) run
        [...]
        Thread 1 "foo" hit Breakpoint 1, foo () at foo.adb:60
        60         for J in Task_List'Range loop  -- STOP_HERE

... we can see that the "info tasks" command produces some warnings,
followed by the correct output.

        (gdb) info tasks
  !! ->  warning: array or string index out of range
  !! ->  warning: array or string index out of range
  !! ->  warning: array or string index out of range
  !! ->  warning: array or string index out of range
           ID       TID P-ID Pri State                  Name
        *   1    654050       48 Runnable               main_task
            2    654ef0    1  48 Accept or Select Term  task_list(1)
            3    658680    1  48 Accept or Select Term  task_list(2)
            4    65be10    1  48 Accept or Select Term  task_list(3)

The problem comes from the fact that read_atcb, the function responsible
for loading the contents of the ATCB, blindly tries to read some data
which is only relevant when a task is waiting for another task on
an entry call. A comment in that code's section gives a hint as to
how the information is meant to be decoded:

      /* Let My_ATCB be the Ada task control block of a task calling the
         entry of another task; then the Task_Id of the called task is
         in My_ATCB.Entry_Calls (My_ATCB.ATC_Nesting_Level).Called_Task.  */

What the comment shows is that, to get the Id of the task being called,
one has to go through the entry calls field, which is an array pointer.
Up to now, we were lucky that, for tasks that are _not_ waiting on an
entry call, its ATCB atc_nesting_level used to be set to 1, and so
we were able to silently read some irrelevant data. But a recent change
now causes this field to be zero instead, and this triggers the warning,
since we are now trying to read outside of the array's range (arrays
in Ada often start at index 1, as is the case here).

We avoid this issue by simply only reading that data when the data
is actually known to be relevant (state == Entry_Caller_Sleep).

This, in turn, allows us to simplify a bit the use of the task_info->state
field, where we no longer need to check task the task has a state equal
to Entry_Caller_Sleep before using this field. Indeed, with this new
approach, we now know that, unless task_info->state == Entry_Caller_Sleep,
the state is now guaranteed to be zero. In other words, we no longer set
task_info->called_task to some random value, forcing to check the task's
state first as a way to verify that the data is not random.

gdb/ChangeLog:

        * ada-lang.c (read_atcb): Only set task_info->called_task if
        task_info->state == Entry_Caller_Sleep.
        (print_ada_task_info): Do not check task_info->state before
        checking task_info->called_task.
        (info_task): Likewise.

6 years agoada-tasks.c::read_atcb: start from a cleared ada_task_info result
Joel Brobecker [Wed, 7 Nov 2018 21:03:38 +0000 (16:03 -0500)]
ada-tasks.c::read_atcb: start from a cleared ada_task_info result

The purpose of this patch is not to fix a bug per se, but rather
to robustify this function to make sure it never returns a struct
ada_task_info where some of the fields are left uninitialized.
Reading the current implementation, it attempts to methodically
set them all one by one: but it's not excluded that a future
change might miss something. A memset is cheap and make sure that
this function returns repeatable results.

This in turns allows us to remove some assignments which have become
redundant.

gdb/ChangeLog:

        * ada-tasks.c (read_atcb): Clear task_info before computing
        the value of each of its fields.

6 years agoEnhance objdump's --disassemble switch so that it can now take an optional parameter...
Masatake Yamato [Wed, 7 Nov 2018 18:07:36 +0000 (18:07 +0000)]
Enhance objdump's --disassemble switch so that it can now take an optional parameter, specifying the starting symbol for disassembly.  Disassembly will continue from this symbol up to the next symbol.

* objdump.c (long_options): Have the --disassemble option take an
optional argument.
(usage): Add description for the `symbol' argument to the
--disassemble option.
(disasm_sym): New file private variable.
(struct objdump_disasm_info): New field `symbol'.
(disassemble_section): Introduce `do_print' local variable
to control whether objdump displays the result of disassembling
for a symbol or not.
(main): Set `symbol' file private variable if the option argument
for the --disassemble option is given.
* doc/binutils.texi (objdump): Add description for the option
argument.
* NEWS: Mention the new feature.
* testsuite/binutils-all/objdump.exp: Add tests of the -d and
--disassemble=<symbol> options.
* testsuite/binutils-all/bintest.s: Add more symbols and code.
* testsuite/binutils-all/readelf.s: Update expected output.
* testsuite/binutils-all/readelf.ss-64: Likewise.
* testsuite/binutils-all/readelf.ss-mips: Likewise.
* testsuite/binutils-all/readelf.ss-tmips: Likewise.

6 years agoAdd updated French and Portuguese translations.
Nick Clifton [Wed, 7 Nov 2018 16:09:27 +0000 (16:09 +0000)]
Add updated French and Portuguese translations.

gas * po/fr.po: Updated French translation.
bfd * po/fr.po: Updated French translation.
* po/pt.po: Updated Portuguese translation.
binutils* po/pt.po: Updated Portuguese translation.

6 years agoAdd support for new load commands added by Apple to the MACH-O file format.
Roman Bolshakov [Wed, 7 Nov 2018 15:20:22 +0000 (15:20 +0000)]
Add support for new load commands added by Apple to the MACH-O file format.

bfd * mach-o.h: Add new enums for BFD_MACH_O_PLATFORM_MACOS,
BFD_MACH_O_PLATFORM_IOS, BFD_MACH_O_PLATFORM_TVOS,
BFD_MACH_O_PLATFORM_WATCHOS, BFD_MACH_O_PLATFORM_BRIDGEOS,
BFD_MACH_O_TOOL_CLANG, BFD_MACH_O_TOOL_SWIFT, BFD_MACH_O_TOOL_LD.
(struct bfd_mach_o_note_command): New.
(struct bfd_mach_o_build_version_tool): New.
(struct bfd_mach_o_build_version_command): New.
(bfd_mach_o_read_version_min): Don't split version into
a few fields. Rename reserved to sdk.
* mach-o.c (bfd_mach_o_read_version_min): Don't split version into a
few fields. Rename reserved to sdk.
(bfd_mach_o_read_command): Handle LC_VERSION_MIN_TVOS, LC_NOTE,
LC_BUILD_VERSION.
(bfd_mach_o_read_note): New.
(bfd_mach_o_read_build_version): New.

PR 23728
binutils* od-macho.c (printf_version): New.
(dump_load_command): Use it to print version. Print sdk version. Print
version info for watchOS and tvOS. Print LC_NOTE, LC_BUILD_VERSION.
(dump_buld_version): New.
(bfd_mach_o_platform_name): New
(bfd_mach_o_tool_name): New

* mach-o/external.h (mach_o_nversion_min_command_external): Rename
reserved to sdk.
(mach_o_note_command_external): New.
(mach_o_build_version_command_external): New.
* mach-o/loader.h (BFD_MACH_O_LC_VERSION_MIN_TVOS): Define.
(BFD_MACH_O_LC_NOTE): Define.

6 years agogdb: Guard against NULL dereference in dwarf2_init_integer_type
Andrew Burgess [Tue, 6 Nov 2018 19:55:21 +0000 (19:55 +0000)]
gdb: Guard against NULL dereference in dwarf2_init_integer_type

In this commit:

    commit eb77c9df9f6d2f7aa644a170280fe31ce080f887
    Date:   Thu Oct 18 14:04:27 2018 +0100

        gdb: Handle ICC's unexpected void return type

A potential dereference of a NULL pointer was introduced if a
DW_TAG_base_type is missing a DW_AT_name attribute.

I have taken this opportunity to fix a slight confusion that existed
in the test also added in the above commit, the test had two C
variables, declared like this:

    int var_a = 5;

    void *var_ptr = &var_a;

However, the fake DWARF in the test script declared them like this:

    void var_a = 5;

    void *var_ptr = &var_a;

This wasn't a problem as the test never uses 'var_a' directly, this
only exists so 'var_ptr' can be initialised.  However, it seemed worth
fixing.

I've also added a test for a DW_TAG_base_type with a missing
DW_AT_name, as clearly there's not test currently that covers this
(the original patch tested cleanly).  I can confirm that the new test
causes GDB to crash before this patch, and passes with this patch.

gdb/ChangeLog:

* dwarf2read.c (dwarf2_init_integer_type): Check for name being
NULL before dereferencing it.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/void-type.exp: Rename types, and make var_a an 'int'.
* gdb.dwarf2/missing-type-name.exp: New file.

6 years agoRegen bfd/configure
Alan Modra [Wed, 7 Nov 2018 11:23:21 +0000 (21:53 +1030)]
Regen bfd/configure

* configure: Regenerate.

6 years agorx: Add target rx-*-linux.
Yoshinori Sato [Wed, 7 Nov 2018 08:16:56 +0000 (17:16 +0900)]
rx: Add target rx-*-linux.

6 years agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Nov 2018 00:00:16 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago[gdb] Fix gdb crash when reading core file
Tom de Vries [Thu, 1 Nov 2018 08:21:18 +0000 (09:21 +0100)]
[gdb] Fix gdb crash when reading core file

Consider the test-case from this patch, compiled with O0.

The executable segfaults, and generates a core dump:
...
$ ./a.out
Segmentation fault (core dumped)
...

When loading the core file, limiting stack size to 4MB, gdb crashes:
...
$ ulimit -s 4096
$ gdb -batch ./a.out core.saved
[New LWP 19379]
Segmentation fault (core dumped)
...

The crash originates here in linux_vsyscall_range_raw, where we call alloca
with phdrs_size == 4194112 (roughly 4MB):
...
      phdrs = (Elf_Internal_Phdr *) alloca (phdrs_size);
...

While for this test-case gdb runs fine with the system default stack limit of
8MB, there are cases reported of 12MB phdrs_size where gdb also crashes with
the system default stack limit.

Fix this by using xmalloc instead of alloca, which prevents the crash provided
the stack limit is at least 112kb.

Build and reg-tested on x86_64-linux.

2018-11-06  Tom de Vries  <tdevries@suse.de>

* linux-tdep.c (linux_vsyscall_range_raw): Use xmalloc to allocate
program headers.

* gdb.base/many-headers.c: New test.
* gdb.base/many-headers.exp: New file.

6 years agoRISC-V: Force variables to .data for code_elim.
Jim Wilson [Tue, 6 Nov 2018 19:06:23 +0000 (11:06 -0800)]
RISC-V: Force variables to .data for code_elim.

RISC-V puts a global variable in .sdata by default, which causes the
add-symbol-file commands with -s .data to fail as there is no .data section.
This fixes 3 testsuite failures.

gdb/testsuite/
* gdb.base/code_elim.exp: For riscv, set additional_flags
to include -msmall-data-limit=0.

6 years agogdb: xtensa: use linux ABI code for uclinux
Max Filippov [Thu, 1 Nov 2018 00:10:33 +0000 (17:10 -0700)]
gdb: xtensa: use linux ABI code for uclinux

gdb/
2018-11-06  Max Filippov  <jcmvbkbc@gmail.com>

* configure.tgt (xtensa*-*-linux*): Change to xtensa*-*-*linux*
so that it applies to uclinux as well.

6 years agoARM: Do not use FP reg when on AAPCS
Marius Muench [Tue, 6 Nov 2018 17:51:39 +0000 (10:51 -0700)]
ARM: Do not use FP reg when on AAPCS

GDB tries to dereference the frame pointer in arm_scan_prologue as a
last resort to create frame information.
However, the more recent AAPCS ABI does not make use of a frame pointer.

This patch checks whether the specified arm_abi is AAPCS before
dereferencing the "frame pointer". If so, just return as efforts to use
it for restoring frame information won't work.

gdb/ChangeLog
2018-11-06  Marius Muench  <marius.muench@eurecom.fr>

* arm-tdep.c (arm_scan_prologue): Don't dereference FP reg
when on AAPCS.

6 years agoNote that PT_GETREGS supplies SSTATUS for FreeBSD/riscv.
John Baldwin [Tue, 6 Nov 2018 17:47:21 +0000 (09:47 -0800)]
Note that PT_GETREGS supplies SSTATUS for FreeBSD/riscv.

This permits reading the value of the SSTATUS CSR returned by ptrace()
for live FreeBSD/riscv processes.

* riscv-fbsd-nat.c (getregs_supplies): Return true for
RISCV_CSR_SSTATUS_REGNUM.

6 years agoelfedit: Add --enable-x86-feature/--disable-x86-feature
H.J. Lu [Tue, 6 Nov 2018 17:38:33 +0000 (09:38 -0800)]
elfedit: Add --enable-x86-feature/--disable-x86-feature

Add --enable-x86-feature and --disable-x86-feature options to elfedit
to set and clear the IBT and SHSTK bits in program property in ELF
executables and shared objects.

binutils/

* doc/binutils.texi: Document --enable-x86-feature and
--disable-x86-feature options for elfedit.
* elfedit.c: Include "config.h" and <sys/mman.h>.
(enable_x86_features): New.
(disable_x86_features): Likewise.
(update_gnu_property): Likewise.
(elf_x86_feature): Likewise.
(process_file): Call update_gnu_property on ET_EXEC or ET_DYN
file.
(command_line_switch): Add OPTION_ENABLE_X86_FEATURE and
OPTION_DISABLE_X86_FEATURE.
(options): Add--enable-x86-feature and --disable-x86-feature.
(usage): Likewise.
(main): Handle OPTION_ENABLE_X86_FEATURE and
OPTION_DISABLE_X86_FEATURE.

ld/

* testsuite/config/default.exp (ELFEDIT): New.
* testsuite/ld-elf/linux-x86.exp (elfedit_test): New proc.
Run elfedit tests.
* testsuite/ld-elf/x86-feature-1a.rd: New file.
* testsuite/ld-elf/x86-feature-1b.rd: Likewise.
* testsuite/ld-elf/x86-feature-1c.rd: Likewise.
* testsuite/ld-elf/x86-feature-1d.rd: Likewise.
* testsuite/ld-elf/x86-feature-1e.rd: Likewise.

6 years agoAdd support for a couple of new Mach-O commands.
Nick Clifton [Tue, 6 Nov 2018 17:09:40 +0000 (17:09 +0000)]
Add support for a couple of new Mach-O commands.

PR 23742
* mach-o.c (bfd_mach_o_read_command): Accept and ignore
BFD_MACH_O_LC_LINKER_OPTIONS and BFD_MACH_O_LC_BUILD_VERSION
commands.

* mach-o/loader.h: Add BFD_MACH_O_LC_BUILD_VERSION.

6 years ago[arm] fix testsuite breakage on pe-coff
Matthew Malcomson [Tue, 6 Nov 2018 17:09:34 +0000 (17:09 +0000)]
[arm] fix testsuite breakage on pe-coff

The PE target can insert NOP's for padding to 4 byte alignment.
This was causing a testcase failure, this commit fixes the testcase.

This commit also escapes some full-stops in the testcase regexp.

2018-11-06  Matthew Malcomson  <matthew.malcomson@arm.com>

* testsuite/gas/arm/neon-cond-bad_t2.d: Fix testcase for PE
target.

6 years ago[arm] Check for neon and condition in vcvt.f16.f32
Matthew Malcomson [Tue, 6 Nov 2018 14:52:11 +0000 (14:52 +0000)]
[arm] Check for neon and condition in vcvt.f16.f32

VCVT between f16 and f32 is an Advanced SIMD instruction.
Not all the VCVT alternatives need neon, hence the check for neon is in
the encode function.

The check on neon for VCVT.f16.f32 (and vice versa) is missing.

vshcmd: > echo 'vcvt.f16.f32 d1, q1' | gas/as-new -mfpu=vfpxd -march=armv8.5-a -
testdir [15:59:10] $

Also, the handling of the condition code behaves differently to other
SIMD instructions -- no error message is produced when assembling an
instruction with a condition code suffix despite the arm encoding not
allowing a condition code. (n.b. the actual binary produced is
independent of the suffix).

The instruction should be treated similarly to VSUBL that has the same
caveat of "must be unconditional" describing the {<c>} symbol.  vcvt
half-precision to single precision found in F6.1.58 in the ARM
Architecture Reference Manual issue C.a, vsubl found in F6.1.240 in
the ARM Architecture Reference Manual issue C.a

2018-11-06  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/tc-arm.c (do_neon_cvt_1): Add check for neon and condition
codes to half-precision conversion.
* testsuite/gas/arm/neon-cond-bad-inc.s: Check vcvteq disallowed.
* testsuite/gas/arm/neon-cond-bad.l: Likewise.
* testsuite/gas/arm/neon-cond-bad_t2.d: Check vcvteq allowed in IT
block.
* testsuite/gas/arm/vfp-bad.l: Ensure vcvt doesn't work without neon.
* testsuite/gas/arm/vfp-bad.s: Likewise.

6 years ago[BINUTILS, ARM] Add Armv8.5-A to select_arm_features and update macros.
Sudakshina Das [Tue, 6 Nov 2018 12:13:45 +0000 (12:13 +0000)]
[BINUTILS, ARM] Add Armv8.5-A to select_arm_features and update macros.

This patch addresses the following
1) Adding ARMv8.5-A in select_arm_features.
2) Updating the feature macro so that the new ARM_EXT2_* features for
Armv8.5-A are moved to ARM_AEXT2_V8_5A.

*** opcodes/ChangeLog ***

2018-11-06  Sudakshina Das  <sudi.das@arm.com>

* arm-dis.c (select_arm_features): Update bfd_mach_arm_8
with Armv8.5-A. Remove reduntant ARM_EXT2_FP16_FML.

*** include/ChangeLog ***

2018-11-06  Sudakshina Das  <sudi.das@arm.com>

* opcode/arm.h (ARM_ARCH_V8_5A): Move ARM_EXT2_PREDRES and
ARM_EXT2_SB to ...
(ARM_AEXT2_V8_5A): Here.

6 years agoPowerPC instruction mask checks
Alan Modra [Tue, 6 Nov 2018 05:34:40 +0000 (16:04 +1030)]
PowerPC instruction mask checks

The instruction mask bits should never overlap any of the operands,
nor should operand bits overlap, but some operands weren't checked.
This patch arranges to check the omitted operands, using a mask
returned by the operand->insert function.  Some tweaking of various
insert functions is needed to support this: The error case must set
field bits.

Since I was looking at the insert functions, I tidied some dead code
and simplified some of the powerpc_operands entries.

gas/
* config/tc-ppc.c (insn_validate): Don't ignore mask in
PPC_OPSHIFT_INV case.  Call the insert function to calculate
a mask.
opcodes/
* ppc-opc.c (insert_arx, insert_ary, insert_rx, insert_ry, insert_ls),
(insert_evuimm1_ex0, insert_evuimm2_ex0, insert_evuimm4_ex0),
(insert_evuimm8_ex0, insert_evuimm_lt8, insert_evuimm_lt16),
(insert_rD_rS_even, insert_off_lsp, insert_off_spe2, insert_Ddd):
Don't return zero on error, insert mask bits instead.
(insert_sd4h, extract_sd4h, insert_sd4w, extract_sd4w): Delete.
(insert_sh6, extract_sh6): Delete dead code.
(insert_sprbat, insert_sprg): Use unsigned comparisions.
(powerpc_operands <OIMM>): Set shift count rather than using
PPC_OPSHIFT_INV.
<SE_SDH, SE_SDW>: Likewise.  Don't use insert/extract functions.

6 years agoPowerPC instruction operand flag validation
Alan Modra [Tue, 6 Nov 2018 02:53:20 +0000 (13:23 +1030)]
PowerPC instruction operand flag validation

This adds another check that might have saved me a little time
recently if it had been present.

* config/tc-ppc.c (insn_validate): Check that optional operands
are not followed by non-optional operands.

6 years agox86: correctly handle VPBROADCASTD with EVEX.W set outside of 64-bit mode
Jan Beulich [Tue, 6 Nov 2018 10:45:49 +0000 (11:45 +0100)]
x86: correctly handle VPBROADCASTD with EVEX.W set outside of 64-bit mode

For the flavor having a GPR operand EVEX.W is ignored outside of 64-bit
mode. The mnemonic should therefore not be VPBROADCASTQ.

6 years agox86: correctly handle VMOVD with EVEX.W set outside of 64-bit mode
Jan Beulich [Tue, 6 Nov 2018 10:45:11 +0000 (11:45 +0100)]
x86: correctly handle VMOVD with EVEX.W set outside of 64-bit mode

For the flavors having a GPR operand EVEX.W is ignored outside of 64-bit
mode. The mnemonic should therefore not be KMOVQ, the GPR operand should
not name a non-existing 64-bit register, just like is already the case
for the AVX counterparts, and the Disp8 scaling factor should be 4
rather than 8.

6 years agox86: correctly handle KMOVD with VEX.W set outside of 64-bit mode
Jan Beulich [Tue, 6 Nov 2018 10:44:31 +0000 (11:44 +0100)]
x86: correctly handle KMOVD with VEX.W set outside of 64-bit mode

For the flavors having a GPR operand VEX.W is ignored outside of 64-bit
mode. The mnemonic should therefore not be KMOVQ.

6 years agox86: adjust {,E}VEX.W handling for PEXTR* / PINSR*
Jan Beulich [Tue, 6 Nov 2018 10:43:55 +0000 (11:43 +0100)]
x86: adjust {,E}VEX.W handling for PEXTR* / PINSR*

PEXTR{B,W} and PINSR{B,W}, just like for AVX512BW, are WIG, no matter
that the SDM uses a nonstandard description of that fact.

PEXTRD, even with EVEX.W set, ignores that bit outside of 64-bit mode,
just like its AVX counterpart.

6 years agox86: adjust {,E}VEX.W handling outside of 64-bit mode
Jan Beulich [Tue, 6 Nov 2018 10:42:54 +0000 (11:42 +0100)]
x86: adjust {,E}VEX.W handling outside of 64-bit mode

Many VEX-/EVEX-encoded instructions accessing GPRs become WIG outside of
64-bit mode. The respective templates should specify neither VexWIG nor
VexW0, but instead the setting of the bit should be determined from
- REX.W in 64-bit mode,
- the setting established through -mvexwig= / -mevexwig= otherwise.
This implies that the evex-wig2 testcase needs to go away, as being
wrong altogether.

A few test additions desirable here will only happen in later patches,
as the disassembler needs adjustments first.

Once again SSE2AVX templates are left alone, for it being unclear what
the behavior there should be.

6 years agox86: fix various non-LIG templates
Jan Beulich [Tue, 6 Nov 2018 10:42:08 +0000 (11:42 +0100)]
x86: fix various non-LIG templates

Quite a few templates were marked LIG while really the insns aren't.
Introduce descriptive shorthands once again, instead of continuing to
use the less legible original forms.

6 years agox86: allow {store} to select alternative {,}PEXTRW encoding
Jan Beulich [Tue, 6 Nov 2018 10:40:25 +0000 (11:40 +0100)]
x86: allow {store} to select alternative {,}PEXTRW encoding

The 0F C5 encoding is indeed a load type one (just that memory operands
are not permitted), while the 0F 3A 15 encoding is obviously a store.
Allow the pseudo prefixes to be used to select between them.

Also move (without any change) the secondary AVX512BW templates next to
the primary one.

6 years agox86: add more VexWIG
Jan Beulich [Tue, 6 Nov 2018 10:39:42 +0000 (11:39 +0100)]
x86: add more VexWIG

Commits 6865c0435a ("x86: Support VEX/EVEX WIG encoding") and 6fa52824c3
("x86: Replace VexW=3 with VexWIG") omitted quite a few templates, oddly
enough in some cases despite testcases getting added (which then were
recorded with wrong expected output).

Also adjust VPMAXUB's attributes in the AVX512BW case to match ordering
of that of neighboring templates.

For the moment SSE2AVX templates are left alone, as it isn't clear
whether they were intentionally left untouched by the original commits
(the descriptions don't say either way).

In this context I question the decision in commit 0375113302 ("x86: Add
-mvexwig=[0|1] option to assembler") to move the logic to determine the
value of the W bit ahead of the decision whether to use 2-byte VEX:
While I can see this as one possible interpretation of -mvexwig=, the
other alternative (setting the value of the bit only if it actually
exists in the encoding) looks as reasonable to me, and perhaps even more
in line with us generally trying to pick the shortest encoding.

6 years agox86: XOP VPHADD* / VPHSUB* are VEX.W0
Jan Beulich [Tue, 6 Nov 2018 10:38:47 +0000 (11:38 +0100)]
x86: XOP VPHADD* / VPHSUB* are VEX.W0

Also avoid introducing further uses of VexW=1, by introducing and using
VexW0 at this occasion. Move the marker past all #define-s.

6 years agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Nov 2018 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoChangeLog for 'Fix 4K leak each time next/step changes of function.'
Philippe Waroquiers [Mon, 5 Nov 2018 22:09:44 +0000 (23:09 +0100)]
ChangeLog for 'Fix 4K leak each time next/step changes of function.'

6 years agoFix 4K leak in open_source_file each time next/step changes of function.
Philippe Waroquiers [Sun, 4 Nov 2018 16:48:57 +0000 (17:48 +0100)]
Fix 4K leak in open_source_file each time next/step changes of function.

When current function changes after a next/step, GDB shows a message such as:
  (gdb) s
  info_fun1 ()
      at /bd/home/philippe/gdb/git/build_smallthing/gdb/testsuite/../../../smallthing/gdb/testsuite/gdb.base/info_qt.c:41
  41   info_qt_inc++;
  (gdb)

Valgrind reports a 4K definite leak for each such message (full stacktrace of
the leak below).

This patch fixes this leak, by transferring the current s->fullname to the
unique_xmalloc_ptr fullname given to find_and_open_source.

Note that I do not understand why find_and_open_source always tries to
re-execute the substitution rules on the provided fullname, as source.c
symtab_to_fullname just blindly returns a non NULL s->fullname, counting on
forget_cached_source_info to be called if search dir or substitution rules are
changed.  Similarly, psymtab_to_fullname also just returns a non NULL
ps->fullname.

==15309== VALGRIND_GDB_ERROR_BEGIN
==15309== 69,632 bytes in 17 blocks are definitely lost in loss record 3,158 of 3,186
==15309==    at 0x4C2BE2D: malloc (vg_replace_malloc.c:299)
==15309==    by 0x5BF0987: realpath@@GLIBC_2.3 (canonicalize.c:78)
==15309==    by 0x41F713: gdb_realpath(char const*) (pathstuff.c:72)
==15309==    by 0x608833: openp(char const*, enum_flags<openp_flag>, char const*, int, std::unique_ptr<char, gdb::xfree_deleter<char> >*) (source.c:861)
==15309==    by 0x608B89: find_and_open_source(char const*, char const*, std::unique_ptr<char, gdb::xfree_deleter<char> >*) (source.c:1049)
==15309==    by 0x608D0B: open_source_file(symtab*) (source.c:1074)
==15309==    by 0x609101: print_source_lines_base(symtab*, int, int, enum_flags<print_source_lines_flag>) (source.c:1291)
==15309==    by 0x614ADF: print_frame_info(frame_info*, int, print_what, int, int) (stack.c:911)
==15309==    by 0x614C45: print_stack_frame(frame_info*, int, print_what, int) (stack.c:181)
==15309==    by 0x511D5E: print_stop_location (infrun.c:8044)
==15309==    by 0x511D5E: print_stop_event(ui_out*) (infrun.c:8061)
==15309==    by 0x40DD6D: cli_on_normal_stop(bpstats*, int) (cli-interp.c:145)
==15309==    by 0x512409: operator() (functional:2127)
==15309==    by 0x512409: notify (observable.h:106)
==15309==    by 0x512409: normal_stop() (infrun.c:8334)
==15309==    by 0x5156D8: fetch_inferior_event(void*) (infrun.c:3955)
==15309==    by 0x4B3EEC: gdb_wait_for_event(int) (event-loop.c:859)
==15309==    by 0x4B3FF6: gdb_do_one_event() [clone .part.4] (event-loop.c:322)
==15309==    by 0x4B41B4: gdb_do_one_event (common-exceptions.h:219)
==15309==    by 0x4B41B4: start_event_loop() (event-loop.c:371)
==15309==    by 0x551217: captured_command_loop() (main.c:330)
==15309==    by 0x55220C: captured_main (main.c:1177)
==15309==    by 0x55220C: gdb_main(captured_main_args*) (main.c:1193)
==15309==    by 0x29B4F7: main (gdb.c:32)
==15309==
==15309== VALGRIND_GDB_ERROR_END

gdb/ChangeLog
2018-11-04  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

* source.c (open_source_file): Fix leak by transferring the
current s->fullname to the unique_xmalloc_ptr fullname given
to find_and_open_source.

6 years agoCorrect ChangeLog entries for PR gas/23854 commit
H.J. Lu [Mon, 5 Nov 2018 19:12:28 +0000 (11:12 -0800)]
Correct ChangeLog entries for PR gas/23854 commit

commit e60f4d3bdac25f02875afe36b7436bc2dfbbb978
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Nov 5 09:01:26 2018 -0800

    x86: Disable GOT relaxation with data prefix

    Since linker GOT relaxation isn't valid for 16-bit GOT access, we should
    disable GOT relaxation with data prefix.

6 years agox86: Disable GOT relaxation with data prefix
H.J. Lu [Mon, 5 Nov 2018 17:01:26 +0000 (09:01 -0800)]
x86: Disable GOT relaxation with data prefix

Since linker GOT relaxation isn't valid for 16-bit GOT access, we should
disable GOT relaxation with data prefix.

gas/

PR gas/r23854
* config/tc-i386.c (output_disp): Disable GOT relaxation with
data prefix.
* testsuite/gas/i386/mixed-mode-reloc32.d: Updated.

ld/

PR gas/r23854
* testsuite/ld-i386/i386.exp: Run pr23854.
* testsuite/ld-x86-64/x86-64.exp: Likewwise.
* testsuite/ld-i386/pr23854.d: New file.
* testsuite/ld-i386/pr23854.s: Likewwise.
* testsuite/ld-i386/pr23854.d: Likewwise.
* testsuite/ld-x86-64/pr23854.d: Likewwise.
* testsuite/ld-x86-64/pr23854.s: Likewwise.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 5 Nov 2018 00:00:53 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoReturn gdbpy_ref from gdbpy_get_varobj_pretty_printer
Tom Tromey [Wed, 24 Oct 2018 22:45:41 +0000 (16:45 -0600)]
Return gdbpy_ref from gdbpy_get_varobj_pretty_printer

This changes gdbpy_get_varobj_pretty_printer to return a gdbpy_ref.

gdb/ChangeLog
2018-11-04  Tom Tromey  <tom@tromey.com>

* varobj.c (install_default_visualizer): Update.
* python/python-internal.h (gdbpy_get_varobj_pretty_printer):
Return gdbpy_ref.
* python/py-prettyprint.c (search_pp_list): Return gdbpy_ref.
(find_pretty_printer_from_progspace)
(find_pretty_printer_from_gdb, find_pretty_printer)
(gdbpy_get_varobj_pretty_printer): Return gdbpy_ref.
(gdbpy_get_varobj_pretty_printer, gdbpy_default_visualizer):
Update.

6 years agoReturn gdbpy_ref from some Python string functions
Tom Tromey [Wed, 24 Oct 2018 22:40:00 +0000 (16:40 -0600)]
Return gdbpy_ref from some Python string functions

This changes python_string_to_unicode,
python_string_to_target_python_string, and
host_string_to_python_string to return gdbpy_ref.

gdb/ChangeLog
2018-11-04  Tom Tromey  <tom@tromey.com>

* python/python.c (gdbpy_parameter_value): Update.
* python/python-internal.h (python_string_to_unicode)
(python_string_to_target_python_string)
(host_string_to_python_string): Return gdbpy_ref.
* python/py-utils.c (python_string_to_unicode)
(unicode_to_encoded_python_string)
(unicode_to_target_python_string)
(python_string_to_target_string)
(python_string_to_target_python_string): Return gdbpy_ref.
(python_string_to_host_string): Update.
(host_string_to_python_string): Return gdbpy_ref.
* python/py-symtab.c (stpy_get_filename, stpy_get_producer)
(stpy_fullname): Update.
* python/py-progspace.c (pspy_get_filename, pspy_solib_name):
Update.
* python/py-prettyprint.c (print_string_repr): Update.
* python/py-objfile.c (objfpy_get_filename, objfpy_get_username)
(objfpy_get_build_id): Update.
* python/py-breakpoint.c (bppy_get_location)
(bppy_get_expression, bppy_get_condition, bppy_get_commands):
Update.

6 years agoReturn gdbpy_ref from gdb_py_object_from_*longest
Tom Tromey [Wed, 24 Oct 2018 22:33:23 +0000 (16:33 -0600)]
Return gdbpy_ref from gdb_py_object_from_*longest

This changes gdb_py_object_from_longest and
gdb_py_object_from_ulongest to return a gdbpy_ref rather than a
PyObject*.

gdb/ChangeLog
2018-11-04  Tom Tromey  <tom@tromey.com>

* python/python-internal.h (gdb_py_object_from_longest)
(gdb_py_object_from_ulongest): Return gdbpy_ref.
* python/py-value.c (valpy_int): Update.
* python/py-utils.c (gdb_py_object_from_longest): Return
gdbpy_ref.
(gdb_py_object_from_ulongest): Likewise.
* python/py-type.c (typy_get_alignof): Update.
* python/py-linetable.c (ltpy_get_all_source_lines)
(ltpy_entry_get_line, ltpy_entry_get_pc): Update.
* python/py-block.c (blpy_get_start, blpy_get_end): Update.

6 years agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Nov 2018 00:01:27 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years agoelfedit: Move ELF header magic bytes check to get_file_header
H.J. Lu [Sat, 3 Nov 2018 22:03:34 +0000 (15:03 -0700)]
elfedit: Move ELF header magic bytes check to get_file_header

Skip the file if ELF header magic bytes doesn't match.

* elfedit.c (update_elf_header): Move EI_MAG? check to ...
(get_file_header): Here.

6 years agoOBVIOUS Fix a typo in ada-lang.c add_prefix_cmd for "set ada"
Philippe Waroquiers [Sat, 3 Nov 2018 20:33:42 +0000 (21:33 +0100)]
OBVIOUS Fix a typo in ada-lang.c add_prefix_cmd for "set ada"

Correct typo in add_prefix_cmd doc arg for "set ada".

6 years agoOBVIOUS Remove a useless const char *type and its initialization.
Philippe Waroquiers [Sat, 3 Nov 2018 18:31:41 +0000 (19:31 +0100)]
OBVIOUS Remove a useless const char *type and its initialization.

Valgrind detected a leak for the line:
  type = xstrdup ("auto");

as the compile probably dropped the type variable completely, as its
only usage was this initialization.

So, remove the useless variable.

6 years agoOBVIOUS fix the month of the last gdb/ChangeLog entry to be 11 instead of 12.
Philippe Waroquiers [Sat, 3 Nov 2018 18:19:05 +0000 (19:19 +0100)]
OBVIOUS fix the month of the last gdb/ChangeLog entry to be 11 instead of 12.

6 years agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Nov 2018 00:01:18 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years agobinutils: Add AC_FUNC_MMAP to configure.ac
H.J. Lu [Fri, 2 Nov 2018 23:45:41 +0000 (16:45 -0700)]
binutils: Add AC_FUNC_MMAP to configure.ac

Add AC_FUNC_MMAP to configure.ac so that HAVE_MMAP will be checked in
objdump.c and mmap is used if available.

* configure.ac (AC_FUNC_MMAP): New.
* config.in: Regenerated.
* configure: Likewise.

6 years ago(Ada) Add ravenscar tasking support on AArch64
Joel Brobecker [Fri, 2 Nov 2018 17:37:29 +0000 (12:37 -0500)]
(Ada) Add ravenscar tasking support on AArch64

This patch adds support for debugging Ravenscar tasks, similar to what
is done for ppc and sparc.

gdb/ChangeLog:

        * aarch64-ravenscar-thread.h, aarch64-ravenscar-thread.c:
        New files.
        * aarch64-tdep.c: #include "aarch64-ravenscar-thread.h".
        (aarch64_gdbarch_init): Add call to register_aarch64_ravenscar_ops.
        * Makefile.in (ALL_64_TARGET_OBS): Add aarch64-ravenscar-thread.o.
        (HFILES_NO_SRCDIR): Add aarch64-ravenscar-thread.h.
        (ALLDEPFILES): Add aarch64-ravenscar-thread.c.
        * configure.tgt (cpu_obs) [aarch64*-*-*]: Add ravenscar-thread.o
        and aarch64-ravenscar-thread.o.
        * NEWS: Add entry documenting Ravenscar tasking support
        on AArch64 ELF.

6 years agoQUIET flag initialization missing in 2 places.
Philippe Waroquiers [Fri, 2 Nov 2018 13:20:59 +0000 (14:20 +0100)]
QUIET flag initialization missing in 2 places.

Fix by Matthew Malcomson  <matthew.malcomson@arm.com>

Pushed as obvious.

6 years ago[GOLD] make clean
Alan Modra [Fri, 2 Nov 2018 03:29:31 +0000 (13:59 +1030)]
[GOLD] make clean

Cleans a few more test files.

* Makefile.am (MOSTLYCLEANFILES): Define.
* Makefile.in: Regnerate.
* testsuite/Makefile.am (MOSTLYCLEANFILES): Add ver_test_14 and
gnu_property_test.
* testsuite/Makefile.in: Regnerate.

6 years agoSquash readelf warning on zero sh_link reloc section
Alan Modra [Fri, 2 Nov 2018 02:34:31 +0000 (13:04 +1030)]
Squash readelf warning on zero sh_link reloc section

On readelf examining a static executable built with current glibc,
we get a silly warning.

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .note.ABI-tag     NOTE            0000000000400190 000190 000020 00   A  0   0  4
  [ 2] .note.gnu.build-id NOTE            00000000004001b0 0001b0 000024 00   A  0   0  4
readelf: Warning: [ 3]: Link field (0) should index a symtab section.
  [ 3] .rela.plt         RELA            00000000004001d8 0001d8 000228 18  AI  0  20  8

This .rela.plt section contains only IRELATIVE relocations (which have
symbol index zero), so it isn't appropriate to warn.  A zero sh_link
section is deliberately chosen for such a section (see PR10337 and
PR23850).

So this patch disables the SHT_REL* sh_link warning.  I've also
removed the .rel.dyn/.rela.dyn section name test to disable the
sh_info warning for SHT_REL* sections.  While relocation sections in
an executable need not specify the section they relocate (the
relocation sh_offset field is an address, not a section offset), that
isn't true in a relocatable file where sh_offset is relative to a
section.  If .rela.dyn happens to exist in an ET_REL object it must
specify a valid section.

* readelf.c (process_section_headers): Don't warn on a zero
sh_info or sh_link for any reloc section in an executable or
shared library.  Do warn for .rel.dyn/.rela.dyn in ET_REL.

6 years agoPR23850, strip should not discard/move .rela.plt in executable
Alan Modra [Fri, 2 Nov 2018 01:17:07 +0000 (11:47 +1030)]
PR23850, strip should not discard/move .rela.plt in executable

strip/objcopy can't deal with alloc reloc sections, not .rela.dyn or
.rela.plt in a dynamic executable, or .rela.plt/.rela.iplt in a static
executable.  So, don't have BFD treat them as side-channel data
associated with the section they are relocating.

PR 23850
* elf.c (bfd_section_from_shdr): Treat SHF_ALLOC SHT_REL* sections
in an executable or shared library as normal sections.

6 years agoRISC-V: Don't allow unaligned breakpoints.
Jim Wilson [Fri, 2 Nov 2018 00:25:15 +0000 (17:25 -0700)]
RISC-V: Don't allow unaligned breakpoints.

Some hardware doesn't support unaligned accesses, and a bare metal target
may not have an unaligned access trap handler.  So if the PC is 2-byte
aligned, then use a 2-byte breakpoint to avoid unaligned accesses.

Tested on native RV64GC Linux with gdb testsuite and cross on spike
simulator and openocd with riscv-tests/debug.

gdb/
* riscv-tdep.c (riscv_breakpoint_kind_from_pc): New local unaligned_p.
Set if pcptr if unaligned.  Return 2 if unaligned_p true.  Update
debugging messages.

6 years agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Nov 2018 00:00:34 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago(Ada) fix "error in expression" when using watch -location command
Joel Brobecker [Thu, 1 Nov 2018 22:15:41 +0000 (15:15 -0700)]
(Ada) fix "error in expression" when using watch -location command

The "watch -l EXPR" command with the language set to Ada currently
fails with the following error:

     (gdb) watch -l global_var
     Error in expression, near ` 0x000000000062d2d8'.

The error occurs because GDB internally translate the request into
a watchpoint on a different expression: "* (TYPE *) ADDR" where
TYPE and ADDR are the type and the address of the object returned
by the expression's evaluation (resp.). So, in the example above,
global_var being an integer stored at 0x000000000062d2d8, GDB tries
to set a watchpoint on "* (integer *) 0x000000000062d2d8", which
fails, because we try to parse this expression with Ada, when
in fact it is not valid.

This patch fixes the issue by implementing the la_watch_location_expression
language method, using a syntax that the Ada parser recognizes
("{TYPE} ADDR").

gdb/ChangeLog:

* ada-lang.c (ada_watch_location_expression): New function.
        (ada_language_defn): Set la_watch_location_expression to
        ada_watch_location_expression.

gdb/testsuite/ChangeLog:

        * gdb.ada/watch_minus_l: New testcase.

6 years agoremove trailing spaces in print-utils.c ("int_string" function)
Joel Brobecker [Thu, 1 Nov 2018 22:08:57 +0000 (15:08 -0700)]
remove trailing spaces in print-utils.c ("int_string" function)

gdb/ChangeLog:

        * print-utils.c (int_string): Remove unnecessary trailing spaces.

6 years agogdb.texinfo: Fix the output of the "info tasks 2" example
Joel Brobecker [Thu, 1 Nov 2018 22:05:40 +0000 (15:05 -0700)]
gdb.texinfo: Fix the output of the "info tasks 2" example

gdb/doc/ChangeLog:

        * gdb.texinfo (Ada Tasks): Update the "info task 2" example
        output to match the current implementation.

6 years agors6000-tdep.c:skip_prologue avoid negative left shift
Joel Brobecker [Thu, 1 Nov 2018 21:46:05 +0000 (16:46 -0500)]
rs6000-tdep.c:skip_prologue avoid negative left shift

the rs6000-tdep.c::skip_prologue function has the following code:

          unsigned int all_mask = ~((1U << fdata->saved_gpr) - 1);

          /* Not a recognized prologue instruction.
             Handle optimizer code motions into the prologue by continuing
             the search if we have no valid frame yet or if the return
             address is not yet saved in the frame.  Also skip instructions
             if some of the GPRs expected to be saved are not yet saved.  */
          if (fdata->frameless == 0 && fdata->nosavedpc == 0
              && (fdata->gpr_mask & all_mask) == all_mask)
            break;

The problem is that fdata->saved_gpr is initialized to -1, and so,
if no instruction is found in the function's prologue that causes us
to set that field to a non-negative value, the sanitizer crashes
with the following message:

    rs6000-tdep.c:1965:34: runtime error: shift exponent -1 is negative

This patch fixes the issue the by only doing the shift if saved_gpr
is not negative. When saved_gpr is negative, we actually don't need
the shift.

gdb/ChangeLog:

        * rs6000-tdep.c (skip_prologue): Fix potential negative left
        shifting.

Tested on ppc-linux native.
Also tested on ppc-elf (baremetal) using AdaCore's testsuite.

6 years agoarm-pikeos: software single step
Jerome Guitton [Thu, 1 Nov 2018 21:32:30 +0000 (14:32 -0700)]
arm-pikeos: software single step

On ARM, PikeOS does not support hardware single step, causing various
semi-random errors when trying to next/step over some user code. So
this patch changes this target to use software-single-step instead.

The challenge is that, up to now, the PikeOS target was in all respects
identical to a baremetal target as far as GDB was concerned, meaning
we were using the baremetal osabi for this target too. This is no longer
possible, and we need to introduce a new OSABI variant. Unfortunately,
there isn't anything in the object file that would allow us to
differentiate between the two platforms. So we have to rely on a
heuristic instead, where we look for some known symbols that are
required in a PikeOS application (these symbols are expected to be
defined by the default linker script, and correspond to routines used
to allocate the application stack).

For the long run, the hope is that the stub implementation provided
by PikeOS is enhanced so that it includes vContSupported+ to the
$qSupported query, and then that the reply to the "vCont?" query
only return support for "continue" operations (thus exclusing "step"
operations). We could then use that information to reliably determine
at connection time that the target does not support single-stepping
and therefore automatically turn software single-stepping automatically
based on it.

gdb/ChangeLog:

        * defs.h (enum gdb_osabi): Add GDB_OSABI_PIKEOS.
        * osabi.c (gdb_osabi_names): Add name for GDB_OSABI_PIKEOS.
        * arm-pikeos-tdep.c: New file.
        * configure.tgt: Add arm-pikeos-tdep.o to the case of ARM
        embedded system.
        * Makefile.in (ALL_TARGET_OBS): Add arm-pikeos-tdep.o.

Tested on arm-pikeos and arm-elf using AdaCore's testsuite.
We also evaluated it on armhf-linux as a cross platform.

6 years agoImport mkdtemp gnulib module, fix mingw build
Simon Marchi [Thu, 1 Nov 2018 19:40:43 +0000 (15:40 -0400)]
Import mkdtemp gnulib module, fix mingw build

Building with mingw currently fails:

  CXX    unittests/mkdir-recursive-selftests.o
/home/emaisin/src/binutils-gdb/gdb/unittests/mkdir-recursive-selftests.c: In function ‘void selftests::mkdir_recursive::test()’:
/home/emaisin/src/binutils-gdb/gdb/unittests/mkdir-recursive-selftests.c:49:20: error: ‘mkdtemp’ was not declared in this scope
   if (mkdtemp (base) == NULL)
                    ^
Commit

    e418a61a67a ("Move mkdir_recursive to common/filestuff.c")

moved this code, but also removed the HAVE_MKDTEMP guard which prevented
the mkdtemp call to be compiled on mingw.

We can either put back the HAVE_MKDTEMP ifdef, or import the gnulib
mkdtemp module, which provides the function for mingw.  Since the
mkdir_recursive is susceptible to be used on mingw at some point, I
think it would be nice to have it tested on mingw, so I did the latter.

Once built, I tested it on Windows (copied the resulting gdb.exe on a
Windows machine, ran it, and ran "maint selftest mkdir_recursive").  It
failed, because the temporary directory is hardcoded to "/tmp/...".  I
therefore added and used a new get_standard_temp_dir function, which
returns an appropriate temporary directory for the host platform.

gdb/ChangeLog:

* common/pathstuff.c (get_standard_temp_dir): New.
* common/pathstuff.h (get_standard_temp_dir): New.
* config.in: Re-generate.
* configure: Re-generate.
* configure.ac: Don't check for mkdtemp.
* gnulib/aclocal-m4-deps.mk: Re-generate.
* gnulib/aclocal.m4: Re-generate.
* gnulib/config.in: Re-generate.
* gnulib/configure: Re-generate.
* gnulib/import/Makefile.am: Re-generate.
* gnulib/import/Makefile.in: Re-generate.
* gnulib/import/m4/gnulib-cache.m4: Re-generate.
* gnulib/import/m4/gnulib-comp.m4: Re-generate.
* gnulib/import/m4/mkdtemp.m4: New file.
* gnulib/import/mkdtemp.c: New file.
* gnulib/update-gnulib.sh (IMPORTED_GNULIB_MODULES):
Add mkdtemp module.
* unittests/mkdir-recursive-selftests.c (test): Use
get_standard_temp_dir.
(_initialize_mkdir_recursive_selftests): Remove HAVE_MKDTEMP
ifdef.
* compile/compile.c (get_compile_file_tempdir): Likewise.

6 years agoFix ld action in run_dump_test
Thomas Preud'homme [Thu, 1 Nov 2018 17:18:24 +0000 (17:18 +0000)]
Fix ld action in run_dump_test

run_dump_test proposes an ld action but when trying to make use of it in
a gas test it gave me some Tcl error. It turns out that it references
the check_shared_lib_support procedure and ld_elf_shared_opt variable
both only available in ld-lib.exp. I've thus moved the procedure in
binutils-common.exp and defined the variable needed in the various
default.exp of testsuite that seem to be using run_dump_test.

Since check_shared_lib_support itself references the ld variable not
defined in binutils-common I've defined it from LD in run_dump_test and
fixed LD and LDFLAGS to be defined as expected by run_dump_test in the
various default.exp of testsuite using run_dump_test.

2018-11-01  Thomas Preud'homme  <thomas.preudhomme@linaro.org>

binutils/
* testsuite/config/default.exp: Define LD, LDFLAGS and
ld_elf_shared_opt.
* testsuite/lib/binutils-common.exp (check_shared_lib_support): Moved
from ld-lib.exp.
(run_dump_test): Set ld to $LD.

gas/
* testsuite/config/default.exp: Define LD, LDFLAGS and
ld_elf_shared_opt.

ld/
* testsuite/lib/ld-lib.exp (check_shared_lib_support): Moved to
binutils-common.exp.

6 years agoReading signal handler frame in AIX
Sangamesh Mallayya [Thu, 1 Nov 2018 10:23:59 +0000 (06:23 -0400)]
Reading signal handler frame in AIX

In AIX if gdb is debugging an application which has a signal handler
and reaches the signal handler frame, then we need to read the back
chain address from sigcontext saved on the stack, similarly the LR.

As backchain at an offset 0 will be 0, because we will have a
sigconext saved after the minimum stack size. So the correct
backchain will be at an offset after minimum stack and the LR at
an offset 8 will be of the signal millicode address.
If the back chain pointer is NULL and the LR field is in the kernel
segment(ex. 0x00004a14) then we can probably assume we are in a
signal  handler.

sample output

(gdb) bt
0  sig_handle_aix (signo=11) at aix-sighandle.c:7
1  0x0000000000004a94 in ?? ()
(gdb)

expected output

(gdb) bt
0  sig_handle_aix (signo=11) at aix-sighandle.c:7
1  <signal handler called>
2  0x0000000100000748 in foo () at aix-sighandle.c:14
3  0x000000010000079c in main () at aix-sighandle.c:19

gdb/ChangeLog:

2018-11-01  Sangamesh Mallayya <sangamesh.swamy@in.ibm.com>

* rs6000-aix-tdep.c: Include "trad-frame.h" and "frame-unwind.h".
(SIG_FRAME_LR_OFFSET64): New define.
(SIG_FRAME_FP_OFFSET64): New define.
(aix_sighandle_frame_cache): New Function.
(aix_sighandle_frame_this_id): New Function.
(aix_sighandle_frame_prev_register): New Function.
(aix_sighandle_frame_sniffer): New Function.
(aix_sighandle_frame_unwind): New global variable.
(rs6000_aix_init_osabi): Install new frame unwinder.

gdb/testsuite/ChangeLog:

2018-11-01  Sangamesh Mallayya <sangamesh.swamy@in.ibm.com>

* gdb.arch/aix-sighandle.c: New file.
* gdb.arch/aix-sighandle.exp: New file.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Nov 2018 00:00:29 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoFix PR gdb/23835: Don't redefine _FORTIFY_SOURCE if it's already defined
Sergio Durigan Junior [Tue, 30 Oct 2018 21:37:03 +0000 (17:37 -0400)]
Fix PR gdb/23835: Don't redefine _FORTIFY_SOURCE if it's already defined

Gentoo has a local GCC patch which always defines _FORTIFY_SOURCE=2.
This causes a build problem when building GDB there, because
"common/common-defs.h" also defines _FORTIFY_SOURCE=2:

    CXX    gdb.o
  In file included from ../../gdb/defs.h:28:0,
   from ../../gdb/gdb.c:19:
  ../../gdb/common/common-defs.h:71:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
   #define _FORTIFY_SOURCE 2

  <built-in>: note: this is the location of the previous definition
  cc1plus: all warnings being treated as errors
  make[2]: *** [Makefile:1619: gdb.o] Error 1

Even though it is questionable whether Gentoo's approach is the
correct one:

  https://jira.mongodb.org/browse/SERVER-29982
  https://bugs.gentoo.org/621036

it is still possible for GDB to be a bit more robust here and make
sure it just defines _FORTIFY_SOURCE if it hasn't been defined
already.  This patch does that.

Tested by rebuilding and making sure the macro was defined.

gdb/ChangeLog:
2018-10-31  Sergio Durigan Junior  <sergiodj@redhat.com>

PR gdb/23835
* common/common-defs.h: Don't redefine _FORTIFY_SOURCE if it's
already defined.

6 years agogdb/riscv: Fix failures on rv64 in gdb.arch/riscv-reg-aliases.exp test
Andrew Burgess [Sat, 27 Oct 2018 09:34:04 +0000 (10:34 +0100)]
gdb/riscv: Fix failures on rv64 in gdb.arch/riscv-reg-aliases.exp test

The gdb.arch/riscv-reg-aliases.exp test didn't take into account that
on RV64 (and RV128) the floating point registers are represented as a
union.  This patch updates the test to handle this.

Tested against RV32 and RV64.

gdb/testsuite/ChangeLog:

* gdb.arch/riscv-reg-aliases.exp: Rewrite to take account of float
registers being unions.

6 years ago[gdb/testsuite] Factor out lib/valgrind.exp
Tom de Vries [Thu, 25 Oct 2018 14:54:49 +0000 (16:54 +0200)]
[gdb/testsuite] Factor out lib/valgrind.exp

Factor out common code related to vgdb setup and cleanup in valgrind-bt.exp,
valgrind-disp-step.exp and gdb.base/valgrind-infcall.exp.

Tested on x86_64-linux with and without --target_board=native-gdbserver.

2018-10-31  Tom de Vries  <tdevries@suse.de>

* lib/valgrind.exp: New file.
 (vgdb_start, vgdb_stop): New procs, factored out of ...
* gdb.base/valgrind-bt.exp: ... here, ...
* gdb.base/valgrind-disp-step.exp: ... here and ...
* gdb.base/valgrind-infcall.exp: ... here.

6 years agoMerge config/ changes from GCC.
Joseph Myers [Wed, 31 Oct 2018 17:16:41 +0000 (17:16 +0000)]
Merge config/ changes from GCC.

config:
Merge from GCC:
2018-10-28  Iain Buclaw  <ibuclaw@gdcproject.org>

* multi.m4: Set GDC.

2018-07-05  James Clarke  <jrtc27@jrtc27.com>

* dfp.m4 (enable_decimal_float): Enable for x86_64*-*-gnu* to
catch x86_64 kFreeBSD and Hurd.

libdecnumber:
* configure: Regenerate.

zlib:
* configure: Regenerate.

6 years agoMerge autoconf / automake update changes from GCC.
Joseph Myers [Wed, 31 Oct 2018 17:10:56 +0000 (17:10 +0000)]
Merge autoconf / automake update changes from GCC.

Top level:
Merge from GCC:
PR bootstrap/82856
* multilib.am: New file.  From automake.

config:
Merge from GCC:
PR bootstrap/82856
* math.m4, tls.m4: Use AC_LANG_SOURCE.

zlib:
Merge from GCC.
PR bootstrap/82856
* Makefile.am: Include multilib.am.
* Makefile.in: Regenerate.

6 years ago[gdb/testsuite] get_valueof: Don't output value in test name
Tom de Vries [Wed, 31 Oct 2018 15:33:46 +0000 (16:33 +0100)]
[gdb/testsuite] get_valueof: Don't output value in test name

The get_valueof outputs the value it has read as part of the test name.  This
causes test names to vary from run to run, and adds some noise when diffing
test results.  e.g.:

-PASS: gdb.guile/scm-ports.exp: buffered: get valueof "$sp" (140737488343920)
+PASS: gdb.guile/scm-ports.exp: buffered: get valueof "$sp" (140737488343968)
-PASS: gdb.guile/scm-ports.exp: unbuffered: get valueof "$sp" (140737488343920)
+PASS: gdb.guile/scm-ports.exp: unbuffered: get valueof "$sp" (140737488343968)

This patch removes that, since it's probably not very useful.

Tested on x86_64-linux.

2018-10-31  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (get_valueof): Don't output read value in test name.

6 years agoDon't create got section while processing TLS Local Exec relocations.
Renlin Li [Wed, 31 Oct 2018 14:38:46 +0000 (14:38 +0000)]
Don't create got section while processing TLS Local Exec relocations.

For Local Exec TLS model, the offset of the variable from the thread pointer
can be computed at static link time. This doesn't require GOT indirection.

The initial change is a bad fix for a problem during TLS GD -> LE relaxation.
The proper fix is to check whether _GLOBAL_OFFSET_TABLE_ is referenced,
create got section if yes.  And the fix is already in the repository.

bfd/

2018-10-31  Renlin Li  <renlin.li@arm.com>

    * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Don't create got
    section for Local Exec TLS model.

6 years ago[PowerPC] Include nat/linux-ptrace.h in native targets
Pedro Franco de Carvalho [Mon, 29 Oct 2018 15:05:11 +0000 (12:05 -0300)]
[PowerPC] Include nat/linux-ptrace.h in native targets

Patch "[PowerPC] Add support for PPR and DSCR" used
PTRACE_GETREGSET/SETREGSET without including the fallback definitions
from "nat/linux-ptrace.h".  Include this header to avoid breaking
builds in systems that don't define them.

gdb/ChangeLog:
2018-10-31  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* ppc-linux-nat.c: Include nat/linux-ptrace.h.

gdb/gdbserver/ChangeLog:
2018-10-31  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>

* linux-ppc-low.c: Include nat/linux-ptrace.h.

6 years agogdb: Handle ICC's unexpected void return type
Andrew Burgess [Thu, 18 Oct 2018 13:04:27 +0000 (14:04 +0100)]
gdb: Handle ICC's unexpected void return type

I encountered a binary compiled with Intel's C Compiler (ICC) version
14.0.5.212, which seemed to contain some non-standard DWARF.

The DWARF spec (V5 3.3.2) says:

    Debugging information entries for C void functions should not have
    an attribute for the return type.

However, what I observed in the DWARF from this ICC compiled binary
was this:

    ...
    <0><857>: Abbrev Number: 1 (DW_TAG_compile_unit)
       <858>   DW_AT_comp_dir    : (indirect string, offset: 0x48d): /tmp/
       <85c>   DW_AT_language    : 1       (ANSI C)
       <85d>   DW_AT_name        : (indirect string, offset: 0x77c): filename.c
       <861>   DW_AT_producer    : (indirect string, offset: 0x520): Intel(R) C Intel(R) 64 Compiler ...
       <865>   DW_AT_low_pc      : 0x4378d0
       <86d>   DW_AT_high_pc     : 0x4378f0
       <875>   DW_AT_stmt_list   : 0xa37
    ...
    <1><7ea>: Abbrev Number: 2 (DW_TAG_base_type)
       <7eb>   DW_AT_byte_size   : 0
       <7ec>   DW_AT_encoding    : 5       (signed)
       <7ed>   DW_AT_name        : (indirect string, offset: 0x58f): void
    ...
    <1><7f1>: Abbrev Number: 3 (DW_TAG_subprogram)
       <7f2>   DW_AT_decl_line   : 268
       <7f4>   DW_AT_decl_column : 30
       <7f5>   DW_AT_decl_file   : 1
       <7f6>   DW_AT_type        : <0x7ea>
       <7fa>   DW_AT_prototyped  : 1
       <7fb>   DW_AT_name        : (indirect string, offset: 0x761): function_foo
       <7ff>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0x761): function_foo
       <803>   DW_AT_low_pc      : 0x4378a0
       <80b>   DW_AT_high_pc     : 0x4378d0
       <813>   DW_AT_external    : 1
    ...

So function 'function_foo' has void return type, but still has a
DW_AT_type attribute for a 0 sized type called void.

What was found was that when the 'finish' command was used to leave
'function_foo', GDB would crash.

The problem is that in infcmd.c:print_return_value GDB tries to filter
out void return types, by looking for the TYPE_CODE_VOID, this fails
for the 'void' type as it has code TYPE_CODE_INT and GDB then tries to
print the 'void' type.

This eventually ends in a call to valprint.c:maybe_negate_by_bytes,
however, the len (length) of the value being negated is 0, which is
not detected or expected by this code, and invalid memory accesses
occur, some of which might cause GDB to crash.

The above DWARF was seen on version 14.0.5.212 of ICC.

I have also tested ICC versions 18.0.2.199 and 17.0.7.259, on both of
these versions, the DW_AT_type on the DW_TAG_subprogram has been
removed, bringing ICC inline with the DWARF standard, and with the
DWARF produced by GCC.

I only have limited access to these specific versions of ICC so I am
unable to get more specific details for when the generated DWARF
became non-standard or when it was changed to be more inline with the
DWARF standard.

Further testing revealed additional places where ICC produced 'void'
related DWARF that GDB struggles with.  When I compiled code that
contained a function with this signature:

    void funcx (void *arg);

on ICC 17/18, I got the following DWARF (notice the void return type
is now gone):

    ...
    <1><32>: Abbrev Number: 2 (DW_TAG_subprogram)
       <33>   DW_AT_decl_line   : 2
       <34>   DW_AT_decl_file   : 1
       <35>   DW_AT_prototyped  : 1
       <36>   DW_AT_name        : (indirect string, offset: 0xc5): funcx
       <3a>   DW_AT_MIPS_linkage_name: (indirect string, offset: 0xc5): funcx
       <3e>   DW_AT_low_pc      : 0x6dc
       <46>   DW_AT_high_pc     : 0x703
       <4e>   DW_AT_external    : 1
    <2><4f>: Abbrev Number: 3 (DW_TAG_formal_parameter)
       <50>   DW_AT_decl_line   : 2
       <51>   DW_AT_decl_file   : 1
       <52>   DW_AT_type        : <0x6a>
       <56>   DW_AT_name        : arg
       <5a>   DW_AT_location    : 2 byte block: 76 70      (DW_OP_breg6 (rbp): -16)
    ...
    <1><6a>: Abbrev Number: 5 (DW_TAG_pointer_type)
       <6b>   DW_AT_type        : <0x6f>
    <1><6f>: Abbrev Number: 6 (DW_TAG_base_type)
       <70>   DW_AT_byte_size   : 0
       <71>   DW_AT_encoding    : 5        (signed)
       <72>   DW_AT_name        : (indirect string, offset: 0xcb): void
    ...

However, the function argument 'arg' does still reference a 'void'
type.  This case doesn't seem as obviously non-standard as the
previous one, but I think that the DWARF standard (V5 5.2) does
suggest that the above is not the recommended approach.  If we compare
to the DWARF generated by GCC 7.3.1:

    ...
    <1><68>: Abbrev Number: 5 (DW_TAG_subprogram)
       <69>   DW_AT_external    : 1
       <69>   DW_AT_name        : (indirect string, offset: 0x221): funcx
       <6d>   DW_AT_decl_file   : 1
       <6e>   DW_AT_decl_line   : 2
       <6f>   DW_AT_prototyped  : 1
       <6f>   DW_AT_low_pc      : 0x400487
       <77>   DW_AT_high_pc     : 0x22
       <7f>   DW_AT_frame_base  : 1 byte block: 9c         (DW_OP_call_frame_cfa)
       <81>   DW_AT_GNU_all_call_sites: 1
       <81>   DW_AT_sibling     : <0xa0>
    <2><85>: Abbrev Number: 6 (DW_TAG_formal_parameter)
       <86>   DW_AT_name        : arg
       <8a>   DW_AT_decl_file   : 1
       <8b>   DW_AT_decl_line   : 2
       <8c>   DW_AT_type        : <0xa0>
       <90>   DW_AT_location    : 2 byte block: 91 58      (DW_OP_fbreg: -40)
    ...
    <1><a0>: Abbrev Number: 7 (DW_TAG_pointer_type)
       <a1>   DW_AT_byte_size   : 8
    ...

Here we see that the DW_TAG_pointer_type doesn't reference any further
type.  This also seems out of line with the DWARF standard (which I
think recommends using a DW_TAG_unspecified_type entry), however GDB
does handle the GCC generated DWARF better.

If we look at how GDB handles the DWARF from GCC, then we see this:

    (gdb) print *arg
    Attempt to dereference a generic pointer.

While on the current HEAD of master dereferencing arg causes undefined
behaviour which will likely crash GDB (for the same reason as was
described above for the 'finish' case).  On earlier versions of GDB
the ICC DWARF would cause this:

    (gdb) print *arg
    $1 = 0

In this patch both the return type, and general variable/parameter
type handling is fixed by transforming the synthetic void entries in
the DWARF, the ones that look like this:

    <1><6f>: Abbrev Number: 6 (DW_TAG_base_type)
       <70>   DW_AT_byte_size   : 0
       <71>   DW_AT_encoding    : 5        (signed)
       <72>   DW_AT_name        : (indirect string, offset: 0xcb): void

into GDB's builtin void type.  My criteria for performing the fix are:

  1. Binary produced by any version of ICC,
  2. We're producing an integer type,
  3. The size is 0, and
  4. The name is "void".

I ignore the signed / unsigned nature of the integer.

Potentially we could drop the ICC detection too, this should be a
reasonably safe transformation to perform, however, I'm generally
pretty nervous when it comes to modifying how the DWARF is parsed so,
for now, I have restricted this to ICC only.

I also added an assertion to maybe_negate_by_bytes.  This is nothing
to do with the actual fix, but should detect incorrect use of this
function in the future, without relying on undefined behaviour to
crash GDB.

I added a new test that makes use the of the testsuite's DWARF
generator.  As it is tricky to create target independent tests that
pass function parameters using the DWARF generator (as specifying the
argument location is target specific) I have instead made use of a
global variable void*.  This still shows the issue.

We already have a predicate in the DWARF parser to detect versions of
ICC prior to 14, however, this issue was spotted on a later version.
As a result I've added a new predicate that is true for any version of
ICC.

gdb/ChangeLog:

* dwarf2read.c (struct dwarf2_cu): Add producer_is_icc field.
(producer_is_icc): New function.
(check_producer): Set producer_is_icc field on dwarf2_cu.
(dwarf2_init_integer_type): New function.
(read_base_type): Call dwarf2_init_integer_type instead of
init_integer_type in all cases.
(dwarf2_cu::dwarf2_cu): Initialise producer_is_icc field.
* valprint.c (maybe_negate_by_bytes): Add an assertion that the
LEN is greater than 0.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/void-type.c: New file.
* gdb.dwarf2/void-type.exp: New file.

6 years ago[GAS][ARM] Fix ARMv8.1 AdvSIMD testism
Andre Vieira [Wed, 31 Oct 2018 12:08:36 +0000 (12:08 +0000)]
[GAS][ARM] Fix ARMv8.1 AdvSIMD testism

This test never used to test the output of objdump as the old 'error-output'
check would exit after verifying the output in stdout and stderr from the
assembler.  Given the use of warning_output now, the objdump runs and expects
its output to be verified.  Assuming the correct disassembly of these
instructions is tested elsewhere given we never tested them here, this patch
removes the objdump run.

gas/ChangeLog

2018-10-31  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* testsuite/gas/arm/armv8-a+rdma-warning.d: Remove objdump execution.

6 years ago[GAS][ARM] Fix UDF testism
Andre Vieira [Wed, 31 Oct 2018 12:05:19 +0000 (12:05 +0000)]
[GAS][ARM] Fix UDF testism

The old test never checked the objdump output since the 'error-output' directive
would exit and thus never run objdump.  When this test was changed to adhere to
use the new warning_output we started to run objdump.  The expected objdump
output was old and had bitrotten, this fixes the layout, as the "disassembly"
itself did not change.

gas/ChangeLog

2018-10-31  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* testsuite/gas/arm/udf.d: Update expected output.

6 years ago[GAS][ARM] Fix failing Armv1 test
Andre Vieira [Wed, 31 Oct 2018 11:57:38 +0000 (11:57 +0000)]
[GAS][ARM] Fix failing Armv1 test

This test has been failing for a while and it could be argued that since we
started testing 'arm7t' here (and not Armv1) the test itself was wrong.  So I
changed the assembly to Armv1.  Given the changes to objdump when
"disassembling all" it seemed like a good idea to force the disassembly to
'armv2' instead and actually accept the disassembly of the 26-bit Architecture
variants of tst, teq, cmn and cmp.

gas/ChangeLog

2018-10-31  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* testsuite/gas/arm/armv1.d: Assemble for Armv1 and disassemble for
Armv2.

6 years agoAutomatic date update in version.in
GDB Administrator [Wed, 31 Oct 2018 00:00:40 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years ago[src/erc32] Use ncurses instead of termcap on Cygwin too
Joel Sherrill [Tue, 30 Oct 2018 16:41:12 +0000 (16:41 +0000)]
[src/erc32] Use ncurses instead of termcap on Cygwin too

This removes a Cygwin-specific libtermcap hack that was dependent on
the presence of one of the multiple alternative libraries.  The one it
was hard-coded to pick isn't included with Cygwin anymore.

According to Corinna, libtermcap was removed from Cygwin a long time
ago, and libncurses is used in Cygwin for a long time too.

The fix is to make Cygwin use the same autoconf code to figure out the
correct lib as any other target.

sim/erc32/Changelog:
2018-10-30  Joel Sherrill <joel@rtems.org>

* configure.ac: Remove the Cygwin-specific libtermcap.a hack
and use the standard logic to determine which library to use.
* configure: Regenerate.

6 years agoCheck return value of bfd_init
Tom Tromey [Thu, 25 Oct 2018 15:00:52 +0000 (09:00 -0600)]
Check return value of bfd_init

Alan recently added a way for BFD library users to check whether they
were in fact loading a compatible version of BFD:

https://sourceware.org/ml/binutils/2018-10/msg00198.html

It seemed reasonable to me that gdb should do this check as well, in
case someone is dynamically linking against BFD.

Simon pointed out that an earlier version of the patch would cause a
gdb crash if the test failed.  This version works around this by
lowering the call to bfd_init and adding a comment explaining where
'error' can safely be called in captured_main_1.

gdb/ChangeLog
2018-10-30  Tom Tromey  <tom@tromey.com>

* main.c (captured_main_1): Check return value of bfd_init.

6 years agoRemove relational operators from common/offset-type.h
Sergio Durigan Junior [Thu, 25 Oct 2018 20:46:46 +0000 (16:46 -0400)]
Remove relational operators from common/offset-type.h

This patch is a follow-up of:

  https://sourceware.org/ml/gdb-patches/2018-10/msg00601.html

It removes the declaration of the relational operators for
common/offset-type.h.  As it turns out, these overloads are not being
used when a new offset type is declared, because, according to Pedro
Alves:

  I think the functions aren't called because they are templates, and
  thus the built-in (non-template) versions take precedence.  If you
  make them non-templates, then they should be called.  But, the
  built-ins are fine, so yeah, we can just remove the custom
  definitions.

The patch also adjusts the comments on the code.

No regressions introduced.

gdb/ChangeLog:
2018-10-29  Sergio Durigan Junior  <sergiodj@redhat.com>

* common/offset-type.h (DEFINE_OFFSET_REL_OP): Delete.
Adjust comments.

6 years agoAutomatic date update in version.in
GDB Administrator [Tue, 30 Oct 2018 00:00:40 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoRevert "GDBSERVER: Listen on a unix domain (instead of TCP) socket if requested."
Simon Marchi [Mon, 29 Oct 2018 17:28:24 +0000 (13:28 -0400)]
Revert "GDBSERVER: Listen on a unix domain (instead of TCP) socket if requested."

This reverts commit f19c7ff839d7a32ebb48482ae7d318fb46ca823d.

6 years agoRevert "GDB: Document the unix::/path/to/socket of remote connection."
Simon Marchi [Mon, 29 Oct 2018 17:28:15 +0000 (13:28 -0400)]
Revert "GDB: Document the unix::/path/to/socket of remote connection."

This reverts commit 6d0f8100c1a3053c967bec716e34b65dd054cc39.

6 years agoRevert "GDB: Fix documentation for invoking GDBSERVER"
Simon Marchi [Mon, 29 Oct 2018 17:24:23 +0000 (13:24 -0400)]
Revert "GDB: Fix documentation for invoking GDBSERVER"

This reverts commit 0a163825df5e98ad55de13eb3d3534d875943047.

6 years agoRevert "GDB: Remote target can now accept the form unix::/path/to/socket."
Simon Marchi [Mon, 29 Oct 2018 17:22:47 +0000 (13:22 -0400)]
Revert "GDB: Remote target can now accept the form unix::/path/to/socket."

This reverts commit 88f5cc8cf8606478832c7d0d7b74755f3f625015.

6 years agoRevert "GDB: Only build for "unix:" connections if AF_LOCAL is supported."
Simon Marchi [Mon, 29 Oct 2018 17:22:42 +0000 (13:22 -0400)]
Revert "GDB: Only build for "unix:" connections if AF_LOCAL is supported."

This reverts commit 98a17ece013cb94cd602496b9efb92b8816b3953.

6 years agoProvide get_shell declaration in procfs.c
Rainer Orth [Mon, 29 Oct 2018 09:28:40 +0000 (10:28 +0100)]
Provide get_shell declaration in procfs.c

The Solaris build is currently broken:

/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c: In member function ‘virtual void procfs_target::create_inferior(const char*, const string&, char**, int)’:
/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:3038:28: error: ‘get_shell’ was not declared in this scope
   const char *shell_file = get_shell ();
                            ^~~~~~~~~
/vol/src/gnu/gdb/hg/master/dist/gdb/procfs.c:3038:28: note: suggested alternative: ‘getusershell’
   const char *shell_file = get_shell ();
                            ^~~~~~~~~
                            getusershell

The following patch fixes this.  Tested on amd64-pc-solaris2.11.

2018-10-29  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

* procfs.c: Include common/pathstuff.h.

6 years agoReport scripts and libraries searched for ld --trace
Alan Modra [Mon, 29 Oct 2018 07:40:06 +0000 (18:10 +1030)]
Report scripts and libraries searched for ld --trace

The idea of this change is to make -t output useful for users wanting
to package all the object files involved in linking for a bug report.

Something like the following should do the trick.
gcc hello.c -save-temps -Wl,-t | xargs realpath | sort | uniq > files
tar cJf test.tar.xz `cat files`

* ldlang.c (load_symbols): When -t, print file names for script
files and archives.
* ldmain.c (trace_files): Make an int.
(add_archive_element): Print archive elements only with multiple
-t options, or when archive is thin.
* ldmain.h (trace_files): Update.
* ldmisc.c (vfinfo): Don't print both original path and path in
sysroot.
* lexsup.c (parse_args <t>): Increment trace_files.

6 years agoRemove some ld --trace output
Alan Modra [Mon, 29 Oct 2018 07:39:59 +0000 (18:09 +1030)]
Remove some ld --trace output

This output really belongs in ld --verbose.

* ldmain.c (main): Print emulation mode and "deleting executable"
for --verbose, not --trace.
(add_archive_element): Only print "no new IR symbols" for --verbose.

6 years agoSimplify --sysroot=/
Alan Modra [Mon, 29 Oct 2018 07:39:39 +0000 (18:09 +1030)]
Simplify --sysroot=/

Prepending '/' to absolute paths doesn't gain us much, and results in
the current implementation of --trace emitting silly path-in-sysroot
output, eg.
/lib/ld-linux-x86-64.so.2 (//lib/ld-linux-x86-64.so.2)

* ldmain.c (get_sysroot): Return "" for "--sysroot=/".

6 years agoMove struc-symbol.h to symbols.c
Alan Modra [Mon, 29 Oct 2018 06:07:24 +0000 (16:37 +1030)]
Move struc-symbol.h to symbols.c

This file was never supposed to be widely used.  The fact that it has
found its way into many gas files led to bugs, typically when code
expecting a symbolS* to point at a struct symbol is presented with a
struct local_symbol.  Also, commit 158184ac9e changed these structs in
2012 but didn't catch all places where symbol bsym was being used to
test for a local_symbol.

* Makefile.am (HFILES): Delete struc-symbol.h.
* doc/internals.texi: Delete struc-symbol.h reference and out
of date local symbol description.
* struc-symbol.h: Delete.  Move contents to..
* symbols.c: ..here.
(symbol_on_chain, symbol_symbolS): New functions.
* symbols.h (symbol_on_chain, symbol_symbolS): Declare.
* cgen.c: Don't #include struc-symbol.h.
(gas_cgen_parse_operand): Don't test for local_symbol using
bsym, instead call symbol_symbolS.  Use symbol_get_bfdsym.
(weak_operand_overflow_check, make_right_shifted_expr): Use
symbol accessors.
* config/obj-coff.c: Don't #include struc-symbol.h.
(GET_FILENAME_STRING): Delete.
* config/obj-elf.c: Don't #include struc-symbol.h.
(elf_file_symbol): Use symbol accessors.
(elf_adjust_symtab): Call symbol_on_chain.
* config/obj-evax.c: Don't #include struc-symbol.h.
* config/tc-nds32.c: Likewise.
* config/tc-rl78.c: Likewise.
* config/tc-rx.c: Likewise.
* config/tc-alpha.c: Likewise.
(add_to_link_pool, s_alpha_comm): Use symbol accessors.
* config/tc-arc.c: Don't #include struc-symbol.h.
(arc_check_relocs): Use symbol accessors, testing gas symbol
section rather than bfd symbol section.
* config/tc-avr.c: Don't #include struc-symbol.h.
(avr_patch_gccisr_frag): Use symbol accessors.
* config/tc-bfin.c: Don't #include struc-symbol.h.
(bfin_loop_beginend): Use symbol accessors.
* config/tc-csky.c: Don't #include struc-symbol.h.
(v2_work_movih, v2_work_ori): Use symbol accessors.  Check for
absolute symbol as well as O_constant.
* config/tc-riscv.c: Don't #include struc-symbol.h.
(riscv_pre_output_hook): Use symbol accessors.
* config/tc-s390.c: Don't #include struc-symbol.h.
(s390_literals): Use symbol accessors.
* config/tc-score.c (s3_build_la_pic, s3_build_lwst_pic): Use
symbol accessors.
(s3_relax_branch_inst16, s3_relax_cmpbranch_inst32): Don't
test symbol bsym.
* config/tc-score7.c: Don't #include struc-symbol.h.
(s7_build_la_pic, s7_build_lwst_pic): Use symbol accessors.
(s7_b32_relax_to_b16): Don't test symbol bsym.
* config/tc-sh.c: Don't #include struc-symbol.h.
(insert_loop_bounds): Use symbol accessors.
(sh_frob_section): Remove bogus symbol canonicalization.
* config/tc-tic54x.c: Don't #include struc-symbol.h.
(tic54x_bss): Use symbol accessors.
* config/tc-tilegx.c: Don't #include struc-symbol.h.
(emit_tilegx_instruction, tilegx_parse_name): Use symbol accessors.
* config/tc-tilepro.c: Don't #include struc-symbol.h.
(emit_tilepro_instruction, tilepro_parse_name): Use accessors.
* config/tc-xtensa.c: Don't #include struc-symbol.h.
(xg_assemble_vliw_tokens): Use symbol accessors.
(xg_order_trampoline_chain): Likewise.
* ehopt.c: Don't #include struc-symbol.h.
(check_eh_frame): Correct local symbol test.  Use symbol accessors.
* write.c: Don't #include struc-symbol.h.
(create_note_reloc, maybe_generate_build_notes): Use symbol accessors.
* Makefile.in: Regenerate.
* po/POTFILES.in: Regenerate.

6 years agold -r script fixes
Alan Modra [Thu, 25 Oct 2018 23:31:54 +0000 (10:01 +1030)]
ld -r script fixes

For ld -r, we generally set the VMA of sections to zero.  This is done
to make the output of ld -r most similar to that output by the
assembler, which generally has sections starting at VMA zero.  In some
cases that covers for backend bugs which would mis-handle relocatable
object files with non-zero section VMAs.

This patch fixes a few sections that didn't have zero VMAs for ld -r.
A missing zero on .note.gnu.build-id and .eh_frame_hdr doesn't matter
much since these are linker generated symbols only output on final
link, but it's good to be consistent.

* Makefile.am (ei386beos.c, ei386go32.c): Correct dependencies.
* Makefile.in: Regenerate.
* scripttempl/elf.sc (.note.gnu.build-id, .eh_frame_hdr): Set
address with ${RELOCATING-0}.
* scripttempl/arclinux.sc: Likewise.
* scripttempl/armbpabi.sc: Likewise.
* scripttempl/avr.sc: Likewise.
* scripttempl/elf64hppa.sc: Likewise.
* scripttempl/elf_chaos.sc: Likewise.
* scripttempl/elfarc.sc: Likewise.
* scripttempl/elfxtensa.sc: Likewise.
* scripttempl/mep.sc: Likewise.
* scripttempl/nds32elf.sc: Likewise.
* scripttempl/pru.sc: Likewise.
* scripttempl/elf32msp430.sc: Likewise, and for other sections.
* scripttempl/epiphany_4x4.sc: Similarly.

6 years agoGDB: Only build for "unix:" connections if AF_LOCAL is supported.
John Darrington [Sun, 28 Oct 2018 19:14:24 +0000 (20:14 +0100)]
GDB: Only build for "unix:" connections if AF_LOCAL is supported.

Commit f19c7ff839d7a32ebb48482ae7d318fb46ca823d added a new member to the
prefixes array which included a use of the symbol AF_LOCAL.   Unfortunately,
not all systems declare this symbol.    This change only compiles the "unix:"
member if the system knows about AF_LOCAL.

gdb/ChangeLog:

* configure.ac: New test HAVE_AF_LOCAL
* common/netstuff.c (parse_connection_spec) [prefixes]: Only compile "unix:"
   if HAVE_AF_LOCAL is true.
* configure: regenerate.
* config.in: regenerate.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 29 Oct 2018 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agogdb/riscv: Add back missing braces in riscv-linux-nat.c
Andrew Burgess [Sun, 28 Oct 2018 10:43:26 +0000 (10:43 +0000)]
gdb/riscv: Add back missing braces in riscv-linux-nat.c

In this commit:

    commit ee67fd7f3f6ca78eede2862e309c0bcf266bbd7e
    Date:   Thu Oct 25 12:03:31 2018 +0100

        gdb/riscv: Use correct regnum in riscv_linux_nat_target::fetch_registers

I incorrectly removed a set of braces in violation of the GDB coding
standard.  This commit adds them back.

gdb/ChangeLog:

* riscv-linux-nat.c (riscv_linux_nat_target::fetch_registers):
Add missing braces.  No functional change.