deliverable/binutils-gdb.git
4 years agoPR273, SOM size -A
Alan Modra [Thu, 21 Nov 2019 10:14:54 +0000 (20:44 +1030)] 
PR273, SOM size -A

The SOM backend creates BFD sections for "spaces", and "sub-spaces".
"sub-spaces" are what we normally think of as a section, "spaces"
aggregate "sub-spaces".  Thus it does not really make sense to include
"spaces" for size -A since that would double count total size.

It so happens that real sections ought to have at least one of the
ALLOC and HAS_CONTENTS flags set, so this patch excludes "spaces" but
excluding BFD sections with no flags set.

PR 273
* size.c (sysv_internal_sizer, sysv_internal_printer): Exclude
sections with no flag bits set.
* testsuite/binutils-all/size.exp: Allow $CODE$ as a text section.

4 years agoFix potential buffer overrun in objcopy's note merging code.
Nick Clifton [Thu, 21 Nov 2019 10:54:20 +0000 (10:54 +0000)] 
Fix potential buffer overrun in objcopy's note merging code.

* objcopy.c (merge_gnu_build_notes): Allow for the possibility
that the new notes might actually be larger than the original
notes.

4 years agoARM cmse_scan segfault
Alan Modra [Wed, 20 Nov 2019 22:27:00 +0000 (08:57 +1030)] 
ARM cmse_scan segfault

This code in elf_link_add_object_symbols:

      ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed);
      if (ret < 0)
goto error_return;

      /* If we have already included this dynamic object in the
 link, just ignore it.  There is no reason to include a
 particular dynamic object more than once.  */
      if (ret > 0)
return TRUE;

prevents a shared library from being loaded twice by ensuring that any
library soname doesn't match the soname of one already loaded.  This
happens before sym_hashes are allocated, which leaves sym_hashes NULL.

cmse_scan looks at library symbols, and when attempting to look up a
global symbol will segfault if sym_hashes is zero.

* elf32-arm.c (elf32_arm_size_stubs): Exclude dynamic library
BFDs that have not been loaded.

4 years ago[gdb] Only force INTERP_CONSOLE ui_out for breakpoint commands in MI mode
Tom de Vries [Thu, 21 Nov 2019 10:02:27 +0000 (11:02 +0100)] 
[gdb] Only force INTERP_CONSOLE ui_out for breakpoint commands in MI mode

The problem reported in PR mi/25055 is that the output of the backtrace
command, when executed as breakpoint command does not show when executing
using the MI interpreter:
...
$ gdb a.out
Reading symbols from a.out...
(gdb) break main
Breakpoint 1 at 0x4003c0: file test.c, line 19.
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>bt
>end
(gdb) interpreter-exec mi "-exec-run"
^done

Breakpoint 1, main () at test.c:19
19        return foo (4);
(gdb)
...

Interestingly, the function print_frame is called twice during -exec-run:
- once during tui_on_normal_stop where the ui_out is temporarily set to
  tui->interp_ui_out (), resulting in the part after the comma in
  "Breakpoint 1, main () at test.c:19"
- once during execute_control_command, where the ui_out is the default for the
  current interpreter: mi_ui_out, which ignores calls to output text.

The commit 3a87ae656c2 "Use console uiout when executing breakpoint commands"
fixes the problem by temporarily switching to the ui_out of INTERP_CONSOLE in
execute_control_command.

This however caused a regression in redirection (escaping '#' using '\' for
git commit message convenience):
...
$ rm -f gdb.txt; gdb a.out
Reading symbols from a.out...
(gdb) break main
Breakpoint 1 at 0x4003c0: file test.c, line 19.
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>bt
>end
(gdb) set logging redirect on
(gdb) set logging on
Redirecting output to gdb.txt.
Copying debug output to gdb.txt.
(gdb) run
\#0  main () at test.c:19
(gdb) q
A debugging session is active.

        Inferior 1 [process 22428] will be killed.

Quit anyway? (y or n) y
$ cat gdb.txt
Starting program: /data/gdb_versions/devel/a.out

Breakpoint 1, main () at test.c:19
19        return foo (4);
...

The problem is that the '#0  main () at test.c:19' ends up in the gdb output
output rather than in gdb.txt.  This is due to the fact that the redirect is
setup for the current ui_out (which is tui->interp_ui_out ()), while the
backtrace output is printed to the INTERP_CONSOLE ui_out.

Fix this by limiting switching to INTERP_CONSOLE ui_out to when INTERP_MI is
active.

Tested on x86_64-linux.

gdb/ChangeLog:

2019-11-21  Tom de Vries  <tdevries@suse.de>

PR gdb/24956
* cli/cli-script.c (execute_control_command): Only switch to
INTERP_CONSOLE's ui_out when INTERP_MI is active.

gdb/testsuite/ChangeLog:

2019-11-21  Tom de Vries  <tdevries@suse.de>

PR gdb/24956
* gdb.base/ui-redirect.exp: Test output of user-defined command.

Change-Id: Id1771e7fcc9496a7d97ec2b2ea6b1487596f1ef7

4 years agoPR46, cygwin: FAIL: cdtest with -Ur
Alan Modra [Thu, 21 Nov 2019 06:52:41 +0000 (17:22 +1030)] 
PR46, cygwin: FAIL: cdtest with -Ur

See the comment in pe.sc to understand why ld -Ur won't work.

PR 46
binutils/
* testsuite/lib/binutils-common.exp (is_pecoff_format): Rewrite
with positive logic and add more target triples.
ld/
* scripttempl/pe.sc: Comment on ld -Ur fail.  Wrap .gcc_exc comment.
* scripttempl/pep.sc: Likewise.
* testsuite/ld-cdtest/cdtest.exp (test2): xfail for pe.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 21 Nov 2019 00:00:23 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAdd missing parentheses on 'print' (gdb.python/py-progspace.exp)
Sergio Durigan Junior [Wed, 20 Nov 2019 21:31:35 +0000 (16:31 -0500)] 
Add missing parentheses on 'print' (gdb.python/py-progspace.exp)

Commit 33d569b709886a1208145806da80b689d9cae9da ("gdb/python: Return
None from Progspace.block_for_pc on error") added a few tests on
gdb.python/py-progspace.exp which use 'print', but forgot to use
parentheses when passing the arguments to be printed.  This fails on
Python 3.

This commit adds these missing parentheses.  Pushed as obvious.

gdb/testsuite/ChangeLog:
2019-11-20  Sergio Durigan Junior  <sergiodj@redhat.com>

* gdb.python/py-progspace.exp: Add missing parentheses on some
'print' commands.

Change-Id: Iac0a7578855d128bbee3b98e7ea5888dae55fc00

4 years agoImprove target description check for SVE in gdbserver
Luis Machado [Mon, 18 Nov 2019 19:36:53 +0000 (16:36 -0300)] 
Improve target description check for SVE in gdbserver

The current code checks for the presence of a SVE target description by
comparing the number of registers.  This is a bit fragile since the number
of registers can change whenever we add new sets. Like PAC, for example.

If the comparison breaks, then we're left with SVE registers in the
description, but gdbserver doesn't send the registers to GDB, which in
turn displays stale information to the user.

The following patch changes the check to use the SVE feature string instead,
which hopefully should be more stable.

gdb/gdbserver/ChangeLog:

2019-11-20  Luis Machado  <luis.machado@linaro.org>

* linux-aarch64-low.c (is_sve_tdesc): Check against target feature
instead of register count.
* tdesc.c (tdesc_contains_feature): New function.
* tdesc.h (tdesc_contains_feature): New prototype.

Change-Id: I28b782cb1677560ca9a06a1be442974b25aabae4

4 years agoPR24944, gas doesn't read enough digits when parsing a floating point number
Alan Modra [Wed, 20 Nov 2019 11:24:07 +0000 (21:54 +1030)] 
PR24944, gas doesn't read enough digits when parsing a floating point number

PR 24944
* atof-generic.c (atof_generic): Increase decimal guard digits.
* testsuite/gas/i386/fp.s: Add more tests.
* testsuite/gas/i386/fp.d: Update.

4 years agocpu: fix comment in bpf.cpu
Jose E. Marchesi [Wed, 20 Nov 2019 09:16:24 +0000 (10:16 +0100)] 
cpu: fix comment in bpf.cpu

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

* bpf.cpu: Fix comment describing the 128-bit instruction format.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 20 Nov 2019 00:00:29 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoFix the "winheight" command
Tom Tromey [Sat, 26 Oct 2019 22:56:27 +0000 (16:56 -0600)] 
Fix the "winheight" command

The "winheight" command is broken.  I probably broke it in one of my
TUI refactoring patches, though I didn't track down exactly which one.

The bug is that the code does:

  *buf_ptr = '\0';

... but then never advances buf_ptr past this point, so no window name
is seen.

This patch refactors the code a bit so that a copy of the argument
string is not needed, also fixing the bug.

A new test case is included.

gdb/ChangeLog
2019-11-19  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c.
Now static.  Change type of "name".
(tui_set_win_height_command): Don't copy "arg".
* tui/tui-data.h (tui_partial_win_by_name): Don't declare.
* tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c.

gdb/testsuite/ChangeLog
2019-11-19  Tom Tromey  <tom@tromey.com>

* gdb.tui/winheight.exp: New file.

Change-Id: I0871e93777a70036dbec9c9543f862f42e3a81e5

4 years agoReplace "if (attr)" with "if (attr != nullptr)".
Ali Tamur [Tue, 19 Nov 2019 03:22:05 +0000 (19:22 -0800)] 
Replace "if (attr)" with "if (attr != nullptr)".

This is a cleanup patch in response to a reviewer comment on "Dwarf 5: Handle
debug_str_offsets" patch.

4 years agoReport GetLastError value when DebugActiveProcess fails
Tom Tromey [Wed, 6 Nov 2019 16:43:52 +0000 (09:43 -0700)] 
Report GetLastError value when DebugActiveProcess fails

When DebugActiveProcess fails, the error message is fairly generic:

    error (_("Can't attach to process."));

It would be more useful for diagnosing problems if the Windows error
code was included in the message.  This patch implements this.

gdb/ChangeLog
2019-11-19  Tom Tromey  <tromey@adacore.com>

* windows-nat.c (windows_nat_target::attach): Include GetLastError
result in error when DebugActiveProcess fails.

Change-Id: Ie1bf502a0d96bb7c09bd5b1c5e0c924ba58cd68c

4 years agoPR24499, ignore --add-gnu-debuglink for archives
Alan Modra [Tue, 19 Nov 2019 10:49:24 +0000 (21:19 +1030)] 
PR24499, ignore --add-gnu-debuglink for archives

objcopy --add-gnu-debuglink=foo.a.dbg foo.a just doesn't make any
sense.  Who puts executables in archives?

PR 24499
* objcopy.c (copy_file): Ignore --add-gnu-debuglink for archives.

4 years agoPR24968, make objcopy use output ELF arch if -B not given
Alan Modra [Tue, 19 Nov 2019 08:45:20 +0000 (19:15 +1030)] 
PR24968, make objcopy use output ELF arch if -B not given

This should make objcopy -B redundant for the common case of producing
ELF output where the -O target defaults to the desired arch:mach.

PR 24968
* objcopy.c (copy_object): For ELF output and non-ELF input without
arch, take arch from output file if not given by -B.  Don't
bfd_get_arch_info when we already have iarch.

4 years agoPR25191, internal error in _bfd_elf_set_section_contents
Alan Modra [Tue, 19 Nov 2019 04:23:44 +0000 (14:53 +1030)] 
PR25191, internal error in _bfd_elf_set_section_contents

This PR copies a fuzzed PE input file to ELF output, in the process
confusing the ELF backend by copying COFF-only section flags to the
output.  SEC_COFF_SHARED has the same value as SEC_ELF_COMPRESS.  One
approach to fixing this problem is of course not to reuse flag bits,
but we've run out.  So this patch only copies section flags that are
in the bfd_applicable_section_flags set when changing the flavour of
the output file.

PR 25191
* objcopy.c (is_nondebug_keep_contents_section): Use bfd_get_flavour.
(copy_object): Likewise.
(setup_section): Likewise.  If flavour of input and output files
differ, restrict section flags to the intersection of input and
output bfd_applicable_section_flags.

4 years agoPR25197, assertion fail coffgen.c
Alan Modra [Tue, 19 Nov 2019 01:08:36 +0000 (11:38 +1030)] 
PR25197, assertion fail coffgen.c

The testcase in this PR triggered "BFD_ASSERT (p2->is_sym)" by
sneakily generating a C_FILE sym whose value pointed into auxents.
The fix then is in the last changed line of this patch, to check
p->is_sym as well as p->u.syment.n_sclass.  The other changes fix
various overflow checks that weren't as solid as they could be.

PR 25197
* coffgen.c (coff_find_nearest_line_with_names): Check that C_FILE
u.syment.n_value does point at another C_FILE sym and not into
some auxent that happens to look like a C_FILE.  Properly check
for integer overflow and avoid possible pointer wrap-around.
Simplify pr17512 checks.

4 years agoAdd space between program name and file for objcopy/strip/objdump messages
Alan Modra [Mon, 18 Nov 2019 21:36:24 +0000 (08:06 +1030)] 
Add space between program name and file for objcopy/strip/objdump messages

The GNU coding standard does indicate there should be no space in
messages like these, but we tend to put a space in all other
messages.  This patch cures the inconsistency in:

$ binutils/strip-new -F elf32-little -N .text -o pr25200 pr25200.bin
binutils/strip-new: pr25200: R_X86_64_PLT32 unsupported
binutils/strip-new:pr25200: sorry, cannot handle this file

* bucomm.c (bfd_nonfatal_message): Add a space between program
name and file.

4 years agogdb/testsuite: Merge whatis.exp and ctf-whatis.exp
Andrew Burgess [Tue, 15 Oct 2019 21:58:08 +0000 (22:58 +0100)] 
gdb/testsuite: Merge whatis.exp and ctf-whatis.exp

The recently added gdb.base/ctf-whatis.exp test is a slightly modified
version of gdb.base/whatis.exp, with a few tests removed, and the
source compiled with different compiler options.  This patch merges
the two tests together into a single test script.

I tested using a version of GCC with CTF support added.

gdb/testsuite/ChangeLog:

* gdb.base/ctf-whatis.c: Delete.
* gdb.base/ctf-whatis.exp: Delete.
* gdb.base/whatis.exp: Rewrite to compile as both dwarf and ctf.

Change-Id: I09e11c70f197b79d2b1e0ae8c86a21c622be6c51

4 years agogdb/testsuite: Merge cvexpr.exp and ctf-cvexpr.exp
Andrew Burgess [Tue, 8 Oct 2019 09:13:54 +0000 (10:13 +0100)] 
gdb/testsuite: Merge cvexpr.exp and ctf-cvexpr.exp

The recently added gdb.base/ctf-cvexpr.exp is just a copy of
gdb.base/cvexpr.exp but compiled with different options.  This patch
merges these two tests together into a single test script.

I tested this change using a version of GCC with CTF support added.

gdb/testsuite/ChangeLog:

* gdb.base/ctf-cvexpr.exp: Delete.
* gdb.base/cvexpr.exp: Rewrite to compile as both dwarf and ctf.

Change-Id: If678c3e38cb444867defa970203d26563f15dba4

4 years agogdb/testsuite: Introduce skip_ctf_tests guard function
Andrew Burgess [Tue, 8 Oct 2019 09:09:31 +0000 (10:09 +0100)] 
gdb/testsuite: Introduce skip_ctf_tests guard function

Most versions of GCC in the wild don't support CTF debug format right
now, so, rather than attempting to compile the tests and failing each
time, this patch introduces a guard function to check if the compiler
supports CTF.  If we don't have CTF support then the CTF tests are
skipped.

This patch only updates 3 of the 4 CTF tests, the fourth will be
handled in the next patch.

gdb/testsuite/ChangeLog:

* gdb.base/ctf-constvars.exp: Skip test if CTF is not supported in
the compiler.  Clean up header comment a little.
* gdb.base/ctf-ptype.exp: Likewise.
* gdb.base/ctf-whatis.exp: Likewise.
* lib/gdb.exp (skip_ctf_tests): New proc.

Change-Id: I505c11169a9bc9871a31fc0c61e119f92f32cc63

4 years agoFix crash with core + TUI + run
Sergio Durigan Junior [Wed, 30 Oct 2019 17:58:29 +0000 (13:58 -0400)] 
Fix crash with core + TUI + run

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

A segfault can happen in a specific scenario when using TUI + a
corefile, as explained in the bug mentioned above.  The problem
happens when opening a corefile on GDB:

  $ gdb ./core program

entering TUI (C-x a), and then issuing a "run" command.  GDB segfaults
with the following stack trace:

  (top-gdb) bt
  #0  0x00000000004cd5da in target_ops::shortname (this=0x0) at ../../binutils-gdb/gdb/target.h:449
  #1  0x0000000000ac08fb in target_shortname () at ../../binutils-gdb/gdb/target.h:1323
  #2  0x0000000000ac09ae in tui_locator_window::make_status_line[abi:cxx11]() const (this=0x23e1fa0 <_locator>) at ../../binutils-gdb/gdb/tui/tui-stack.c:86
  #3  0x0000000000ac1043 in tui_locator_window::rerender (this=0x23e1fa0 <_locator>) at ../../binutils-gdb/gdb/tui/tui-stack.c:231
  #4  0x0000000000ac1632 in tui_show_locator_content () at ../../binutils-gdb/gdb/tui/tui-stack.c:369
  #5  0x0000000000ac63b6 in tui_set_key_mode (mode=TUI_COMMAND_MODE) at ../../binutils-gdb/gdb/tui/tui.c:321
  #6  0x0000000000aaf9be in tui_inferior_exit (inf=0x2d446a0) at ../../binutils-gdb/gdb/tui/tui-hooks.c:181
  #7  0x000000000044cddf in std::_Function_handler<void (inferior*), void (*)(inferior*)>::_M_invoke(std::_Any_data const&, inferior*&&) (__functor=..., __args#0=@0x7fffffffd650: 0x2d446a0)
      at /usr/include/c++/9/bits/std_function.h:300
  #8  0x0000000000757db9 in std::function<void (inferior*)>::operator()(inferior*) const (this=0x2cf3168, __args#0=0x2d446a0) at /usr/include/c++/9/bits/std_function.h:690
  #9  0x0000000000757876 in gdb::observers::observable<inferior*>::notify (this=0x23de0c0 <gdb::observers::inferior_exit>, args#0=0x2d446a0)
      at ../../binutils-gdb/gdb/gdbsupport/observable.h:106
  #10 0x000000000075532d in exit_inferior_1 (inftoex=0x2d446a0, silent=1) at ../../binutils-gdb/gdb/inferior.c:191
  #11 0x0000000000755460 in exit_inferior_silent (inf=0x2d446a0) at ../../binutils-gdb/gdb/inferior.c:234
  #12 0x000000000059f47c in core_target::close (this=0x2d68590) at ../../binutils-gdb/gdb/corelow.c:265
  #13 0x0000000000a7688c in target_close (targ=0x2d68590) at ../../binutils-gdb/gdb/target.c:3293
  #14 0x0000000000a63d74 in target_stack::push (this=0x23e1800 <g_target_stack>, t=0x23c38c8 <the_amd64_linux_nat_target>) at ../../binutils-gdb/gdb/target.c:568
  #15 0x0000000000a63dbf in push_target (t=0x23c38c8 <the_amd64_linux_nat_target>) at ../../binutils-gdb/gdb/target.c:583
  #16 0x0000000000748088 in inf_ptrace_target::create_inferior (this=0x23c38c8 <the_amd64_linux_nat_target>, exec_file=0x2d58d30 "/usr/bin/cat", allargs="", env=0x25f12b0, from_tty=1)
      at ../../binutils-gdb/gdb/inf-ptrace.c:128
  #17 0x0000000000795ccb in linux_nat_target::create_inferior (this=0x23c38c8 <the_amd64_linux_nat_target>, exec_file=0x2d58d30 "/usr/bin/cat", allargs="", env=0x25f12b0, from_tty=1)
      at ../../binutils-gdb/gdb/linux-nat.c:1094
  #18 0x000000000074eae9 in run_command_1 (args=0x0, from_tty=1, run_how=RUN_NORMAL) at ../../binutils-gdb/gdb/infcmd.c:639
  ...

The problem happens because 'tui_locator_window::make_status_line'
needs the value of 'target_shortname' in order to update the status
line.  'target_shortname' is a macro which expands to:

  #define target_shortname (current_top_target ()->shortname ())

and, in our scenario, 'current_top_target ()' returns NULL, which
obviously causes a segfault.  But why does it return NULL, since,
according to its comment on target.h, it should never do that?

What is happening is that we're being caught in the middle of a
"target switch".  We had the 'core_target' on top, because we were
inspecting a corefile, but when the user decided to invoke "run" GDB
had to actually create the inferior, which ends up detecting that we
have a target already, and tries to close it (from target.c):

  /* See target.h.  */

  void
  target_stack::push (target_ops *t)
  {
    /* If there's already a target at this stratum, remove it.  */
    strata stratum = t->stratum ();

    if (m_stack[stratum] != NULL)
      {
target_ops *prev = m_stack[stratum];
m_stack[stratum] = NULL;
target_close (prev); // <-- here
      }
  ...

When the current target ('core_target') is being closed, it checks for
possible observers registered with it and calls them.  TUI is one of
those observers, it gets called, tries to update the status line, and
GDB crashes.

The real problem is that we are clearing 'm_stack[stratum]', but
forgetting to adjust 'm_top'.  Interestingly, this scenario is covered
in 'target_stack::unpush', but Pedro said he forgot to call it here..
The fix, therefore, is to call '::unpush' if there's a target on the
stack.

This patch has been tested on the Buildbot and no regressions have
been found.  I'm also submitting a testcase for it.

gdb/ChangeLog:
2019-11-18  Sergio Durigan Junior  <sergiodj@redhat.com>
    Pedro Alves  <palves@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1765117
* target.c (target_stack::push): Call 'unpush' if there's a
target on top of the stack.

gdb/testsuite/ChangeLog:
2019-11-18  Sergio Durigan Junior  <sergiodj@redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=1765117
* gdb.tui/corefile-run.exp: New file.

Change-Id: I39e2f8b538c580c8ea5bf1d657ee877e47746c8f

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 19 Nov 2019 00:00:21 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years ago[GOLD] OSABI not set when STT_GNU_IFUNC or STB_GNU_UNIQUE symbols output
Alan Modra [Wed, 2 Oct 2019 01:11:01 +0000 (10:41 +0930)] 
[GOLD] OSABI not set when STT_GNU_IFUNC or STB_GNU_UNIQUE symbols output

This patch arranges to have OSABI set to ELFOSABI_GNU (if not set to
some other non-zero value) when gold outputs an ifunc local or global
symbol, or a unique global symbol to either .dynsym or .symtab.
STT_GNU_IFUNC and STB_GNU_UNIQUE have values in the LOOS to HIOS range
and therefore require interpretation according to OSABI.

I'm not sure why parameters->target() is const Target& while
parameters->sized_target() is Sized_target*, but it's inconvenient to
use the latter in Symbol_table::finalize.  So this patch adds another
const_cast complained about in layout.cc and gold.cc.

PR 24853
* symtab.h (set_has_gnu_output, has_gnu_output_): New.
* symtab.cc (Symbol_table::Symbol_table): Init has_gnu_output_.
(Symbol_table::finalize): Set ELFOSABI_GNU when has_gnu_output_.
(Symbol_table::set_dynsym_indexes, Symbol_table::sized_finalize):
Call set_has_gnu_output for STT_GNU_IFUNC and STB_GNU_UNIQUE globals.
* object.cc (Sized_relobj_file::do_finalize_local_symbols): Call
set_has_gnu_output when STT_GNU_IFUNC locals will be output.

4 years agoPR25200, SIGSEGV in _bfd_elf_validate_reloc
Alan Modra [Mon, 18 Nov 2019 20:59:26 +0000 (07:29 +1030)] 
PR25200, SIGSEGV in _bfd_elf_validate_reloc

PR 25200
* reloc.c (bfd_default_reloc_type_lookup): Don't BFD_FAIL.
* elf.c (_bfd_elf_validate_reloc): Don't segfault on NULL howto.

4 years agoFix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions.
Philippe Waroquiers [Sun, 17 Nov 2019 21:48:48 +0000 (22:48 +0100)] 
Fix a bunch of python leaks due to missing calls to tp_free in *_dealloc functions.

valgrind reports leaks in many python tests, such as:
==17162== VALGRIND_GDB_ERROR_BEGIN
==17162== 8,208 (5,472 direct, 2,736 indirect) bytes in 57 blocks are definitely lost in loss record 7,551 of 7,679
==17162==    at 0x4835753: malloc (vg_replace_malloc.c:307)
==17162==    by 0x6EAFD1: _PyObject_New (object.c:279)
==17162==    by 0x4720E6: blpy_iter(_object*) (py-block.c:92)
==17162==    by 0x698772: PyObject_GetIter (abstract.c:2577)
==17162==    by 0x2343BE: _PyEval_EvalFrameDefault (ceval.c:3159)
==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
==17162==    by 0x2340A8: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x2340A8: call_function (ceval.c:4987)
==17162==    by 0x2340A8: _PyEval_EvalFrameDefault (ceval.c:3486)
==17162==    by 0x22E9E2: function_code_fastcall (call.c:283)
==17162==    by 0x82172B: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x82172B: method_vectorcall (classobject.c:67)
==17162==    by 0x6AF474: _PyObject_Vectorcall (abstract.h:127)
==17162==    by 0x6AF474: _PyObject_CallNoArg (abstract.h:153)
==17162==    by 0x6AF474: _PyObject_CallFunctionVa (call.c:914)
==17162==    by 0x6B0673: callmethod (call.c:1010)
==17162==    by 0x6B0673: _PyObject_CallMethod_SizeT (call.c:1103)
==17162==    by 0x477DFE: gdb_PyObject_CallMethod<> (python-internal.h:182)
==17162==    by 0x477DFE: get_py_iter_from_func(_object*, char const*) (py-framefilter.c:272)
==17162==    by 0x4791B4: py_print_args (py-framefilter.c:706)
==17162==    by 0x4791B4: py_print_frame(_object*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, htab*) (py-framefilter.c:960)
==17162==    by 0x47A130: gdbpy_apply_frame_filter(extension_language_defn const*, frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (py-framefilter.c:1236)
==17162==    by 0x369C39: apply_ext_lang_frame_filter(frame_info*, enum_flags<frame_filter_flag>, ext_lang_frame_args, ui_out*, int, int) (extension.c:563)
==17162==    by 0x4EC9C9: backtrace_command_1 (stack.c:2031)
==17162==    by 0x4EC9C9: backtrace_command(char const*, int) (stack.c:2183)
...

Most of the leaks in python tests are due to the fact that many
PyObject xxxxx_dealloc functions are missing the line to free self
or obj such as:
   Py_TYPE (self)->tp_free (self);
or
   Py_TYPE (obj)->tp_free (obj);

With this patch, the number of python tests leaking decreases from 52 to 12.

gdb/ChangeLog

2019-11-18  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

* python/py-block.c (blpy_dealloc): Call tp_free.
(blpy_block_syms_dealloc): Likewise.
* python/py-finishbreakpoint.c (bpfinishpy_dealloc): Likewise.
* python/py-inferior.c (infpy_dealloc): Likewise.
* python/py-lazy-string.c (stpy_dealloc): Likewise.
* python/py-linetable.c (ltpy_iterator_dealloc): Likewise.
* python/py-symbol.c (sympy_dealloc): Likewise.
* python/py-symtab.c (stpy_dealloc): Likewise.
* python/py-type.c (typy_iterator_dealloc): Likewise.

4 years agoDon't use class-initialization for the owner union
Christian Biesinger [Mon, 18 Nov 2019 01:13:49 +0000 (19:13 -0600)] 
Don't use class-initialization for the owner union

As reported by PhilippeW, valgrind reports that symtab is uninitialized
when compiling with GCC 4.8.5, which is the default compiler on CentOS 7.

This is apparently a compiler bug fixed in later versions, but to keep
CentOS 7 working, this patch initializes the union explicitly instead of
using a class initializer.

gdb/ChangeLog:

2019-11-18  Christian Biesinger  <cbiesinger@google.com>

* symtab.h (struct symbol) <owner>: Initialize explicitly in the
constructor instead of using a class initializer.

Change-Id: I94f48afeae5d29cf81a280295e2d02e2d7e1c1f1

4 years agoelf_backend_init_file_header
Alan Modra [Mon, 18 Nov 2019 06:39:40 +0000 (17:09 +1030)] 
elf_backend_init_file_header

This patch renames elf_backend_post_process_headers and moves the
prep_headers code into the new function.  Naming the backend functions
elf_backend_init_file_header and elf_backend_modify_headers makes it
clear which function is called first.

* elf-bfd.h (struct elf_backend_data <elf_backend_init_file_header>):
Rename from elf_backend_post_process_headers.
(_bfd_elf_post_process_headers): Delete.
(_bfd_elf_init_file_header): Declare.
* elf.c (_bfd_elf_compute_section_file_positions): Call new function
in place of prep_headers and elf_backend_post_process_headers.
(_bfd_elf_init_file_header): Renamed from prep_headers with
updated args and made global.  Delete dead code.
(_bfd_elf_post_process_headers): Delete.
* elf32-arm.c (elf32_arm_init_file_header): Rename from
elf32_arm_post_process_headers and call _bfd_elf_init_file_header.
Return status.
(elf_backend_init_file_header): Define.
(elf_backend_post_process_headers): Don't define.
* elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly.
* elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly.
* elf32-metag.c (elf_metag_init_file_header): Similarly.
* elf32-spu.c (spu_elf_init_file_header
* elf32-visium.c (visium_elf_init_file_header
* elf64-alpha.c (elf64_alpha_fbsd_init_file_header
* elf64-hppa.c (elf64_hppa_init_file_header
* elf64-ia64-vms.c (elf64_vms_init_file_header
* elfnn-aarch64.c (elfNN_aarch64_init_file_header
* elfnn-ia64.c (elfNN_hpux_init_file_header
* elfxx-mips.c (_bfd_mips_init_file_header
* elfxx-mips.h (_bfd_mips_post_process_headers): Delete.
(_bfd_mips_init_file_header): Declare.
(elf_backend_post_process_headers): Delete.
(elf_backend_init_file_header): Define.
* elfxx-target.h (elf_backend_post_process_headers): Delete.
(elf_backend_init_file_header): Define and use.
* elf32-m68hc12.c (elf_backend_init_file_header): Define.
(elf_backend_post_process_headers): Don't define.
* elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete.
(elf32_m68hc11_init_file_header): Declare.
* elf32-ppc.c (elf_backend_post_process_headers): Remove
unnecessary undef.

4 years agoelf_backend_modify_headers
Alan Modra [Mon, 18 Nov 2019 06:39:01 +0000 (17:09 +1030)] 
elf_backend_modify_headers

This patch renames elf_backend_modify_program_headers and moves the
elf.c code tweaking the ELF file header for -pie -Ttext-segment to a
new function, _bfd_elf_modify_headers, which then becomes the default
elf_backed_modify_headers and is called from any other target
elf_backed_modify_headers.

* elf-bfd.h (struct elf_backend_data <elf_backend_modify_headers>):
Rename from elf_backend_modify_program_headers.
(_bfd_elf_modify_headers): Declare.
* elf.c (assign_file_positions_except_relocs): Set
elf_program_header_size.  Always call elf_backend_modify_headers.
Extract code modifying file header..
(_bfd_elf_modify_headers): ..to here.  New function.
* elf32-arm.c (elf_backend_modify_headers): Renamed from
elf_backend_modify_program_headers.
* elf32-i386.c: Similarly.
* elf64-x86-64.c: Similarly.
* elfxx-target.h: Similarly.  Default elf_backend_modify_headers
to _bfd_elf_modify_headers.
* elf-nacl.h (nacl_modify_headers): Rename from
nacl_modify_program_headers.
* elf-nacl.c (nacl_modify_headers): Rename from
nacl_modify_program_headers and call _bfd_elf_modify_headers.
* elf32-rx.c (elf32_rx_modify_headers): Similarly.
* elf32-spu.c (spu_elf_modify_headers): Similarly.
* elfnn-ia64.c (elfNN_ia64_modify_headers): Similarly.
* elf32-sh.c (elf_backend_modify_program_headers): Don't undef.

4 years agoPR25196, abort in rewrite_elf_program_header
Alan Modra [Mon, 18 Nov 2019 02:01:55 +0000 (12:31 +1030)] 
PR25196, abort in rewrite_elf_program_header

This patch introduces a new "sorry, cannot handle this file" bfd error
status.  The idea is to use this error in cases where bfd hasn't found
a bfd_bad_value error, ie. an input file or set of options that are
invalid, but rather an input file that is simply too difficult to
process.  Typically this might happen with fuzzed object files such as
the one in the PR, a wildly improbable core file.  Some things are
just not worth wasting time over to fix "properly".

PR 25196
* bfd.c (bfd_error_type): Add bfd_error_sorry.
(bfd_errmsgs): Likewise.
* elf.c (rewrite_elf_program_header): Don't abort on confused
lma/alignment.  Replace bfd_error_bad_value with bfd_error_sorry.
(_bfd_elf_validate_reloc): Use bfd_error_sorry.
(_bfd_elf_final_write_processing): Likewise.
* bfd-in2.h: Regenerate.

4 years agogas: Add --gdwarf-cie-version command line flag
Andrew Burgess [Mon, 4 Nov 2019 12:27:45 +0000 (12:27 +0000)] 
gas: Add --gdwarf-cie-version command line flag

Add a flag to control the version of CIE that is generated.  By
default gas produces CIE version 1, and this continues to be the
default after this patch.

However, a user can now provide --gdwarf-cie-version=NUMBER to switch
to either version 3 or version 4 of CIE, version 2 was never released,
and so causes an error as does any number less than 1 or greater than
4.

Producing version 4 CIE requires two new fields to be added to the
CIE, an address size field, and an segment selector field.  For a flat
address space the DWARF specification indicates that the segment
selector should be 0, and the address size fields just contains the
address size in bytes.  For now we support 4 or 8 byte addresses, and
the segment selector is always produced as 0.  At some future time we
might need to allow targets to override this.

gas/ChangeLog:

* as.c (parse_args): Parse --gdwarf-cie-version option.
(flag_dwarf_cie_version): New variable.
* as.h (flag_dwarf_cie_version): Declare.
* dw2gencfi.c (output_cie): Switch from DW_CIE_VERSION to
flag_dwarf_cie_version.
* doc/as.texi (Overview): Document --gdwarf-cie-version.
* NEWS: Likewise.
* testsuite/gas/cfi/cfi.exp: Add new tests.
* testsuite/gas/cfi/cie-version-0.d: New file.
* testsuite/gas/cfi/cie-version-1.d: New file.
* testsuite/gas/cfi/cie-version-2.d: New file.
* testsuite/gas/cfi/cie-version-3.d: New file.
* testsuite/gas/cfi/cie-version-4.d: New file.
* testsuite/gas/cfi/cie-version.s: New file.

include/ChangeLog:

* dwarf2.h (DW_CIE_VERSION): Delete.

Change-Id: I9de19461aeb8332b5a57bbfe802953d0725a7ae8

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 18 Nov 2019 00:00:27 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoPR25198, use of out of date pointer
Alan Modra [Sun, 17 Nov 2019 22:46:19 +0000 (09:16 +1030)] 
PR25198, use of out of date pointer

PR 25198
* prdbg.c (tg_start_class_type): Correct scope of idbuf.

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 17 Nov 2019 00:01:15 +0000 (00:01 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 16 Nov 2019 00:00:17 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoUse gnulib's strerror_r on MinGW
Christian Biesinger [Wed, 13 Nov 2019 03:55:15 +0000 (21:55 -0600)] 
Use gnulib's strerror_r on MinGW

There is no need to keep mingw-strerror around; we can just always use
the code from posix-strerror. The main reason we had that code, it
seems, is to handle winsock error codes, but gnulib's version
handles those.

Unfortunately the code can't be moved into common-utils.c because
libinproctrace.so uses common-utils but not gnulib.

gdb/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* Makefile.in: Replace {posix,mingw}-strerror.c with safe-strerror.c.
* configure: Regenerate.
* configure.ac: Don't source common.host.
* gdbsupport/common.host: Remove.
* gdbsupport/mingw-strerror.c: Remove.
* gdbsupport/posix-strerror.c: Rename to...
* gdbsupport/safe-strerror.c: ...this.

gdb/gdbserver/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* Makefile.in: Add safe-strerror.c.
* configure: Regenerate.
* configure.ac: Don't source common.host.

Change-Id: I9e6d8a752fc398784201f370cafee65e0ea05474

4 years agoAdd no-dist to gnulib configure
Tom Tromey [Fri, 15 Nov 2019 20:48:27 +0000 (13:48 -0700)] 
Add no-dist to gnulib configure

This adds the no-dist option to the gnulib configure script.  gdb
doesn't use "make dist", so there's no need for this.  Adding this
option makes the Makefiles less verbose.

gnulib/ChangeLog
2019-11-15  Tom Tromey  <tromey@adacore.com>

* aclocal.m4, configure, Makefile.in, import/Makefile.in:
Rebuild.
* configure.ac: Remove obsolete comment.  Add no-dist.

Change-Id: I5224e18af9acd5284acb79d5756b0e84b00406e9

4 years agoMinor updates to readline configury
Tom Tromey [Fri, 15 Nov 2019 20:40:53 +0000 (13:40 -0700)] 
Minor updates to readline configury

Christian's recent patches to gnulib made me realize that readline
should be changed to use AC_CONFIG_MACRO_DIRS (ACLOCAL_AMFLAGS is
deprecated) and that it can put the automake options into
configure.ac.  I also added no-define to the automake options.  This
doesn't matter much (we don't generate a config.h here), but gnulib
does it, and it does make configure slightly smaller.

readline/ChangeLog
2019-11-15  Tom Tromey  <tromey@adacore.com>

* configure, Makefile.in: Rebuild.
* configure.ac: Use AC_CONFIG_MACRO_DIRS.  Pass options to
AM_INIT_AUTOMAKE.
* Makefile.am (AUTOMAKE_OPTIONS, ACLOCAL_AMFLAGS): Remove.

Change-Id: If421599cc9dd9c4c3c37b9b439ab2c22c01742ed

4 years agoUse ctime_r and localtime_r for threadsafety
Christian Biesinger [Thu, 31 Oct 2019 21:02:41 +0000 (16:02 -0500)] 
Use ctime_r and localtime_r for threadsafety

To make these calls threadsafe. localtime_r is provided by gnulib if
necessary, and for ctime_r we can just use it because it is in a linux-
specific file.

gdb/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* maint.c (scoped_command_stats::print_time): Use localtime_r
instead of localtime (provided through gnulib if necessary).
* nat/linux-osdata.c (time_from_time_t): Use ctime_r instead
of ctime.

Change-Id: I329bbdc39d5b576f51859ba00f1617e024c30cbd

4 years agoImport the time_r gnulib module
Christian Biesinger [Fri, 8 Nov 2019 17:25:17 +0000 (11:25 -0600)] 
Import the time_r gnulib module

This allows GDB to use localtime_r unconditionally.

See https://lists.gnu.org/archive/html/bug-gnulib/2019-11/msg00022.html
for details on the compile error mentioned below.

gdb/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* gdbsupport/common-defs.h: Include time.h before pathmax.h to
avoid compile errors.

gnulib/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* config.in: Regenerate.
* configure: Regenerate.
* import/Makefile.am: Update.
* import/Makefile.in: Regenerate.
* import/m4/gnulib-cache.m4: Update.
* import/m4/gnulib-comp.m4: Update.
* import/m4/time_r.m4: New file.
* import/time_r.c: New file.
* update-gnulib.sh: Import time_r.

Change-Id: I53fc861b192940d613ca97f2910b4533c730f667

4 years agoImport the strerror_r-posix module and use it in GDB.
Christian Biesinger [Wed, 6 Nov 2019 18:49:52 +0000 (12:49 -0600)] 
Import the strerror_r-posix module and use it in GDB.

Makes sure to assign the return value of strerror_r to an int,
so that we get a compile error if we accidentally get the
wrong version.

gdb/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* config.in: Regenerate.
* configure: Regenerate.
* gdbsupport/common.m4: No longer check for strerror_r.
* gdbsupport/posix-strerror.c (safe_strerror): Always call the
POSIX version of strerror_r, now that gnulib provides it if
necessary.

gdb/gdbserver/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

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

gnulib/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* config.in: Regenerate.
* configure: Regenerate.
* import/Makefile.am: Update.
* import/Makefile.in: Regenerate.
* import/extra/config.rpath: New file.
* import/glthread/lock.c: New file.
* import/glthread/lock.h: New file.
* import/glthread/threadlib.c: New file.
* import/m4/gnulib-cache.m4: Update.
* import/m4/gnulib-comp.m4: Update.
* import/m4/lib-ld.m4: New file.
* import/m4/lib-link.m4: New file.
* import/m4/lib-prefix.m4: New file.
* import/m4/lock.m4: New file.
* import/m4/strerror_r.m4: New file.
* import/m4/threadlib.m4: New file.
* import/strerror_r.c: New file.
* update-gnulib.sh: Import strerror_r-posix.

Change-Id: I5cfeb12a5203a4cd94a78581541e6085a68685c3

4 years agoGenerate gnulib's toplevel Makefile.in using automake
Christian Biesinger [Fri, 15 Nov 2019 00:17:59 +0000 (16:17 -0800)] 
Generate gnulib's toplevel Makefile.in using automake

This is a lot simpler and as a side-effect this will correctly
regenerate import/Makefile and config.h during rebuilds if
necessary.

gnulib/ChangeLog:

2019-11-15  Christian Biesinger  <cbiesinger@google.com>

* Makefile.am: New file.
* Makefile.in: Replace with generated file.
* aclocal-m4-deps.mk: Remove.
* configure.ac: Use the foreign option for automake and specify
the aclocal search path here.
* update-gnulib.sh: Don't generate aclocal-m4-deps.mk anymore.
Also don't specify the aclocal include path here, now that it
is in configure.ac.

Change-Id: I6a2c4d41cf4f0e21d5c813197bad63ed5c08e408

4 years agoRevert previous delta.
Nick Clifton [Fri, 15 Nov 2019 11:52:50 +0000 (11:52 +0000)] 
Revert previous delta.

PR 2587
* Makefile.am: Revert change from 2019-11-13.
* Makefile.in: Regenerate.

4 years agoUpdate README
Christian Biesinger [Mon, 11 Nov 2019 18:39:31 +0000 (10:39 -0800)] 
Update README

Adds descriptions for some recent-ish configure options to README.

Also updates the minimum Python version per commit
6c28e44a359e9f6cf455ddff0009ca99406f7224.

2019-11-14  Christian Biesinger  <cbiesinger@google.com>

* README (`configure' options): Update.

Change-Id: I8ce8ca6935afbd130295e143802c585cf1e735f9

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 15 Nov 2019 00:00:24 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAllow re-assigning to convenience variables
Tom Tromey [Tue, 5 Nov 2019 17:12:27 +0000 (10:12 -0700)] 
Allow re-assigning to convenience variables

A customer reported somewhat odd gdb behavior, where re-assigning an
array or string to a convenience variable would yield "Too many array
elements".  A test case is:

    (gdb) p $x = "x"
    (gdb) p $x = "xyz"

This patch fixes the problem by making a special case in the evaluator
for assignment to convenience variables, which seems like the correct
behavior.

Note that a previous patch implemented this for Ada, see commit
f411722cb ("Allow re-assigning to convenience variables").

gdb/ChangeLog
2019-11-14  Tom Tromey  <tromey@adacore.com>

* eval.c (evaluate_subexp_standard) <BINOP_ASSIGN>: Do not pass an
expected type for the RHS if the LHS is a convenience variable.

gdb/testsuite/ChangeLog
2019-11-14  Tom Tromey  <tromey@adacore.com>

* gdb.base/gdbvars.exp (test_convenience_variables): Add
regression tests.

Change-Id: I5e66a2d243931a5c43c7af4bc9f6717464c2477e

4 years ago[gdb/doc] Fix typos
Tom de Vries [Thu, 14 Nov 2019 13:43:11 +0000 (14:43 +0100)] 
[gdb/doc] Fix typos

Fix typos in gdb docs.

gdb/doc/ChangeLog:

2019-11-14  Tom de Vries  <tdevries@suse.de>

* gdb.texinfo: Fix typos.
* python.texi: Same.
* stabs.texinfo: Same.

Change-Id: I044d6788eeea48e4a9b73ee752e5aaf333e56a46

4 years agoAnother attempt at fixing building gprof with gmake.
Nick Clifton [Thu, 14 Nov 2019 12:11:43 +0000 (12:11 +0000)] 
Another attempt at fixing building gprof with gmake.

PR 2587
* Makefile.am (SUFFIXES): Add .c.
* Makefile.in: Regenerate.

4 years agogdb: fix build error in unittests/vec-utils-selftests.c
Simon Marchi [Thu, 14 Nov 2019 11:50:20 +0000 (06:50 -0500)] 
gdb: fix build error in unittests/vec-utils-selftests.c

When building with gcc 9.2.0, I get the following build error:

    In file included from /home/simark/src/binutils-gdb/gdb/unittests/vec-utils-selftests.c:23:
    /home/simark/src/binutils-gdb/gdb/gdbsupport/gdb_vecs.h: In instantiation of â€˜T unordered_remove(std::__debug::vector<T>&, typename std::__debug::vector<T>::iterator) [with T = selftests::vector_utils_tests::unordered_remove_tests()::obj; typename std::__debug::vector<T>::iterator = __gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<selftests::vector_utils_tests::unordered_remove_tests()::obj*, std::__cxx1998::vector<selftests::vector_utils_tests::unordered_remove_tests()::obj, std::allocator<selftests::vector_utils_tests::unordered_remove_tests()::obj> > >, std::__debug::vector<selftests::vector_utils_tests::unordered_remove_tests()::obj>, std::random_access_iterator_tag>]’:
    /home/simark/src/binutils-gdb/gdb/unittests/vec-utils-selftests.c:53:26:   required from here
    /home/simark/src/binutils-gdb/gdb/gdbsupport/gdb_vecs.h:53:5: error: implicitly-declared â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj::obj(const selftests::vector_utils_tests::unordered_remove_tests()::obj&)’ is deprecated [-Werror=deprecated-copy]
       53 |   T removed = std::move (*it);
          |     ^~~~~~~
    /home/simark/src/binutils-gdb/gdb/unittests/vec-utils-selftests.c:41:10: note: because â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj’ has user-provided â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj& selftests::vector_utils_tests::unordered_remove_tests()::obj::operator=(const selftests::vector_utils_tests::unordered_remove_tests()::obj&)’
       41 |     obj &operator= (const obj &other)
          |          ^~~~~~~~
    In file included from /home/simark/src/binutils-gdb/gdb/unittests/vec-utils-selftests.c:23:
    /home/simark/src/binutils-gdb/gdb/gdbsupport/gdb_vecs.h:58:10: error: implicitly-declared â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj::obj(const selftests::vector_utils_tests::unordered_remove_tests()::obj&)’ is deprecated [-Werror=deprecated-copy]
       58 |   return removed;
          |          ^~~~~~~
    /home/simark/src/binutils-gdb/gdb/unittests/vec-utils-selftests.c:41:10: note: because â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj’ has user-provided â€˜selftests::vector_utils_tests::unordered_remove_tests()::obj& selftests::vector_utils_tests::unordered_remove_tests()::obj::operator=(const selftests::vector_utils_tests::unordered_remove_tests()::obj&)’
       41 |     obj &operator= (const obj &other)
          |          ^~~~~~~~

I think gcc is just trying to be nice and recommends the good practice
of providing a copy constructor if an assignment operator is provided.

Silence the warning by providing that copy constructor.

gdb/ChangeLog:

* unittests/vec-utils-selftests.c (unordered_remove_tests::obj):
Provide explicit default and copy constructor.

Change-Id: I323361b1c120bf8525613b74e7e5983910e002df

4 years agox86: drop redundant SYSCALL/SYSRET templates
Jan Beulich [Thu, 14 Nov 2019 07:48:22 +0000 (08:48 +0100)] 
x86: drop redundant SYSCALL/SYSRET templates

The Cpu64 forms are no different in their attributes except for the CPU
flags; there's no need to key these off of anything other than
CpuSYSCALL even for the 64-bit forms. Dropping these improves the
diagnostic on SYSRETQ used in 32-bit code from "unsupported instruction
`sysret'" to "invalid instruction suffix for `sysret'".

4 years agox86: fold individual Jump* attributes into a single Jump one
Jan Beulich [Thu, 14 Nov 2019 07:47:44 +0000 (08:47 +0100)] 
x86: fold individual Jump* attributes into a single Jump one

..., taking just 3 bits instead of 5. No two of them are used together.

4 years agox86: make JumpAbsolute an insn attribute
Jan Beulich [Thu, 14 Nov 2019 07:47:03 +0000 (08:47 +0100)] 
x86: make JumpAbsolute an insn attribute

... instead of an operand one: There's only ever one operand here
anyway.

4 years agox86: make AnySize an insn attribute
Jan Beulich [Thu, 14 Nov 2019 07:46:19 +0000 (08:46 +0100)] 
x86: make AnySize an insn attribute

... instead of an operand one. Which operand it applies to can be
determined from other operand properties, but as it turns out the only
place it is actually used at doesn't even need further qualification.

4 years agox86/Intel: correct CMPSD test cases' regexp closing paren placement
Jan Beulich [Thu, 14 Nov 2019 07:45:26 +0000 (08:45 +0100)] 
x86/Intel: correct CMPSD test cases' regexp closing paren placement

The CMPS test case derivation from their MOVS counterparts I did in
d241b91073 ("x86/Intel: correct MOVSD and CMPSD handling") ended up
with misplaced closing parentheses in som regexps. Correct this.

4 years agox86/Intel: extend MOVSD/CMPSD testsuite coverage
Jan Beulich [Thu, 14 Nov 2019 07:44:57 +0000 (08:44 +0100)] 
x86/Intel: extend MOVSD/CMPSD testsuite coverage

This is still in the context of PR/gas 25167.

4 years agoFix python gdbpy_breakpoint_object leak.
Philippe Waroquiers [Tue, 12 Nov 2019 19:33:29 +0000 (20:33 +0100)] 
Fix python gdbpy_breakpoint_object leak.

valgrind reports a leak when a breakpoint is created then deleted:

==1313== 40 bytes in 1 blocks are definitely lost in loss record 1,115 of 8,596
==1313==    at 0x4835753: malloc (vg_replace_malloc.c:307)
==1313==    by 0x6E05BC: _PyObject_New (object.c:255)
==1313==    by 0x470E4B: gdbpy_breakpoint_created(breakpoint*) (py-breakpoint.c:1023)
==1313==    by 0x2946D9: operator() (std_function.h:687)
==1313==    by 0x2946D9: notify (observable.h:106)
==1313==    by 0x2946D9: install_breakpoint(int, std::unique_ptr<breakpoint, std::default_delete<breakpoint> >&&, int) (breakpoint.c:8136)
==1313==    by 0x295BCA: create_breakpoint_sal (breakpoint.c:8878)
==1313==    by 0x295BCA: create_breakpoints_sal (breakpoint.c:8919)
==1313==    by 0x295BCA: create_breakpoints_sal_default (breakpoint.c:13671)
...

The leak is due to a superfluous Py_INCREF when the python object
is allocated inside gdbpy_breakpoint_created, when the python object
is allocated locally: this object has already a refcount of 1, and
the only reference is the reference from the C breakpoint object.
The Py_INCREF is however needed when the python object was created from
python: the python object was stored in bppy_pending_object, and
gdbpy_breakpoint_created creates a new reference to this object.

Solve the leak by calling 'Py_INCREF (newbp);' only in the bppy_pending_object
case.

Regression tested on debian/amd64 natively and under valgrind on centos/amd64.
Before the patch, 795 tests have a definite leak.
After the patch, 197 have a definite leak.

Thanks to Tom, that helped on irc with the python refcount logic.

gdb/ChangeLog
2019-11-14  Philippe Waroquiers  <philippe.waroquiers@skynet.be>

* python/py-finishbreakpoint.c (gdbpy_breakpoint_created):
only call Py_INCREF (newbp) in the bppy_pending_object case.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 14 Nov 2019 00:00:21 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoRemove symbol-related static asserts
Tom Tromey [Mon, 11 Nov 2019 14:43:13 +0000 (07:43 -0700)] 
Remove symbol-related static asserts

commit 3573abe1d added static asserts to ensure that symbol sizes
don't vary.  However, this failed to build on Windows, on at least one
ARM platform (see PR build/25182) and internally at AdaCore for PPC.

So, I think it is probably best to just remove these assertions,
effectively reverting 3573abe1d.

gdb/ChangeLog
2019-11-13  Tom Tromey  <tromey@adacore.com>

PR build/25182:
* psympriv.h (partial_symbol): Remove static assert.
* symtab.h (general_symbol_info, symbol): Remove static assert.

Change-Id: I51940fb2240c474838b48494b5072081701789bb

4 years agoFix the rule for building C files in the gprof makefile.
Nick Clifton [Wed, 13 Nov 2019 11:21:39 +0000 (11:21 +0000)] 
Fix the rule for building C files in the gprof makefile.

PR 2587
* Makefile.am: Fix rule to build .c files from .m files.

4 years agognulib: Fix path to import/Makefile{,.in}
Christian Biesinger [Wed, 13 Nov 2019 02:11:37 +0000 (20:11 -0600)] 
gnulib: Fix path to import/Makefile{,.in}

I don't know why this path is what it is but it is clearly wrong.

gnulib/ChangeLog:

2019-11-12  Christian Biesinger  <cbiesinger@google.com>

* Makefile.in: Fix path to say import/ instead of gnulib/.

Change-Id: Ib7f6a319ee764d20072e38911766ca7032d6ca8e

4 years agoRISC-V: Support the INSN_CLASS.*F.* classes for .insn directive.
Jim Wilson [Wed, 13 Nov 2019 00:13:00 +0000 (16:13 -0800)] 
RISC-V: Support the INSN_CLASS.*F.* classes for .insn directive.

We have to enable the f extension through -march or ELF attribute if we use the
FPR in .insn directive.  The behavior is same as the riscv_opcodes.

2019-11-12  Nelson Chu  <nelson.chu@sifive.com>
opcodes/
* riscv-opc.c (riscv_insn_types): Replace the INSN_CLASS_I with
INSN_CLASS_F and the INSN_CLASS_C with INSN_CLASS_F_AND_C if we
use the floating point register (FPR).

gas/
* testsuite/gas/riscv/insn.d: Add the f extension to -march option.

Change-Id: I4f59d04c82673ef84c56ecd2659ad8ce164dd626

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 13 Nov 2019 00:00:20 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoRISC-V: Fix ld relax failure with calls and align directives.
Jim Wilson [Tue, 12 Nov 2019 23:50:48 +0000 (15:50 -0800)] 
RISC-V: Fix ld relax failure with calls and align directives.

Make _bfd_riscv_relax_call handle section alignment padding same as
the _bfd_riscv_relax_lui and _bfd_riscv_relax_pc functions already
do.  Use the max section alignment if section boundaries are crossed,
otherwise the alignment of the containing section.

bfd/
PR 25181
* elfnn-riscv.c (_bfd_riscv_relax_call): Always add max_alignment to
foff.  If sym_sec->output_section and sec->output_section are the same
and not *ABS* then set max_alignment to that section's alignment.

ld/
PR 25181
* testsuite/ld-riscv-elf/call-relax-0.s: New file.
* testsuite/ld-riscv-elf/call-relax-1.s: New file.
* testsuite/ld-riscv-elf/call-relax-2.s: New file.
* testsuite/ld-riscv-elf/call-relax-3.s: New file.
* testsuite/ld-riscv-elf/call-relax.d: New test.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Run call-relax test.

Change-Id: Iaf65cee52345abf1955f36e8e72c4f6cc0db8d9a

4 years agogdb: Support printf 'z' size modifier
Andrew Burgess [Tue, 5 Nov 2019 14:24:17 +0000 (14:24 +0000)] 
gdb: Support printf 'z' size modifier

The gdb format mechanism doesn't currently support the 'z' size
modifier, there are a few places in GDB where this is used.  Instead
of removing these uses lets just add support to GDB for using 'z'.

I found this issue when trying to use some of the debug output.
Before this commit:

  (gdb) set debug dwarf-line 9
  (gdb) file test
  Reading symbols from test...
  Unrecognized format specifier 'z' in printf
  (No debugging symbols found in test)
  (gdb)

After this commit:

  (gdb) set debug dwarf-line 9
  (gdb) file test
  Reading symbols from test...
  Adding dir 1: /usr/include
  Adding file 1: test.c
  Adding file 2: stdc-predef.h
  Processing actual line 3: file 1, address 0x4004a0, is_stmt 1, discrim 0
  Processing actual line 4: file 1, address 0x4004a0, is_stmt 1, discrim 0
  .... lots of debug output ...
  Processing actual line 10: file 1, address 0x4003b7, is_stmt 0, discrim 0
  (gdb)

I've added a self test to cover the integer format size modifiers,
including the 'z' modifier.

gdb/ChangeLog:

* gdbsupport/format.c (format_pieces::format_pieces): Support
printf 'z' size modifier.
* gdbsupport/format.h (enum argclass): Add size_t_arg.
* printcmd.c (ui_printf):  Handle size_t_arg.
* ui-out.c (ui_out::vmessage): Likewise.
* unittests/format_pieces-selftests.c (test_format_int_sizes): New
function.
(run_tests): Call test_format_int_sizes.

gdb/gdbserver/ChangeLog:

* ax.c (ax_printf): Handle size_t_arg.

Change-Id: Ib6c44d88aa5bce265d757e4c0698881803dd186f

4 years agoMake struct symbol inherit from general_symbol_info
Christian Biesinger [Mon, 4 Nov 2019 19:12:09 +0000 (13:12 -0600)] 
Make struct symbol inherit from general_symbol_info

Since this is now no longer a POD, also give it a constructor that
initializes all fields. (I have considered overloading operator new
to zero-initialize the memory instead; let me know if you prefer that)

gdb/ChangeLog:

2019-11-12  Christian Biesinger  <cbiesinger@google.com>

* ada-exp.y (write_ambiguous_var): Update.
* buildsym.c (add_symbol_to_list): Update.
* dwarf2read.c (read_variable): Update.
(new_symbol): Update.
* jit.c (finalize_symtab): Update.
* language.c (language_alloc_type_symbol): Update.
* symtab.c (fixup_symbol_section): Update.
(initialize_objfile_symbol_1): Move code to...
(initialize_objfile_symbol): ...here. Remove now-unnecessary memset.
(allocate_symbol): Update.
(allocate_template_symbol): Update.
(get_symbol_address): Update.
* symtab.h (struct symbol): Inherit from general_symbol_info instead
of having as a field, and add a constructor.
(SYMBOL_VALUE): Update.
(SYMBOL_VALUE_ADDRESS): Update.
(SET_SYMBOL_VALUE_ADDRESS): Update.
(SYMBOL_VALUE_BYTES): Update.
(SYMBOL_VALUE_COMMON_BLOCK): Update.
(SYMBOL_BLOCK_VALUE): Update.
(SYMBOL_VALUE_CHAIN): Update.
(SYMBOL_LANGUAGE): Update.
(SYMBOL_SECTION): Update.
(SYMBOL_OBJ_SECTION): Update.
(SYMBOL_SET_LANGUAGE): Update.
(SYMBOL_SET_LINKAGE_NAME): Update.
(SYMBOL_SET_NAMES): Update.
(SYMBOL_NATURAL_NAME): Update.
(SYMBOL_LINKAGE_NAME): Update.
(SYMBOL_DEMANGLED_NAME): Update.
(SYMBOL_SEARCH_NAME): Update.
(SYMBOL_MATCHES_SEARCH_NAME): Update.
(struct symbol): Update.
(struct template_symbol): Update.
(struct rust_vtable_symbol): Update.
* xcoffread.c (SYMBOL_DUP): Update.

Change-Id: I05b1628455bcce3efaa101e65ef051708d17eb07

4 years agoConsolidate setting of current_layout
Tom Tromey [Wed, 9 Oct 2019 02:06:09 +0000 (20:06 -0600)] 
Consolidate setting of current_layout

Currently several functions in tui-layout.c set current_layout after
their work is done.  This moves this assignment to show_layout,
instead.

gdb/ChangeLog
2019-11-12  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.c (show_layout): Set current_layout.
(show_source_disasm_command, show_data)
(show_source_or_disasm_and_command): Don't set current_layout.

Change-Id: Id8b23797d68e607f0fcd6d29b8801869d40d1869

4 years agoMove _initialize_tui_layout to end of file
Tom Tromey [Tue, 8 Oct 2019 21:44:18 +0000 (15:44 -0600)] 
Move _initialize_tui_layout to end of file

This moves _initialize_tui_layout to the end of the file, conforming
to the typical gdb style.

gdb/ChangeLog
2019-11-12  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.c (_initialize_tui_layout): Move to end.

Change-Id: I667f741b44b2bc470878a36f093a96d89fa31893

4 years agoMake TUI resizing tests more robust
Tom Tromey [Fri, 16 Aug 2019 21:16:12 +0000 (15:16 -0600)] 
Make TUI resizing tests more robust

As Sergio pointed out, the TUI resizing tests are flaky.  Debugging
this showed three main problems.

1. expect's "stty" command processes its arguments one-by-one.  So,
rather than requesting a single resize, it sends two separate resize
requests (one for rows and one for columns).  This means gdb sees two
SIGWINCH signals and resizes the terminal twice.

I consider this a bug in expect, but I couldn't readily see how to
report a bug; and anyway the fix wouldn't propagate very quickly.

This patch works around this problem by explicitly doing two separate
resizes (so it will be robust if expect ever does change); and then by
waiting for each resize to complete before continuing.

2. gdb uses curses to drive the console rendering.  Currently the test
suite looks for terminal text insertion sequences to decide when a
command has completed.  However, it turns out that, sometimes, curses
can output things in non-obvious ways.  I didn't debug into curses but
I guess this can happen due to output optimizations.  No matter the
reason, sometimes the current approach of only tracking text
insertions is not enough to detect that gdb has finished rendering.

This patch fixes this problem by arranging to detect the termination
output after any curses command, not just insertion.

3. Detecting when a resize has completed is tricky.  In fact, I could
not find a way to reliably do this.

This patch fixes this problem by adding a special maint
"tui-resize-message" setting to gdb.  When this is enabled, gdb will
print a message after each SIGWINCH has been fully processed.  The
test suite enables this mode and then waits for the message in order
to know when control can be returned to the calling test.

This patch also adds a timeout, to avoid the situation where the
terminal code fails to notice a change for some reason.  This lets the
test at least try to continue.

gdb/ChangeLog
2019-11-12  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (resize_message): New global.
(show_tui_resize_message): New function.
(tui_async_resize_screen): Print message if requested.
(_initialize_tui_win): Add tui-resize-message setting.
* NEWS: Add entry for new commands.

gdb/doc/ChangeLog
2019-11-12  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (Maintenance Commands): Document new command.

gdb/testsuite/ChangeLog
2019-11-12  Tom Tromey  <tom@tromey.com>

* lib/tuiterm.exp (_accept): Add wait_for parameter.  Check output
after any command.  Expect prompt after WAIT_FOR is seen.
(enter_tui): Enable resize messages.
(command): Expect command in output.
(get_line): Avoid error when cursor appears to be off-screen.
(dump_screen): Include screen size in title.
(_do_resize): New proc, from "resize".
(resize): Rewrite.  Do resize in two steps.
* gdb.tui/empty.exp (layouts): Fix entries.
(check_boxes): Remove xfail.
(check_text): Dump screen on failure.

Change-Id: I420e0259cb99b21adcd28f671b99161eefa7a51d

4 years ago[gas][arm] Enable VLDM, VSTM, VPUSH, VPOP for MVE
Mihail Ionescu [Tue, 12 Nov 2019 13:57:20 +0000 (13:57 +0000)] 
[gas][arm] Enable VLDM, VSTM, VPUSH, VPOP for MVE

This patch enables a few instructions for Armv8.1-M MVE. Currently VLDM,
VSTM, VSTR, VLDR, VPUSH and VPOP are enabled only when the Armv8-M
Floating-point Extension is enabled.  According to the ARMv8.1-M ARM,
section A.1.4.2[1], they can be enabled by having "Armv8-M Floating-point
Extension and/or Armv8.1-M MVE".

[1]https://developer.arm.com/docs/ddi0553/bh/armv81-m-architecture-reference-manual

2019-11-12  Mihail Ionescu  <mihail.ionescu@arm.com>

* config/tc-arm.c (do_vfp_nsyn_push): Move in order to enable it for
both fpu_vfp_ext_v1xd and mve_ext and add call to the aliased vstm
instruction for mve_ext.
(do_vfp_nsyn_pop): Move in order to enable it for both
fpu_vfp_ext_v1xd and mve_ext and add call to the aliased vldm
instruction for mve_ext.
(do_neon_ldm_stm): Add fpu_vfp_ext_v1 and mve_ext checks.
(insns): Enable vldm, vldmia, vldmdb, vstm, vstmia, vstmdb, vpop,
vpush, and fldd, fstd, flds, fsts for arm_ext_v6t2 instead
of fpu_vfp_ext_v1xd.
* testsuite/gas/arm/v8_1m-mve.s: New.
* testsuite/gas/arm/v8_1m-mve.d: New.

4 years ago[binutils][arm] Update the decoding of MVE VMOV, VMVN
Mihail Ionescu [Tue, 12 Nov 2019 13:55:37 +0000 (13:55 +0000)] 
[binutils][arm] Update the decoding of MVE VMOV, VMVN

This patch updates the decoding of the VMOV and VMVN instructions which depend on cmode.
Previously VMOV and VMVN with cmode 1101 were not allowed.
The cmode changes also required updating of the MVE conflict checking.
Now instructions with opcodes 0xef800d50 and 0xef800e70 correctly get decoded as VMOV
and VMVN, respectively.

2019-11-12  Mihail Ionescu  <mihail.ionescu@arm.com>

* opcodes/arm-dis.c (mve_opcodes): Enable VMOV imm to vec with
cmode 1101.
(is_mve_encoding_conflict): Update cmode conflict checks for
MVE_VMVN_IMM.

2019-11-12  Mihail Ionescu  <mihail.ionescu@arm.com>

* gas/config/tc-arm.c (do_neon_mvn): Allow mve_ext cmode=0xd.
* testsuite/gas/arm/mve-vmov-vmvn-vorr-vbic.s: New test.
* testsuite/gas/arm/mve-vmov-vmvn-vorr-vbic.d: Likewise.

4 years ago[gas][arm] Make .fpu reset the FPU/Coprocessor feature bits
Mihail Ionescu [Tue, 12 Nov 2019 13:53:06 +0000 (13:53 +0000)] 
[gas][arm] Make .fpu reset the FPU/Coprocessor feature bits

This patch is fixes the '.fpu' behaviour.
Currently, using '.fpu' resets the previously selected '.fpu' options (by overwriting them),
but does not reset previous FPU options selected by other means (ie. when using
'.arch_extension fp' in conjunction with '.fpu <x>', the FPU is not reset).

Example:
.arch armv8-a         @ SET BASE
.arch_extension fp    @ ADD FP-ARMV8
.fpu vfpv2            @ ADD (already existing bits, does not reset)
vfms.f32 s0, s1, s2   @ OK

.arch armv8-a         @ RESET
.fpu fp-armv8         @ ADD FP-ARMV8
vfms.f32 s0, s1, s2   @ OK
.fpu vfpv2            @ RESET to VFPV2
vfms.f32 s0, s1, s2   @ ERROR

After the patch this becomes:
.arch armv8-a         @ SET BASE
.arch_extension fp    @ ADD FP-ARMV8
.fpu vfpv2            @ RESET TO VFPV2
vfms.f32 s0, s1, s2   @ ERROR

.arch armv8-a         @ RESET
.fpu fp-armv8         @ ADD FP-ARMV8
vfms.f32 s0, s1, s2   @ OK
.fpu vfpv2            @ RESET to VFPV2
vfms.f32 s0, s1, s2   @ ERROR

gas/ChangeLog:

2019-11-11  Mihail Ionescu  <mihail.ionescu@arm.com>

        * config/tc-arm.c (s_arm_fpu): Clear selected_cpu fpu bits.
        (fpu_any): Remove OBJ_ELF guards.
        * gas/testsuite/gas/arm/fpu-rst.s: New.
        * gas/testsuite/gas/arm/fpu-rst.d: New.
        * gas/testsuite/gas/arm/fpu-rst.l: New.

4 years agox86: fold EsSeg into IsString
Jan Beulich [Tue, 12 Nov 2019 08:09:31 +0000 (09:09 +0100)] 
x86: fold EsSeg into IsString

EsSeg (a per-operand bit) is used with IsString (a per-insn attribute)
only. Extend the attribute to 2 bits, thus allowing to encode
- not a string insn,
- string insn with neither operand requiring use of %es:,
- string insn with 1st operand requiring use of %es:,
- string insn with 2nd operand requiring use of %es:,
which covers all possible cases, allowing to drop EsSeg.

The (transient) need to comment out the OTUnused #define did uncover an
oversight in the earlier OTMax -> OTNum conversion, which is being taken
care of here.

4 years agox86: eliminate ImmExt abuse
Jan Beulich [Tue, 12 Nov 2019 08:08:32 +0000 (09:08 +0100)] 
x86: eliminate ImmExt abuse

Drop the remaining instances left in place by commit c3949f432f ("x86:
limit ImmExt abuse), now that we have a way to specify specific GPRs.

Take the opportunity and also introduce proper 16-bit forms of
applicable SVME insns as well as 1-operand forms of CLZERO.

4 years agox86: introduce operand type "instance"
Jan Beulich [Tue, 12 Nov 2019 08:07:34 +0000 (09:07 +0100)] 
x86: introduce operand type "instance"

Special register "class" instances can't be combined with one another
(neither in templates nor in register entries), and hence it is not a
good use of resources (memory as well as execution time) to represent
them as individual bits of a bit field.

Furthermore the generalization becoming possible will allow
improvements to the handling of insns accepting only individual
registers as their operands.

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 12 Nov 2019 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoDocument and extend readline-bindable functions
Tom Tromey [Sat, 9 Nov 2019 18:54:39 +0000 (11:54 -0700)] 
Document and extend readline-bindable functions

This adds readline-bindable function names to a few gdb functions that
already had key bindings.  This lets users change the bindings.

This also removes the gdb-command function.  Due to how this function
is implemented, it doesn't make sense to allow binding it.

Finally, this updates the documentation to reflect these changes.

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

* tui/tui.c (tui_initialize_readline): Add new bindable readline
functions.

gdb/doc/ChangeLog
2019-11-11  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (TUI Keys): Document readline function names.

Change-Id: I2233779b7aefe372f19bd03c8f325733c3385e72

4 years agoDocument operate-and-get-next
Tom Tromey [Sat, 9 Nov 2019 18:38:05 +0000 (11:38 -0700)] 
Document operate-and-get-next

This adds some documentation for the operate-and-get-next readline
function that gdb supplies.  The text is largely taken from the Bash
manual.

gdb/doc/ChangeLog
2019-11-11  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (Editing): Document operate-and-get-next.

Change-Id: I9adb16d9ce84bfbda5fe8a2828f668ea878c080c

4 years agoUse getpwuid_r instead of getpwuid
Christian Biesinger [Sat, 2 Nov 2019 18:16:09 +0000 (13:16 -0500)] 
Use getpwuid_r instead of getpwuid

gdb/ChangeLog:

2019-11-11  Christian Biesinger  <cbiesinger@google.com>

* nat/linux-osdata.c (user_from_uid): Use getpwuid_r.

Change-Id: I587359267f8963ef1da6ba0223a1525807a721de

4 years agoFix typo in vFile:pwrite documentation
Tom Tromey [Mon, 11 Nov 2019 19:45:35 +0000 (12:45 -0700)] 
Fix typo in vFile:pwrite documentation

A user on irc noticed that the remote protocol documentation mentioned
"vFile:write" -- but this is a typo, there is only "vFile:pwrite".
This patch fixes the bug.  Tested by rebuilding, committing as
obvious.

gdb/doc/ChangeLog
2019-11-11  Tom Tromey  <tromey@adacore.com>

* gdb.texinfo (Host I/O Packets): Fix typo in "vFile:pwrite".

Change-Id: I2f668a691eed7883ba6bc092471739f44c82301b

4 years agoArm64: SVE2's smaxp/sminp require operands 1 and 3 to be the same register
Jan Beulich [Mon, 11 Nov 2019 12:28:35 +0000 (13:28 +0100)] 
Arm64: SVE2's smaxp/sminp require operands 1 and 3 to be the same register

This is just like for their umaxp/uminp and fmaxp/fminp counterparts.

4 years agoArm64: fix build with old glibc
Jan Beulich [Mon, 11 Nov 2019 12:27:47 +0000 (13:27 +0100)] 
Arm64: fix build with old glibc

Some old glibc versions have string.h surface "index", which some
compilers then warn about if shadowed by a local variable. Re-use an
existing variable instead.

4 years agoPR24996, Gold fix for ternary operator within linker scripts
Miguel Saldivar [Sun, 10 Nov 2019 08:04:25 +0000 (00:04 -0800)] 
PR24996, Gold fix for ternary operator within linker scripts

PR 24996
* expression.cc (Trinary_expression::arg2_value): Use correct integer
expression when calling "eval_maybe_dot" method.
(Trinary_expression::arg3_value): Likewise.

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 11 Nov 2019 00:00:24 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agogdb/python: Introduce gdb.lookup_static_symbols
Andrew Burgess [Tue, 15 Oct 2019 15:18:26 +0000 (16:18 +0100)] 
gdb/python: Introduce gdb.lookup_static_symbols

If gdb.lookup_static_symbol is going to return a single symbol then it
makes sense (I think) for it to return a context sensitive choice of
symbol, that is the global static symbol that would be visible to the
program at that point.

However, if the user of the python API wants to instead get a
consistent set of global static symbols, no matter where they stop,
then they have to instead consider all global static symbols with a
given name - there could be many.  That is what this new API function
offers, it returns a list (possibly empty) of all global static
symbols matching a given name (and optionally a given symbol domain).

gdb/ChangeLog:

* python/py-symbol.c (gdbpy_lookup_static_symbols): New
function.
* python/python-internal.h (gdbpy_lookup_static_symbols):
Declare new function.
* python/python.c (python_GdbMethods): Add
gdb.lookup_static_symbols method.
* NEWS: Mention gdb.lookup_static_symbols.

gdb/testsuite/ChangeLog:

* gdb.python/py-symbol.exp: Add test for
gdb.lookup_static_symbols.

gdb/doc/ChangeLog:

* python.texi (Symbols In Python): Add documentation for
gdb.lookup_static_symbols.

Change-Id: I1153b0ae5bcbc43b3dcf139043c7a48bf791e1a3

4 years agogdb/python: smarter symbol lookup for gdb.lookup_static_symbol
Andrew Burgess [Mon, 23 Sep 2019 15:59:08 +0000 (16:59 +0100)] 
gdb/python: smarter symbol lookup for gdb.lookup_static_symbol

When using gdb.lookup_static_symbol I think that GDB should find
static symbols (global symbol with static linkage) from the current
object file ahead of static symbols from other object files.

This means that if we have two source files f1.c and f2.c, and both
files contains 'static int foo;', then when we are stopped in f1.c a
call to 'gdb.lookup_static_symbol ("foo")' will find f1.c::foo, and if
we are stopped in f2.c we would find 'f2.c::foo'.

Given that gdb.lookup_static_symbol always returns a single symbol,
but there can be multiple static symbols with the same name GDB is
always making a choice about which symbols to return.  I think that it
makes sense for the choice GDB makes in this case to match what a user
would get on the command line if they asked to 'print foo'.

gdb/testsuite/ChangeLog:

* gdb.python/py-symbol.c: Declare and call function from new
py-symbol-2.c file.
* gdb.python/py-symbol.exp: Compile both source files, and add new
tests for gdb.lookup_static_symbol.
* gdb.python/py-symbol-2.c: New file.

gdb/doc/ChangeLog:

* python.texi (Symbols In Python): Extend documentation for
gdb.lookup_static_symbol.

gdb/ChangeLog:

* python/py-symbol.c (gdbpy_lookup_static_symbol): Lookup in
static block of current object file first.  Also fix typo in
header comment.

Change-Id: Ie55dbeb8806f35577b46015deecde27a0ca2ab64

4 years agogdb: Add a class to track last display symtab and line information
Andrew Burgess [Fri, 8 Nov 2019 16:18:43 +0000 (16:18 +0000)] 
gdb: Add a class to track last display symtab and line information

In stack.c we currently have a set of static global variables to track
the last displayed symtab and line.  This commit moves all of these
into a class and adds an instance of the class to track the same
information.

The API into stack.c is unchanged after this cleanup.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* stack.c (set_last_displayed_sal): Delete.
(last_displayed_sal_valid): Delete.
(last_displayed_pspace): Delete.
(last_displayed_addr): Delete.
(last_displayed_symtab): Delete.
(last_displayed_line): Delete.
(class last_displayed_symtab_info_type): New.
(last_displayed_symtab_info): New static global variable.
(print_frame_info): Call methods on last_displayed_symtab_info.
(clear_last_displayed_sal): Update header comment, and make use of
last_displayed_symtab_info.
(last_displayed_sal_is_valid): Likewise.
(get_last_displayed_pspace): Likewise.
(get_last_displayed_addr): Likewise.
(get_last_displayed_symtab): Likewise.
(get_last_displayed_line): Likewise.
(get_last_displayed_sal): Likewise.
* stack.h (clear_last_displayed_sal): Update header comment.
(last_displayed_sal_is_valid): Likewise.
(get_last_displayed_pspace): Likewise.
(get_last_displayed_addr): Likewise.
(get_last_displayed_symtab): Likewise.
(get_last_displayed_line): Likewise.
(get_last_displayed_sal): Likewise.

Change-Id: Ia3dbfe267feec03108c5c8ed8bd94fc0a030c3ed

4 years agogdb: Convert frame_show_address to return a bool
Andrew Burgess [Fri, 8 Nov 2019 15:15:29 +0000 (15:15 +0000)] 
gdb: Convert frame_show_address to return a bool

Just a clean up, should be no user visible changes after this commit.

gdb/ChangeLog:

* stack.c (frame_show_address): Convert return type to bool.
* stack.h (frame_show_address): Likewise, and update header
comment.

Change-Id: Iaaa9ebd4ff6534db19c5329f1c604932c747bd7f

4 years agogdb_vecs.h: Avoid self move assign
Andrew Burgess [Fri, 8 Nov 2019 23:39:14 +0000 (23:39 +0000)] 
gdb_vecs.h: Avoid self move assign

While working on another patch I ran into an issue with
unordered_remove (in gdb_vecs.h), where removing the last item of the
vector can cause a self move assign.

When compiling the C++ standard library in debug mode (with
-D_GLIBCXX_DEBUG=1) this causes an error to trigger.

I've fixed the issue in this patch and provided a unit test.

The provided unit test includes an assignment operator which checks
for self move assign, this removes the need to compile with
-D_GLIBCXX_DEBUG=1 in order to spot the bug.  If you're keen to see
the error reported from the C++ standard library then remove operator=
from the unit test and recompile GDB with -D_GLIBCXX_DEBUG=1.

gdb/ChangeLog:

* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add new file to the list.
* unittests/vec-utils-selftests.c: New file.
* gdbsupport/gdb_vecs.h (unordered_remove): Avoid self move assign.

Change-Id: I80247b20cd5212038117db7412865f5e6a9257cd

4 years agoRemove can_highlight from TUI windows
Tom Tromey [Sun, 10 Nov 2019 17:33:07 +0000 (10:33 -0700)] 
Remove can_highlight from TUI windows

Each TUI window has a "can_highlight" member.  However, this has the
same meaning as "can_box" -- a window can be highlighted if and only
if it can be boxed.  So, this patch removes can_highlight in favor of
simply using can_box.

gdb/ChangeLog
2019-11-10  Tom Tromey  <tom@tromey.com>

* tui/tui-wingeneral.c (tui_unhighlight_win): Use can_box.
(tui_highlight_win): Likewise.
(tui_win_info::check_and_display_highlight_if_needed): Likewise.
* tui/tui-data.h (struct tui_win_info) <can_highlight>: Remove.
* tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>:
Don't set can_highlight.

Change-Id: I35916859070efcdfcc6e692c71cc6070956dcfce

4 years agoRemove unused constructor declaration from cli_style_option
Tom Tromey [Sun, 10 Nov 2019 16:48:42 +0000 (09:48 -0700)] 
Remove unused constructor declaration from cli_style_option

I noticed that cli_style_option declares a constructor that is never
defined.  This removes it.

gdb/ChangeLog
2019-11-10  Tom Tromey  <tom@tromey.com>

* cli/cli-style.h (class cli_style_option) <cli_style_option>:
Remove unused declaration.

Change-Id: Ic59ec7eab4d7183d9392b58709354b2d4449b7be

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

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 9 Nov 2019 00:00:20 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoi386: Only check suffix in instruction mnemonic
H.J. Lu [Fri, 8 Nov 2019 17:31:06 +0000 (09:31 -0800)] 
i386: Only check suffix in instruction mnemonic

We should check suffix in instruction mnemonic when matching instruction.
In Intel syntax, normally we check for memory operand size.  But the same
mnemonic with 2 different encodings can have the same memory operand
size and i.suffix is set to LONG_DOUBLE_MNEM_SUFFIX from memory operand
size in Intel syntax to distinguish them.  When there is no suffix in
mnemonic, we check LONG_DOUBLE_MNEM_SUFFIX in i.suffix for mnemonic
suffix.

gas/

PR gas/25167
* config/tc-i386.c (match_template): Don't check instruction
suffix set from operand.
* testsuite/gas/i386/code16.d: New file.
* testsuite/gas/i386/code16.s: Likewise.
* testsuite/gas/i386/i386.exp: Run code16.
* testsuite/gas/i386/x86-64-branch-4.l: Updated.

opcodes/

PR gas/25167
* i386-opc.tbl: Remove IgnoreSize from cmpsd and movsd.
* i386-tbl.h: Regenerated.

4 years agoConstify command_line_input
Tom Tromey [Tue, 22 Oct 2019 19:32:39 +0000 (13:32 -0600)] 
Constify command_line_input

This changes command_line_input to return a "const char *", which is
appropriate because the memory is owned by command_line_input.  Then
it fixes up the users.

I looked at making command_line_input transfer ownership to its caller
instead, but this is complicated due to the way read_next_line is
called, so I decided against it.

Tested by rebuilding.

gdb/ChangeLog
2019-11-08  Tom Tromey  <tromey@adacore.com>

* top.c (read_command_file): Update.
(command_line_input): Make return type const.
* python/py-gdb-readline.c: Update.
* linespec.c (decode_line_2): Update.
* defs.h (command_line_input): Make return type const.
* cli/cli-script.c (read_next_line): Make return type const.
* ada-lang.c (get_selections): Update.

Change-Id: I27e6c9477fd1005ab5b16e0d337e4c015b6e6248

4 years agoRevert "GENERATE_SHLIB_SCRIPT vs. EMBEDDED."
Alan Modra [Fri, 8 Nov 2019 10:27:07 +0000 (20:57 +1030)] 
Revert "GENERATE_SHLIB_SCRIPT vs. EMBEDDED."

This reverts commit f2aaebdb97977ee7a5c83c02af871e758e7d594b.
My reasons for making that change were just plain wrong.

4 years agox86: convert RegMask and RegBND from bitfield to enumerator
Jan Beulich [Fri, 8 Nov 2019 08:06:24 +0000 (09:06 +0100)] 
x86: convert RegMask and RegBND from bitfield to enumerator

This is to further shrink the operand type representation.

4 years agox86: convert RegSIMD and RegMMX from bitfield to enumerator
Jan Beulich [Fri, 8 Nov 2019 08:05:36 +0000 (09:05 +0100)] 
x86: convert RegSIMD and RegMMX from bitfield to enumerator

This is to further shrink the operand type representation.

4 years agox86: convert Control/Debug/Test from bitfield to enumerator
Jan Beulich [Fri, 8 Nov 2019 08:04:53 +0000 (09:04 +0100)] 
x86: convert Control/Debug/Test from bitfield to enumerator

This is to further shrink the operand type representation.

4 years agox86: convert SReg from bitfield to enumerator
Jan Beulich [Fri, 8 Nov 2019 08:04:09 +0000 (09:04 +0100)] 
x86: convert SReg from bitfield to enumerator

This is to further shrink the operand type representation.

This page took 0.051806 seconds and 4 git commands to generate.