binutils-gdb.git
6 years agoFix error messages in the NFP sources when building for 32-bit targets.
Francois H. Theron [Tue, 15 May 2018 12:28:06 +0000 (13:28 +0100)]
Fix error messages in the NFP sources when building for 32-bit targets.

bfd * targets.c: Wrap nfp_elf64_vec in BFD64 ifdef.

include * opcode/nfp.h: Use uint64_t instead of bfd_vma.

opcodes * nfp-dis.c: Use uint64_t for instruction variables, not bfd_vma.

6 years agoAdd a new Portuguese translation for the bfd sub-directory.
Nick Clifton [Tue, 15 May 2018 12:16:16 +0000 (13:16 +0100)]
Add a new Portuguese translation for the bfd sub-directory.

* po/pt.po: New Portuguese translation.
* configure.ac (ALL_LINGUAS): Add pt.
* configure: Regenerate.

6 years agoRestore LDFLAGS in notes.exp
Alan Modra [Tue, 15 May 2018 10:08:53 +0000 (19:38 +0930)]
Restore LDFLAGS in notes.exp

Fixes an spu-elf test regression due to using the wrong flags.

* testsuite/ld-elf/notes.exp: Restore LDFLAGS.

6 years agoRecognize more targets as ELF for testing
Alan Modra [Tue, 15 May 2018 06:30:57 +0000 (16:00 +0930)]
Recognize more targets as ELF for testing

Also use the correct rel strip-13 variant for more ARM targets.

* testsuite/lib/binutils-common.exp (is_elf_format): Add chorus,
cloudabi, fuchsia, kaos and nto.  Merge netbsdelf* into *elf*,
and *uclinux* into *linux*.
* testsuite/binutils-all/objcopy.exp: Accept armeb for rel
strip-13 test, exclude arm-vxworks and arm-windiss.

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

6 years agoClear rust_unions in rust_union_quirks
Tom Tromey [Mon, 14 May 2018 15:34:00 +0000 (09:34 -0600)]
Clear rust_unions in rust_union_quirks

It turns out that a dwarf2_cu can remain allocated after psymtab
expansion is done, and so it makes sense to clear rust_unions when
done processing it.

Tested on x86-64 Fedora 27.

2018-05-14  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (rust_union_quirks): Clear rust_unions.

6 years agoStop generating GNU build notes for linkonce sections.
Nick Clifton [Mon, 14 May 2018 14:32:43 +0000 (15:32 +0100)]
Stop generating GNU build notes for linkonce sections.

gas * write.c (maybe_generate_build_notes): Generate notes on a
per-code-section basis.  Skip linkonce sections.

ld * testsuite/ld-elf/notes.exp: New file: Run new test.
* testsuite/ld-elf/note1_1.s: New file: Source file for test.
* testsuite/ld-elf/note1_2.s: New file: Source file for test.
* testsuite/ld-elf/note1.r: New file: Expected readelf output.

6 years agoFix a problem in the assembler when checking for overlapping input and output files...
Nick Clifton [Mon, 14 May 2018 12:05:02 +0000 (13:05 +0100)]
Fix a problem in the assembler when checking for overlapping input and output files on non-POSIX compliant systems.

PR 23153
* as.c (main): When checking for an output file that is also an
input file, also check that the inode is not zero.

6 years agox86; Allow IFUNC pointer defined in PDE
H.J. Lu [Mon, 14 May 2018 10:55:37 +0000 (03:55 -0700)]
x86; Allow IFUNC pointer defined in PDE

If IFUNC symbol is defined in position-dependent executable, we should
change it to the normal function and set its address to its PLT entry
which should be resolved by R_*_IRELATIVE at run-time.  All external
references should be resolved to its PLT in executable.

bfd/

PR ld/23169
* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Don't issue
an error on IFUNC pointer defined in PDE.
* elf32-i386.c (elf_i386_finish_dynamic_symbol): Call
_bfd_x86_elf_link_fixup_ifunc_symbol.
* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
* elfxx-x86.c (_bfd_x86_elf_link_fixup_ifunc_symbol): New
function.
* elfxx-x86.h (_bfd_x86_elf_link_fixup_ifunc_symbol): New.

ld/

PR ld/23169
* testsuite/ld-ifunc/ifunc-9-i386.d: New file.
* testsuite/ld-ifunc/ifunc-9-x86-64.d: Likewise.
* testsuite/ld-ifunc/pr23169a.c: Likewise.
* testsuite/ld-ifunc/pr23169a.rd: Likewise.
* testsuite/ld-ifunc/pr23169b.c: Likewise.
* testsuite/ld-ifunc/pr23169b.c: Likewise.
* testsuite/ld-ifunc/pr23169c.rd: Likewise.
* testsuite/ld-ifunc/pr23169c.rd: Likewise.
* testsuite/ld-ifunc/ifunc-9-x86.d: Removed.
* testsuite/ld-ifunc/ifunc.exp: Run PR ld/23169 tests.

6 years agox86: Mark __bss_start, _end and _edata locally defined
H.J. Lu [Mon, 14 May 2018 10:47:47 +0000 (03:47 -0700)]
x86: Mark __bss_start, _end and _edata locally defined

__bss_start, _end and _edata are defined by linker to mark regions
within executables and shared libraries.  All references within
executables should be locally resolved.

This patch doesn't change how their references within shared libraries
are resolved.

bfd/

PR ld/23162
* elfxx-x86.c (elf_x86_linker_defined): New function.
(_bfd_x86_elf_link_check_relocs): Use it to mark __bss_start,
_end and _edata locally defined within executables.

ld/

PR ld/23162
* testsuite/ld-elf/pr23162.map: New file.
* testsuite/ld-elf/pr23162.rd: Likewise.
* testsuite/ld-elf/pr23162a.c: Likewise.
* testsuite/ld-elf/pr23162b.c: Likewise.
* testsuite/ld-elf/shared.exp: Run PR ld/23162 tests.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 14 May 2018 00:00:25 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoAutomatic date update in version.in
GDB Administrator [Sun, 13 May 2018 00:01:08 +0000 (00:01 +0000)]
Automatic date update in version.in

6 years agoscore gcc-8 warning fixes
Alan Modra [Sat, 12 May 2018 06:51:22 +0000 (16:21 +0930)]
score gcc-8 warning fixes

Rather than just silencing the gcc-8 warnings, I decided to rewrite
the buffer handling in the two functions where gcc was warning.
The rest of the file could do with the same treatment.

* config/tc-score.c (s3_do_macro_bcmp): Don't use fixed size
buffers.
(s3_do_macro_bcmpz): Likewise.

6 years agoPR20659, Objcopy and change section lma failing
Alan Modra [Fri, 11 May 2018 05:04:48 +0000 (14:34 +0930)]
PR20659, Objcopy and change section lma failing

Sections may well belong in multiple segments.  The testcase in the PR
saw an allocated section being assigned to an ABIFLAGS segment, then
not being assigned to a LOAD segment because it had already been
handled.  To fix that particular problem this patch sets and tests
segment_mark only for LOAD segments.  I kept the segment_mark test for
LOAD segments because I think there may otherwise be a problem with
zero size sections.

A few other problems showed up with the testcase.  Some targets align
.dynamic, resulting in the test failing with "section .dynamic lma
0x800000c0 adjusted to 0x800000cc" and similar messages.  I've tried
to handle that with some more hacks to the segment lma, which do the
right thing for the testcase, but may well fail in other situations.

I've also removed the tests of segment lma (p_paddr) and code involved
in deciding that an adjusted segment no longer covers the file or
program headers.  Those test can't be correct in the face of objcopy
--change-section-lma.  It may be necessary to reinstate the tests but
do them modulo page size, but we'll see how this goes.

PR 20659
bfd/
* elf.c (rewrite_elf_program_header): Use segment_mark only for
PT_LOAD headers.  Delete first_matching_lma and first_suggested_lma.
Instead make matching_lma and suggested_lma pointers to the
sections.  Align section vma and lma calculated from segment.
Don't clear includes_phdrs or includes_filehdr based on p_paddr
test.  Try to handle alignment padding before first section by
adjusting new segment lma down.  Adjust PT_PHDR map p_paddr.
ld/
* testsuite/ld-elf/changelma.d,
* testsuite/ld-elf/changelma.lnk,
* testsuite/ld-elf/changelma.s: New test.

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

6 years agogdb/x86: Fix write out of mxcsr register for xsave targets
Andrew Burgess [Thu, 10 May 2018 23:45:55 +0000 (00:45 +0100)]
gdb/x86: Fix write out of mxcsr register for xsave targets

In commit:

  commit 8ee22052f690c007556b97eed59f49350ece5ca9
  Author: Andrew Burgess <andrew.burgess@embecosm.com>
  Date:   Thu May 3 17:46:14 2018 +0100

      gdb/x86: Handle kernels using compact xsave format

in two places FXSAVE_ADDR was used instead of FXSAVE_MXCSR_ADDR to get
the address of the mxcsr register within the xsave buffer.  This will
mean we are potentially accessing the wrong location within the xsave
buffer.

There are no tests included with this patch.  The first mistake would
only trigger an issue if/when the user tries to manually set the mxcsr
register to a value that matches the random (value off stack) value
that is in the xsave buffer, in this case the change by the user will
go unnoticed by GDB, and the default value of mxcsr will be preserved.

The second mistake only happens on the code path where all x87
registers are being written out of the register cache.  I'm not sure
how to trigger that code path.

gdb/ChangeLog:

* i387-tdep.c (i387_collect_xsave): Use FXSAVE_MXCSR_ADDR not
FXSAVE_ADDR for the mxcsr register.

6 years agogdb: xtensa: drop gdb_target definition
Max Filippov [Wed, 25 Apr 2018 18:23:38 +0000 (11:23 -0700)]
gdb: xtensa: drop gdb_target definition

gdb_target definitions were removed from configure.tgt in 2007, before
xtensa port was merged. Remove it from the xtensa target as well.

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

* configure.tgt (xtensa*-*-linux*): Drop gdb_target definition.

6 years agoFix email address in ChangeLog entry
Pedro Alves [Fri, 11 May 2018 18:18:02 +0000 (19:18 +0100)]
Fix email address in ChangeLog entry

tromey@redhat.com -> palves@redhat.com

6 years agoHeap-allocate core_target instances
Pedro Alves [Fri, 11 May 2018 18:10:14 +0000 (19:10 +0100)]
Heap-allocate core_target instances

This gets rid of the core_ops global, and replaces it with
heap-allocated core_target instances.  In practice, there will only be
one such instance, though that will change further ahead as more
pieces of multi-target support are merged.

Notice that this replaces one heap-allocated object for another, the
number of allocations is the same.  Specifically, currently we
heap-allocate the 'core_data' object, which holds the core's section
table.  With this patch, that object is made a field of the
core_target class, and no longer allocated separately.

Note that this bit:

  -  /* Looks semi-reasonable.  Toss the old core file and work on the
  -     new.  */
  -
  -  unpush_target (&core_ops);

does not need a replacement, because by the time we get here, the
target_preopen call at the top of core_target_open has already
unpushed any previous target.

gdb/ChangeLog:
2018-05-11  Pedro Alves  <palves@redhat.com>

* corelow.c (core_target) <core_target>: No longer inline.
Initialize m_core_gdbarch, m_core_vec and build the section table
here.
<~core_target>: New.
<core_gdbarch, get_core_register_section>: New methods.
<m_core_section_table, m_core_vec, m_core_gdbarch>: New fields,
factored out from ...
<core_data, core_vec, core_gdbarch>: ... these deleted globals.
(core_ops): Delete.
(sniff_core_bfd): Add gdbarch parameter.
(core_close): Delete, merged into ...
(core_target::close): ... here.  Delete self.
(core_close_cleanup): Delete.
(core_target_open): Allocate a core_target on the heap.  Use a
unique_ptr instead of a cleanup.  Bits moved into the core_target
ctor.  Adjust to use core_target methods instead of globals.
(get_core_register_section): Rename to ...
(core_target::get_core_register_section): ... this and adjust.
(struct get_core_registers_cb_data): New.
(get_core_registers_cb): Use it.  Use bool.
(core_target::fetch_registers, core_target::files_info)
(core_target::xfer_partial, core_target::read_description)
(core_target::pid_to, core_target::thread_name): Adjust to
reference class fields instead of globals.
* target.h (struct target_ops_deleter, target_ops_up): New.

6 years agoEliminate the 'the_core_target' global
Pedro Alves [Fri, 11 May 2018 18:10:14 +0000 (19:10 +0100)]
Eliminate the 'the_core_target' global

(previously called 'core_target', but since renamed because
'core_target' is the name of the target_ops class now.)

This eliminates the "the_core_target" global, as preparation for being
able to have more than one core loaded.  When we get there, we will
instantiate one core_target object per core instead.

Essentially, this replaces the reference to the_core_target in
core_file_command by a reference to core_bfd, which is per
program_space.

Currently, core_file_command calls 'the_core_target->detach()' even if
the core target is not open and pushed on the target stack.  If it is
indeed not open, then the practical effect is that
core_target::detach() prints "No core file now.".  That is preserved
by printing that directly from within core_file_command if not
debugging a core.

gdb/ChangeLog:
2018-05-11  Pedro Alves  <palves@redhat.com>

* corefile.c (core_file_command): Move to corelow.c.
* corelow.c (the_core_target): Delete.
(core_file_command): Moved from corefile.c.  Check exec_bfd
instead of the_core_target.  Use target_detach instead of calling
into the_core_target directly.
(maybe_say_no_core_file_now): New.
(core_target::detach): Use it.
(_initialize_corelow): Remove references to the_core_target.
* gdbcore.h (the_core_target): Delete.

6 years agoMove core_bfd to program space
Tom Tromey [Fri, 11 May 2018 18:10:13 +0000 (19:10 +0100)]
Move core_bfd to program space

This moves the core_bfd global to be a field of the program space.  It
then replaces core_bfd with a macro to avoid a massive patch -- the
same approach taken for various other program space fields.

This is a basic transformation for multi-target work.

2018-05-11  Tom Tromey  <tromey@redhat.com>
    Pedro Alves  <tromey@redhat.com>

* corefile.c (core_bfd): Remove.
* gdbcore.h (core_bfd): Now a macro.
* progspace.h (struct program_space) <cbfd>: New field.

6 years agoRemove cleanups from mdebugread.c
Tom Tromey [Wed, 9 May 2018 21:42:28 +0000 (15:42 -0600)]
Remove cleanups from mdebugread.c

This removes the remaining cleanups from mdebugread.c, replacing them
with gdb::def_vector.

Tested by the buildbot, though I doubt this exercises mdebugread.

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

* mdebugread.c (parse_partial_symbols, psymtab_to_symtab_1): Use
gdb::def_vector.

6 years agoAutomatic date update in version.in
GDB Administrator [Fri, 11 May 2018 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agox86 LynxOS-178: Adjust floating-point context structure
Joel Brobecker [Thu, 10 May 2018 17:01:39 +0000 (12:01 -0500)]
x86 LynxOS-178: Adjust floating-point context structure

The floating point context structure on x86 LynxOS-178 is not
the same as on LynxOS 5.x. As a consequence, trying to print
the return value of a function returning a float, for instance,
yields incorrect results.

This patch fixes the issue by providing an updated definition
for LynxOS-178 (the reason why we cannot access the actual definition
provided by the system still remains true).

gdb/gdbserver/ChangeLog:

        * lynx-i386-low.c (LYNXOS_178): New macro.
        [LYNXOS_178] (usr_fcontext_t): Provide a definition that matches
        the layout on LynxOS-178.
        (lynx_i386_fill_fpregset, lynx_i386_store_fpregset): Do not
        handle floating point registers that are not supported by
        LynxOS-178.

6 years agoFix the clang build
Tom Tromey [Thu, 10 May 2018 14:38:51 +0000 (08:38 -0600)]
Fix the clang build

Simon pointed out that gdb would not build with clang, due to the
addition of -Wimplicit-fallthrough.  This patch fixes the problem by
using -Wimplicit-fallthrough=3 -- this does not work with clang,
bypassing the issue.

Tested by rebuilding with both gcc and clang; and also by verifying
that -Wimplicit-fallthrough=3 is used in the gcc build.

I will file a follow-up bug to convert the fall-through comments to a
form that can be used by both clang and gcc.

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

* configure: Rebuild.
* warning.m4 (AM_GDB_WARNINGS): Use -Wimplicit-fallthrough=3.

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

* configure: Rebuild.

6 years agoAllow integer immediates for AArch64 fmov instructions.
Tamar Christina [Thu, 10 May 2018 15:24:58 +0000 (16:24 +0100)]
Allow integer immediates for AArch64 fmov instructions.

This patch makes it possible to use an integer immediate with the fmov instructions
allowing you to simply write fmov d0, #2 instead of needing fmov d0, #2.0.

The parse double function already know to deal with this so we just need to list the
restriction put in place in parser.

The is considered a QoL improvement for hand assembly writers and allows more
code portability between assembler.

gas/

* config/tc-aarch64.c (parse_aarch64_imm_float): Remove restrictions.
* testsuite/gas/aarch64/diagnostic.s: Move fmov int test to..
* testsuite/gas/aarch64/fpmov.s: Here.
* testsuite/gas/aarch64/fpmov.d: Update results with fmov.
* testsuite/gas/aarch64/diagnostic.l: Remove fmov values.
* testsuite/gas/aarch64/sve-invalid.s: Update test files.
* testsuite/gas/aarch64/sve-invalid.l: Likewise

6 years agoAllow integer immediate for VFP vmov instructions.
Tamar Christina [Thu, 10 May 2018 15:22:32 +0000 (16:22 +0100)]
Allow integer immediate for VFP vmov instructions.

This patch fixes the case where you want to use an integer value the
floating point immediate to a VFP vmov instruction such as
vmovmi.f32 s27, #11.

If the immediate is not a float we convert it and copy it's representation
into the imm field and then carry on validating as if we originally entered
a floating point immediate.

The is considered a QoL improvement for hand assembly writers and allows more
code portability between assembler.

gas/
* gas/config/tc-arm.c (do_neon_mov): Allow integer literal for float
immediate.
* testsuite/gas/arm/vfp-mov-enc.s: New.
* testsuite/gas/arm/vfp-mov-enc.d: New.

6 years agogdbserver/Windows: crash during connection establishment phase
Joel Brobecker [Thu, 10 May 2018 15:27:13 +0000 (10:27 -0500)]
gdbserver/Windows: crash during connection establishment phase

On Windows, starting a new process with GDBserver seems to work,
in the sense that the program does get started, and GDBserver
confirms that it is listening for GDB to connect. However, as soon as
GDB establishes the connection with GDBserver, and starts discussing
with it, GDBserver crashes, with a SEGV.

This SEGV occurs in remote-utils.c::prepare_resume_reply...

  | regp = current_target_desc ()->expedite_regs;
  | [...]
  | while (*regp)

... because, in our case, REGP is NULL.

This patches fixes the issues by adding a parameter to init_target_desc,
in order to make sure that we always provide the list of registers when
we initialize a target description.

gdb/ChangeLog:

        PR server/23158:
        * regformats/regdat.sh: Adjust script, following the addition
        of the new expedite_regs parameter to init_target_desc.

gdb/gdbserver/ChangeLog:

        PR server/23158:
        * tdesc.h (init_target_desc) <expedite_regs>: New parameter.
        * tdesc.c (init_target_desc) <expedite_regs>: New parameter.
        Use it to set the expedite_regs field in the given tdesc.
        * x86-tdesc.h: New file.
        * linux-aarch64-tdesc.c (aarch64_linux_read_description):
        Adjust following the addition of the new expedite_regs parameter
        to init_target_desc.
        * linux-tic6x-low.c (tic6x_read_description): Likewise.
        * linux-x86-tdesc.c: #include "x86-tdesc.h".
        (i386_linux_read_description, amd64_linux_read_description):
        Adjust following the addition of the new expedite_regs parameter
        to init_target_desc.
        * lynx-i386-low.c: #include "x86-tdesc.h".
        (lynx_i386_arch_setup): Adjust following the addition of the new
        expedite_regs parameter to init_target_desc.
        * nto-x86-low.c: #include "x86-tdesc.h".
        (nto_x86_arch_setup): Adjust following the addition of the new
        expedite_regs parameter to init_target_desc.
        * win32-i386-low.c: #include "x86-tdesc.h".
        (i386_arch_setup): Adjust following the addition of the new
        expedite_regs parameter to init_target_desc.

6 years agogdbserver/Windows: Fix "no program to debug" error
Joel Brobecker [Thu, 10 May 2018 15:24:33 +0000 (10:24 -0500)]
gdbserver/Windows: Fix "no program to debug" error

Trying to start a program with GDBserver on Windows yields
the following error:

    $ gdbserver.exe --once :4444 simple_main.exe
    Killing process(es): 5008
    No program to debug
    Exiting

The error itself comes from the following code shortly after
create_inferior gets called (in server.c::main):

    /* Wait till we are at first instruction in program.  */
    create_inferior (program_path.get (), program_args);
    [...]

    if (last_status.kind == TARGET_WAITKIND_EXITED
        || last_status.kind == TARGET_WAITKIND_SIGNALLED)
      was_running = 0;
    else
      was_running = 1;

    if (!was_running && !multi_mode)
      error ("No program to debug");

What happens is that the "last_status" global starts initialized
as zeroes, which means last_status.kind == TARGET_WAITKIND_EXITED,
and we expect create_inferior to be waiting for the inferior to
start until reaching the SIGTRAP, and to set the "last_status"
global to match that last event we received.

I suspect this is an unintended side-effect of the following change...

    commit 2090129c36c7e582943b7d300968d19b46160d84
    Date:   Thu Dec 22 21:11:11 2016 -0500
    Subject: Share fork_inferior et al with gdbserver

... which removes some code in server.c that was responsible for
starting the inferior in a functin that was named start_inferior,
and looked like this:

   signal_pid = create_inferior (new_argv[0], &new_argv[0]);
   [...]
   /* Wait till we are at 1st instruction in program, return new pid
      (assuming success).  */
   last_ptid = mywait (pid_to_ptid (signal_pid), &last_status, 0, 0);

The code has been transitioned to using fork_inferior, but sadly,
only for the targets that support it. On Windows, the calls to wait
setting "last_status" simply disappeared.

This patch adds it back in the Windows-specific implementation of
create_inferior.

gdb/gdbserver/ChangeLog:

        PR server/23158:
        * win32-low.c (win32_create_inferior): Add call to my_wait
        setting last_status global.

6 years ago[gdbserver/win32] fatal "glob could not process pattern '(null)'" error
Joel Brobecker [Thu, 10 May 2018 15:23:10 +0000 (10:23 -0500)]
[gdbserver/win32] fatal "glob could not process pattern '(null)'" error

Trying to start GDBserver on Windows currently yields the following
error...

    $ gdbserver.exe --once :4444 simple_main.exe
    glob could not process pattern '(null)'.
    Exiting

... after which GDB terminates with a nonzero status.

This is because create_process in win32-low.c calls gdb_tilde_expand
with the result of a call to get_inferior_cwd without verifying that
the returned directory is not NULL:

    | static BOOL
    | create_process (const char *program, char *args,
    |                 DWORD flags, PROCESS_INFORMATION *pi)
    | {
    |   const char *inferior_cwd = get_inferior_cwd ();
    |   std::string expanded_infcwd = gdb_tilde_expand (inferior_cwd);

This patch avoids this by only calling gdb_tilde_expand when
INFERIOR_CWD is not NULL, which is similar to what is done on
GNU/Linux for instance.

gdb/gdbserver/ChangeLog:

        PR server/23158:
        * win32-low.c (create_process): Only call gdb_tilde_expand if
        inferior_cwd is not NULL.

6 years agoAdd support for detecting Freescale S12Z binaries in readelf.
John Darrington [Thu, 10 May 2018 11:51:42 +0000 (12:51 +0100)]
Add support for detecting Freescale S12Z binaries in readelf.

* include/elf/common.h (EM_S12Z): New macro
* binutils/readelf.c (get_machine_name): EM_S12Z - handle new case.

6 years agoFix tagged pointer support
Omair Javaid [Tue, 1 May 2018 01:31:32 +0000 (06:31 +0500)]
Fix tagged pointer support

This patch fixes tagged pointer support for AArch64 GDB. Linux kernel
debugging failure was reported after tagged pointer support was committed.

After a discussion around best path forward to manage tagged pointers
on GDB side we are going to disable tagged pointers support for
aarch64-none-elf-gdb because for non-linux applications we cant be
sure if tagged pointers will be used by MMU or not.

Also for aarch64-linux-gdb we are going to sign extend user-space
address after clearing tag bits. This will help debug both kernel
and user-space addresses based on information from linux kernel
documentation given below:

According to AArch64 memory map:
https://www.kernel.org/doc/Documentation/arm64/memory.txt

"User addresses have bits 63:48 set to 0 while the kernel addresses have
the same bits set to 1."

According to AArch64 tagged pointers document:
https://www.kernel.org/doc/Documentation/arm64/tagged-pointers.txt

The kernel configures the translation tables so that translations made
via TTBR0 (i.e. userspace mappings) have the top byte (bits 63:56) of
the virtual address ignored by the translation hardware. This frees up
this byte for application use.

Running gdb testsuite after applying this patch introduces no regressions
and tagged pointer test cases still pass.

gdb/ChangeLog:
2018-05-10  Omair Javaid  <omair.javaid@linaro.org>

PR gdb/23127
* aarch64-linux-tdep.c (aarch64_linux_init_abi): Add call to
set_gdbarch_significant_addr_bit.
* aarch64-tdep.c (aarch64_gdbarch_init): Remove call to
set_gdbarch_significant_addr_bit.
* utils.c (address_significant): Update to sign extend addr.

6 years agoFix _GLOBAL_OFFSET_TABLE_ value for large GOTs (aarch64).
Stephen Crane [Thu, 10 May 2018 07:09:32 +0000 (00:09 -0700)]
Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs (aarch64).

Gold resolves GOT-relative relocs relative to the GOT base +
0x8000 when the GOT is larger than 0x8000. However, previously
the _GLOBAL_OFFSET_TABLE_ symbol was set to GOT base + 0x8000
when the .got.plt was larger than 0x8000. This patch makes both
checks use the size of the .got section so that they agree when
to add 0x8000.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 10 May 2018 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agogas: xtensa: fix literal movement
Max Filippov [Tue, 8 May 2018 20:49:00 +0000 (13:49 -0700)]
gas: xtensa: fix literal movement

Not all literals need to be moved in the presence of
--text-section-literals or --auto-litpools, but only those created by
.literal pseudo op or generated as a result of relaxation. Attempts to
move other literals may result in abnormal termination of the assembler
due to the following assertion failure:

  Internal error in xg_find_litpool at gas/config/tc-xtensa.c:11209.

The same assertion may also be triggered by attempting to assign literal
pools to literals in .init and .fini sections; don't try to do that.

gas/
2018-05-09  Max Filippov  <jcmvbkbc@gmail.com>

* config/tc-xtensa.c (xtensa_is_init_fini): New function.
(xtensa_move_literals): Only attempt to assign literal pool to
literals with tc_frag_data.is_literal mark and not in .init or
.fini sections.
Join nested 'if' conditions to simplify function structure.
(xtensa_switch_to_non_abs_literal_fragment): Use
xtensa_is_init_fini to test for .init/.fini sections.
* testsuite/gas/xtensa/all.exp (auto-litpools-3)
(auto-litpools-4, text-section-literals-1): New tests.
* testsuite/gas/xtensa/auto-litpools-3.d: New test results.
* testsuite/gas/xtensa/auto-litpools-3.s: New test source.
* testsuite/gas/xtensa/auto-litpools-4.d: New test results.
* testsuite/gas/xtensa/auto-litpools-4.s: New test source.
* testsuite/gas/xtensa/text-section-literals-1.d: New test results.
* testsuite/gas/xtensa/text-section-literals-1.s: New test source.

6 years agox86: Remove Disp<N> from movidir{i,64b}
H.J. Lu [Wed, 9 May 2018 18:17:26 +0000 (11:17 -0700)]
x86: Remove Disp<N> from movidir{i,64b}

* i386-opc.tbl: Remove Disp<N> from movidir{i,64b}.

6 years agogdb: xtensa: handle privileged registers
Max Filippov [Wed, 25 Apr 2018 18:55:56 +0000 (11:55 -0700)]
gdb: xtensa: handle privileged registers

xtensa GDB may be used with both bare-metal and linux-based
applications. In case of bare-metal application gdbserver is able to
provide information about all CPU registers: both unprivileged and
privileged. In case of linux-based application only a small subset of
privileged state is available. Currently xtensa GDB only expects
unprivileged registers in 'g' packets and it fails to communicate with
server that sends both privileged and unprivileged registers.

Allow bare-metal xtensa GDB to deal with both privileged and
unprivileged registers by initializing tdep->num_regs with the total
number of target CPU registers. Keep linux-based xtensa GDB
functionality as is by copying tdep->num_nopriv_regs to tdep->num_regs.

gdb/
2018-05-09  Max Filippov  <jcmvbkbc@gmail.com>

* xtensa-linux-tdep.c (xtensa-tdep.h): New include.
(xtensa_linux_init_abi): Limit tdep->num_regs by
tdep->num_nopriv_regs.
* xtensa-tdep.c (xtensa_derive_tdep): Calculate
tdep->num_nopriv_regs and only copy it to tdep->num_regs if it's
not initialized.

6 years agoFix typo in od-macho.c
Alan Modra [Wed, 9 May 2018 11:05:43 +0000 (20:35 +0930)]
Fix typo in od-macho.c

PR 22069
* od-macho.c (dump_unwind_encoding_x86): Fix typo in last patch.

6 years agoFix binary compatibility between GCC and the TI compiler for the PRU target.
Dimitar Dimitrov [Wed, 9 May 2018 10:39:32 +0000 (11:39 +0100)]
Fix binary compatibility between GCC and the TI compiler for the PRU target.

My original implementation for LDI32 pseudo does not conform to
the TI ABI.  I wrongly documented my TI PRU ELF object files inspection,
which got propagated into my binutils implementation.

Issue was exposed when running the GCC ABI testsuite against TI toolchain.
According to TI ABI, LDI32 must use first LDI instruction to load
the MSB 16bits, and second LDI instruction for the LSB 16bits.

This patch will break binary compatibility with previously released
binutils versions for PRU. Still, I think it is better to fix
binutils to conform to the chip vendor ABI.

bfd * elf32-pru.c (pru_elf32_do_ldi32_relocate): Make LDI32 relocation
conformant to TI ABI.
(pru_elf32_relax_section): Likewise.
(pru_elf_relax_delete_bytes): Fix offsets for new LDI32 code.
* elf32-pru.c (pru_elf32_do_ldi32_relocate): Ignore addend.
(pru_elf32_pmem_relocate): Trap - should not get here.
(pru_elf32_relocate_section): Add support for REL relocations.
(elf_info_to_howto_rel): Enable REL.
(elf_backend_may_use_rel_p): Likewise.
(elf_backend_may_use_rela_p): Likewise.
(elf_backend_default_use_rela_p): Likewise.

gas * config/tc-pru.c (md_apply_fix): Make LDI32 relocation conformant
to TI ABI.
(pru_assemble_arg_i): Likewise.
(output_insn_ldi32): Likewise.
* testsuite/gas/pru/ldi.d: Update test for the now fixed LDI32.
* gas/config/tc-pru.c (pru_assemble_arg_b): Check imm8 operand range.
* gas/testsuite/gas/pru/illegal2.l: New test.
* gas/testsuite/gas/pru/illegal2.s: New test.
* gas/testsuite/gas/pru/pru.exp: Register new illegal2 test.

ld * scripttempl/pru.sc: Add LD sections to allow linking TI
toolchain object files.
* scripttempl/pru.sc: Switch to init_array.
* testsuite/ld-pru/ldi32.d: Update LDI32 test to conform to TI ABI.
* testsuite/ld-pru/norelax_ldi32-data.d: Likewise.
* testsuite/ld-pru/norelax_ldi32-dis.d: Likewise.
* testsuite/ld-pru/relax_ldi32-data.d: Likewise.
* testsuite/ld-pru/relax_ldi32-dis.d: Likewise.

6 years agoPR22069, Several instances of register accidentally spelled as regsiter
Alan Modra [Wed, 9 May 2018 06:20:29 +0000 (15:50 +0930)]
PR22069, Several instances of register accidentally spelled as regsiter

PR 22069
binutils/
* od-macho.c (dump_unwind_encoding_x86): Adjust for macro renaming.
cpu/ChangeLog
* or1kcommon.cpu (spr-reg-info): Typo fix.
include/ChangeLog
* mach-o/unwind.h (MACH_O_UNWIND_X86_64_RBP_FRAME_REGISTERS):
Rename from MACH_O_UNWIND_X86_64_RBP_FRAME_REGSITERS.
(MACH_O_UNWIND_X86_EBP_FRAME_REGISTERS): Rename from
MACH_O_UNWIND_X86_EBP_FRAME_REGSITERS.
opcodes/ChangeLog
* cr16-opc.c (cr16_instruction): Comment typo fix.
* hppa-dis.c (print_insn_hppa): Likewise.
sim/ppc/ChangeLog
* e500_registers.h: Comment typo fix.
* ppc-instructions (ppc_insn_mfcr): Likewise.

6 years agoRegen ld potfile
Alan Modra [Wed, 9 May 2018 05:48:29 +0000 (15:18 +0930)]
Regen ld potfile

* po/BLD-POTFILES.in: Regenerate.

6 years agoPR23148, Heap buffer overflow in pe_print_edata
Alan Modra [Wed, 9 May 2018 04:38:09 +0000 (14:08 +0930)]
PR23148, Heap buffer overflow in pe_print_edata

PR 23148
* peXXigen.c (pe_print_edata): Correct minimum size.

6 years agoPR23147, Heap buffer overflow in pe_print_idata
Alan Modra [Wed, 9 May 2018 04:26:34 +0000 (13:56 +0930)]
PR23147, Heap buffer overflow in pe_print_idata

PR 23147
* peXXigen.c (pe_print_idata): Bound check hint_addr.

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

6 years agoRISC-V: Add missing hint instructions from RV128I.
Jim Wilson [Tue, 8 May 2018 22:46:19 +0000 (15:46 -0700)]
RISC-V: Add missing hint instructions from RV128I.

gas/
* testsuite/gas/riscv/c-zero-imm.d: Add more tests.
* testsuite/gas/riscv/c-zero-imm.s: Likewise.
* testsuite/gas/riscv/c-zero-reg.d: Fix typo in test.  Add disabled
future test for RV128 support.
* testsuite/gas/riscv/c-zero-reg.s: Likewise.

include/
* opcode/riscv-opc.h (MATCH_C_SRLI64, MASK_C_SRLI64): New.
(MATCH_C_SRAI64, MASK_C_SRAI64): New.
(MATCH_C_SLLI64, MASK_C_SLLI64): New.

opcodes/
* riscv-opc.c (match_c_slli, match_slli_as_c_slli): New.
(match_c_slli64, match_srxi_as_c_srxi): New.
(riscv_opcodes) <slli, sll>: Use match_slli_as_c_slli.
<srli, srl, srai, sra>: Use match_srxi_as_c_srxi.
<c.slli, c.srli, c.srai>: Use match_s_slli.
<c.slli64, c.srli64, c.srai64>: New.

6 years agoDefine GNULIB_NAMESPACE in unittests/string_view-selftests.c
Simon Marchi [Tue, 8 May 2018 20:45:02 +0000 (16:45 -0400)]
Define GNULIB_NAMESPACE in unittests/string_view-selftests.c

When building with x86_64-w64-mingw32-g++ (to test cross-compiling for
Windows), I get this error:

unittests/string_view-selftests.o: In function `selftests::string_view::inserters_2::test05(unsigned long long)':
/home/emaisin/src/binutils-gdb/gdb/unittests/basic_string_view/inserters/char/2.cc:60: undefined reference to `std::basic_ofstream<char, std::char_traits<char> >::rpl_close()'

This is caused by gnulib redefining "close" as "rpl_close", and
therefore messing up the declaration of basic_ofstream in the libstdc++
header.  The solution would be to use gnulib namespaces [1].  Until we
use them across GDB, we can use them locally in files that are
problematic, like this one.

gdb/ChangeLog:

* unittests/string_view-selftests.c: Define GNULIB_NAMESPACE.

6 years agoRISC-V: New emulations to make path searches follow glibc ABI.
Jim Wilson [Tue, 8 May 2018 20:34:03 +0000 (13:34 -0700)]
RISC-V: New emulations to make path searches follow glibc ABI.

ld/
PR ld/22962
* Makefile.am (ALL_EMULATION_SOURCES): Add eelf32lriscv_ilp32f.c,
eelf32lriscv_ilp32.c, eelf64lriscv_lp64f.c, eelf64lriscv_lp64.c.
(eelf32lriscv_ilp32f.c, eelf32lriscv_ilp32.c): New build rules.
(eelf64lriscv_lp64f.c, eelf64lriscv_lp64.c): New build rules.
* Makefile.in: Regenerated.
* configure.tgt (riscv32*-*-linux*, riscv64*-*-linux*): New.
* ld/emulparams/elf32lriscv.sh: Set LIBPATH_SUFFIX.
* ld/emulparams/elf32lriscv_ilp32.sh: New.
* ld/emulparams/elf32lriscv_ilp32f.sh: New.
* ld/emulparams/elf64lriscv-defs.sh: Don't set LIBPATH_SUFFIX here.
* ld/emulparams/elf64lriscv.sh: Set LIBPATH_SUFFIX.
* ld/emulparams/elf64lriscv_lp64.sh: New.
* ld/emulparams/elf64lriscv_lp64f.sh: New.
* ld/genscripts.sh (append_to_lib_path): Change LIBPATH_SUFFIX test to
a for.  Inside loop, change LIBPATH_SUFFIX uses to libpath_suffix.
(LIB_PATH): In LIB_PATH if, add loop for LIBPATH_SUFFIX, changes uses
inside loop to libpath_suffix.

6 years agogdb/x86: Handle kernels using compact xsave format
Andrew Burgess [Thu, 3 May 2018 16:46:14 +0000 (17:46 +0100)]
gdb/x86: Handle kernels using compact xsave format

For GNU/Linux on x86-64, if the target is using the xsave format for
passing the floating-point information from the inferior then there
currently exists a bug relating to the x87 control registers, and the
mxcsr register.

The xsave format allows different floating-point features to be lazily
enabled, a bit in the xsave format tells GDB which floating-point
features have been enabled, and which have not.

Currently in GDB, when reading the floating point state, we check the
xsave bit flags, if the feature is enabled then we read the feature
from the xsave buffer, and if the feature is not enabled, then we
supply the default value from within GDB.

Within GDB, when writing the floating point state, we first fetch the
xsave state from the target and then, for any feature that is not yet
enabled, we write the default values into the xsave buffer.  Next we
compare the regcache value with the value in the xsave buffer, and, if
the value has changed we update the value in the xsave buffer, and
mark the feature enabled in the xsave bit flags.

The problem then, is that the x87 control registers were not following
this pattern.  We assumed that these registers were always written out
by the kernel, and we always wrote them out to the xsave buffer (but
didn't enabled the feature).  The result of this is that if the kernel
had not yet enabled the x87 feature then within GDB we would see
random values for the x87 floating point control registers, and if the
user tried to modify one of these register, that modification would be
lost.

Finally, the mxcsr register was also broken in the same way as the x87
control registers.  The added complexity with this case is that the
mxcsr register is part of both the avx and sse floating point feature
set.  When reading or writing this register we need to check that at
least one of these features is enabled.

This bug was present in native GDB, and within gdbserver.  Both are
fixed with this commit.

gdb/ChangeLog:

* common/x86-xstate.h (I387_FCTRL_INIT_VAL): New constant.
(I387_MXCSR_INIT_VAL): New constant.
* amd64-tdep.c (amd64_supply_xsave): Only read state from xsave
buffer if it was supplied by the inferior.
* i387-tdep.c (i387_supply_fsave): Use I387_MXCSR_INIT_VAL.
(i387_xsave_get_clear_bv): New function.
(i387_supply_xsave): Only read x87 control registers from the
xsave buffer if the feature is enabled, and the state will have
been written, otherwise, provide a suitable default.
(i387_collect_xsave): Pre-clear all registers in xsave buffer,
including x87 control registers.  Update control registers if they
have changed from the default value, and mark features as enabled
as required.
* i387-tdep.h (i387_xsave_get_clear_bv): Declare.

gdb/gdbserver/ChangeLog:

* i387-fp.c (i387_cache_to_xsave): Only write x87 control
registers to the cache if their values have changed.
(i387_xsave_to_cache): Provide default values for x87 control
registers when these features are available, but disabled.
* regcache.c (supply_register_by_name_zeroed): New function.
* regcache.h (supply_register_by_name_zeroed): Declare new
function.

gdb/testsuite/ChangeLog:

* gdb.arch/amd64-init-x87-values.S: New file.
* gdb.arch/amd64-init-x87-values.exp: New file.

6 years agoPR23141, SIGSEGV in bfd_elf_set_group_contents
Alan Modra [Tue, 8 May 2018 05:02:04 +0000 (14:32 +0930)]
PR23141, SIGSEGV in bfd_elf_set_group_contents

Another fuzzing fix.  I think it's reasonable to simply strip out any
group section that is too weird for objcopy to handle.

PR 23141
* objcopy.c (is_strip_section): Strip groups without a valid
signature symbol.

6 years agoCorrect powerpc spe opcode lookup
Alan Modra [Mon, 7 May 2018 02:05:22 +0000 (11:35 +0930)]
Correct powerpc spe opcode lookup

Defining SPE2_OPCD_SEGS as 13 discounts the possibility that we'd
ever look up spe2_opcd_indices[14..16], which I think is possible.
Extend that array to size 16+1, using the macros we use to index the
array.  Similarly use the index macros for PPC_OPCD_SEGS and
VLE_OPCD_SEGS.

* ppc-dis.c (PPC_OPCD_SEGS): Define using PPC_OP.
(VLE_OPCD_SEGS, SPE2_OPCD_SEGS): Similarly, using macros used to
partition opcode space for index lookup.

6 years agowatchpoint-unaligned.exp: Use skip_hw_watchpoint_tests
Jan Kratochvil [Tue, 8 May 2018 12:26:19 +0000 (14:26 +0200)]
watchpoint-unaligned.exp: Use skip_hw_watchpoint_tests

gdb/testsuite/ChangeLog
2018-05-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gdb.base/watchpoint-unaligned.exp: Use skip_hw_watchpoint_tests.

6 years ago[spu] Fix "info spu event" output formatting
Ulrich Weigand [Tue, 8 May 2018 12:13:12 +0000 (14:13 +0200)]
[spu] Fix "info spu event" output formatting

The formatting of the output of the "info spu event" command changed, causing
spurious test suite failures.  Use phex instead of phex_nz to get back the
expected format, and fix emission of new line characters.

gdb/ChangeLog:
2018-05-08  Ulrich Weigand  <uweigand@de.ibm.com>

* spu-tdep.c (info_spu_event_command): Fix output formatting.

6 years agoPrevent a memory exhaustion failure when running objdump on a fuzzed input file with...
Nick Clifton [Tue, 8 May 2018 11:51:06 +0000 (12:51 +0100)]
Prevent a memory exhaustion failure when running objdump on a fuzzed input file with corrupt string and attribute sections.

PR 22809
* elf.c (bfd_elf_get_str_section): Check for an excessively large
string section.
* elf-attrs.c (_bfd_elf_parse_attributes): Issue an error if the
attribute section is larger than the size of the file.

6 years agoSimplify VLE handling in print_insn_powerpc().
Peter Bergner [Tue, 8 May 2018 01:47:54 +0000 (20:47 -0500)]
Simplify VLE handling in print_insn_powerpc().

opcodes/
* ppc-dis.c (print_insn_powerpc) <insn_is_short>: Replace this...
<insn_length>: ...with this.  Update usage.
Remove duplicate call to *info->memory_error_func.

6 years agoEnable Intel MOVDIRI, MOVDIR64B instructions
H.J. Lu [Mon, 7 May 2018 16:30:02 +0000 (09:30 -0700)]
Enable Intel MOVDIRI, MOVDIR64B instructions

gas/

* config/tc-i386.c (cpu_arch): Add .movdir, .movdir64b.
(cpu_noarch): Likewise.
(process_suffix): Add check for register size.
* doc/c-i386.texi: Document movdiri, movdir64b.
* testsuite/gas/i386/i386.exp: Run MOVDIR{I,64B} tests.
* testsuite/gas/i386/movdir-intel.d: New file.
* testsuite/gas/i386/movdir.d: Likewise.
* testsuite/gas/i386/movdir.s: Likewise.
* testsuite/gas/i386/movdir64b-reg.s: Likewise.
* testsuite/gas/i386/movdir64b-reg.l: Likewise.
* testsuite/gas/i386/x86-64-movdir-intel.d: Likewise.
* testsuite/gas/i386/x86-64-movdir.d: Likewise.
* testsuite/gas/i386/x86-64-movdir.s: Likewise.
* testsuite/gas/i386/x86-64-movdir64b-reg.s: Likewise.
* testsuite/gas/i386/x86-64-movdir64b-reg.l: Likewise.

opcodes/

* i386-dis.c (Gva): New.
(enum): Add PREFIX_0F38F8, PREFIX_0F38F9,
MOD_0F38F8_PREFIX_2, MOD_0F38F9_PREFIX_0.
(prefix_table): New instructions (see prefix above).
(mod_table): New instructions (see prefix above).
(OP_G): Handle va_mode.
* i386-gen.c (cpu_flag_init): Add CPU_MOVDIRI_FLAGS,
CPU_MOVDIR64B_FLAGS.
(cpu_flags): Add CpuMOVDIRI and CpuMOVDIR64B.
* i386-opc.h (enum): Add CpuMOVDIRI, CpuMOVDIR64B.
(i386_cpu_flags): Add cpumovdiri and cpumovdir64b.
* i386-opc.tbl: Add movidir{i,64b}.
* i386-init.h: Regenerated.
* i386-tbl.h: Likewise.

6 years agox86: Replace AddrPrefixOp0 with AddrPrefixOpReg
H.J. Lu [Mon, 7 May 2018 16:57:06 +0000 (09:57 -0700)]
x86: Replace AddrPrefixOp0 with AddrPrefixOpReg

This patch replaces AddrPrefixOp0 with AddrPrefixOpReg to indicate that
the size of register operand is controlled by the address size prefix.
This will be used by Intel MOVDIRI and MOVDIR64B instructions later.

gas/

* config/tc-i386.c (process_suffix): Check addrprefixopreg
instead of addrprefixop0.

opcodes/

* i386-gen.c (opcode_modifiers): Replace AddrPrefixOp0 with
AddrPrefixOpReg.
* i386-opc.h (AddrPrefixOp0): Renamed to ...
(AddrPrefixOpReg): This.
(i386_opcode_modifier): Rename addrprefixop0 to addrprefixopreg.
* i386-opc.tbl: Replace AddrPrefixOp0 with AddrPrefixOpReg.

6 years agoAdd -Wduplicated-cond
Tom Tromey [Sat, 21 Apr 2018 18:00:29 +0000 (12:00 -0600)]
Add -Wduplicated-cond

This adds -Wduplicated-cond to warnings.m4.  This caught one bug.

I tried adding -Wduplicated-branches as well, but it results in some
spurious failures from code like this in cgen.h:

    #define CGEN_ATTR_TYPE(n) \
    struct { unsigned int bool_; \
     CGEN_ATTR_VALUE_TYPE nonbool[(n) ? (n) : 1]; }

This will trigger a warning if passed n==1, which seems like a
perfectly valid thing to do; and there were other issues like this as
well.

ChangeLog
2018-05-07  Tom Tromey  <tom@tromey.com>

* configure: Rebuild.
* warning.m4 (AM_GDB_WARNINGS): Add -Wduplicated-cond.

gdbserver/ChangeLog
2018-05-07  Tom Tromey  <tom@tromey.com>

* configure: Rebuild.

6 years agoFix decoding of ARM VFP instructions
Tom Tromey [Sat, 21 Apr 2018 17:51:34 +0000 (11:51 -0600)]
Fix decoding of ARM VFP instructions

-Wduplicated-cond pointed out that arm_record_vfp_data_proc_insn
checks "opc1 == 0x0b" twice.  I filed this a while ago as
PR tdep/20362.

Based on the ARM instruction manual at
https://www.scss.tcd.ie/~waldroj/3d1/arm_arm.pdf, I think the
instruction decoding in this function has two bugs.

First, opc1 is computed as:

  opc1 = bits (arm_insn_r->arm_insn, 20, 23);
[...]
  opc1 = opc1 & 0x04;

This means that tests like:

  else if (opc1 == 0x01)

can never be true.

In the ARM manual, "opc1" corresponds to these bits:

    name   bit
    r      20
    q      21
    D      22
    p      23

... where the D bit is not used for VFP instruction decoding.

So, I believe this code should use ~0x04 instead.

Second, VDIV is recognized by the bits "pqrs" being equal to "1000".
This tranlates to opc1 == 0x08 -- not 0x0b.  Note that pqrs==1001 is
an undefined encoding, which is probably why opc2 is not checked here;
this code doesn't seem to really deal with undefined encodings in
general, so I've left that as is.

I don't have an ARM machine or any reasonable way to test this.

ChangeLog
2018-05-07  Tom Tromey  <tom@tromey.com>

PR tdep/20362:
* arm-tdep.c (arm_record_vfp_data_proc_insn): Properly mask off D
bit.  Use correct value for VDIV.

6 years agoCleanup ppc code dealing with opcode dumps.
Peter Bergner [Mon, 7 May 2018 14:40:59 +0000 (09:40 -0500)]
Cleanup ppc code dealing with opcode dumps.

include/
* opcode/ppc.h (powerpc_num_opcodes): Change type to unsigned.
(vle_num_opcodes): Likewise.
(spe2_num_opcodes): Likewise.

opcodes/
* ppc-opc.c (powerpc_num_opcodes): Likewise.
(vle_num_opcodes): Likewise.
(spe2_num_opcodes): Likewise.
* ppc-dis.c (disassemble_init_powerpc) <powerpc_opcd_indices>: Rewrite
initialization loop.
(disassemble_init_powerpc) <vle_opcd_indices>: Likewise.
(disassemble_init_powerpc) <spe2_opcd_indices>: Likewise.  Initialize
only once.

gas/
* config/tc-ppc.c (ppc_setup_opcodes) <powerpc_opcodes>: Rewrite code
to dump the entire opcode table.
(ppc_setup_opcodes) <spe2_opcodes>: Likewise.
(ppc_setup_opcodes) <vle_opcodes>: Likewise.  Fix calculation of
opcode index.

6 years agoBug 23142, SIGSEGV in is_strip_section
Alan Modra [Mon, 7 May 2018 13:11:47 +0000 (22:41 +0930)]
Bug 23142, SIGSEGV in is_strip_section

PR 23142
* objcopy.c (group_signature): Don't accept groups that use a
symbol table other than the one we've read.

6 years agoReplace uses of strncmp with memcmp
Alan Modra [Mon, 7 May 2018 02:06:07 +0000 (11:36 +0930)]
Replace uses of strncmp with memcmp

Avoids gcc pr85623 for these calls.

* cofflink.c (_bfd_coff_link_input_bfd): Use memcmp rather than
strncmp when checking for ".bf" special symbol.
* prXXigen.c (_bfd_XXi_swap_scnhdr_out): Make pe_required_section_flags
section name a char array, remove sentinal known_sections entry,
and adjust loop over known_sections to suit.  Use memcmp rather
than strncmp.

6 years agogas/i386/xmmhi32.d: Also allow dir32 relocation
H.J. Lu [Mon, 7 May 2018 02:16:47 +0000 (19:16 -0700)]
gas/i386/xmmhi32.d: Also allow dir32 relocation

Also allow dir32 relocation to support mingw targets.

* testsuite/gas/i386/xmmhi32.d: Also allow dir32 relocation.

6 years agoi386: Append ".p2align 4,0" to gas tests
H.J. Lu [Mon, 7 May 2018 02:09:12 +0000 (19:09 -0700)]
i386: Append ".p2align 4,0" to gas tests

Append ".p2align 4,0" to i386 assembler tests to support mingw targets.

* testsuite/gas/i386/avx512f-plain.s: Append ".p2align 4,0".
* testsuite/gas/i386/avx512vl-plain.s: Likewise.
* testsuite/gas/i386/bnd.s: Likewise.
* testsuite/gas/i386/stN.s: Likewise.
* testsuite/gas/i386/avx512f-plain.l: Updated.
* testsuite/gas/i386/avx512vl-plain.l: Likewise.
* testsuite/gas/i386/bnd.l: Likewise.
* testsuite/gas/i386/stN.l: Likewise.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 7 May 2018 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

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

6 years agoAdd -Wimplicit-fallthrough
Tom Tromey [Thu, 18 Aug 2016 16:56:11 +0000 (10:56 -0600)]
Add -Wimplicit-fallthrough

This adds -Wimplicit-fallthrough to the set of default warnings.

2018-05-04  Tom Tromey  <tom@tromey.com>

* configure: Rebuild.
* warning.m4 (AM_GDB_WARNINGS): Add -Wimplicit-fallthrough.

gdbserver/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* configure: Rebuild.

6 years agoAdd a missing break in record_linux_system_call
Tom Tromey [Thu, 5 Apr 2018 21:37:56 +0000 (15:37 -0600)]
Add a missing break in record_linux_system_call

This adds a "break" at the end of the RECORD_SYS_RECVFROM case in
record_linux_system_call.  This seemed correct to me.

2018-05-04  Tom Tromey  <tom@tromey.com>

* linux-record.c (record_linux_system_call) <case
RECORD_SYS_RECVFROM>: Add "break".

6 years agoAdd missing "breaks"
Tom Tromey [Thu, 19 Apr 2018 20:48:51 +0000 (14:48 -0600)]
Add missing "breaks"

This adds a "break" to a couple of spots where it was erroneously
omitted.  I think these are the two (potential) real bugs caught by
this series.

2018-05-04  Tom Tromey  <tom@tromey.com>

* mi/mi-main.c (mi_cmd_trace_frame_collected) <REGISTERS_FORMAT>:
Add missing "break".
* mi/mi-cmd-stack.c (mi_cmd_stack_list_locals) <NO_FRAME_FILTERS>:
Add missing "break".

6 years agoAdd two fall-through comments in rs6000-tdep.c
Tom Tromey [Thu, 5 Apr 2018 22:09:29 +0000 (16:09 -0600)]
Add two fall-through comments in rs6000-tdep.c

This adds two fall-through comments in rs6000-tdep.c.  I looked at the
PPC instruction manual and convinced myself that this was correct.
And, this isn't a semantic change.  However, close review would still
be good.

2018-05-04  Tom Tromey  <tom@tromey.com>

* rs6000-tdep.c (ppc_process_record_op4)
(ppc_process_record_op63): Add fall-through comment.

6 years agoAdd fall-through comment to i386-tdep.c
Tom Tromey [Thu, 5 Apr 2018 22:01:36 +0000 (16:01 -0600)]
Add fall-through comment to i386-tdep.c

This adds a fall-through comment in i386-tdep.c.  I was not sure what
to do here, so I elected to preserve the status quo.  In review, John
Baldwin pointed out that: "I believe this is correct based on the diff
that added the special cases for xgetbv and xsetbv as previously ldgt
and lidt were treated the same".

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

* i386-tdep.c (i386_process_record): Add fall-through comment.

6 years agoAdd a fall-through comment to stabsread.c
Tom Tromey [Thu, 5 Apr 2018 21:39:57 +0000 (15:39 -0600)]
Add a fall-through comment to stabsread.c

This adds a fall-through comment to stabsread.c.  I skimmed the stabs
manual a bit and it seems that 'p' and 'P' are similar enough that
this makes sense.  Also, stabs is mostly deprecated, and the code has
been this way for a long time, so it seemed safest to keep the status
quo.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* stabsread.c (define_symbol) <case 'p'>: Add fall-through
comment.

6 years agoFix "obvious" fall-through warnings
Tom Tromey [Tue, 27 Sep 2016 17:28:18 +0000 (11:28 -0600)]
Fix "obvious" fall-through warnings

This patch fixes the subset of -Wimplicit-fallthrough warnings that I
considered obvious.  In most cases it was obvious from context that
falling through was desired; here I added the appropriate comment.  In
a couple of cases it seemed clear that a "break" was missing.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* riscv-tdep.c (riscv_isa_xlen): Add fall-through comment.
* utils.c (can_dump_core) <LIMIT_CUR>: Add fall-through comment.
* eval.c (fetch_subexp_value) <MEMORY_ERROR>: Add fall-through
comment.
* d-valprint.c (d_val_print) <TYPE_CODE_STRUCT>: Add fall-through
comment.
* coffread.c (coff_symtab_read) <C_LABEL>: Add fall-through
comment.

6 years agoAdd missing ATTRIBUTE_NORETURNs
Tom Tromey [Tue, 27 Sep 2016 17:23:49 +0000 (11:23 -0600)]
Add missing ATTRIBUTE_NORETURNs

This patch adds a missing ATTRIBUTE_NORETURN.  This lets
-Wimplicit-fallthrough recognize that a given case does not fall
through.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* dwarf2loc.c (unimplemented): Add ATTRIBUTE_NORETURN.

6 years agoFix "fall through" comments
Tom Tromey [Tue, 27 Sep 2016 17:18:04 +0000 (11:18 -0600)]
Fix "fall through" comments

This patch updates existing "fall through" comments so that they can
be recognized by gcc's -Wimplicit-fallthrough comment-parsing
heuristic.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* s390-tdep.c (s390_process_record): Fix fall-through comments.
* xcoffread.c (scan_xcoff_symtab): Move comment later.
* symfile.c (section_is_mapped): Fix fall-through comment.
* stabsread.c (define_symbol, read_member_functions): Fix
fall-through comment.
* s390-linux-tdep.c (s390_process_record): Fix fall-through
comment.
* remote.c (remote_wait_as): Fix fall-through comment.
* p-exp.y (yylex): Fix fall-through comment.
* nat/x86-dregs.c (x86_length_and_rw_bits): Fix fall-through
comment.
* msp430-tdep.c (msp430_gdbarch_init): Fix fall-through comment.
* mdebugread.c (parse_partial_symbols): Fix fall-through comment.
* jv-exp.y (yylex): Fix fall-through comment.
* go-exp.y (lex_one_token): Fix fall-through comment.
* gdbtypes.c (get_discrete_bounds, rank_one_type): Fix
fall-through comment.
* f-exp.y (yylex): Fix fall-through comment.
* dwarf2read.c (process_die): Fix fall-through comments.
* dbxread.c (process_one_symbol): Fix fall-through comment.
* d-exp.y (lex_one_token): Fix fall-through comment.
* cp-name-parser.y (yylex): Fix fall-through comment.
* coffread.c (coff_symtab_read): Fix fall-through comment.
* c-exp.y (lex_one_token): Fix fall-through comment.
* arm-tdep.c (arm_decode_miscellaneous): Fix fall-through
comment.
* arch/arm.c (arm_instruction_changes_pc): Fix fall-through
comment.

6 years agoAutomatic date update in version.in
GDB Administrator [Sat, 5 May 2018 00:00:43 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoLet gdb.execute handle multi-line commands
Tom Tromey [Thu, 19 Apr 2018 02:10:43 +0000 (20:10 -0600)]
Let gdb.execute handle multi-line commands

This changes the Python API so that gdb.execute can now handle
multi-line commands, like "commands" or "define".

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR python/22730:
* NEWS: Mention gdb.execute change.
* gdbcmd.h (execute_control_command): Don't declare.
* python/python.c (execute_gdb_command): Use read_command_lines_1,
execute_control_commands, execute_control_commands_to_string.
* cli/cli-script.h (execute_control_commands)
(execute_control_commands_to_string): Declare.
(execute_control_command): Add from_tty parameter.
* cli/cli-script.c (execute_control_commands)
(execute_control_commands_to_string): New functions.
(execute_user_command): Use execute_control_commands.
(execute_control_command_1): Add "from_tty" parameter.  Update.
(execute_control_command): Likewise.

testsuite/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR python/22730:
* gdb.python/python.exp: Test multi-line execute.

6 years agoAllow breakpoint commands to be set from Python
Tom Tromey [Wed, 18 Apr 2018 23:37:56 +0000 (17:37 -0600)]
Allow breakpoint commands to be set from Python

This changes the Python API so that breakpoint commands can be set by
writing to the "commands" attribute.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR python/22731:
* NEWS: Mention that breakpoint commands are writable.
* python/py-breakpoint.c (bppy_set_commands): New function.
(breakpoint_object_getset) <"commands">: Use it.

doc/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR python/22731:
* python.texi (Breakpoints In Python): Mention that "commands" is
writable.

testsuite/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR python/22731:
* gdb.python/py-breakpoint.exp: Test setting breakpoint commands.

6 years agoUse function_view in cli-script.c
Tom Tromey [Wed, 18 Apr 2018 22:53:07 +0000 (16:53 -0600)]
Use function_view in cli-script.c

This changes some functions in cli-script.c to use function_view
rather than a function pointer and closure argument.  This simplifies
the code a bit and is useful in a subsequent patch.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* tracepoint.c (actions_command): Update.
* mi/mi-cmd-break.c (mi_command_line_array)
(mi_command_line_array_cnt, mi_command_line_array_ptr)
(mi_read_next_line): Remove.
(mi_cmd_break_commands): Update.
* cli/cli-script.h (read_command_lines, read_command_lines_1): Use
function_view.
* cli/cli-script.c (get_command_line): Update.
(process_next_line): Use function_view.  Constify.
(recurse_read_control_structure, read_command_lines)
(read_command_lines_1): Change argument types to function_view.
(do_define_command, document_command): Update.
* breakpoint.h (check_tracepoint_command): Don't declare.
* breakpoint.c (check_tracepoint_command): Remove.
(commands_command_1, create_tracepoint_from_upload): Update.

6 years agoAllow defining a user command inside a user command
Tom Tromey [Wed, 18 Apr 2018 22:10:59 +0000 (16:10 -0600)]
Allow defining a user command inside a user command

PR gdb/11750 concerns defining a command inside a user commnad, like:

    define outer
      define inner
echo hi\n
      end
    end

This patch adds this capability to gdb.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR gdb/11750:
* cli/cli-script.h (enum command_control_type) <define_control>:
New constant.
* cli/cli-script.c (multi_line_command_p): Handle define_control.
(build_command_line, execute_control_command_1)
(process_next_line): Likewise.
(do_define_command): New function, extracted from define_command.
(define_command): Use it.

testsuite/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR gdb/11750:
* gdb.base/define.exp: Test defining a user command inside a user
command.
* gdb.base/commands.exp (define_if_without_arg_test): Test "define".

6 years agoConstify prompt argument to read_command_lines
Tom Tromey [Wed, 18 Apr 2018 21:59:04 +0000 (15:59 -0600)]
Constify prompt argument to read_command_lines

The prompt argument to read_command_lines can be const.  This patch
makes this change, and also removes some fixed-sized buffers in favor
of using string_printf.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* tracepoint.c (actions_command): Update.
* cli/cli-script.h (read_command_lines): Update.
* cli/cli-script.c (read_command_lines): Constify prompt_arg.
(MAX_TMPBUF): Remove define.
(define_command): Use string_printf.
(document_command): Likewise.
* breakpoint.c (commands_command_1): Update.

6 years agoMake print_command_trace varargs
Tom Tromey [Wed, 18 Apr 2018 21:40:57 +0000 (15:40 -0600)]
Make print_command_trace varargs

I noticed some code in execute_control_command_1 that could be
simplified by making print_command_trace a printf-like function.  This
patch makes this change.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* top.c (execute_command): Update.
* cli/cli-script.h (print_command_lines): Now varargs.
* cli/cli-script.c (print_command_lines): Now varargs.
(execute_control_command_1) <case while_control, case if_control>:
Update.

6 years agoUse counted_command_line everywhere
Tom Tromey [Tue, 17 Apr 2018 05:13:18 +0000 (23:13 -0600)]
Use counted_command_line everywhere

Currently command lines are reference counted using shared_ptr only
when attached to breakpoints.  This patch changes gdb to use
shared_ptr in commands as well.  This allows for the removal of
copy_command_lines.

Note that the change to execute_user_command explicitly makes a new
reference to the command line.  This will be used in a later patch.

This simplifies struct command_line based on the observation that a
given command can have at most two child bodies: an "if" can have both
"then" and "else" parts.  Perhaps the names I've chosen for the
replacements here are not very good -- your input requested.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* tracepoint.c (all_tracepoint_actions): Rename from
all_tracepoint_actions_and_cleanup.  Change return type.
(actions_command, encode_actions_1, encode_actions)
(trace_dump_actions, tdump_command): Update.
* remote.c (remote_download_command_source): Update.
* python/python.c (gdbpy_eval_from_control_command)
(python_command, python_interactive_command): Update.
* mi/mi-cmd-break.c (mi_cmd_break_commands): Update.
* guile/guile.c (guile_command)
(gdbscm_eval_from_control_command, guile_command): Update.
* compile/compile.c (compile_code_command)
(compile_print_command, compile_to_object): Update.
* cli/cli-script.h (struct command_lines_deleter): New.
(counted_command_line): New typedef.
(struct command_line): Add constructor, destructor.
<body_list>: Remove.
<body_list_0, body_list_1>: New members.
(command_line_up): Remove typedef.
(read_command_lines, read_command_lines_1, get_command_line):
Update.
(copy_command_lines): Don't declare.
* cli/cli-script.c (build_command_line): Use "new".
(get_command_line): Return counted_command_line.
(print_command_lines, execute_user_command)
(execute_control_command_1, while_command, if_command): Update.
(realloc_body_list): Remove.
(process_next_line, recurse_read_control_structure): Update.
(read_command_lines, read_command_lines_1): Return counted_command_line.
(free_command_lines): Use "delete".
(copy_command_lines): Remove.
(define_command, document_command, show_user_1): Update.
* cli/cli-decode.h (struct cmd_list_element) <user_commands>: Now
a counted_command_line.
* breakpoint.h (counted_command_line): Remove typedef.
(breakpoint_set_commands): Update.
* breakpoint.c (check_no_tracepoint_commands)
(validate_commands_for_breakpoint): Update.
(breakpoint_set_commands): Change commands to be a
counted_command_line.
(commands_command_1, update_dprintf_command_list)
(create_tracepoint_from_upload): Update.

6 years agoAllocate cmd_list_element with new
Tom Tromey [Tue, 17 Apr 2018 03:09:48 +0000 (21:09 -0600)]
Allocate cmd_list_element with new

This adds a constructor and destructor to cmd_list_element and changes
it to be allocated with new.  This will be useful in a subsequent
patch.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* cli/cli-decode.h (cmd_list_element): New constructor.
(~cmd_list_element): New destructor.
(struct cmd_list_element): Add initializers.
* cli/cli-decode.c (do_add_cmd): Use "new".
(delete_cmd): Use "delete".

6 years agoaarch64: PR 19806: watchpoints: false negatives + PR 20207 contiguous ones
Jan Kratochvil [Fri, 4 May 2018 20:22:04 +0000 (22:22 +0200)]
aarch64: PR 19806: watchpoints: false negatives + PR 20207 contiguous ones

Some unaligned watchpoints were currently missed.

On old kernels as specified in
kernel RFE: aarch64: ptrace: BAS: Support any contiguous range (edit)
https://sourceware.org/bugzilla/show_bug.cgi?id=20207
after this patch some other unaligned watchpoints will get reported as false
positives.

With new kernels all the watchpoints should work exactly.

There may be a regresion that it now less merges watchpoints so that with
multiple overlapping watchpoints it may run out of the 4 hardware watchpoint
registers.  But as discussed in the original thread GDB needs some generic
watchpoints merging framework to be used by all the target specific code.
Even current FSF GDB code does not merge it perfectly.  Also with the more
precise watchpoints one can technically merge them less.  And I do not think
it matters too much to improve mergeability only for old kernels.
Still even on new kernels some better merging logic would make sense.

There remains one issue:
kernel-4.15.14-300.fc27.armv7hl
FAIL: gdb.base/watchpoint-unaligned.exp: continue
FAIL: gdb.base/watchpoint-unaligned.exp: continue
(gdb) continue
Continuing.
Unexpected error setting watchpoint: Invalid argument.
(gdb) FAIL: gdb.base/watchpoint-unaligned.exp: continue
But that looks as a kernel bug to me.
(1) It is not a regression by this patch.
(2) It is unrelated to this patch.

gdb/ChangeLog
2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves <palves@redhat.com>

PR breakpoints/19806 and support for PR external/20207.
* NEWS: Mention Aarch64 watchpoint improvements.
* aarch64-linux-nat.c (aarch64_linux_stopped_data_address): Fix missed
watchpoints and PR external/20207 watchpoints.
* nat/aarch64-linux-hw-point.c
(kernel_supports_any_contiguous_range): New.
(aarch64_watchpoint_offset): New.
(aarch64_watchpoint_length): Support PR external/20207 watchpoints.
(aarch64_point_encode_ctrl_reg): New parameter offset, new asserts.
(aarch64_point_is_aligned): Support PR external/20207 watchpoints.
(aarch64_align_watchpoint): New parameters aligned_offset_p and
next_addr_orig_p.  Support PR external/20207 watchpoints.
(aarch64_downgrade_regs): New.
(aarch64_dr_state_insert_one_point): New parameters offset and
addr_orig.
(aarch64_dr_state_remove_one_point): Likewise.
(aarch64_handle_breakpoint): Update caller.
(aarch64_handle_aligned_watchpoint): Likewise.
(aarch64_handle_unaligned_watchpoint): Support addr_orig and
aligned_offset.
(aarch64_linux_set_debug_regs): Remove const from state.  Call
aarch64_downgrade_regs.
(aarch64_show_debug_reg_state): Print also dr_addr_orig_wp.
* nat/aarch64-linux-hw-point.h (DR_CONTROL_LENGTH): Rename to ...
(DR_CONTROL_MASK): ... this.
(struct aarch64_debug_reg_state): New field dr_addr_orig_wp.
(unsigned int aarch64_watchpoint_offset): New prototype.
(aarch64_linux_set_debug_regs): Remove const from state.
* utils.c (align_up, align_down): Move to ...
* common/common-utils.c (align_up, align_down): ... here.
* utils.h (align_up, align_down): Move to ...
* common/common-utils.h (align_up, align_down): ... here.

gdb/gdbserver/ChangeLog
2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves <palves@redhat.com>

* linux-aarch64-low.c (aarch64_stopped_data_address):
Likewise.

gdb/testsuite/ChangeLog
2018-05-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves <palves@redhat.com>

PR breakpoints/19806 and support for PR external/20207.
* gdb.base/watchpoint-unaligned.c: New file.
* gdb.base/watchpoint-unaligned.exp: New file.

6 years agogdb: Make test names unique in gdb.base/maint.exp
Andrew Burgess [Fri, 4 May 2018 11:54:10 +0000 (12:54 +0100)]
gdb: Make test names unique in gdb.base/maint.exp

Add prefixes or suffixes to some test names to make them unique.

Replace a send_gdb/gdb_expect with a gdb_test, and make the test name
unique.

Remove test of 'help maint' as this is already covered by a later call
to test_prefix_command_help.

Removed test of 'help maint info' and add a new call to
test_prefix_command_help instead.

gdb/testsuite/ChangeLog:

* gdb.base/maint.exp: Make test names unique, use
test_prefix_command_help to test 'help maint info', and remove
repeated test of 'help maint'.

6 years ago(SPARC/LEON) fix incorrect array return value printed by "finish"
Joel Brobecker [Fri, 4 May 2018 18:33:19 +0000 (13:33 -0500)]
(SPARC/LEON) fix incorrect array return value printed by "finish"

Consider the code in the gdb.ada/array_return.exp testcase, which
defines a function returning an array of 2 integers:

   type Data_Small is array (1 .. 2) of Integer;
   function Create_Small return Data_Small;

When doing a "finish" from inside function Create_Small, we expect
GDB to tell us that the return value was "(1, 1)". However, it currently
prints the wrong value:

    (gdb) finish
    Run till exit from #0  pck.create_small () at /[...]/pck.adb:5
    p () at /[...]/p.adb:10
    10         Large := Create_Large;
    Value returned is $1 = (0, 0)

This is a regression which I traced back to the following commit...

    | commit 1933fd8ee01ad2e74a9c6341bc40f54962a8f889
    | Date:   Fri May 19 03:06:19 2017 -0700
    | Subject: gdb: fix TYPE_CODE_ARRAY handling in sparc targets

... which, despite what the subject says, is not really about
TYPE_CODE_ARRAY handling, which is a bit of an implementation detail,
but about the GNU vectors extension.

The author of the patch equated TYPE_CODE_ARRAY with vectors, which
is not correct. Vectors are TYPE_CODE_ARRAY types with the TYPE_VECTOR
flag set. So at the very minimum, the patch should have been checking
for both TYPE_CODE_ARRAY and TYPE_VECTOR.

But, that's not the only thing that did not seem right to me. When
looking at the ABI, and at the summary of the implementation in GCC
of the calling conventions for that architecture:

                                size      argument     return value

      small integer              <4       int. reg.      int. reg.
      word                        4       int. reg.      int. reg.
      double word                 8       int. reg.      int. reg.

      _Complex small integer     <8       int. reg.      int. reg.
      _Complex word               8       int. reg.      int. reg.
      _Complex double word       16        memory        int. reg.

      vector integer            <=8       int. reg.       FP reg.
      vector integer             >8        memory         memory

      float                       4       int. reg.       FP reg.
      double                      8       int. reg.       FP reg.
      long double                16        memory         memory

      _Complex float              8        memory         FP reg.
      _Complex double            16        memory         FP reg.
      _Complex long double       32        memory         FP reg.

      vector float              any        memory         memory

      aggregate                 any        memory         memory

The nice thing about the patch above is that it nicely factorized
the code that determines how arguments are passed/returns. The bad
news is that the implementation, particularly for the handling of
arrays and vectors, doesn't seem to match the summary above. Hence,
the regression we observed.

So what I did was review and re-implement some of the predicate functions
according to the summary above. Because dejagnu crashes all our Solaris
machines real bad, I can't run the dejagnu testsuite there. So what I did
was test the patch with AdaCore's testsuite against leon3-elf, no
regression. I verified that this fixes the regression above while
at the same time still passing gdb.base/gnu_vector.exp (I transposed
that testcase to our testsuite), which is the testcase that was cited
in the commit above as seeing some FAIL->PASS improvements.

This patch also removes one assertion...

      gdb_assert (sparc_integral_or_pointer_p (type)
                  || (TYPE_CODE (type) == TYPE_CODE_ARRAY && len <= 8));

... because that assertion is really the "negative" of the other conditions
written in the same "if, else if, else [assert]" block in this function.
To me, this assertion forces us to maintain two versions of the same code,
and is an unnecessary burden. In particular, the above is not the
correct condition, and the ABI summary table above shows that we need
a more complex condition to describe the situations where we expect
arguments to be passed by register.

gdb/ChangeLog:

        * sparc-tdep.c (sparc_structure_return_p): Re-implement to
        match the ABI as summarized in GCC's gcc/config/sparc/sparc.c.
        (sparc_arg_by_memory_p): Renamed from sparc_arg_on_registers_p.
        Re-implement to match the ABI as summarized in GCC's
        gcc/config/sparc/sparc.c.  All callers updated.
        (sparc32_store_arguments): Remove assertion.

6 years agoMinor cleanups in printcmd.c
Tom Tromey [Fri, 27 Apr 2018 22:04:13 +0000 (16:04 -0600)]
Minor cleanups in printcmd.c

This changes decode_format to use skip_spaces, and changes printcmd.c
not to include tui.h, which apparently is not needed.

2018-05-04  Tom Tromey  <tom@tromey.com>

* printcmd.c: Don't include tui.h.
(decode_format): Use skip_spaces.

6 years agoUse previous count when 'x' command is repeated
Tom Tromey [Fri, 27 Apr 2018 21:52:44 +0000 (15:52 -0600)]
Use previous count when 'x' command is repeated

About the 'x' command, the manual says:

    If you use <RET> to repeat the 'x' command, the repeat count N is
    used again; the other arguments default as for successive uses of
    'x'.

However, PR gdb/22619 points out that this does not work.

This patch fixes the problem.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR gdb/22619:
* printcmd.c (last_count): New global.
(x_command): Use saved count when repeating.

testsuite/ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

PR gdb/22619:
* gdb.base/long_long.exp (gdb_test_long_long): Add test for repeat
behavior.

6 years agoRemove do_closedir_cleanup
Tom Tromey [Thu, 3 May 2018 06:18:20 +0000 (00:18 -0600)]
Remove do_closedir_cleanup

This removes both copies of do_closedir_cleanup in favor of a new
unique_ptr specialization.

Tested by the buildbot, though I'm not sure that these code paths are
exercised there.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* nto-procfs.c (do_closedir_cleanup): Remove.
(procfs_pidlist): Use gdb_dir_up.
* procfs.c (do_closedir_cleanup): Remove.
(proc_update_threads): Use gdb_dir_up.
* common/filestuff.h (struct gdb_dir_deleter): New.
(gdb_dir_up): New typedef.

6 years agoRemove cleanup from print_mention_exception
Tom Tromey [Fri, 10 Nov 2017 21:42:35 +0000 (14:42 -0700)]
Remove cleanup from print_mention_exception

This removes a cleanup from print_mention_exception by using
string_printf.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* ada-lang.c (print_mention_exception): Use std::string.

6 years agoReturn std::string from ada_exception_catchpoint_cond_string
Tom Tromey [Thu, 3 May 2018 16:23:55 +0000 (10:23 -0600)]
Return std::string from ada_exception_catchpoint_cond_string

This changes ada_exception_catchpoint_cond_string to return a
std::string, allowing for the removal of a cleanup in
create_excep_cond_exprs.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* ada-lang.c (create_excep_cond_exprs): Update.
(ada_exception_catchpoint_cond_string): Use std::string.

6 years agoRemove cleanup from old_renaming_is_invisible
Tom Tromey [Fri, 10 Nov 2017 21:39:31 +0000 (14:39 -0700)]
Remove cleanup from old_renaming_is_invisible

This removes a cleanup from ada-lang.c by changing xget_renaming_scope
to return a std::string.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* ada-lang.c (xget_renaming_scope): Return std::string.
(old_renaming_is_invisible): Update.

6 years agoUse gdb_bfd_ref_ptr in target_bfd
Tom Tromey [Fri, 4 May 2018 16:17:52 +0000 (10:17 -0600)]
Use gdb_bfd_ref_ptr in target_bfd

I noticed that target_bfd was using manual reference counting for the
BFD it held.  This patch changes it to use gdb_bfd_ref_ptr instead.

Tested by the buildbot.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* bfd-target.c (target_bfd::m_bfd): Now a gdb_bfd_ref_ptr.
(target_bfd::target_bfd, target_bfd::~target_bfd): Update.

6 years ago[spu] Fix build break
Ulrich Weigand [Fri, 4 May 2018 17:20:18 +0000 (19:20 +0200)]
[spu] Fix build break

gdb/ChangeLog:
2018-05-04  Ulrich Weigand  <uweigand@de.ibm.com>

* spu-linux-nat.c (spu_linux_nat_target::wait): Fix syntax error.

6 years agoRemove a cleanup from remote.c
Tom Tromey [Thu, 3 May 2018 06:04:11 +0000 (00:04 -0600)]
Remove a cleanup from remote.c

This removes a cleanup from remote.c by using std::string to construct
the qSupported packet.

Tested by the buildbot.

ChangeLog
2018-05-04  Tom Tromey  <tom@tromey.com>

* remote.c (remote_query_supported_append): Change type.
(remote_check_symbols): Update.

6 years agogdb/testsuite: Handle targets with lots of registers
Andrew Burgess [Sun, 8 Apr 2018 23:18:34 +0000 (00:18 +0100)]
gdb/testsuite: Handle targets with lots of registers

In gdb.base/maint.exp a test calls 'maint print registers'.  If the
target has lots of registers this may overflow expect's buffers,
causing the test to fail.

After this commit we process the output line at a time until we get back
to the GDB prompt, this should prevent buffer overrun while still
testing that the command works as required.

gdb/testsuite/ChangeLog:

* gdb.base/maint.exp: Process output from 'maint print registers'
line at a time.

6 years agoconfigure uses incorrect link order when testing libpython
Paul Pluzhnikov [Fri, 4 May 2018 14:07:58 +0000 (10:07 -0400)]
configure uses incorrect link order when testing libpython

References:

https://stackoverflow.com/a/49868387
https://sourceware.org/bugzilla/show_bug.cgi?id=11420

Configure uses "gcc -o conftest -g ... conftest.c -ldl -lncurses -lm -ldl
... -lpthread ... -lpython2.7" when deciding whether give libpython is
usable.

That of course is the wrong link order, and only works for shared libraries
(mostly by accident), and only on some systems.

gdb/ChangeLog:

PR gdb/11420
* configure.ac: Prepend libpython.
* python/python-config.py: Likewise.
* configure: Regenerate.

6 years agogdb/testsuite: Fix broken regexp in gdbstub case
Andrew Burgess [Thu, 15 Mar 2018 19:41:50 +0000 (19:41 +0000)]
gdb/testsuite: Fix broken regexp in gdbstub case

When $use_gdb_stub is true then, when we start an MI target there's a
regexp to match GDB's startup pattern.  Unfortunately the pattern is
broken, and we're also missing a timeout case in the match list (which
would have helped point out that the regexp was broken).

The changes to the regexp are:

  1. Remove '${run_match}' prefix, the issued command doesn't include
  '${run_prefix}' so expecting '${run_match}' is wrong.

  2. Replaced '\\n' with '\\\\n' in order to match literal '\n' in
  GDBs output (that is, match a backslash followed by 'n', not a
  newline character).

  3. Replaced a '.' (matching any character) with '\.' to match a '.'
  and moved the '\.' into the correct place in the regexp.

  4. Replaced '\r\n' with '[\r\n]+' to match the end of a line.  This
  change isn't esential, but matches the other end of line patterns
  within this regexp.

Here's an example of the output that the regexp should match taken
from a testfile log, the first line is the command sent to GDB, and
the remaining lines are the response from GDB:

  jump *_start
  &"jump *_start\n"
  ~"Continuing at 0x10074.\n"
  ^running
  *running,thread-id="all"
  (gdb)

gdb/testsuite/ChangeLog:

* lib/mi-support.exp (mi_run_cmd_full): Fix regexp and add a
timeout.

6 years ago-Wstringop-truncation warnings
Alan Modra [Fri, 27 Apr 2018 00:12:11 +0000 (09:42 +0930)]
-Wstringop-truncation warnings

This patch is aimed at silencing gcc8 -Wstringop-truncation warnings.

Unfortunately adding  __attribute__ ((__nonstring)) doesn't work in a
number of the places patched here, (see
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643) so if you have
recent glibc headers installed you'll need to configure binutils with
--disable-werror to compile using gcc8 or gcc9.

include/
* ansidecl.h: Import from gcc.
* coff/internal.h (struct internal_scnhdr): Add ATTRIBUTE_NONSTRING
to s_name.
(struct internal_syment): Add ATTRIBUTE_NONSTRING to _n_name.
bfd/
* elf-linux-core.h (struct elf_external_linux_prpsinfo32_ugid32),
(struct elf_external_linux_prpsinfo32_ugid16),
(struct elf_external_linux_prpsinfo64_ugid32),
(struct elf_external_linux_prpsinfo64_ugid16): Add ATTRIBUTE_NONSTRING
to pr_fname and pr_psargs fields.  Remove GCC diagnostic pragmas.
Move comment to..
* elf.c (elfcore_write_prpsinfo): ..here.  Indent nested preprocessor
directives.
* elf32-arm.c (elf32_arm_nabi_write_core_note): Add ATTRIBUTE_NONSTRING
to data.
* elf32-ppc.c (ppc_elf_write_core_note): Likewise.
* elf32-s390.c (elf_s390_write_core_note): Likewise.
* elf64-s390.c (elf_s390_write_core_note): Likewise.
* elfxx-aarch64.c (_bfd_aarch64_elf_write_core_note): Likewise.
* elf64-x86-64.c (elf_x86_64_write_core_note): Add GCC diagnostic
pragmas.
* peXXigen.c (_bfd_XXi_swap_scnhdr_out): Use strnlen to avoid
false positive gcc-8 warning.
gas/
* config/obj-evax.c (shorten_identifier): Use memcpy in place
of strncpy.
* config/obj-macho.c (obj_mach_o_make_or_get_sect): Ensure
segname and sectname fields are NUL terminated.

6 years agoppc: Fix warning messages when IBM and IEEE long double are mixed
Tulio Magno Quites Machado Filho [Wed, 2 May 2018 22:18:44 +0000 (19:18 -0300)]
ppc: Fix warning messages when IBM and IEEE long double are mixed

When IBM long double is used, the .gnu_attribute 4 is set to 1 | (1 *
4).  IEEE long double sets the same .gnu_attribute to 1 | (3 * 4).

* elf32-ppc.c (_bfd_elf_ppc_merge_fp_attributes): Fix the order
of arguments when warning about different long double types.