deliverable/binutils-gdb.git
3 years agogdb: add remote_debug_printf
Simon Marchi [Fri, 22 Jan 2021 17:43:27 +0000 (12:43 -0500)] 
gdb: add remote_debug_printf

This is the next in the new-style debug macro series.

For this one, I decided to omit the function name from the "Sending packet" /
"Packet received" kind of prints, just because it's not very useful in that
context and hinders readability more than anything else.  This is completely
arbitrary.

This is with:

  [remote] putpkt_binary: Sending packet: $qTStatus#49...
  [remote] getpkt_or_notif_sane_1: Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

and without:

  [remote] Sending packet: $qTStatus#49...
  [remote] Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

A difference is that previously, the query packet and its reply would be
printed on the same line, like this:

  Sending packet: $qTStatus#49...Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

Now, they are printed on two lines, since each remote_debug_printf{,_nofunc}
prints its own complete message including an end of line.  It's probably
a matter of taste, but I prefer the two-line version, it's easier to
follow, especially when the query packet is long.

As a result, lib/range-stepping-support.exp needs to be updated, as it
currently expects the vCont packet and the reply to be on the same line.
I think it's sufficient in that context to just expect the vCont packet
and not the reply, since the goal is just to count how many vCont;r GDB
sends.

gdb/ChangeLog:

* remote.h (remote_debug_printf): New.
(remote_debug_printf_nofunc): New.
(REMOTE_SCOPED_DEBUG_ENTER_EXIT): New.
* remote.c: Use above macros throughout file.

gdbsupport/ChangeLog:

* common-debug.h (debug_prefixed_printf_cond_nofunc): New.
* common-debug.c (debug_prefixed_vprintf): Handle a nullptr
func.

gdb/testsuite/ChangeLog:

* lib/range-stepping-support.exp (exec_cmd_expect_vCont_count):
Adjust to "set debug remote" changes.

Change-Id: Ica6dead50d3f82e855c7d763f707cef74bed9fee

3 years agogdb: change remote_debug to bool
Simon Marchi [Fri, 22 Jan 2021 17:40:48 +0000 (12:40 -0500)] 
gdb: change remote_debug to bool

As far as I can see, there are no more spots looking for a remote_debug
other than true/false.  If we ever want to revert to an int, we can
always change it back later, but this makes things simpler for now.

gdb/ChangeLog:

* remote.h (remote_debug): Change to bool.
* remote.c (remote_debug): Change to bool.
(_initialize_remote): Adjust.

Change-Id: I21aac5b4cff9dc4f75c8efaf47c23583ecabd2a6

3 years agogdb: move remote_debug to remote.{h,c}
Simon Marchi [Fri, 22 Jan 2021 17:39:08 +0000 (12:39 -0500)] 
gdb: move remote_debug to remote.{h,c}

remote_debug is currently declared in target.h and defined in top.c.
Move them to remote.h and remote.c.

Include remote.h in remote-sim.c, as it uses remote_debug.

gdb/ChangeLog:

* target.h (remote_debug): Move to...
* remote.h (remote_debug): ... here.
* top.c (remote_debug): Move to...
* remote.c (remote_debug): ... here.
* remote-sim.c: Include remote.h.

Change-Id: Iae632d12ff8900b23eee6b2529d6a3cd339a8caa

3 years agogdb: move set remote commands to remote.c
Simon Marchi [Fri, 22 Jan 2021 17:35:54 +0000 (12:35 -0500)] 
gdb: move set remote commands to remote.c

Commands "set debug remote" and "set remotetimeout" are defined in
cli/cli-cmds.c, I think it would make more sense for them to be in
remote.c.

gdb/ChangeLog:

* cli/cli-cmds.c (show_remote_debug): Remove.
(show_remote_timeout): Remove.
(_initialize_cli_cmds): Don't register commands.
* remote.c (show_remote_debug): Move here.
(show_remote_timeout): Move here.
(_initialize_remote): Register commands.

Change-Id: Ic4d81888aa4f8dde89d1d29397ef19a08951b80b

3 years agogdb: remove TYPE_OBJFILE macro
Simon Marchi [Fri, 22 Jan 2021 17:23:53 +0000 (12:23 -0500)] 
gdb: remove TYPE_OBJFILE macro

Change all users to use the type::objfile method instead.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE): Remove, change all users to use the
type::objfile method instead.

Change-Id: I6b3f580913fb1fb0cf986b176dba8db68e1fabf9

3 years agogdb: remove TYPE_OBJFILE_OWNED macro
Simon Marchi [Fri, 22 Jan 2021 17:23:40 +0000 (12:23 -0500)] 
gdb: remove TYPE_OBJFILE_OWNED macro

Update all users to use the type::is_objfile_owned method.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE_OWNED): Remove, update all users to
use the type::is_objfile_owned method.

Change-Id: Icae84d136393ab9f756f50a33ac3cedda13c5ba2

3 years agogdb: add owner-related methods to struct type
Simon Marchi [Fri, 22 Jan 2021 17:21:09 +0000 (12:21 -0500)] 
gdb: add owner-related methods to struct type

Add the following methods to struct type:

 * is_objfile_owned
 * set_owner (objfile and gdbarch overloads)
 * objfile and arch getters

Rename the fields in main_type to ensure no other code accesses them
directly.  As usual, we can't make them actually private, but giving
them the `m_` prefix will help making sure they are not accessed when
not supposed to, by convention.

Remove the TYPE_OWNER macro to ensure no code uses the type_owner struct
directly.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE_OWNED): Adjust.
(TYPE_OWNER): Remove.
(TYPE_OBJFILE): Adjust.
(struct main_type) <flag_objfile_owned>: Rename to...
<m_flag_objfile_owned>: ... this.
<owner>: Rename to...
<m_owner>: ... this.
(struct type) <is_objfile_owned, set_owner, objfile, arch>: New
methods.
(TYPE_ALLOC): Adjust.
* gdbtypes.c (alloc_type): Adjust.
(alloc_type_arch): Adjust.
(alloc_type_copy): Adjust.
(get_type_arch): Adjust.
(smash_type): Adjust.
(lookup_array_range_type): Adjust.
(recursive_dump_type): Adjust.
(copy_type_recursive): Adjust.
* compile/compile-c-types.c (convert_func): Adjust.
(convert_type_basic): Adjust.
* compile/compile-cplus-types.c (compile_cplus_convert_func):
Adjust.
* language.c
(language_arch_info::type_and_symbol::alloc_type_symbol):
Adjust.

Change-Id: I7f92e869d9f92e2402a3d3007dd0832e05aa6ac8

3 years agogdb/doc: move @menu to the end of the node
Andrew Burgess [Fri, 22 Jan 2021 09:28:07 +0000 (09:28 +0000)] 
gdb/doc: move @menu to the end of the node

Commit:

  commit a72d0f3d69896b5fcdc916e0547fe774dcb58614
  Date:   Tue Jan 12 13:02:30 2021 +0000

      gdb/doc: reorder and group sections relating to aliases

Added a @menu block into the wrong place within a @node.  This commit
moves it to the end of the @node, where it should be been placed.

gdb/doc/ChangeLog:

* gdb.texinfo (Aliases): Move @menu to the end of the node.

3 years agogdb/doc: down case contents of @var
Andrew Burgess [Thu, 21 Jan 2021 18:30:00 +0000 (18:30 +0000)] 
gdb/doc: down case contents of @var

After a discussion on a recent patch it was pointed out that the
contents of a @var should (generally) be lower case.  I took a look
through the GDB manual and there are a small number of places where
the contents are currently upper case, but one in particular seemed
like an obvious candidate for being down cased, so lets do that.

gdb/doc/ChangeLog:

* gdb.texinfo (PowerPC Embedded): Down case contents of @var.

3 years agoMAINTAINERS: Update my e-mail address
Maciej W. Rozycki [Fri, 22 Jan 2021 00:10:39 +0000 (00:10 +0000)] 
MAINTAINERS: Update my e-mail address

binutils/
* MAINTAINERS: Update my e-mail address.

gdb/
* MAINTAINERS: Update my e-mail address.

sim/
* MAINTAINERS: Update my e-mail address.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 22 Jan 2021 00:00:07 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoHandle additional connection error
Luis Machado [Thu, 21 Jan 2021 19:09:07 +0000 (16:09 -0300)] 
Handle additional connection error

On Ubuntu 18.04/20.04 I was running into annoying timeouts for
gdb.server/server-connect.exp. Those were caused by the ipv6 tests, because
they were running into the "Cannot assign requested address" error, originated
from the connect syscall.

Improve this by handling this additional error in the testsuite library.

It still fails for me, but at least it fails pretty quickly and doesn't make the
testsuite run take longer.

gdb/testsuite/ChangeLog:

2021-01-21  Luis Machado  <luis.machado@linaro.org>

* lib/gdbserver-support.exp (gdb_target_cmd_ext): Handle a new error
message.

3 years agoFix build errors for armhf
Luis Machado [Thu, 21 Jan 2021 13:27:12 +0000 (10:27 -0300)] 
Fix build errors for armhf

When building for 32-bit ARM, I ran into a couple build failures.

The first one seems to be caused by recent changes to warning switches,
leading to the following error:

--
In file included from gdb/coffread.c:35:0:
gdb/coffread.c: In function  "void enter_linenos(file_ptr, int, int, objfile*)":
gdb/complaints.h:40:40: error: format "%ld" expects argument of type "long int", but argument 2 has type "file_ptr {aka long long int}" [-Werror=format=]
  complaint_internal (FMT, ##__VA_ARGS__);  \
                                        ^
gdb/coffread.c:1413:7: note: in expansion of macro "complaint"
       complaint (_("Line number pointer %ld lower than start of line numbers"),
       ^~~~~~~~~
--

The other one is due to a narrowing conversion in valops.c:

--
gdb/valops.c: In function "value* value_assign(value*, value*)":
gdb/gdbtypes.h:1798:43: error: narrowing conversion of "type->type::length" from "ULONGEST {aka long long unsigned int}" to "size_t {aka unsigned int}" inside { } [-Werror=narrowing]
 #define TYPE_LENGTH(thistype) (thistype)->length
                               ~~~~~~~~~~~~^
gdb/valops.c:1252:9: note: in expansion of macro "TYPE_LENGTH"
         TYPE_LENGTH (type)});
--

Fix both with the following patch. Validated with --enable-targets=all on
Ubuntu 18.04/20.04.

gdb/ChangeLog:

2021-01-21  Luis Machado  <luis.machado@linaro.org>

* coffread.c (enter_linenos): Passing string to complaint.
* valops.c (value_assign): Make array view.

3 years agogdb: convert auto-load to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 19:12:22 +0000 (14:12 -0500)] 
gdb: convert auto-load to new-style debug macros

Function file_is_auto_load_safe was taking a format string and varargs
just to output a debug print.  This is probably because that function is
used in linux-thread-db.c and main.c, but debug_auto_load is static in
auto-load.c.  I simplified that, making debug_auto_load visible outside
of auto-load.c, and making the callers of file_is_auto_load_safe output
the debug print themselves.

This file uses _() for internationalization of the debug messages.  This
is not necessary, as these are mostly messages for GDB developers, and
it's not used in other files anyway.  So I removed them.

The rest is pretty much standard.

gdb/ChangeLog:

* auto-load.h (debug_auto_load): Move here.
(auto_load_debug_printf): New.
* auto-load.c: Use auto_load_debug_printf.
(debug_auto_load): Move to header.
* linux-thread-db.c (try_thread_db_load): Use
auto_load_debug_printf.
* main.c (captured_main_1): Likewise.

Change-Id: I468dc2a1d24b7dbf171f55181a11abbfafe70ba1

3 years agogdb: remove unused f77_array_offset_tbl from f-valprint.c
Simon Marchi [Thu, 21 Jan 2021 19:07:45 +0000 (14:07 -0500)] 
gdb: remove unused f77_array_offset_tbl from f-valprint.c

This variable appears to be unused.  Its uses were removed in commit
3e2e34f8623d ("fort_dyn_array: Use value constructor instead of
raw-buffer manipulation.") back in 2016.

gdb/ChangeLog:

* f-valprint.c (f77_array_offset_tbl): Remove.

Change-Id: I39ff8d1b402e54ca2ade936f65e540f500cce86e

3 years agogdb: convert bfd-cache to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 19:05:54 +0000 (14:05 -0500)] 
gdb: convert bfd-cache to new-style debug macros

gdb/ChangeLog:

* gdb_bfd.c (bfd_cache_debug_printf): New, use throughout file.

Change-Id: Ie29948d82adfae7edb3cdcbd61f59a66892fcc99

3 years agogdb: use interruptible_select when connecting to a remote
Simon Marchi [Thu, 21 Jan 2021 19:04:52 +0000 (14:04 -0500)] 
gdb: use interruptible_select when connecting to a remote

When GDB is waiting trying to connect to a remote target and it receives
a SIGWINCH (terminal gets resized), the blocking system call gets
interrupted and we abort.

For example, I connect to some port (on which nothing listens):

    (gdb) tar rem :1234
    ... GDB blocks here, resize the terminal ...
    :1234: Interrupted system call.

The backtrace where GDB is blocked while waiting for the connection to
establish is:

    #0  0x00007fe9db805b7b in select () from /usr/lib/libc.so.6
    #1  0x000055f2472e9c42 in gdb_select (n=0, readfds=0x0, writefds=0x0, exceptfds=0x0, timeout=0x7ffe8fafe050) at /home/simark/src/binutils-gdb/gdb/posix-hdep.c:31
    #2  0x000055f24759c212 in wait_for_connect (sock=-1, polls=0x7ffe8fafe300) at /home/simark/src/binutils-gdb/gdb/ser-tcp.c:147
    #3  0x000055f24759d0e8 in net_open (scb=0x62500015b900, name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/ser-tcp.c:356
    #4  0x000055f2475a0395 in serial_open_ops_1 (ops=0x55f24892ca60 <tcp_ops>, open_name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/serial.c:244
    #5  0x000055f2475a01d6 in serial_open (name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/serial.c:231
    #6  0x000055f2474d5274 in remote_serial_open (name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/remote.c:5019
    #7  0x000055f2474d7025 in remote_target::open_1 (name=0x6020000601d8 ":1234", from_tty=1, extended_p=0) at /home/simark/src/binutils-gdb/gdb/remote.c:5571
    #8  0x000055f2474d47d5 in remote_target::open (name=0x6020000601d8 ":1234", from_tty=1) at /home/simark/src/binutils-gdb/gdb/remote.c:4898
    #9  0x000055f24776379f in open_target (args=0x6020000601d8 ":1234", from_tty=1, command=0x611000042bc0) at /home/simark/src/binutils-gdb/gdb/target.c:242

Fix that by using interruptible_select in wait_for_connect, instead of
gdb_select.  Resizing the terminal now no longer aborts the connection.
It is still possible to interrupt the connection using ctrl-c.

gdb/ChangeLog:

* ser-tcp.c (wait_for_connect): Use interruptible_select instead
of gdb_select.

Change-Id: Ie25577bd1e5699e4847b6b53fdfa10b8c0dc5c89

3 years agogdb/testsuite: improve logging in lib/tuiterm.exp
Simon Marchi [Thu, 21 Jan 2021 19:03:51 +0000 (14:03 -0500)] 
gdb/testsuite: improve logging in lib/tuiterm.exp

Here's a bonus patch that applies on top of the other two.

While debugging TUI test cases, it's hard to know what exactly is
happening in the little mind of the terminal emulator.  Add some logging
for all input processing.  Right now I'm interested in seeing what
happens to the cursor position, so made it so all operations log the
"before" and "after" cursor position.  It should help see if any
operation is not behaving as expected, w.r.t. the cursor position.

Here are some examples of the logging found in gdb.log with this patch
applied:

    +++ Inserting string '+|'
    +++   Inserted char '+', cursor: (0, 79) -> (1, 0)
    +++   Inserted char '|', cursor: (1, 0) -> (1, 1)
    +++ Inserted string '+|', cursor: (0, 79) -> (1, 1)
    +++ Cursor Horizontal Absolute (80), cursor: (1, 1) -> (1, 79)

In the last line, note that the argument is 80 and we move to 79, that's
because the position in the argument to the control sequence is 1-based,
while our indexing is 0-based.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp (_log, _log_cur): New, use throughout.

Change-Id: Ibf570d4b2867729ce65bea8c193343a8a846170d

3 years agogdb/doc: reorder and group sections relating to aliases
Andrew Burgess [Tue, 12 Jan 2021 13:02:30 +0000 (13:02 +0000)] 
gdb/doc: reorder and group sections relating to aliases

This started by observing that the section name:

  Automatically prepend default arguments to user-defined aliases

Is very long.  When this is rendered in the PDF manual (at least for
me), this name is so long that in the table of contents the page
number ends up being misaligned.

My first thought was we could drop the 'to user-defined aliases' bit
if this section became a sub-section of the section on aliases.

So then I looked for a section with 'aliases' in its name, and
couldn't find one.

It turns out that aliases are documented in a section called:

  Creating new spellings of existing commands

Which (to me) seems an odd aspect of aliases to emphasise.

So, in this patch I make the following changes:

  - Move the section on aliases earlier in the manual, this is now
    immediately after the section about creating user defined
    commands.  This made more sense to me.

  - Rename the section on aliases from 'Creating new spellings of
    existing commands' to 'Command Aliases'.

  - Update the wording of the first paragraph in the 'Command Aliases'
    section so that it reads better given the new name.

  - Add a cross-reference from the 'Command Aliases' section to the
    'Python' section now that the aliases section comes first.

  - Down case all the text inside @var within this section as this is
    the correct style for the GDB manual.

  - Move the section on default args to become a sub-section of the
    'Command Aliases' section, and rename this sub-section from
    'Automatically prepend default arguments to user-defined aliases'
    to 'Default Arguments'.

  - Add @menu into the 'Command Aliases' section to link to the
    'Default Arguments' subsection.

  - Add a @cindex entry to the default arguments sub-section.

gdb/doc/ChangeLog:

* gdb.texinfo (Commands): Update menu.
(Extending GDB): Likewise.
(Command aliases default args): Moved later into the document,
added a cindex entry.  Renamed the section 'Automatically prepend
default arguments to user-defined aliases' to 'Default Arguments'.
(Aliases): Moved earlier in the document.  Minor rewording of the
first paragraph, down-cased the text inside all uses of @var, and
added a cross reference to the Python code.  Renamed the section
'Creating new spellings of existing commands' to 'Command
Aliases'.

3 years agoAdd Python support for hardware breakpoints
Hannes Domani [Sat, 2 Jan 2021 12:51:27 +0000 (13:51 +0100)] 
Add Python support for hardware breakpoints

This allows the creation of hardware breakpoints in Python with
gdb.Breakpoint(type=gdb.BP_HARDWARE_BREAKPOINT)
And they are included in the sequence returned by gdb.breakpoints().

gdb/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* python/py-breakpoint.c (bppy_get_location): Handle
bp_hardware_breakpoint.
(bppy_init): Likewise.
(gdbpy_breakpoint_created): Likewise.

gdb/doc/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* python.texi (Breakpoints In Python): Document
gdb.BP_HARDWARE_BREAKPOINT.

gdb/testsuite/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* gdb.python/py-breakpoint.exp: Add tests for hardware breakpoints.

3 years agogdb: convert arm to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 14:26:44 +0000 (09:26 -0500)] 
gdb: convert arm to new-style debug macros

gdb/ChangeLog:

* arm-tdep.c (arm_debug_printf): Add and use throughout file.

Change-Id: Iec5c2955cb79d8c0288ffded2c8a58b7eb7e3554

3 years agoPR27221, 058430b4a1 warnings while assembling the Linux kernel
Alan Modra [Thu, 21 Jan 2021 06:20:02 +0000 (16:50 +1030)] 
PR27221, 058430b4a1 warnings while assembling the Linux kernel

PR 27221
* dwarf2dbg.c (dwarf2_gen_line_info_1): Don't warn about ignored
line number info when gas is generating it.
* testsuite/gas/elf/dwarf2-20.d: Adjust to not expect warnings.
* testsuite/gas/m68hc11/indexed12.d: Likewise.
* testsuite/gas/elf/elf.exp: Don't run warn-2.
* gas/testsuite/gas/elf/warn-2.s: Delete.

3 years agoPR27218, memory access violation in dwarf2dbg.c
Alan Modra [Thu, 21 Jan 2021 06:16:20 +0000 (16:46 +1030)] 
PR27218, memory access violation in dwarf2dbg.c

PR 27218
* dwarf2dbg.c (dwarf2_gen_line_info): Correct setting of dwarf_level.
(dwarf2_directive_filename, dwarf2_directive_loc): Likewise, and
error for negative file numbers.

3 years agomips XPASS pr26936
Alan Modra [Wed, 20 Jan 2021 21:06:38 +0000 (07:36 +1030)] 
mips XPASS pr26936

git commit 994b25132814 "Ignore section symbols when matching linkonce
with comdat" cured the reason why this test used to fail on mips.

* testsuite/ld-elf/pr26936.d: No longer xfail mips.

3 years agogdb: change debug_bfd_cache to bool
Simon Marchi [Thu, 21 Jan 2021 03:38:20 +0000 (22:38 -0500)] 
gdb: change debug_bfd_cache to bool

gdb/ChangeLog:

* gdb_bfd.c (debug_bfd_cache): Change type to bool.
(_initialize_gdb_bfd): Adjust.

Change-Id: I90fdcc2e2d405653d0eba776f316bcec361b2d18

3 years agogdb/testsuite: use multi_line in gdb.base/skip.exp
Simon Marchi [Thu, 10 Sep 2020 15:56:34 +0000 (11:56 -0400)] 
gdb/testsuite: use multi_line in gdb.base/skip.exp

This will make it easier to modify, in particular add some indentation.
It is also a bit nicer to read, in my opinion.

gdb/testsuite/ChangeLog;

* gdb.base/skip.exp: Use multi_line where relevant.

Change-Id: Ia11712aac77344e0b8a836f4181d67e1cad3826c

3 years agogdb/dwarf: add assertion in maybe_queue_comp_unit
Simon Marchi [Thu, 21 Jan 2021 02:04:43 +0000 (21:04 -0500)] 
gdb/dwarf: add assertion in maybe_queue_comp_unit

The symptom that leads to this is the crash described in PR 26828:

/home/simark/src/binutils-gdb/gdb/dwarf2/read.c:23478:25: runtime error: member access within null pointer of type 'struct dwarf2_cu'

The line of the crash is the following, in follow_die_offset:

  if (target_cu != cu)
    target_cu->ancestor = cu;  <--- HERE

The line that assign nullptr to `target_cu` is the `per_objfile->get_cu`
call after having called maybe_queue_comp_unit:

      /* If necessary, add it to the queue and load its DIEs.  */
      if (maybe_queue_comp_unit (cu, per_cu, per_objfile, cu->language))
load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu),
     false, cu->language);

      target_cu = per_objfile->get_cu (per_cu);  <--- HERE

Some background: there is an invariant, documented in
maybe_queue_comp_unit's doc, that if a CU is queued for expansion
(present in dwarf2_per_bfd::queue), then its DIEs are loaded in memory.
"its DIEs are loaded in memory" is a synonym for saying that a dwarf2_cu
object exists for this CU.  Yet another way to say it is that
`per_objfile->get_cu (per_cu)` returns something not nullptr for that
CU.

The crash documented in PR 26828 triggers some hard-to-reproduce
sequence that ends up violating the invariant:

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A
- The DIE in CU A requires some DIE in CU B
- follow_die_offset calls maybe_queue_comp_unit.  maybe_queue_comp_unit
  sees CU B is not queued and its DIEs are not loaded, so it enqueues it
  and returns 1 to its caller - meaning "the DIEs are not loaded, you
  should load them" - prompting follow_die_offset to load the DIEs by
  calling load_full_comp_unit
- Note that CU B is enqueued by maybe_queue_comp_unit even if it has
  already been expanded.  It's a bit useless (and causes trouble, see
  next patch), but that's how it works right now.
- Since we entered the dwarf2/read code through
  dwarf2_fetch_die_type_sect_off, nothing processes the queue, so we
  exit the dwarf2/read code with CU B still lingering in the queue.

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A, again
- The DIE in CU A requires some DIE in CU B, again
- This time, maybe_queue_comp_unit sees that CU B is in the queue.
  Because of the invariant that if a CU is in the queue, its DIEs are
  loaded in the memory, it returns 0 to its caller, meaning "you don't
  need to load the DIEs!".
- That happens to be true, so everything is fine for now.

- Time passes, some things call dwarf2_per_objfile::age_comp_units
  enough so that CU B's age becomes past the dwarf_max_cache_age
  threshold.  age_comp_units proceeds to free CU B's DIEs.  Remember
  that CU B is still lingering in the queue (oops, the invariant just
  got violated).

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A, again
- The DIE in CU A requires some DIE in CU B, again
- maybe_queue_comp_unit sees that CU B is in the queue, so returns to
  its caller "you don't need to load the DIEs!".  However, we know at
  this point this is false.
- follow_die_offset doesn't load the DIEs and tries to obtain the DIEs for
  CU B:

    target_cu = per_objfile->get_cu (per_cu);

  But since they are not loaded, target_cu is nullptr, and we get the
  crash mentioned above a few lines after that.

This patch adds an assertions in maybe_queue_comp_unit to verify the
invariant, to make sure it doesn't return a falsehood to its caller.

The current patch doesn't fix the issue (the next patch does), but it
makes it so we catch the problem earlier and get this assertion failure
instead of a segmentation fault:

    /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:9100: internal-error:
        int maybe_queue_comp_unit(dwarf2_cu*, dwarf2_per_cu_data*, dwarf2_per_objfile*, language):
        Assertion `per_objfile->get_cu (per_cu) != nullptr' failed.

gdb/ChangeLog:

PR gdb/26828
* dwarf2/read.c (maybe_queue_comp_unit): Add assertion.

Change-Id: I4e51bd7bd58773f9fadf480179cbc4bae61508fe

3 years agogdb/dwarf: add some logging in dwarf2/read.c
Simon Marchi [Thu, 21 Jan 2021 01:57:49 +0000 (20:57 -0500)] 
gdb/dwarf: add some logging in dwarf2/read.c

This patch adds some logging that helped me diagnose the problems fixed
later in this series.  I'm thinking that if it helped me now, it could
help somebody else (or myself) in the future, so I might as well add
them for real.

They can happen quite frequently and be noisy, so I used
dwarf_read_debug_printf_v for them, which means they'll only print if
`set debug dwarf-read` is >= 2.

gdb/ChangeLog:

* dwarf2/read.c (follow_die_offset): Add logging.
(dwarf2_per_objfile::age_comp_units): Add logging.

Change-Id: I7483c0b05c37bc9710b9b5d40e272935bc010863

3 years agogdb: make some variables static
Simon Marchi [Thu, 21 Jan 2021 01:55:05 +0000 (20:55 -0500)] 
gdb: make some variables static

I'm trying to enable clang's -Wmissing-variable-declarations warning.
This patch fixes all the obvious spots where we can simply add "static"
(at least, found when building on x86-64 Linux).

gdb/ChangeLog:

* aarch64-linux-tdep.c (aarch64_linux_record_tdep): Make static.
* aarch64-tdep.c (tdesc_aarch64_list, aarch64_prologue_unwind,
aarch64_stub_unwind, aarch64_normal_base, ): Make static.
* arm-linux-tdep.c (arm_prologue_unwind): Make static.
* arm-tdep.c (struct frame_unwind): Make static.
* auto-load.c (auto_load_safe_path_vec): Make static.
* csky-tdep.c (csky_stub_unwind): Make static.
* gdbarch.c (gdbarch_data_registry): Make static.
* gnu-v2-abi.c (gnu_v2_abi_ops): Make static.
* i386-netbsd-tdep.c (i386nbsd_mc_reg_offset): Make static.
* i386-tdep.c (i386_frame_setup_skip_insns,
i386_tramp_chain_in_reg_insns, i386_tramp_chain_on_stack_insns):
Make static.
* infrun.c (observer_mode): Make static.
* linux-nat.c (sigchld_action): Make static.
* linux-thread-db.c (thread_db_list): Make static.
* maint-test-options.c (maintenance_test_options_list):
* mep-tdep.c (mep_csr_registers): Make static.
* mi/mi-cmds.c (struct mi_cmd_stats): Remove struct type name.
(stats): Make static.
* nat/linux-osdata.c (struct osdata_type): Make static.
* ppc-netbsd-tdep.c (ppcnbsd_reg_offsets): Make static.
* progspace.c (last_program_space_num): Make static.
* python/py-param.c (struct parm_constant): Remove struct type
name.
(parm_constants): Make static.
* python/py-record-btrace.c (btpy_list_methods): Make static.
* python/py-record.c (recpy_gap_type): Make static.
* record.c (record_goto_cmdlist): Make static.
* regcache.c (regcache_descr_handle): Make static.
* registry.h (DEFINE_REGISTRY): Make definition static.
* symmisc.c (std_in, std_out, std_err): Make static.
* top.c (previous_saved_command_line): Make static.
* tracepoint.c (trace_user, trace_notes, trace_stop_notes): Make
static.
* unittests/command-def-selftests.c (nr_duplicates,
nr_invalid_prefixcmd, lists): Make static.
* unittests/observable-selftests.c (test_notification): Make
static.
* unittests/optional/assignment/1.cc (counter): Make static.
* unittests/optional/assignment/2.cc (counter): Make static.
* unittests/optional/assignment/3.cc (counter): Make static.
* unittests/optional/assignment/4.cc (counter): Make static.
* unittests/optional/assignment/5.cc (counter): Make static.
* unittests/optional/assignment/6.cc (counter): Make static.

gdbserver/ChangeLog:

* ax.cc (bytecode_address_table): Make static.
* debug.cc (debug_file): Make static.
* linux-low.cc (stopping_threads): Make static.
(step_over_bkpt): Make static.
* linux-x86-low.cc (amd64_emit_ops, i386_emit_ops): Make static.
* tracepoint.cc (stop_tracing_bkpt, flush_trace_buffer_bkpt,
alloced_trace_state_variables, trace_buffer_ctrl,
tracing_start_time, tracing_stop_time, tracing_user_name,
tracing_notes, tracing_stop_note): Make static.

Change-Id: Ic1d8034723b7802502bda23770893be2338ab020

3 years agogdb/remote.c: address conflicting enum and method name
Joel Sherrill [Thu, 21 Jan 2021 01:38:57 +0000 (20:38 -0500)] 
gdb/remote.c: address conflicting enum and method name

When building with gcc 4.8, we get:

      CXX    remote.o
    cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++ [enabled by default]
    /home/smarchi/src/binutils-gdb/gdb/remote.c:1157:38: error: 'resume_state' is not a class, namespace, or enumeration
       enum resume_state m_resume_state = resume_state::NOT_RESUMED;
                                          ^

It looks like gcc 4.8 doesn't like that there is an enum class named
resume_state as well as a method.  Since it's an easy fix, rename the method to
get_remote_state to avoid the clash.

gdb/ChangeLog:

PR gdb/27219
* remote.c (struct remote_thread_info) <resume_state>: Rename
to...
<get_resume_state>: ... this.
(remote_target::resume): Adjust.
(remote_target::commit_resume): Adjust.
(remote_target::select_thread_for_ambiguous_stop_reply): Adjust.

Change-Id: Ib86c877a4c75ee671d69c27ed06cb8f57bc087db

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 21 Jan 2021 00:00:17 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agogdb/testsuite: rename _cur_x/_cur_y to _cur_col/_cur_row in lib/tuiterm.exp
Simon Marchi [Wed, 20 Jan 2021 21:11:06 +0000 (16:11 -0500)] 
gdb/testsuite: rename _cur_x/_cur_y to _cur_col/_cur_row in lib/tuiterm.exp

I am having trouble remembering which of _cur_x/_cur_y is columns and
which is rows, so renaming them helps.  We already have _rows and _cols
to represent the terminal size, so I think that makes sense to name the
"_cur" variables accordingly.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row.

Change-Id: I6abd3cdfdb295d8abde12dcd5f0ae09f18f07967

3 years agogdb/testsuite: add links for handled control sequences in lib/tuiterm.exp
Simon Marchi [Wed, 20 Jan 2021 21:09:31 +0000 (16:09 -0500)] 
gdb/testsuite: add links for handled control sequences in lib/tuiterm.exp

This code can be a bit cryptic for those who don't know terminal control
sequences very well.  This patch adds links for all the handled
sequences, so it's easy to get some doc to follow the code.

I linked to a VT510 manual, because I think it's well formatted and easy
to read.  There's only the repeat sequence (_csi_b) which I haven't
found in it, it looks to be xterm-specific or something.

I also tried to use the sequence names as they are in the manual.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp: Add links in comments.

Change-Id: I670b947a238e5e9bcab7c476a20eb3c31cf2909d

3 years ago[gdb/testsuite] Fix gdb.python/py-format-string.exp with -m32
Tom de Vries [Wed, 20 Jan 2021 21:02:33 +0000 (22:02 +0100)] 
[gdb/testsuite] Fix gdb.python/py-format-string.exp with -m32

When running test-case gdb.python/py-format-string.exp with target board
unix/-m32, we run into:
...
(gdb) python print \
  (gdb.parse_and_eval ('a_base_ref').format_string (deref_refs=True))^M
@0xffffc468: {_vptr.Base = 0x80487e0 <vtable for Deriv+8>, a = 42, \
              static a_static_member = 2019}^M
(gdb) FAIL: gdb.python/py-format-string.exp: format_string: \
  lang_cpp: a_base_ref with option deref_refs: deref_refs=true
...
while with -m64, we have instead:
...
@0x7fffffffd170: {_vptr.Base = 0x400910 <vtable for Deriv+16>, a = 42, \
                  static a_static_member = 2019}^M
(gdb) PASS: gdb.python/py-format-string.exp: format_string: \
  lang_cpp: a_base_ref with option deref_refs: deref_refs=true
...

The vtable contains pointer entries which are 4-byte for -m32 and 8-byte for
-m64, so it's not surprising the offsets (Deriv+8 vs. Deriv+16) differ.

Fix this by allow Deriv+$decimal.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-20  Tom de Vries  <tdevries@suse.de>

* gdb.python/py-format-string.exp: Allow Deriv+$decimal as vtable
offset.

3 years ago[gdb/testsuite] Skip gdb.rust/*.exp for target board unix/-m32
Tom de Vries [Wed, 20 Jan 2021 21:02:33 +0000 (22:02 +0100)] 
[gdb/testsuite] Skip gdb.rust/*.exp for target board unix/-m32

When running gdb.rust/*.exp with target board unix/-m32, we see:
...
Running src/gdb/testsuite/gdb.rust/union.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/modules.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/unsized.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/simple.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/watch.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/traits.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/expr.exp ...
Running src/gdb/testsuite/gdb.rust/rust-style.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/methods.exp ...
gdb compile failed, error: Unrecognized option: 'm'
Running src/gdb/testsuite/gdb.rust/generics.exp ...
gdb compile failed, error: Unrecognized option: 'm'
                === gdb Summary ===

nr of expected passes            95
nr of untested testcases         9
...

Fix this by testing for -m32 in the target board multilib_flags in
skip_rust_tests.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-20  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (skip_rust_tests): Skip if multilib_flags contains -m32.

3 years agoFix a few stap parser issues and add a new test for probe expressions
Sergio Durigan Junior [Sun, 3 Jan 2021 07:42:52 +0000 (02:42 -0500)] 
Fix a few stap parser issues and add a new test for probe expressions

The creation of this patch was motivated by Tom's "Change handling of
'!' operator in stap probes" patch.

While reviewing his patch, I stumbled upon a few issues with the stap
expression parser.  They are:

- As it turns out, even with Tom's patch applied the parser doesn't
  properly handle the '!' operator.  The underlying issue was the fact
  that stap_parse_argument_conditionally also needed to be patched in
  order to recognize '!' as an operator that is part of a single
  operand, and parse it accordingly.

- While writing the testcase I'm proposing on this patch, I found that
  parenthesized sub-expressions were not being parsed correctly when
  there was another term after them.  For example:

    1 - (2 + 3) + 4

  In this case, the parser was considering "1" to be the left-side of
  the expression, and "(2 + 3) + 4" to be the right-side.  The patch
  fixes the parser by making it identify whether a parenthesized
  sub-expression has just been parsed, and act accordingly.

I've tested this on my Debian testing amd64, and everything seems OK.

gdb/ChangeLog:
2021-01-20  Sergio Durigan Junior  <sergiodj@sergiodj.net>
    Tom Tromey <tom@tromey.com>

* stap-probe.c (stap_parse_single_operand): Handle '!'
operator.
(stap_parse_argument_conditionally): Likewise.
Skip spaces after processing open-parenthesis sub-expression.
(stap_parse_argument_1): Skip spaces after call to
stap_parse_argument_conditionally.
Handle case when right-side expression is a parenthesized
sub-expression.
Skip spaces after call to stap_parse_argument_1.

gdb/testsuite/ChangeLog:
2021-01-20  Sergio Durigan Junior  <sergiodj@sergiodj.net>

* gdb.arch/amd64-stap-expressions.S: New file.
* gdb.arch/amd64-stap-expressions.exp: New file.

3 years ago[gdb/server] Don't overwrite fs/gs_base with -m32
Tom de Vries [Wed, 20 Jan 2021 15:29:30 +0000 (16:29 +0100)] 
[gdb/server] Don't overwrite fs/gs_base with -m32

Consider a minimal test-case test.c:
...
int main (void) { return 0; }
...
compiled with -m32:
...
$ gcc test.c -m32
...

When running the exec using gdbserver on openSUSE Factory (currently running a
linux kernel version 5.10.5):
...
$ gdbserver localhost:12345 a.out
...
to which we connect in a gdb session, we run into a segfault in the inferior:
...
$ gdb -batch -q -ex "target remote localhost:12345" -ex continue
Program received signal SIGSEGV, Segmentation fault.
0xf7dd8bd2 in init_cacheinfo () at ../sysdeps/x86/cacheinfo.c:761
...

The segfault is caused by gdbserver overwriting $gs_base with 0 using
PTRACE_SETREGS.  After it is overwritten, the next use of $gs in the inferior
will trigger the segfault.

Before linux kernel version 5.9, the value used by PTRACE_SETREGS for $gs_base
was ignored, but starting version 5.9, the linux kernel has support for
intel architecture extension FSGSBASE, which allows users to modify $gs_base,
and consequently PTRACE_SETREGS can no longer ignore the $gs_base value.

The overwrite of $gs_base with 0 is done by a memset in x86_fill_gregset,
which was added in commit 9e0aa64f551 "Fix gdbserver qGetTLSAddr for
x86_64 -m32".  The memset intends to zero-extend 32-bit registers that are
tracked in the regcache to 64-bit when writing them into the PTRACE_SETREGS
data argument.  But in addition, it overwrites other registers that are
not tracked in the regcache, such as $gs_base.

Fix the segfault by redoing the fix from commit 9e0aa64f551 in minimal form.

Tested on x86_64-linux:
- openSUSE Leap 15.2 (using kernel version 5.3.18):
  - native
  - gdbserver -m32
  - -m32
- openSUSE Factory (using kernel version 5.10.5):
  - native
  - m32

gdbserver/ChangeLog:

2021-01-20  Tom de Vries  <tdevries@suse.de>

* linux-x86-low.cc (collect_register_i386): New function.
(x86_fill_gregset):  Remove memset.  Use collect_register_i386.

3 years agoPowerPC: Don't generate unused section symbols
Alan Modra [Wed, 20 Jan 2021 05:25:46 +0000 (15:55 +1030)] 
PowerPC: Don't generate unused section symbols

PowerPC version of git commit d1bcae833b.

bfd/
* elf32-ppc.c: Delete outdated comment.
(TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
* elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define.
gas/
* testsuite/gas/ppc/power4.d: Adjust for removal of section sym.
* testsuite/gas/ppc/test1elf32.d: Likewise.
* testsuite/gas/ppc/test1elf64.d: Likewise.
ld/
* testsuite/ld-powerpc/relbrlt.s: Make symbols global.
* testsuite/ld-powerpc/relbrlt.d: Adjust to suit.
* testsuite/ld-powerpc/tlsget.d: Adjust for reordered stubs.
* testsuite/ld-powerpc/tlsget.wf: Likewise.
* testsuite/ld-powerpc/tlsget2.d: Likewise.
* testsuite/ld-powerpc/tlsget2.wf: Likewise.
* testsuite/ld-powerpc/tlsexe.r: Adjust for removed section syms.
* testsuite/ld-powerpc/tlsexe32.r: Likewise.
* testsuite/ld-powerpc/tlsexe32no.r: Likewise.
* testsuite/ld-powerpc/tlsexeno.r: Likewise.
* testsuite/ld-powerpc/tlsexenors.r: Likewise.
* testsuite/ld-powerpc/tlsexers.r: Likewise.
* testsuite/ld-powerpc/tlsexetoc.r: Likewise.
* testsuite/ld-powerpc/tlsexetocrs.r: Likewise.
* testsuite/ld-powerpc/tlsso.r: Likewise.
* testsuite/ld-powerpc/tlsso32.r: Likewise.
* testsuite/ld-powerpc/tlstocso.r: Likewise.

3 years agoPowerPC64 synthetic symbols
Alan Modra [Wed, 20 Jan 2021 05:30:58 +0000 (16:00 +1030)] 
PowerPC64 synthetic symbols

If an assembler trims off unused section symbols there may be no
section symbols.  This means that testing for the .opd section symbol
needs to test both the section name and symbol flags.

* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't assume
section symbols are present.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 20 Jan 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agouse DISABLE_COPY_AND_ASSIGN in switch_thru_all_uis
Lancelot SIX [Fri, 15 Jan 2021 19:35:36 +0000 (19:35 +0000)] 
use DISABLE_COPY_AND_ASSIGN in switch_thru_all_uis

In switch_thru_all_uis,  a pre-c++11 way of removing copy constructor
and assignment operator is used.

This patch uses the DISABLE_COPY_AND_ASSIGN macro which does the right
thing for pre and post c++11.

gdb/Changelog:

2021-01-19  Lancelot SIX  <lsix@lancelotsix.com>

* top.h (switch_thru_all_uis): Use DISABLE_COPY_AND_ASSIGN.

3 years agotrad-frame cleanups
Luis Machado [Thu, 14 Jan 2021 18:43:28 +0000 (15:43 -0300)] 
trad-frame cleanups

With the new member functions for struct trad_frame_saved_reg, there is no
need to invoke some of the set/get functions anymore.  This patch removes
those and adjusts all callers.

Even though the most natural initial state of a saved register value is
UNKNOWN, there are target backends relying on the previous initial state
of REALREG set to a register's own number. I noticed this in at least a
couple targets: aarch64 and riscv.

Because of that, I decided to keep the reset function that sets the set of
register values to REALREG. I can't exercise all the targets to make sure
the initial state change won't break things, hence why it is risky to change
the default.

Validated with --enable-targets=all on aarch64-linux Ubuntu 18.04/20.04.

gdb/ChangeLog

2021-01-19  Luis Machado  <luis.machado@linaro.org>

* trad-frame.h (trad_frame_saved_reg) <set_value_bytes>: Allocate
memory and save data.
(trad_frame_set_value, trad_frame_set_realreg, trad_frame_set_addr)
(trad_frame_set_unknown, trad_frame_set_value_bytes)
(trad_frame_value_p, trad_frame_addr_p, trad_frame_realreg_p)
(trad_frame_value_bytes_p): Remove.
(trad_frame_reset_saved_regs): Adjust documentation.
* trad-frame.c (trad_frame_alloc_saved_regs): Initialize via a
constructor and reset the state of the registers.
(trad_frame_value_p, trad_frame_addr_p, trad_frame_realreg_p)
(trad_frame_value_bytes_p, trad_frame_set_value)
(trad_frame_set_realreg, trad_frame_set_addr)
(trad_frame_set_unknown, trad_frame_set_value_bytes): Remove.
(trad_frame_set_reg_realreg): Update to call member function.
(trad_frame_set_reg_addr, trad_frame_set_reg_value_bytes): Likewise.
(trad_frame_get_prev_register): Likewise.

* aarch64-tdep.c (aarch64_analyze_prologue)
(aarch64_analyze_prologue_test, aarch64_make_prologue_cache_1)
(aarch64_prologue_prev_register): Update to use member functions.
* alpha-mdebug-tdep.c (alpha_mdebug_frame_unwind_cache): Likewise.
* alpha-tdep.c (alpha_heuristic_frame_unwind_cache): Likewise.
* arc-tdep.c (arc_print_frame_cache, arc_make_frame_cache): Likewise.
* arm-tdep.c (arm_make_prologue_cache, arm_exidx_fill_cache)
(arm_make_epilogue_frame_cache): Likewise.
* avr-tdep.c (avr_frame_unwind_cache)
(avr_frame_prev_register): Likewise.
* cris-tdep.c (cris_scan_prologue): Likewise.
* csky-tdep.c (csky_frame_unwind_cache): Likewise.
* frv-tdep.c (frv_analyze_prologue): Likewise.
* hppa-tdep.c (hppa_frame_cache, hppa_fallback_frame_cache): Likewise.
* lm32-tdep.c (lm32_frame_cache): Likewise.
* m32r-tdep.c (m32r_frame_unwind_cache): Likewise.
* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
* mips-tdep.c (set_reg_offset, mips_insn16_frame_cache)
(mips_micro_frame_cache, mips_insn32_frame_cache): Likewise.
(reset_saved_regs): Adjust to set realreg.
* riscv-tdep.c (riscv_scan_prologue, riscv_frame_cache): Adjust to
call member functions.
* rs6000-tdep.c (rs6000_frame_cache, rs6000_epilogue_frame_cache)
* s390-tdep.c (s390_prologue_frame_unwind_cache)
(s390_backchain_frame_unwind_cache): Likewise.
* score-tdep.c (score7_analyze_prologue)
(score3_analyze_prologue, score_make_prologue_cache): Likewise.
* sparc-netbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_cache): Likewise.
* sparc64-netbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_cache): Likewise.
* tilegx-tdep.c (tilegx_analyze_prologue)
(tilegx_frame_cache): Likewise.
* v850-tdep.c (v850_frame_cache): Likewise.
* vax-tdep.c (vax_frame_cache): Likewise.

3 years agoConvert some frame functions to use gdb::array_view.
Luis Machado [Fri, 15 Jan 2021 16:16:04 +0000 (13:16 -0300)] 
Convert some frame functions to use gdb::array_view.

This patch converts the most obvious functions from gdb/frame.h to use
the gdb::array_view abstraction.  I've converted the ones that used buffer +
length.

There are others using only the buffer, with an implicit size. I did not
touch those for now. But it would be nice to pass the size for safety.

Tested with --enable-targets=all on Ubuntu 18.04/20.04 aarch64-linux.

gdb/ChangeLog

2021-01-19  Luis Machado  <luis.machado@linaro.org>

* frame.h (get_frame_register_bytes): Pass a gdb::array_view instead
of buffer + length.
(put_frame_register_bytes): Likewise.
Adjust documentation.
(get_frame_memory): Pass a gdb::array_view instead of buffer + length.
(safe_frame_unwind_memory): Likewise.
* frame.c (get_frame_register_bytes, put_frame_register_bytes)
(get_frame_memory, safe_frame_unwind_memory): Adjust to use
gdb::array_view.
* amd64-fbsd-tdep.c (amd64fbsd_sigtramp_p): Likewise.
* amd64-linux-tdep.c (amd64_linux_sigtramp_start): Likewise.
* amd64-obsd-tdep.c (amd64obsd_sigtramp_p): Likewise.
* arc-linux-tdep.c (arc_linux_is_sigtramp): Likewise.
* cris-tdep.c (cris_sigtramp_start, cris_rt_sigtramp_start): Likewise.
* dwarf2/loc.c (rw_pieced_value): Likewise.
* hppa-tdep.c (hppa_frame_cache): Likewise.
* i386-fbsd-tdep.c (i386fbsd_sigtramp_p): Likewise.
* i386-gnu-tdep.c (i386_gnu_sigtramp_start): Likewise.
* i386-linux-tdep.c (i386_linux_sigtramp_start)
(i386_linux_rt_sigtramp_start): Likewise.
* i386-obsd-tdep.c (i386obsd_sigtramp_p): Likewise.
* i386-tdep.c (i386_register_to_value): Likewise.
* i387-tdep.c (i387_register_to_value): Likewise.
* ia64-tdep.c (ia64_register_to_value): Likewise.
* m32r-linux-tdep.c (m32r_linux_sigtramp_start)
(m32r_linux_rt_sigtramp_start): Likewise.
* m68k-linux-tdep.c (m68k_linux_pc_in_sigtramp): Likewise.
* m68k-tdep.c (m68k_register_to_value): Likewise.
* mips-tdep.c (mips_register_to_value)
(mips_value_to_register): Likewise.
* ppc-fbsd-tdep.c (ppcfbsd_sigtramp_frame_sniffer)
(ppcfbsd_sigtramp_frame_cache): Likewise.
* ppc-obsd-tdep.c (ppcobsd_sigtramp_frame_sniffer)
(ppcobsd_sigtramp_frame_cache): Likewise.
* rs6000-tdep.c (rs6000_in_function_epilogue_frame_p)
(rs6000_register_to_value): Likewise.
* tilegx-tdep.c (tilegx_analyze_prologue): Likewise.
* tramp-frame.c (tramp_frame_start): Likewise.
* valops.c (value_assign): Likewise.

3 years agosim: ppc: update version script usage
Mike Frysinger [Tue, 19 Jan 2021 15:52:33 +0000 (10:52 -0500)] 
sim: ppc: update version script usage

This matches the changes in the common code.

3 years agoUse gdb::array_view for setting value bytes in trad-frame
Luis Machado [Wed, 23 Dec 2020 19:06:11 +0000 (16:06 -0300)] 
Use gdb::array_view for setting value bytes in trad-frame

This patch updates the functions setting value bytes in trad-frame to use
a gdb::array_view instead of passing a buffer and a size.

gdb/ChangeLog:

2021-01-19  Luis Machado  <luis.machado@linaro.org>

* aarch64-linux-tdep.c (aarch64_linux_restore_vreg): Pass in an
array_view.
* trad-frame.c (trad_frame_set_value_bytes): Use gdb::array_view
instead of buffer and size.
(trad_frame_set_reg_value_bytes): Likewise.
* trad-frame.h (trad_frame_set_reg_value_bytes): Likewise.
(trad_frame_set_value_bytes): Likewise.

3 years agolibctf, create: fix ctf_type_add of structs with unnamed members
Nick Alcock [Tue, 19 Jan 2021 12:45:18 +0000 (12:45 +0000)] 
libctf, create: fix ctf_type_add of structs with unnamed members

Our recent commit to support unnamed structure members better ditched
the old ctf_member_iter iterator body in favour of ctf_member_next.
However, these functions treat unnamed structure members differently:
ctf_member_iter just returned whatever the internal representation
contained, while ctf_member_next took care to always return "" rather
than sometimes returning "" and sometimes NULL depending on whether the
dict was dynamic (a product of ctf_create) or not (a product of
ctf_open).  After this commit, ctf_member_iter did the same.

It was always a bug for external callers not to treat a "" return from
these functions as if it were NULL, so only buggy callers could be
affected -- but one of those buggy callers was ctf_add_type, which
assumed that it could just take whatever name was returned from
ctf_member_iter and slam it directly into the internal representation of
a dynamic dict -- which expects NULL for unnamed members, not "".  The
net effect of all of this is that taking a struct containing unnamed
members and ctf_add_type'ing it into a dynamic dict produced a dict
whose unnamed members were inaccessible to ctf_member_info (though if
you wrote that dict out and then ctf_open'ed it, they would magically
reappear again).

Compensate for this by suitably transforming a "" name into NULL in the
internal representation, as should have been done all along.

libctf/ChangeLog
2021-01-19  Nick Alcock  <nick.alcock@oracle.com>

* ctf-create.c (membadd): Transform ""-named members into
NULL-named ones.
* testsuite/libctf-regression/type-add-unnamed-struct*: New test.

3 years agolibctf: lookup_by_name: do not return success for nonexistent pointer types
Nick Alcock [Tue, 19 Jan 2021 12:45:18 +0000 (12:45 +0000)] 
libctf: lookup_by_name: do not return success for nonexistent pointer types

The recent work allowing lookups of pointers in child dicts when the
pointed-to type is in the parent dict broke the case where a pointer
type that does not exist at all is looked up: we mistakenly return the
pointed-to type, which is likely not a pointer at all.  This causes
considerable confusion.

Fixed, with a new testcase.

libctf/ChangeLog
2021-01-19  Nick Alcock  <nick.alcock@oracle.com>

* ctf-lookup.c (ctf_lookup_by_name_internal): Do not return the
base type if looking up a nonexistent pointer type.
* testsuite/libctf-regression/pptrtab*: Test it.

3 years agolibctf, ld: fix data symbol test with newer GCC
Nick Alcock [Tue, 19 Jan 2021 12:45:18 +0000 (12:45 +0000)] 
libctf, ld: fix data symbol test with newer GCC

GCC 11+ spots that the extern var_1 and var_666 declarations in this
test are unused, and removes them, thus stopping them from appearing as
conflicted data symbols and rendering the test pointless.  Use them in a
function unique to this TU to prevent them from being eliminated.

ld/ChangeLog
2021-01-19  Nick Alcock  <nick.alcock@oracle.com>

* testsuite/ld-ctf/data-func-2.c: Stop removal of the extern foo_t
symbols by the optimizer.
* testsuite/ld-ctf/data-func-conflicted.d: Adjust accordingly.

3 years ago[gdb/testsuite] Fix gdb.base/step-over-syscall.exp with -m32
Tom de Vries [Tue, 19 Jan 2021 12:31:12 +0000 (13:31 +0100)] 
[gdb/testsuite] Fix gdb.base/step-over-syscall.exp with -m32

When executing test-case gdb.base/step-over-syscall.exp with target board
unix/-m32, we run into:
...
(gdb) x/2i $pc^M
=> 0xf7fd5155 <__kernel_vsyscall+5>:    sysenter ^M
   0xf7fd5157 <__kernel_vsyscall+7>:    int    $0x80^M
(gdb) PASS: gdb.base/step-over-syscall.exp: fork: displaced=off: \
  pc before/after syscall instruction
stepi^M
[Detaching after fork from child process 23593]^M
0xf7fd5159 in __kernel_vsyscall ()^M
1: x/i $pc^M
=> 0xf7fd5159 <__kernel_vsyscall+9>:    pop    %ebp^M
(gdb) PASS: gdb.base/step-over-syscall.exp: fork: displaced=off: stepi fork insn
print /x $pc^M
$2 = 0xf7fd5159^M
(gdb) PASS: gdb.base/step-over-syscall.exp: fork: displaced=off: pc after stepi
FAIL: gdb.base/step-over-syscall.exp: fork: displaced=off: \
  pc after stepi matches insn addr after syscall
...

The test tries to verify that after doing a stepi at a syscall insn, the $pc
is matching the insn after the syscall insn.

However, in the case that the syscall insn is "sysenter", the stepi will land
further away, so in this case:
...
   0xf7fd5155 <__kernel_vsyscall+5>:    sysenter ^M
   0xf7fd5157 <__kernel_vsyscall+7>:    int    $0x80^M
   0xf7fd5159 <__kernel_vsyscall+9>:    pop    %ebp^M
...
the stepi will land at 0xf7fd5159 instead of 0xf7fd5157.

Fix this by detecting the sysenter/int sequence and adjusting the expected
pc.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-19  Tom de Vries  <tdevries@suse.de>

* gdb.base/step-over-syscall.exp: Detect and handle sysenter/int
sequence.

3 years ago[gdb/testsuite] Fix gdb.arch/i386-mpx.exp with -m32
Tom de Vries [Tue, 19 Jan 2021 12:31:12 +0000 (13:31 +0100)] 
[gdb/testsuite] Fix gdb.arch/i386-mpx.exp with -m32

When running test-case gdb.arch/i386-mpx.exp with target board unix/-m32, we
run into:
...
(gdb) print $bndstatus^M
$3 = {raw = 0xf7ca7ff2, status = {bde = 1039310844, error = 2}}^M
(gdb) FAIL: gdb.arch/i386-mpx.exp: bndstatus formating
print $bndstatus.raw^M
$4 = (void *) 0xf7ca7ff2^M
(gdb) FAIL: gdb.arch/i386-mpx.exp: bndstatus is zero by startup
...

The failure does not occur with -m64, there we have instead:
...
(gdb) print $bndstatus^M
$3 = {raw = 0x0, status = {bde = 0, error = 0}}^M
(gdb) PASS: gdb.arch/i386-mpx.exp: bndstatus formating
print $bndstatus.raw^M
$4 = (void *) 0x0^M
(gdb) PASS: gdb.arch/i386-mpx.exp: bndstatus is zero by startup
...

The difference is as follows.  At the point of issuing the print commands, we
have run to main, so in the case of -m64 we have executed:
...
00000000004004c7 <main>:
  4004c7:       55                      push   %rbp
  4004c8:       48 89 e5                mov    %rsp,%rbp
  4004cb:       89 7d fc                mov    %edi,-0x4(%rbp)
  4004ce:       48 89 75 f0             mov    %rsi,-0x10(%rbp)
  4004d2:       66 0f 1b 45 e0          bndmov %bnd0,-0x20(%rbp)
...
and in the case of -m32:
...
08048426 <main>:
 8048426:       55                      push   %ebp
 8048427:       89 e5                   mov    %esp,%ebp
 8048429:       83 ec 08                sub    $0x8,%esp
 804842c:       8d 45 0c                lea    0xc(%ebp),%eax
 804842f:       8b 55 0c                mov    0xc(%ebp),%edx
 8048432:       0f 1a 04 10             bndldx (%eax,%edx,1),%bnd0
 8048436:       66 0f 1b 45 f8          bndmov %bnd0,-0x8(%ebp)
...

In both cases, the bnd instructions attempt to save the bound for pointer
argument argv to stack.  However, there's no such bound set.

In the -m64 case, that means we just save some random value to stack.

In the -m32 case, that means that when executing bndldx the corresponding
entry in the Bounds Directory is invalid, and $bndstatus is updated to reflect
that.

Fix this by dropping the unnecessary argv parameter to main, similar to all
other gdb.arch/i386-mpx*.c test-cases.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-19  Tom de Vries  <tdevries@suse.de>

* gdb.arch/i386-mpx.c (main): Drop argc/argv parameter.

3 years agoPowerPC use_local_plt
Alan Modra [Tue, 19 Jan 2021 08:56:11 +0000 (19:26 +1030)] 
PowerPC use_local_plt

Put the logic to select local vs. usual .plt section in one place.

* elf64-ppc.c (elf_hash_entry): New inline function.  Use
throughout to replace casts.
(branch_reloc_hash_match): Remove const from params.
(use_local_plt): New function.
(allocate_dynrelocs, ppc_build_one_stub, ppc_size_one_stub),
(build_global_entry_stubs_and_plt, ppc64_elf_relocate_section):
Use use_local_plt.
* elf32-ppc.c (use_local_plt): New function.
(allocate_dynrelocs, ppc_elf_relocate_section),
(write_global_sym_plt): Use use_local_plt.

3 years ago[GOLD] powerpc assertion failure
Alan Modra [Tue, 19 Jan 2021 02:49:18 +0000 (13:19 +1030)] 
[GOLD] powerpc assertion failure

A testcase with only ifuncs can result in no plt section (ifunc plt
entries might instead be in iplt), which means we can get to this code
without a static link.

PR 27203
* powerpc.cc (do_plt_fde_location): Remove doing_static_link
assertion.

3 years agosim: bfin: delete accidental ADI copyright
Mike Frysinger [Tue, 19 Jan 2021 02:28:20 +0000 (21:28 -0500)] 
sim: bfin: delete accidental ADI copyright

This wasn't supposed to be in here when it was first merged as we
had specifically disabled it for all the tests (and ADI has papers
in place w/the FSF).  Clean up this one.

3 years agold: Just xfail riscv little endian targets for compressed1d.d test.
Nelson Chu [Fri, 8 Jan 2021 12:04:13 +0000 (04:04 -0800)] 
ld: Just xfail riscv little endian targets for compressed1d.d test.

The sizes of compressed and uncompressed .debug_aranges are the same
for the riscv big endian targets, but different for the little endian
targets.  The compress rule is fine and isn't broken by riscv, just the
original compressed1d.d fails by accident.  Ideally, we should fill the
R_RISCV_ADD/SUB relocations when disabling relaxations in the assembler.
But before that, Jim already had written an alternative test compressed1d-alt
to relpace compressed1d.d for riscv, so we can only xfail the riscv little
endian targets in the short-term.

ld/
    * testsuite/ld-elf/elf.exp (riscv_little_endian): Added.  Return true
    if target is riscv little endian.  Otherwise, return false.
    * testsuite/ld-elf/compressed1d.d: Only xfail the riscv little endian
    targets by [riscv_little_endian].

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 19 Jan 2021 00:00:20 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agosim: common: simplify version script
Mike Frysinger [Sun, 17 Jan 2021 11:16:38 +0000 (06:16 -0500)] 
sim: common: simplify version script

We don't use the host & target aliases, so don't bother emitting them.

3 years agosim: common: delete configure & Makefile
Mike Frysinger [Sun, 17 Jan 2021 10:32:12 +0000 (05:32 -0500)] 
sim: common: delete configure & Makefile

This was mostly orphaned a while back, but left behind so people could
still run `make headers`.  Merge that one target to the top sim dir and
delete all the build logic.  This should avoid confusing people further.

3 years agosim: common: modernize gennltvals.sh
Mike Frysinger [Sun, 17 Jan 2021 09:52:42 +0000 (04:52 -0500)] 
sim: common: modernize gennltvals.sh

It's not 1996 anymore, so stop writing shell code like it is, and
rewrite it with modern POSIX shell standards.  This makes it much
more user friendly.

Then regenerate the file with latest newlib sources to verify.

3 years agogdb/testsuite: remove actual addresses from some test names
Andrew Burgess [Mon, 18 Jan 2021 17:01:11 +0000 (17:01 +0000)] 
gdb/testsuite: remove actual addresses from some test names

After commit:

  commit 10f92414d6d4a5f8eb8cbb2bf39ca86c1f9c1da5
  Date:   Fri Jan 15 12:14:45 2021 +0100

      [gdb/testsuite] Fix gdb.fortran/array-slices.exp with -m32

Some test names now contain the addresses of variables from the
inferior.  When running the test in different directories I'm seeing
slightly different values for the addresses.  This makes comparing
test results between directories harder than it needs to be.

This commit just gives the tests a descriptive name without including
the addresses.

gdb/testsuite/ChangeLog:

* gdb.fortran/array-slices.exp (run_test): Avoid including
addresses in test names.

3 years agoas: Automatically enable DWARF5 support
H.J. Lu [Mon, 18 Jan 2021 14:25:05 +0000 (06:25 -0800)] 
as: Automatically enable DWARF5 support

Currently

$ as -o x.o x.s

fails when x.s contains DWARF5 ".file 0" or ".loc 0" directives.  Update
assembler to automatically enable DWARF5 support so that

$ gcc -S -g -c x.c
$ gcc -c x.s

works.

PR gas/27195
* dwarf2dbg.c (dwarf2_gen_line_info): Set dwarf_level to 5 if
needed.
(dwarf2_directive_filename): Likewise.
(dwarf2_directive_loc): Likewise.
* testsuite/gas/elf/dwarf-5-file0.d: Pass --gdwarf-3.
* testsuite/gas/lns/lns-diag-1.l: Remove the
"Error: file number less than one" errors.

3 years agogdb/riscv: use a single regset supply function for riscv fbsd & linux
Andrew Burgess [Wed, 2 Dec 2020 15:10:06 +0000 (15:10 +0000)] 
gdb/riscv: use a single regset supply function for riscv fbsd & linux

The RISC-V x0 register is hard-coded to zero.  As such neither Linux
or FreeBSD supply the value of the register x0 in their core dump
files.

For FreeBSD we take care of this by manually supplying the value of x0
in riscv_fbsd_supply_gregset, however we don't do this for Linux.  As
a result after loading a core file on Linux we see this behaviour:

  (gdb) p $x0
  $1 = <unavailable>

In this commit I make riscv_fbsd_supply_gregset a common function that
can be shared between RISC-V for FreeBSD and Linux, this resolves the
above issue.

There is a similar problem for the two registers `fflags` and `frm`.
These two floating point related CSRs are a little weird.  They are
separate CSRs in the RISC-V specification, but are actually sub-fields
of the `fcsr` CSR.

As a result neither Linux or FreeBSD supply the `fflags` or `frm`
registers as separate fields in their core dumps, and so, after
restoring a core dump these register are similarly unavailable.

In this commit I supply `fflags` and `frm` by first asking for the
value of `fcsr`, extracting the two fields, and using these to supply
the values for `fflags` and `frm`.

gdb/ChangeLog:

* riscv-fbsd-tdep.c (riscv_fbsd_supply_gregset): Delete.
(riscv_fbsd_gregset): Use riscv_supply_regset.
(riscv_fbsd_fpregset): Likewise.
* riscv-linux-tdep.c (riscv_linux_gregset): Likewise.
(riscv_linux_fregset): Likewise.
* riscv-tdep.c (riscv_supply_regset): Define new function.
* riscv-tdep.h (riscv_supply_regset): Declare new function.

3 years agoPR26378, sections initialised only by linker scripts are always read/write
Alan Modra [Sat, 12 Sep 2020 01:19:13 +0000 (10:49 +0930)] 
PR26378, sections initialised only by linker scripts are always read/write

This changes the initialisation of output sections so that it is
possible to create read-only sections fed only from linker script
BYTE, SHORT, LONG or QUAD.  That currently isn't possible even for one
of the well-known ELF sections like .rodata, because once a section is
marked read/write that sticks.  On the other hand if we start
read-only, well-known ELF sections end up read/write as appropriate.
For example .tdata will still be SHF_ALLOC + SHF_WRITE + SHF_TLS.

PR 26378
* ldlang.c (map_input_to_output_sections): Start with a read-only
section for data statements.
* testsuite/ld-elf/size-2.d: Adjust to suit.

3 years ago[gdb/tdep] Handle si_addr_bnd in compat_siginfo_from_siginfo
Tom de Vries [Mon, 18 Jan 2021 08:32:38 +0000 (09:32 +0100)] 
[gdb/tdep] Handle si_addr_bnd in compat_siginfo_from_siginfo

When running test-case gdb.arch/i386-mpx-sigsegv.exp with target board
unix/-m32, we run into:
...
(gdb) continue^M
Continuing.^M
Saw a #BR! status 1 at 0x8048c2d^M
^M
Program received signal SIGSEGV, Segmentation fault^M
Upper bound violation while accessing address 0x0804c15c^M
Bounds: [lower = 0x00000000, upper = 0x00000000].^M
0x08048a4f in lower (p=0x804c160, a=0x804c180, b=0x804c1a0, c=0x804c1c0, \
  d=0x804c1e0, len=1) at i386-mpx-sigsegv.c:79^M
79        value = *(p - len);^M
(gdb) FAIL: gdb.arch/i386-mpx-sigsegv.exp: MPX signal segv Lower: 0
...

The problem is that lower and upper in the Bounds message are 0x0, which is
caused by $_siginfo._sifields._sigfault._addr_bnd.{_lower,_upper} evaluating
to 0x0.

Fix this by copying the si_lower/si_upper fields in
compat_siginfo_from_siginfo.

Tested on x86_64-linux, with target board unix/-m32.

gdb/ChangeLog:

2021-01-18  Tom de Vries  <tdevries@suse.de>

PR tdep/27172
* nat/amd64-linux-siginfo.c (cpt_si_lower, cpt_si_upper, SEGV_BNDERR):
New macro.
(compat_siginfo_from_siginfo): Copy cpt_si_lower and cpt_si_upper
for SEGV_BNDERR.

3 years agogdb: const-ify hostio methods parameter in remote.c
Simon Marchi [Mon, 18 Jan 2021 05:46:13 +0000 (00:46 -0500)] 
gdb: const-ify hostio methods parameter in remote.c

gdb/ChangeLog:

* remote.c (class remote_target) <remote_hostio_send_command,
remote_hostio_parse_result>: Constify parameter.
(remote_hostio_parse_result): Likewise.
(remote_target::remote_hostio_send_command): Adjust.
(remote_target::remote_hostio_pread_vFile): Adjust.
(remote_target::fileio_readlink): Adjust.
(remote_target::fileio_fstat): Adjust.

Change-Id: I6b585b99937e6526a0a7e06261d2193114589912

3 years agogdb: move remote_target::start_remote variable to narrower scope
Simon Marchi [Mon, 18 Jan 2021 05:46:13 +0000 (00:46 -0500)] 
gdb: move remote_target::start_remote variable to narrower scope

The wait_status variable is only used when the target is in in all-stop
mode.  We can therefore move it in the !target_is_non_stop scope.  That
lets us remove the assert in the else, that checks that the wait status
is not set.  If the variable doesn't exist in that scope, it pretty much
guarantees that it is not set.

gdb/ChangeLog:

* remote.c (remote_target::start_remote): Move wait_status to
narrower scope.

Change-Id: I30979135e3f4f36d04178baa67575c4e58d3b648

3 years agogdb: const-ify remote_target::add_current_inferior_and_thread parameter
Simon Marchi [Mon, 18 Jan 2021 05:46:13 +0000 (00:46 -0500)] 
gdb: const-ify remote_target::add_current_inferior_and_thread parameter

... and adjust callers / callees.

gdb/ChangeLog:

* remote.c (class remote_target):
<add_current_inferior_and_thread>: Constify parameter.
(stop_reply_extract_thread): Likewise.
(remote_target::get_current_thread): Likewise.
(remote_target::add_current_inferior_and_thread): Likewise.

Change-Id: Ifdc6c263104b58852b532cfda81caf836437d29c

3 years agogdb: const-ify unpack_* functions in remote.c
Simon Marchi [Mon, 18 Jan 2021 05:46:13 +0000 (00:46 -0500)] 
gdb: const-ify unpack_* functions in remote.c

Const-ify the unpack_* functions, and then adjust the callers
accordingly.

gdb/ChangeLog:

* remote.c (class remote_target)
<remote_unpack_thread_info_response,
parse_threadlist_response>: Constify parameter and/or return
value and or local variable.
(stub_unpack_int): Likewise.
(unpack_nibble): Likewise.
(unpack_byte): Likewise.
(unpack_int): Likewise.
(unpack_string): Likewise.
(unpack_threadid): Likewise.
(remote_target::remote_unpack_thread_info_response): Likewise.
(remote_target::parse_threadlist_response): Likewise.

Change-Id: Ibda75f664d6e3452df00f85af7134533049171b7

3 years agoPR27198, segv in S_IS_WEAK
Alan Modra [Sun, 17 Jan 2021 23:08:22 +0000 (09:38 +1030)] 
PR27198, segv in S_IS_WEAK

Fix a NULL dereference seen when assembling invalid input.

PR 27198
* config/tc-i386.c (need_plt32_p): Return FALSE for NULL symbol.
* testsuite/gas/i386/pr27198.d,
* gas/testsuite/gas/i386/pr27198.err,
* gas/testsuite/gas/i386/pr27198.s: New test.
* gas/testsuite/gas/i386/i386.exp: Run it.

3 years agold/elf: Ignore section symbols when matching linkonce with comdat
H.J. Lu [Mon, 18 Jan 2021 04:01:16 +0000 (20:01 -0800)] 
ld/elf: Ignore section symbols when matching linkonce with comdat

When deciding if a single member comdat group section in file FOO should
be discarded by a linkonce section in file BAR, we check if 2 sections
define the same set of local and global symbols.  When only one of the
files doesn't contain the unused section symbols in the symbol table,
such as object files generated by clang or GNU assembler with

commit d1bcae833b32f1408485ce69f844dcd7ded093a8
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Jan 7 06:42:00 2021 -0800

    ELF: Don't generate unused section symbols

the check will fail since one file has the extra unused section symbols.
We should ignore both undefined and section symbols in the symbol table
when making such a decision.

bfd/

PR ld/27193
* elflink.c (elf_create_symbuf): Also ignore section symbols.

ld/

PR ld/27193
* testsuite/ld-i386/i386.exp: Run PR ld/27193 test.
* testsuite/ld-i386/pr27193.dd: New file.
* testsuite/ld-i386/pr27193a.o.bz2: Likewise.
* testsuite/ld-i386/pr27193b.s: Likewise.

3 years agogold: Remove the circular IFUNC dependency in ifuncmain6pie
H.J. Lu [Mon, 18 Jan 2021 00:43:45 +0000 (16:43 -0800)] 
gold: Remove the circular IFUNC dependency in ifuncmain6pie

On Fedora 33 x86-64 with glibc 2.32-3, ifuncmain6pie failed with:

./ifuncmain6pie: IFUNC symbol 'foo' referenced in './ifuncmod6.so' is defined in the executable and creates an unsatisfiable circular dependency.
FAIL ifuncmain6pie (exit status: 127)

Remove non-JUMP_SLOT relocations against foo in ifuncmod6.so, which
trigger the circular IFUNC dependency.

* testsuite/ifuncmain6pie.c: Remove non-JUMP_SLOT relocations
against foo in ifuncmod6.so.
* testsuite/ifuncmod6.c: Likewise.

3 years agoAutomatic date update in version.in
GDB Administrator [Mon, 18 Jan 2021 00:00:16 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoPR binutils/23460: Increase the max number of open files to 20
H.J. Lu [Sun, 17 Jan 2021 02:36:40 +0000 (18:36 -0800)] 
PR binutils/23460: Increase the max number of open files to 20

Increase the max number of open files to 20 for PR binutils/23460 test
which may have more than 16 file descriptors open:

lr-x------ 1 hjl hjl 64 Jan 16 16:49 0 -> /dev/null
l-wx------ 1 hjl hjl 64 Jan 16 16:49 1 -> pipe:[14151430]
lr-x------ 1 hjl hjl 64 Jan 16 16:49 10 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460c.o
lr-x------ 1 hjl hjl 64 Jan 16 16:49 11 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460d.o
lr-x------ 1 hjl hjl 64 Jan 16 16:49 12 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460e.o
lr-x------ 1 hjl hjl 64 Jan 16 16:49 13 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460f.o
lrwx------ 1 hjl hjl 64 Jan 16 16:49 14 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/stTLiXpO
lrwx------ 1 hjl hjl 64 Jan 16 16:49 15 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/stTLiXpO
l-wx------ 1 hjl hjl 64 Jan 16 16:49 2 -> pipe:[14151430]
lr-x------ 1 hjl hjl 64 Jan 16 16:49 3 -> pipe:[13933216]
l-wx------ 1 hjl hjl 64 Jan 16 16:49 4 -> pipe:[13933216]
lr-x------ 1 hjl hjl 64 Jan 16 16:49 5 -> pipe:[13990857]
l-wx------ 1 hjl hjl 64 Jan 16 16:49 6 -> pipe:[13990857]
lr-x------ 1 hjl hjl 64 Jan 16 16:49 7 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/libpr23460.a
lr-x------ 1 hjl hjl 64 Jan 16 16:49 8 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460a.o
lr-x------ 1 hjl hjl 64 Jan 16 16:49 9 -> /export/build/gnu/tools-build/x86_64-linux-toolchain/build-x86_64-linux/binutils/src/binutils-build/ld/tmpdir/pr23460b.o

PR binutils/23460
* testsuite/ld-plugin/lto.exp: Increase the max number of open
files to 20 for PR binutils/23460 test.

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 17 Jan 2021 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agold/elf/x86: Don't compare IFUNC address in the shared object
H.J. Lu [Sat, 16 Jan 2021 15:00:09 +0000 (07:00 -0800)] 
ld/elf/x86: Don't compare IFUNC address in the shared object

On x86, glibc 2.33 starts to issue a fatal error message when calling
IFUNC function defined in the unrelocated executable from a shared
library.

1. Update x86 ELF linker to always convert IFUNC function defined in
position-dependent executable (PDE) to the normal function.  GOT in PDE
will be updated by R_*_IRELATIVE at run-time.
2. Update PR ld/23169 tests not to compare function address of external
IFUNC function in the shared object to avoid calling the IFUNC function
defined in the unrelocated executable.
3. Remove pr23169e tests which call the IFUNC function defined in the
unrelocated position-independent executable from a shared library.

bfd/

PR ld/23169
* elfxx-x86.c (_bfd_x86_elf_link_fixup_ifunc_symbol): Don't
check pointer_equality_needed.

ld/

PR ld/23169
* testsuite/ld-ifunc/ifunc.exp: Replace pr23169c.rd with
pr23169a.rd for pr23169c and pr23169f.  Remove pr23169e tests.
* testsuite/ld-ifunc/pr23169a.c (foo): Don't compare function
address.

3 years agold/x86: Add -z report-relative-reloc
H.J. Lu [Sat, 16 Jan 2021 02:06:48 +0000 (18:06 -0800)] 
ld/x86: Add -z report-relative-reloc

Linker generated relative relocations don't have symbol info:

[hjl@gnu-cfl-2 tmpdir]$ readelf -rW dump

Relocation section '.rela.dyn' at offset 0x180 contains 2 entries:
 Offset     Info    Type                Sym. Value  Symbol's Name + Addend
00002f70  00000008 R_X86_64_RELATIVE                 1000
00002f68  00000025 R_X86_64_IRELATIVE                1007
[hjl@gnu-cfl-2 tmpdir]$

Add -z report-relative-reloc to x86 ELF linker to report dynamic relative
relocations:

[hjl@gnu-cfl-2 tmpdir]$ ../ld-new -pie -melf32_x86_64 -z report-relative-reloc -o dump report-reloc-1.o
dump: R_X86_64_IRELATIVE (offset: 0x00002f68, info: 0x00000025, addend: 0x00001007) against 'ifunc' for section '.data.rel.ro.local' in report-reloc-1.o
dump: R_X86_64_RELATIVE (offset: 0x00002f70, info: 0x00000008, addend: 0x00001000) against '_start' for section '.data.rel.ro.local' in report-reloc-1.o
[hjl@gnu-cfl-2 tmpdir]$

It can be used to map relative relocations to corresponding symbols.

bfd/

* elf-linker-x86.h (elf_linker_x86_params): Add
report_relative_reloc.
* elf32-i386.c (elf_i386_relocate_section): Call
_bfd_x86_elf_link_report_relative_reloc to report relative
relocations for -z report-relative-reloc.
(elf_i386_finish_dynamic_symbol): Likewse.
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewse.
(elf_x86_64_finish_dynamic_symbol): Likewse.
* elfxx-x86.c (_bfd_x86_elf_link_report_relative_reloc): New
function.
* elfxx-x86.h (_bfd_x86_elf_link_report_relative_reloc): New
prototype.

ld/

* NEWS: Mention -z report-relative-reloc.
* ld.texi: Document -z report-relative-reloc.
* emulparams/elf32_x86_64.sh: Source x86-report-relative.sh.
* emulparams/elf_i386.sh: Likewse.
* emulparams/elf_x86_64.sh: Likewse.
* emulparams/x86-report-relative.sh: New file.
* testsuite/ld-i386/report-reloc-1.d: Likewse.
* testsuite/ld-i386/report-reloc-1.l: Likewse.
* testsuite/ld-i386/report-reloc-1.s: Likewse.
* testsuite/ld-x86-64/report-reloc-1-x32.d: Likewse.
* testsuite/ld-x86-64/report-reloc-1.d: Likewse.
* testsuite/ld-x86-64/report-reloc-1.l: Likewse.
* testsuite/ld-x86-64/report-reloc-1.s: Likewse.
* testsuite/ld-i386/i386.exp: Run report-reloc-1.
* testsuite/ld-x86-64/x86-64.exp: Run report-reloc-1 and
report-reloc-1-x32.

3 years agoTidy inflateEnd calls
Alan Modra [Fri, 15 Jan 2021 23:15:09 +0000 (09:45 +1030)] 
Tidy inflateEnd calls

So that no one need worry about the value of Z_OK.

bfd/
* compress.c (decompress_contents): Tidy inflateEnd result test.
binutils/
* readelf.c (uncompress_section_contents): Tidy inflateEnd result test.

3 years agoPR26002 undefined symbol VER_NDX_GLOBAL vs. VER_NDX_LOCAL
Alan Modra [Fri, 15 Jan 2021 10:47:43 +0000 (21:17 +1030)] 
PR26002 undefined symbol VER_NDX_GLOBAL vs. VER_NDX_LOCAL

This patch makes undefined unversioned dynamic symbols use
VER_NDX_GLOBAL (version 1) rather than VER_NDX_LOCAL (version 0).
There really isn't much use for an undefined local dynamic symbol, so
we may as well use the logically correct value in .gnu.version.
https://docs.oracle.com/cd/E26505_01/html/E26506/chapter6-54676.html

bfd/
PR 26002
* elflink.c (elf_link_output_extsym): Use version 1 in
.gnu.version for undefined unversioned symbols.
ld/
PR 26002
* testsuite/ld-elfvers/vers6.dsym: Expect "Base" for undefined
unversioned symbols.
* testsuite/ld-elfvers/vers16.dsym: Likewise.

3 years agosim: testsuite: flatten tree
Mike Frysinger [Wed, 6 Jan 2021 03:09:57 +0000 (22:09 -0500)] 
sim: testsuite: flatten tree

Now that all port tests live under testsuite/sim/*/, and none live
in testsuite/ directly, flatten the structure by moving all of the
dirs under testsuite/sim/ to testsuite/ directly.

We need to stop passing --tool to dejagnu so that it searches all
dirs and not just ones that start with "sim".  Since we have no
other dirs in this tree, and no plans to add any, should be fine.

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 16 Jan 2021 00:00:16 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agogdb/tui: compare pointer to nullptr, not 0
Andrew Burgess [Fri, 15 Jan 2021 20:21:04 +0000 (20:21 +0000)] 
gdb/tui: compare pointer to nullptr, not 0

Compare pointers to nullptr, not 0.  I also fixed a trailing
whitespace in the same function.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* tui/tui.c (tui_is_window_visible): Compare to nullptr, not 0.

3 years ago[gdb/testsuite] Fix gdb.fortran/array-slices.exp with -m32
Tom de Vries [Fri, 15 Jan 2021 11:14:45 +0000 (12:14 +0100)] 
[gdb/testsuite] Fix gdb.fortran/array-slices.exp with -m32

When running test-case gdb.fortran/array-slices.exp with target board
unix/-m32, we run into:
...
(gdb) print /x &array4d^M
$69 = 0xffffb620^M
(gdb) print /x (&array4d) + sizeof (array4d)^M
$70 = 0x95c620^M
(gdb) FAIL: gdb.fortran/array-slices.exp: repack=on: test 9: check sizes match
...
The expressions calculate the start and end of an array, but the calculation
of the end expression has an unexpected result (given that it lies before the
start of the array).  By printing "sizeof (array4d)" as a separate
expression:
...
(gdb) print /x sizeof (array4d)
$1 = 0xc40
...
it becomes clear we expected to get 0xffffb620 + 0xc40 == 0xffffc260 instead.

The problem is that using the '&' returns a pointer type:
...
(gdb) p &array4d
$5 = (PTR TO -> ( integer(kind=4) (-3:3,7:10,-3:3,-10:-7) )) 0xffffbe00
...
which has the consequence that the addition is done as pointer arithmetic.

Fix this by using the result of "print /x &array4d" instead of &array4d in the
addition.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-01-15  Tom de Vries  <tdevries@suse.de>

PR testsuite/26997
* gdb.fortran/array-slices.exp (run_test): Avoid pointer arithmetic
when adding sizeof.

3 years agoRISC-V: Fixed the indent that caused by the previous commits accidentally.
Nelson Chu [Fri, 15 Jan 2021 10:08:30 +0000 (18:08 +0800)] 
RISC-V: Fixed the indent that caused by the previous commits accidentally.

bfd/
    * elfnn-riscv.c (riscv_relax_delete_bytes): Fixed the indent that
    caused by the previous commit accidentally.

3 years agoRISC-V: Indent and GNU coding standards tidy, also aligned the code.
Nelson Chu [Fri, 15 Jan 2021 01:36:51 +0000 (09:36 +0800)] 
RISC-V: Indent and GNU coding standards tidy, also aligned the code.

bfd/
    * elfnn-riscv.c: Indent, labels and GNU coding standards tidy,
    also aligned the code.
gas/
    * config/tc-riscv.c: Indent and GNU coding standards tidy,
    also aligned the code.
    * config/tc-riscv.h: Likewise.
include/
    * opcode/riscv.h: Indent and GNU coding standards tidy,
    also aligned the code.
opcodes/
    * riscv-opc.c (riscv_gpr_names_abi): Aligned the code.
    (riscv_fpr_names_abi): Likewise.
    (riscv_opcodes): Likewise.
    (riscv_insn_types): Likewise.

3 years agoRISC-V: Error and warning messages tidy.
Nelson Chu [Wed, 13 Jan 2021 08:52:14 +0000 (16:52 +0800)] 
RISC-V: Error and warning messages tidy.

Error and warning messages usually starting with lower case letter,
and without the period at the end.  Besides, add the prefixed "internel:"
at the beginning of the messages when they are caused internally.
Also fix indents and typos.

bfd/
    * elfnn-riscv.c (riscv_merge_attributes): Fix typos of messages.
gas/
    * config/tc-riscv.c: Error and warning messages tidy.
    * testsuite/gas/riscv/priv-reg-fail-fext.l: Updated.
    * testsuite/gas/riscv/priv-reg-fail-read-only-01.l: Likewise.
    * testsuite/gas/riscv/priv-reg-fail-read-only-02.l: Likewise.
    * testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise.
    * testsuite/gas/riscv/priv-reg-fail-version-1p10.l: Likewise.
    * testsuite/gas/riscv/priv-reg-fail-version-1p11.l: Likewise.
    * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.l: Likewise.
ld/
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-01.d: Updated.
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-02.d: Likewise.
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-03.d: Likewise.
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-04.d: Likewise.
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-05.d: Likewise.
    * testsuite/ld-riscv-elf/attr-merge-priv-spec-failed-06.d: Likewise.
opcodes/
    * riscv-dis.c (parse_riscv_dis_option): Fix typos of message.

3 years agoRISC-V: Comments tidy and improvement.
Nelson Chu [Wed, 13 Jan 2021 02:05:48 +0000 (10:05 +0800)] 
RISC-V: Comments tidy and improvement.

The GNU coding standards said the comments should be complete sentences
and end with a period and two spaces.  But sometimes it should be more
cleaner when the comments only include a word or codes.  Therefore, I made
the following changes after referring to other target/generic codes,

* Try to write sentences in comments, must end with a period and two spaces.
* End with two spaces without a period for codes/instructions only.
* End with one space without a period for a single word/variable only.

Besids, also rewrite/remove some comments which are obsolete or too long,
and fix indents for comments.

bfd/
    * elfnn-riscv.c: Comments tidy and improvement.
    * elfxx-riscv.c: Likewise.
    * elfxx-riscv.h: Likewise.
gas/
    * config/tc-riscv.c: Comments tidy and improvement.  Also update
    comment "fallthru" to "Fall through" that end with a period and
    two spaces.
include/
    * elf/riscv.h: Comments tidy and improvement.
    * opcode/riscv-opc.h: Likewise.
    * opcode/riscv.h: Likewise.
opcodes/
    * riscv-dis.c: Comments tidy and improvement.
    * riscv-opc.c: Likewise.

3 years agosim: testsuite: delete configure script
Mike Frysinger [Tue, 5 Jan 2021 08:38:51 +0000 (03:38 -0500)] 
sim: testsuite: delete configure script

Now that we've moved all ports to dejagnu & testsuite/sim/, the only
thing the testsuite/configure script has been doing is filling in the
sim_arch field in the testsuite/Makefile.  We can simply let the top
sim/configure script do that for us now.  This simplifies & speeds up
the build a bit by killing an entire configure script.

3 years agosim: d10v: relocate tests & clean up test harness
Mike Frysinger [Tue, 5 Jan 2021 08:11:32 +0000 (03:11 -0500)] 
sim: d10v: relocate tests & clean up test harness

This is the only target using a dir directly under testsuite/.  All
others use sim/<arch>/ instead.  Relocate it so all targets look the
same, and so we can leverage the common test harness.

We drop loop.s in the process because it was never referenced and
was just 2 lines of code.

All other test files are moved & have directives added to the top so
that the test harness can invoke them correctly.

3 years agosim: mips: delete empty stub test dir
Mike Frysinger [Tue, 5 Jan 2021 07:31:54 +0000 (02:31 -0500)] 
sim: mips: delete empty stub test dir

No tests were ever added in here in the ~22 years since it was first
created.  Seems unlikely any tests will be added at this rate, and
the sim/mips/ testdir already has some (light) coverage for this
target.  So punt the tree.

3 years agosim: frv: clean up redundant test coverage
Mike Frysinger [Tue, 5 Jan 2021 07:19:02 +0000 (02:19 -0500)] 
sim: frv: clean up redundant test coverage

The frv-elf subdir contained five tests:
* cache: A cache test of some sort.
* exit47: A program to test exit status of 47 from sim.
* grloop: Some basic limited loop test program.
* hello: Standard "hello world" output program.
* loop: An infinite loop program.

The loop.s test is never referenced anywhere, and is all of 2 lines.
Anyone who really needs a while(1); test case and re-implement it
themselves locally.

The cache.s code isn't referenced anywhere because it requires some
custom args to the run program, and when this testcase was added, we
didn't have any support for that.  We do now, so we can add a header
to enable that.  Turns out the code crashes even with those, so turn
around and mark it xfail.  Maybe someone someday will care.

That leaves the small exit47, grloop, and hello tests.  Now that the
sim test harness supports testing for custom exit status, we can move
them all to sim/frv/ to maintain test coverage.

The remaining differences between frv-elf & sim/frv are:
* frv-elf/ runs for frv-*-elf while sim/frv/ runs for frv*-*-*.
* frv-elf/ runs "*.s" files while sim/frv/ only has .cgs and such.

On closer inspection, these are also meaningless distinctions:
* There is nothing specific to the tests that require an *-elf
  target.  Normally that would mean newlib+libgloss type stuff,
  but there's no such requirement in frv-elf/.
* The ".s" suffix is the standard "this is an assembly file" suffix.
  Since FRV is a CGEN target, we can reuse the existing convention of
  ".ms" to mean "miscellaneous .s" as in "this is an assembly file,
  and run/bucket its test results in the miscellaneous category".

So moving frv-elf/{cache,exit47,grloop,hello}.s to sim/frv/*.ms makes
sense and simplifies things quite a bit for the target while also
slightly increasing the coverage for some tuples.

3 years agosim: m32r: clean up redundant test coverage
Mike Frysinger [Tue, 5 Jan 2021 06:42:20 +0000 (01:42 -0500)] 
sim: m32r: clean up redundant test coverage

The m32r-elf subdir contained three tests:
* exit47: A program to test exit status of 47 from sim.
* hello: Standard "hello world" output program.
* loop: An infinite loop program.

There's already a sim/m32r/hello.ms test that does exactly the same
thing as m32r-elf/hello.s, so we can delete that.

The loop.s test is never referenced anywhere, and is all of 2 lines.
Anyone who really needs a while(1); test case and re-implement it
themselves locally.

That leaves the single exit47 test.  Now that the sim test harness
supports testing for custom exit status, we can easily move that to
sim/m32r/exit47.ms to maintain test coverage.

The remaining differences between m32r-elf & sim/m32r are:
* m32r-elf/ runs for m32r-*-elf while sim/m32r/ runs for m32r*-*-*.
* m32r-elf/ runs "*.s" files while sim/m32r/ runs "*.ms" files.

On closer inspection, these are also meaningless distinctions:
* There is nothing specific to the tests that require an *-elf
  target.  Normally that would mean newlib+libgloss type stuff,
  but there's no such requirement in m32r-elf/.
* The ".s" suffix is the standard "this is an assembly file"
  suffix.  Turns out ".ms" is just how sim/m32r/ (and a few other
  CGEN based targets) categorize/bucket test cases.  It simply
  means "miscellaneous .s" as in "this is an assembly file, and
  run/bucket its test results in the miscellaneous category".

So moving m32r-elf/exit47.s to sim/m32r/exit47.ms makes sense and
simplifies things quite a bit for the target while also slightly
increasing the coverage for some tuples.

3 years agosim: testsuite: allow tests to declare expected exit status
Mike Frysinger [Tue, 5 Jan 2021 06:26:21 +0000 (01:26 -0500)] 
sim: testsuite: allow tests to declare expected exit status

Some tests want to verify they can control the exit status, and
allowing any non-zero value would allow tests to silently fail:
if it crashed & exited 1, or forced all non-zero to 1, then we
wouldn't be able to differentiate with a test exiting with a
status like 47.

Extend the test harness to allow tests to declare their expected
exit status that would be defined as a "pass".  This requires a
small tweak to the sim_run API to return the status directly, but
that shouldn't be a big deal as it's only used by sim code.

3 years agoPR26539, memory leak in inflate.c
Alan Modra [Fri, 15 Jan 2021 05:32:52 +0000 (16:02 +1030)] 
PR26539, memory leak in inflate.c

Like the PR15356 fix for the same leak in bfd, but for readelf.c

PR 26539
* readelf.c (uncompress_section_contents): Always call inflateEnd.

3 years agogas: make [248]byte directives available everywhere
Mike Frysinger [Thu, 14 Jan 2021 03:14:10 +0000 (22:14 -0500)] 
gas: make [248]byte directives available everywhere

These aren't specific to ELF at all, and seem generally useful.
So pull them out of the ELF backend and into the common core.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 15 Jan 2021 00:00:13 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 years agoAdd myself to gdb/MAINTAINERS
Lancelot SIX [Thu, 14 Jan 2021 22:52:00 +0000 (22:52 +0000)] 
Add myself to gdb/MAINTAINERS

gdb/ChangeLog:

* MAINTAINERS (Wrate After Approval): Add myself.

3 years agoUpdate my email address (long overdue!)
Alexandre Oliva [Thu, 14 Jan 2021 19:36:11 +0000 (16:36 -0300)] 
Update my email address (long overdue!)

for  binutils/ChangeLog

* MAINTAINERS: Update my email address.

3 years agoFix building gdb with gcc-4.x
Bernd Edlinger [Mon, 4 Jan 2021 20:40:41 +0000 (21:40 +0100)] 
Fix building gdb with gcc-4.x

Since is_trivially_default_constructible was not implemented before gcc-5
it cannot be used with gcc-4.x.

Fix the build by using conditional compilation around that line.
Use the equivalent is_trivially_constructible<T> instead, since
we already have HAVE_IS_TRIVIALLY_CONSTRUCTIBLE for that purpose.

Fixes: 098caef485a ("Refactor struct trad_frame_saved_regs")
gdb:
2021-01-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* trad-frame.c (trad_frame_alloc_saved_regs): Avoid compile-error
because is_trivially_default_constructible was first implemented with
gcc-5.

3 years agobfin: Skip non SEC_ALLOC section for R_BFIN_FUNCDESC
H.J. Lu [Thu, 14 Jan 2021 13:23:58 +0000 (05:23 -0800)] 
bfin: Skip non SEC_ALLOC section for R_BFIN_FUNCDESC

Linker should never generate dynamic relocations for relocations in
non-SEC_ALLOC section which has no impact on run-time behavior.  Such
relocations should be resolved to 0.

PR ld/26688
* elf32-bfin.c (bfinfdpic_relocate_section): Skip non SEC_ALLOC
section for R_BFIN_FUNCDESC.

3 years agoUpdated translations for some subdirectories
Nick Clifton [Thu, 14 Jan 2021 12:55:25 +0000 (12:55 +0000)] 
Updated translations for some subdirectories

3 years ago[gdb/breakpoint] Handle .plt.sec in in_plt_section
Tom de Vries [Thu, 14 Jan 2021 09:35:34 +0000 (10:35 +0100)] 
[gdb/breakpoint] Handle .plt.sec in in_plt_section

Consider the following test-case small.c:
...
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 int main (void) {
   int *p = (int *)malloc (sizeof(int) * 4);
   memset (p, 0, sizeof(p));
   printf ("p[0] = %d; p[3] = %d\n", p[0], p[3]);
   return 0;
 }
...

On Ubuntu 20.04, we get:
...
$ gcc -O0 -g small.c
$ gdb -batch a.out -ex start -ex step
Temporary breakpoint 1, main () at small.c:6
6         int *p = (int *) malloc(sizeof(int) * 4);
p[0] = 0; p[3] = 0
[Inferior 1 (process $dec) exited normally]
...
but after switching off the on-by-default fcf-protection, we get the desired
behaviour:
...
$ gcc -O0 -g small.c -fcf-protection=none
$ gdb -batch a.out -ex start -ex step
Temporary breakpoint 1, main () at small.c:6
6         int *p = (int *) malloc(sizeof(int) * 4);
7         memset (p, 0, sizeof(p));
...

Using "set debug infrun 1", the first observable difference between the two
debug sessions is that with -fcf-protection=none we get:
...
[infrun] process_event_stop_test: stepped into dynsym resolve code
...
In this case, "in_solib_dynsym_resolve_code (malloc@plt)" returns true because
"in_plt_section (malloc@plt)" returns true.

With -fcf-protection=full, "in_solib_dynsym_resolve_code (malloc@plt)" returns
false because "in_plt_section (malloc@plt)" returns false, because the section
name for malloc@plt is .plt.sec instead of .plt, which is not handled in
in_plt_section:
...
static inline int
in_plt_section (CORE_ADDR pc)
{
  return pc_in_section (pc, ".plt");
}
...

Fix this by handling .plt.sec in in_plt_section.

Tested on x86_64-linux.

[ Another requirement to be able to reproduce this is to have a dynamic linker
with a "malloc" minimal symbol, which causes find_solib_trampoline_target to
find it, such that skip_language_trampoline returns the address for the
dynamic linkers malloc.  This causes the step machinery to set a breakpoint
there, and to continue, expecting to hit it.  Obviously, we execute glibc's
malloc instead, so the breakpoint is not hit and we continue to program
completion. ]

gdb/ChangeLog:

2021-01-14  Tom de Vries  <tdevries@suse.de>

PR breakpoints/27151
* objfiles.h (in_plt_section): Handle .plt.sec.

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