binutils-gdb.git
19 months agogdb: add SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT
Andrew Burgess [Tue, 6 Dec 2022 12:49:55 +0000 (12:49 +0000)]
gdb: add SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT

After the previous commit converted symbol-lookup debug to use the new
debug scheme, this commit adds SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT.

The previous commit didn't add SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT
because symbol-lookup debug is controlled by an 'unsigned int' rather
than a 'bool' control variable, we use the numeric value to offer
different levels of verbosity for symbol-lookup debug.

The *_SCOPED_DEBUG_ENTER_EXIT mechanism currently relies on capturing
a reference to the bool control variable, and evaluating the variable
both on entry, and at exit, this is done in the scoped_debug_start_end
class (see gdbsupport/common-debug.h).

This commit templates scoped_debug_start_end so that the class can
accept either a 'bool &' or an invokable object, e.g. a lambda
function, or a function pointer.

The existing scoped_debug_start_end and scoped_debug_enter_exit macros
in common-debug.h are updated to support scoped_debug_enter_exit being
templated, however, nothing outside of common-debug.h needs to change.

I've then added SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT in symtab.h, and
added a couple of token uses in symtab.c.  I didn't want to add too
much in this first commit, this is really about updating
common-debug.h to support this new functionality.

Within symtab.h I created a couple of global functions that can be
used to query the status of the symbol_lookup_debug control variable,
these functions are then used within the two existing macros:

  symbol_lookup_debug_printf
  symbol_lookup_debug_printf_v

and also in the new SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT macro.

19 months agogdb: convert 'set debug symbol-lookup' to new debug printing scheme
Andrew Burgess [Fri, 2 Dec 2022 12:10:10 +0000 (12:10 +0000)]
gdb: convert 'set debug symbol-lookup' to new debug printing scheme

Convert the implementation of 'set debug symbol-lookup' to the new
debug printing scheme.

In a few places I've updated the debug output to remove places where
the printed debug message included the function name, the new debug
scheme already adds that, but I haven't done all the possible updates.

19 months agogdb/testsuite: new test for recent dwarf reader issue
Andrew Burgess [Wed, 7 Dec 2022 15:55:25 +0000 (15:55 +0000)]
gdb/testsuite: new test for recent dwarf reader issue

This commit provides a test for this commit:

  commit 55fc1623f942fba10362cb199f9356d75ca5835b
  Date:   Thu Nov 3 13:49:17 2022 -0600

      Add name canonicalization for C

Which resolves PR gdb/29105.  My reason for writing this test was a
desire to better understand the above commit, my process was to study
the commit until I thought I understood it, then write a test to
expose the issue.  As the original commit didn't have a test, I
thought it wouldn't hurt to commit this upstream.

The problem tested for here is already described in the above commit,
but I'll give a brief description here.  This description describes
GDB prior to the above commit:

  - Builtin types are added to GDB using their canonical name,
    e.g. "short", not "signed short",

  - When the user does something like 'p sizeof(short)', then this is
    handled in c-exp.y, and results in a call to lookup_signed_type
    for the name "int".  The "int" here is actually being looked up as
    the type for the result of the 'sizeof' expression,

  - In lookup_signed_type GDB first adds a 'signed' and looks for that
    type, so in this case 'signed int', and, if that lookup fails, GDB
    then looks up 'int',

  - The problem is that 'signed int' is not the canonical name for a
    signed int, so no builtin type with that name will be found, GDB
    will then go to each object file in turn looking for a matching
    type,

  - When checking each object file, GDB will first check the partial
    symtab to see if the full symtab should be expanded or not.
    Remember, at this point GDB is looking for 'signed int', there
    will be no partial symbols with that name, so GDB will not expand
    anything,

  - However, GDB checks each partial symbol using multiple languages,
    not just the current language (C in this case), so, when GDB
    checks using the C++ language, the symbol name is first
    canonicalized (the code that does this can be found
    lookup_name_info::language_lookup_name).  As the canonical form of
    'signed int' is just 'int', GDB then looks for any symbols with
    the name 'int', most partial symtabs will contain such a symbol,
    so GDB ends up expanding pretty much every symtab.

The above commit fixes this by avoiding the use of non-canonical names
with C, now the initial builtin type lookup will succeed, and GDB
never even considers whether to expand any additional symtabs.

The test case creates a library that includes char, short, int, and
long types, and a test program that links against the library.

In the test script we start the inferior, but don't allow it to
progress far enough that the debug information for the library has
been fully expanded yet.

Then we evaluate some 'sizeof(TYPE)' expressions.

In the buggy version of GDB this would cause the debug information
for the library to be fully expanded, while in the fixed version of
GDB this will not be the case.

We use 'info sources' to determine if the debug information has been
fully expanded or not.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105

19 months agogdb/testsuite: fix readnow detection
Andrew Burgess [Thu, 8 Dec 2022 11:33:50 +0000 (11:33 +0000)]
gdb/testsuite: fix readnow detection

The following commit broke the readnow detection in the testsuite:

  commit dfaa040b440084dd73ebd359326752d5f44fc02c
  Date:   Mon Mar 29 18:31:31 2021 -0600

      Remove some "OBJF_READNOW" code from dwarf2_debug_names_index

The testsuite checks if GDB was started with the -readnow flag by
using the 'maintenance print objfiles' command, and looking for the
string 'faked for "readnow"' in the output.  This is implemented in
two helper procs `readnow` (gdb.exp) and `mi_readnow` (mi-support.exp).

The following tests all currently depend on this detection:

  gdb.base/maint.exp
  gdb.cp/nsalias.exp
  gdb.dwarf2/debug-aranges-duplicate-offset-warning.exp
  gdb.dwarf2/dw2-stack-boundary.exp
  gdb.dwarf2/dw2-zero-range.exp
  gdb.dwarf2/gdb-index-nodebug.exp
  gdb.mi/mi-info-sources.exp
  gdb.python/py-symbol.exp
  gdb.rust/traits.exp

The following test also includes detection of 'readnow', but does the
detection itself by checking $::GDBFLAGS for the readnow flag:

  gdb.opt/break-on-_exit.exp

The above commit removed from GDB the code that produced the 'faked
for "readnow"' string, as a consequence the testsuite can no longer
correctly spot when readnow is in use, and many of the above tests
will fail (at least partially).

When looking at the above tests, I noticed that gdb.rust/traits.exp
does call `readnow`, but doesn't actually use the result, so I've
removed the readnow call, this simplifies the next part of this patch
as gdb.rust/traits.exp was the only place an extra regexp was passed
to the readnow call.

Next I have rewritten `readnow` to check the $GDBFLAGS for the
-readnow flag, and removed the `maintenance print objfiles` check.  At
least for all the tests above, when using the readnow board, this is
good enough to get everything passing again.

For the `mi_readnow` proc, I changed this to just call `readnow` from
gdb.exp, I left the mi_readnow name in place - in the future it might
be the case that we want to do some different checks here.

Finally, I updated gdb.opt/break-on-_exit.exp to call the `readnow`
proc.

With these changes, all of the tests listed above now pass correctly
when using the readnow board.

19 months agoRISC-V: Add string length check for operands in AS
Li Xu [Wed, 14 Dec 2022 07:32:40 +0000 (07:32 +0000)]
RISC-V: Add string length check for operands in AS

The current AS accepts invalid operands due to miss of operands length check.
For example, "e6" is an invalid operand in (vsetvli a0, a1, e6, mf8, tu, ma),
but it's still accepted by assembler.  In detail, the condition check "strncmp
(array[i], *s, len) == 0" in arg_lookup function passes with "strncmp ("e64",
"e6", 2)" in the case above.  So the generated encoding is same as that of
(vsetvli a0, a1, e64, mf8, tu, ma).

This patch fixes issue above by prompting an error in such case and also adds
a new testcase.

gas/ChangeLog:

        * config/tc-riscv.c (arg_lookup): Add string length check for operands.
        * testsuite/gas/riscv/vector-insns-fail-vsew.d: New testcase for an illegal vsew.
        * testsuite/gas/riscv/vector-insns-fail-vsew.l: Likewise.
        * testsuite/gas/riscv/vector-insns-fail-vsew.s: Likewise.

19 months agox86: adjust type checking constructs
Jan Beulich [Wed, 14 Dec 2022 09:07:44 +0000 (10:07 +0100)]
x86: adjust type checking constructs

As Alan points out, ASAN takes issue with these constructs, for
current_templates being NULL. Wrap them in sizeof(), so the expressions
aren't actually evaluated.

19 months agold, gold: remove support for -z bndplt (MPX prefix)
Martin Liska [Thu, 8 Dec 2022 08:12:13 +0000 (09:12 +0100)]
ld, gold: remove support for -z bndplt (MPX prefix)

bfd/ChangeLog:

* elf-linker-x86.h (struct elf_linker_x86_params): Remove
bndplt.
* elf64-x86-64.c (elf_x86_64_scan_relocs): Ignore
        R_X86_64_PLT32_BND.
(elf_x86_64_relocate_section): Similarly here.
(elf_x86_64_link_setup_gnu_properties): Ignore bndplt.
* elfxx-x86.c: Likewise.
* elfxx-x86.h: Likewise.

gold/ChangeLog:

* NEWS: Document -z bndplt.
* options.h (class General_options): Remove bndplt option.
* x86_64.cc (class Output_data_plt_x86_64_bnd): Remove.
(Target_x86_64::do_make_data_plt): Do not use
Output_data_plt_x86_64_bnd.
(Target_x86_64::Scan::get_reference_flags): Likewise.
(Target_x86_64::Scan::check_non_pic): Likewise.
(Target_x86_64::Scan::local): Likewise.
(Target_x86_64::Scan::global): Likewise.

ld/ChangeLog:

* NEWS: Document -z bndplt.
* emulparams/elf_x86_64.sh: Remove bndplt option.
* ld.texi: Likewise.
* testsuite/ld-x86-64/x86-64.exp:
* testsuite/ld-x86-64/bnd-branch-1-now.d: Removed.
* testsuite/ld-x86-64/bnd-branch-1.d: Removed.
* testsuite/ld-x86-64/bnd-branch-1.s: Removed.
* testsuite/ld-x86-64/bnd-ifunc-1-now.d: Removed.
* testsuite/ld-x86-64/bnd-ifunc-1.d: Removed.
* testsuite/ld-x86-64/bnd-ifunc-1.s: Removed.
* testsuite/ld-x86-64/bnd-ifunc-2-now.d: Removed.
* testsuite/ld-x86-64/bnd-ifunc-2.d: Removed.
* testsuite/ld-x86-64/bnd-ifunc-2.s: Removed.
* testsuite/ld-x86-64/bnd-plt-1-now.d: Removed.
* testsuite/ld-x86-64/bnd-plt-1.d: Removed.
* testsuite/ld-x86-64/mpx.exp: Removed.
* testsuite/ld-x86-64/mpx1.out: Removed.
* testsuite/ld-x86-64/mpx1a.c: Removed.
* testsuite/ld-x86-64/mpx1a.rd: Removed.
* testsuite/ld-x86-64/mpx1b.c: Removed.
* testsuite/ld-x86-64/mpx1c.c: Removed.
* testsuite/ld-x86-64/mpx1c.rd: Removed.
* testsuite/ld-x86-64/mpx2.out: Removed.
* testsuite/ld-x86-64/mpx2a.c: Removed.
* testsuite/ld-x86-64/mpx2a.rd: Removed.
* testsuite/ld-x86-64/mpx2b.c: Removed.
* testsuite/ld-x86-64/mpx2c.c: Removed.
* testsuite/ld-x86-64/mpx2c.rd: Removed.
* testsuite/ld-x86-64/mpx3.dd: Removed.
* testsuite/ld-x86-64/mpx3a.s: Removed.
* testsuite/ld-x86-64/mpx3b.s: Removed.
* testsuite/ld-x86-64/mpx3n.dd: Removed.
* testsuite/ld-x86-64/mpx4.dd: Removed.
* testsuite/ld-x86-64/mpx4a.s: Removed.
* testsuite/ld-x86-64/mpx4b.s: Removed.
* testsuite/ld-x86-64/mpx4n.dd: Removed.
* testsuite/ld-x86-64/pr20800a.S: Removed.
* testsuite/ld-x86-64/pr20800b.S: Removed.
* testsuite/ld-x86-64/pr21038a-now.d: Removed.
* testsuite/ld-x86-64/pr21038a.d: Removed.
* testsuite/ld-x86-64/pr21038a.s: Removed.
* testsuite/ld-x86-64/pr21038b-now.d: Removed.
* testsuite/ld-x86-64/pr21038b.d: Removed.
* testsuite/ld-x86-64/pr21038b.s: Removed.
* testsuite/ld-x86-64/pr21038c-now.d: Removed.
* testsuite/ld-x86-64/pr21038c.d: Removed.
* testsuite/ld-x86-64/pr21038c.s: Removed.

19 months agoasan: signed integer overflow in display_debug_frames
Alan Modra [Wed, 14 Dec 2022 01:44:13 +0000 (12:14 +1030)]
asan: signed integer overflow in display_debug_frames

* dwarf.c (struct Frame_Chunk): Make col_offset an int64_t.
Adjust all places allocating col_offset and col_type to use
the size of the array element rather than the size of a type.
(frame_display_row): Adjust printing of col_offset.
(display_debug_frames): Factor out multiplication by
code_factor and data_factor.  Avoid signed overflow.  Use
64-bit variables.

19 months agoDon't access freed memory printing objcopy warning
Alan Modra [Wed, 14 Dec 2022 01:12:00 +0000 (11:42 +1030)]
Don't access freed memory printing objcopy warning

abfd->filename will be freed if bfd_close gets far enough to delete
the bfd.  It's possible to have an error from fclose at this point.

* objcopy.c (copy_archive): Dup filename before closing bfd for
potential use in bfd_nonfatal_message.

19 months agoAutomatic date update in version.in
GDB Administrator [Wed, 14 Dec 2022 00:04:35 +0000 (00:04 +0000)]
Automatic date update in version.in

19 months agoFix control-c handling on Windows
Tom Tromey [Mon, 5 Dec 2022 17:56:23 +0000 (10:56 -0700)]
Fix control-c handling on Windows

As Hannes pointed out, the Windows target-async patches broke C-c
handling there.  Looking into this, I found a few oddities, fixed
here.

First, windows_nat_target::interrupt calls GenerateConsoleCtrlEvent.
I think this event can be ignored by the inferior, so it's not a great
way to interrupt.  Instead, using DebugBreakProcess (or a more
complicated thing for Wow64) seems better.

Second, windows_nat_target did not implement the pass_ctrlc method.
Implementing this lets us remove the special code to call
SetConsoleCtrlHandler and instead integrate into gdb's approach to C-c
handling.  I believe that this should also fix the race that's
described in the comment that's being removed.

Initially, I thought a simpler version of this patch would work.
However, I think what happens is that some other library (I'm not sure
what) calls SetConsoleCtrlHandler while gdb is running, and this
intercepts and handles C-c -- so that the gdb SIGINT handler is not
called.  C-break continues to work, presumably because whatever
handler is installed ignores it.

This patch works around this issue by ensuring that the gdb handler
always comes first.

19 months agoRefactor code to check for terminal sharing
Tom Tromey [Mon, 5 Dec 2022 18:15:09 +0000 (11:15 -0700)]
Refactor code to check for terminal sharing

This refactors the code to check for terminal sharing.
is_gdb_terminal is exported, and sharing_input_terminal_1 is renamed,
slightly refactored, and moved to posix-hdep.c.  A new
Windows-specific implementation of this function is added to
mingw-hdep.c.

MSDN has a warning about GetConsoleProcessList

    This API is not recommended and does not have a virtual terminal
    equivalent. [...] Applications remoting via cross-platform
    utilities and transports like SSH may not work as expected if
    using this API.

However, we believe this isn't likely to be an issue for gdb.

19 months agoUse gdb::optional for sigint_ours
Tom Tromey [Mon, 12 Dec 2022 17:17:18 +0000 (10:17 -0700)]
Use gdb::optional for sigint_ours

sigint_ours (and sigquit_ours) can be used without being set.  Avoid
this problem by changing them to gdb::optional and checking that they
are in fact set before using the value.

19 months agoRename install_sigint_handler
Tom Tromey [Mon, 5 Dec 2022 17:59:27 +0000 (10:59 -0700)]
Rename install_sigint_handler

A subsequent patch will introduce a global 'install_sigint_handler'
function, so first rename the static one in extension.c.

19 months ago[gdb/tdep] Fix s390_linux_nat_target::stopped_by_watchpoint
Tom de Vries [Tue, 13 Dec 2022 17:41:12 +0000 (18:41 +0100)]
[gdb/tdep] Fix s390_linux_nat_target::stopped_by_watchpoint

On s390x-linux, I run into:
...
(gdb) continue^M
Continuing.^M
breakpoint.c:5784: internal-error: bpstat_stop_status_nowatch: \
  Assertion `!target_stopped_by_watchpoint ()' failed.^M
A problem internal to GDB has been detected,^M
further debugging may prove unreliable.^M
FAIL: gdb.threads/watchpoint-fork.exp: parent: singlethreaded: \
  breakpoint after the first fork (GDB internal error)
...

What happens is the follow:
- a watchpoint event triggers
- the event is processed, s390_linux_nat_target::stopped_by_watchpoint is called and
  it returns true, as expected
- the watchpoint event is reported by gdb, and gdb stops
- we issue a continue command
- a fork event triggers
- the event is processed, and during processing that event
  s390_linux_nat_target::stopped_by_watchpoint is called again, and returns
  true
- the assertion fails, because the function is expected to return false

The function s390_linux_nat_target::stopped_by_watchpoint returns true the
second time, because it looks at the exact same data that was looked at when
it was called the first time, and that data hasn't changed.

There's code in the same function that intends to prevent that from happening:
...
      /* Do not report this watchpoint again.  */
      memset (&per_lowcore, 0, sizeof (per_lowcore));
      if (ptrace (PTRACE_POKEUSR_AREA, s390_inferior_tid (), &parea, 0) < 0)
       perror_with_name (_("Couldn't clear watchpoint status"));
...
and that probably used to work for older kernels, but no longer does since
linux kernel commit 5e9a26928f55 ("[S390] ptrace cleanup").

Fix this by copying this:
...
  siginfo_t siginfo;
  if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
    return false;
  if (siginfo.si_signo != SIGTRAP
      || (siginfo.si_code & 0xffff) != TRAP_HWBKPT)
    return false;
...
from aarch64_linux_nat_target::stopped_data_address and remove the
obsolete watchpoint status clearing code.

Tested on s390x-linux.

Approved-By: Ulrich Weigand <uweigand@de.ibm.com>
19 months agogold: Remove BND from 64-bit x86-64 IBT PLT
H.J. Lu [Tue, 6 Dec 2022 21:34:38 +0000 (13:34 -0800)]
gold: Remove BND from 64-bit x86-64 IBT PLT

Since MPX support has been removed from x86-64 psABI, remove BND from
64-bit IBT PLT by using 32-bit IBT PLT.

PR gold/29851
* x86_64.cc (Output_data_plt_x86_64_ibt<32>::first_plt_entry):
Renamed to ...
(Output_data_plt_x86_64_ibt<size>::first_plt_entry): This.
(Output_data_plt_x86_64_ibt<64>::first_plt_entry): Removed.
(Output_data_plt_x86_64_ibt<size>::do_fill_first_plt_entry):
Drop the size == 32 check.
(Output_data_plt_x86_64_ibt<32>::plt_entry): Renamed to ...
(Output_data_plt_x86_64_ibt<size>::plt_entry): This.
(Output_data_plt_x86_64_ibt<64>::plt_entry): Removed.
(Output_data_plt_x86_64_ibt<32>::aplt_entry): Renamed to ...
(Output_data_plt_x86_64_ibt<size>::aplt_entry): This.
(Output_data_plt_x86_64_ibt<64>::aplt_entry): Removed.
(Output_data_plt_x86_64_ibt<size>::do_fill_plt_entry): Drop the
size == 32 check.
(Output_data_plt_x86_64_ibt<size>::fill_aplt_entry): Likewise.

19 months agoRemove two unnecessary casts
Tom Tromey [Tue, 13 Dec 2022 15:58:50 +0000 (08:58 -0700)]
Remove two unnecessary casts

A couple of calls to parse_probe_linespec had an unnecessary cast.  I
suspect this cast was never needed, but once commands were changed to
take a 'const' argument, they became completely obsolete.  Tested by
rebuilding.

19 months agogdb/testsuite: avoid creating temp file in gdb/testsuite/ directory
Andrew Burgess [Tue, 13 Dec 2022 15:37:17 +0000 (15:37 +0000)]
gdb/testsuite: avoid creating temp file in gdb/testsuite/ directory

After this commit:

  commit 33c1395cf5e9deec7733691ba32c450e5c27f757
  Date:   Fri Nov 11 15:26:46 2022 +0000

      gdb/testsuite: fix gdb.trace/unavailable-dwarf-piece.exp with Clang

The gdb.trace/unavailable-dwarf-piece.exp test script was creating a
temporary file in the build/gdb/testsuite/ directory, instead of in
the expected place in the outputs directory.

Fix this by adding a call to standard_output_file.

19 months ago[gdb/testsuite] Fix gdb.python/py-disasm.exp on s390x
Tom de Vries [Tue, 13 Dec 2022 12:06:15 +0000 (13:06 +0100)]
[gdb/testsuite] Fix gdb.python/py-disasm.exp on s390x

On s390x-linux, I run into:
...
(gdb) disassemble test^M
Dump of assembler code for function test:^M
   0x0000000001000638 <+0>:     stg     %r11,88(%r15)^M
   0x000000000100063e <+6>:     lgr     %r11,%r15^M
   0x0000000001000642 <+10>:    nop     0^M
=> 0x0000000001000646 <+14>:    nop     0^M
   0x000000000100064a <+18>:    nop     0^M
   0x000000000100064e <+22>:    lhi     %r1,0^M
   0x0000000001000652 <+26>:    lgfr    %r1,%r1^M
   0x0000000001000656 <+30>:    lgr     %r2,%r1^M
   0x000000000100065a <+34>:    lg      %r11,88(%r11)^M
   0x0000000001000660 <+40>:    br      %r14^M
End of assembler dump.^M
(gdb) FAIL: gdb.python/py-disasm.exp: global_disassembler=: disassemble test
...

The problem is that the test-case expects "nop" but on s390x we have instead
"nop\t0".

Fix this by allowing the insn.

Tested on s390x-linux and x86_64-linux.

19 months agogas: re-work line number tracking for macros and their expansions
Jan Beulich [Tue, 13 Dec 2022 08:11:53 +0000 (09:11 +0100)]
gas: re-work line number tracking for macros and their expansions

The PR gas/16908 workaround aimed at uniformly reporting line numbers
to reference macro invocation sites. As mentioned in a comment this may
be desirable for small macros, but often isn't for larger ones. As a
first step improve diagnostics to report both locations, while aiming at
leaving generated debug info unaltered.

Note that macro invocation context is lost for any diagnostics issued
only after all input was processed (or more generally for any use of
as_*_where(), as the functions can't know whether the passed in location
is related to [part of] the present stack of locations). To maintain the
intended workaround behavior for PR gas/16908, a new as_where() is
introduced to "look through" macro invocations, while the existing
as_where() is renamed (and used in only very few places for now). Down
the road as_where() will likely want to return a list of (file,line)
pairs.

19 months agoArm: avoid unhelpful uses of .macro in testsuite
Jan Beulich [Tue, 13 Dec 2022 08:11:16 +0000 (09:11 +0100)]
Arm: avoid unhelpful uses of .macro in testsuite

Macros with just a single use site are a little pointless to have, and
even in further cases .irp is more suitable for the purpose. Expand such
inline, avoiding the need to touch the testcases when diagnostics are
changed for code resulting from macro expansion.

While there also make what was "iter_mla" in sp-usage-thumb2-relax cover
smlatt as well, rather than testing smlabt twice.

19 months agoFix crash in is_nocall_function
Tom Tromey [Sun, 11 Dec 2022 19:48:07 +0000 (12:48 -0700)]
Fix crash in is_nocall_function

is_nocall_function anticipates only being called for a function or a
method.  However, PR gdb/29871 points out a situation where an unusual
expression -- but one that parses to a valid, if extremely weird,
function call -- breaks this assumption.

This patch changes is_nocall_function to remove this assert and
instead simply return 'false' in this case.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29871

19 months agoReplace gdbpy_should_stop with gdbpy_breakpoint_cond_says_stop
Johnson Sun [Fri, 23 Sep 2022 06:00:28 +0000 (14:00 +0800)]
Replace gdbpy_should_stop with gdbpy_breakpoint_cond_says_stop

In 2014, the function `gdbpy_should_stop' has been replaced with
`gdbpy_breakpoint_cond_says_stop'

This replaces `gdbpy_should_stop' with `gdbpy_breakpoint_cond_says_stop' in the
comments.

Since `gdbpy_should_stop' has been renamed as noted in `gdb/ChangeLog-2014':

* python/py-breakpoint.c (gdbpy_breakpoint_cond_says_stop): Renamed
from gdbpy_should_stop.  Change result type to enum scr_bp_stop.

Change-Id: I0ef3491ce5e057c5e75ef8b569803b30a5838575
Approved-By: Simon Marchi <simon.marchi@efficios.com>
19 months agoasan: mips_hi16_list segfault in bfd_get_section_limit_octets
Alan Modra [Mon, 12 Dec 2022 23:35:17 +0000 (10:05 +1030)]
asan: mips_hi16_list segfault in bfd_get_section_limit_octets

static variables like mips_hi16_list are nasty for applications using
bfd.  It is possible when opening and closing bfds with mis-matched
hi/lo relocs to leave a stale section pointer on the list.  That can
cause a segfault if multiple bfds are being processed.

Tidying the list when closing is sufficient to stop this happening
(and fixes small memory leaks).  This patch goes further and moves
mips_hi16_list to where it belongs in the bfd tdata.

* elf32-mips.c (bfd_elf32_close_and_cleanup(: Define.
* elf64-mips.c (bfd_elf64_close_and_cleanup): Define.
* elfn32-mips.c (bfd_elf32_close_and_cleanup(: Define.
* elfxx-mips.c (struct mips_hi16): Move earlier.
(mips_hi16_list): Move to..
(struct mips_elf_obj_tdata): ..here.
(_bfd_mips_elf_close_and_cleanup): New function.
(_bfd_mips_elf_hi16_reloc, _bfd_mips_elf_lo16_reloc),
(_bfd_elf_mips_get_relocated_section_contents): Adjust uses of
mips_hi16_list.
* elfxx-mips.h (_bfd_mips_elf_close_and_cleanup): Declare.

19 months agoAutomatic date update in version.in
GDB Administrator [Tue, 13 Dec 2022 00:00:37 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agolibctf: remove unnecessary zstd constructs
Indu Bhagat [Mon, 12 Dec 2022 18:41:06 +0000 (10:41 -0800)]
libctf: remove unnecessary zstd constructs

This patch is essentially a revert of
commit-id: 8818c80cbd4116ef5af171ec47c61167179e225c
(libctf: Add ZSTD_LIBS to LIBS so that ac_cv_libctf_bfd_elf can be true)

As the specific configure check now uses libtool, this explicit mention of the
dependency $ZSTD_LIBS is not needed anymore.

ChangeLog:

* libctf/Makefile.in: Regenerated.
* libctf/aclocal.m4: Likewise.
* libctf/config.h.in: Likewise.
* libctf/configure: Likewise.
* libctf/configure.ac: Remove ZSTD_LIBS from LIBS.  Cleanup
unused AC_ZSTD.

19 months agolibctf: remove AC_CONFIG_MACRO_DIR
Indu Bhagat [Mon, 12 Dec 2022 17:34:54 +0000 (09:34 -0800)]
libctf: remove AC_CONFIG_MACRO_DIR

ACLOCAL_AMFLAGS is being set already.  So using AC_CONFIG_MACRO_DIR is
unnecessary.

ChangeLog:

* libctf/configure: Regenerated.
* libctf/configure.ac: remove AC_CONFIG_MACRO_DIR usage.

19 months agolibctf: remove unnecessary zlib constructs
Indu Bhagat [Mon, 12 Dec 2022 17:34:36 +0000 (09:34 -0800)]
libctf: remove unnecessary zlib constructs

This dependency is managed via libtool.  So explicit addition to LDFLAGS
and LIBS is not necessary anymore.

ChangeLog:

* libctf/configure: Regenerated.
* libctf/configure.ac: remove zlib from LDFLAGS and LIBS.

19 months ago[gdb/testsuite] Fix PR20630 regression test in gdb.base/printcmds.exp
Tom de Vries [Mon, 12 Dec 2022 14:21:33 +0000 (15:21 +0100)]
[gdb/testsuite] Fix PR20630 regression test in gdb.base/printcmds.exp

On s390x-linux, I run into:
...
(gdb) print {unsigned char}{65}^M
$749 = 0 '\000'^M
(gdb) FAIL: gdb.base/printcmds.exp: print {unsigned char}{65}
...

In contrast, on x86_64-linux, we have:
...
(gdb) print {unsigned char}{65}^M
$749 = 65 'A'^M
(gdb) PASS: gdb.base/printcmds.exp: print {unsigned char}{65}
...

The first problem here is that the test is supposed to be a regression test
for PR20630, which can be reproduced (for an unfixed gdb) like this:
...
(gdb) p {unsigned char[]}{0x17}
gdbtypes.c:4641: internal-error: copy_type: \
  Assertion `TYPE_OBJFILE_OWNED (type)' failed.
...
but it's not due to insufficient quoting (note the dropped '[]').

That's easy to fix, but after that we have on s390 (big endian):
...
(gdb) print {unsigned char[]}{65}^M
$749 = ""^M
...
and on x86_64 (little endian):
...
(gdb) print {unsigned char[]}{65}^M
$749 = "A"^M
...

Fix this by using 0xffffffff, such that in both cases we have:
...
(gdb) print {unsigned char[]}{0xffffffff}^M
$749 = "\377\377\377\377"^M
...

Tested on x86_64-linux and s390x-linux.

19 months agoPR29893, buffer overflow in display_debug_addr
Alan Modra [Mon, 12 Dec 2022 13:57:11 +0000 (00:27 +1030)]
PR29893, buffer overflow in display_debug_addr

PR 29893
* dwarf.c (display_debug_addr): Sanity check dwarf5 unit_length
field.  Don't read past end.

19 months agoAnother Rust operator precedence bug
Tom Tromey [Mon, 12 Dec 2022 13:36:55 +0000 (06:36 -0700)]
Another Rust operator precedence bug

My earlier patch to fix PR rust/29859 introduced a new operator
precedence bug in the Rust parser.  Assignment operators are
right-associative in Rust.  And, while this doesn't often matter, as
Rust assignments always have the value (), still as a matter of
principle we should get this correct.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29859

19 months ago[gdb/testsuite] Fix gdb.base/write_mem.exp for big endian
Tom de Vries [Mon, 12 Dec 2022 13:25:58 +0000 (14:25 +0100)]
[gdb/testsuite] Fix gdb.base/write_mem.exp for big endian

On s390x-linux (big endian), I run into:
...
(gdb) x /xh main^M
0x1000638 <main>:       0x0000^M
(gdb) FAIL: gdb.base/write_mem.exp: x /xh main
...

In contrast, on x86_64-linux (little endian), we have the expected:
...
(gdb) x /xh main^M
0x4004a7 <main>:        0x4242^M
(gdb) PASS: gdb.base/write_mem.exp: x /xh main
...

The problem is that the test-case hard-codes expectations about endiannes by
writing an int-sized value (4 bytes in this case) and then printing only a
halfword by using "/h" (so, two bytes).

If we print 4 bytes, we have for s390x:
...
0x1000638 <main>:       0x00004242^M
...
and for x86_64:
...
0x4004a7 <main>:        0x00004242^M
...

Fix this by removing the "/h".

Tested on x86_64-linux and s390x-linux.

19 months agogdb: fix possible use-after-free when executing commands
Jan Vrany [Mon, 12 Dec 2022 13:16:14 +0000 (13:16 +0000)]
gdb: fix possible use-after-free when executing commands

In principle, `execute_command()` does following:

   struct cmd_list_element *c;
   c = lookup_cmd ( ... );
   ...
   /* If this command has been pre-hooked, run the hook first.  */
   execute_cmd_pre_hook (c);
   ...
   /* ...execute the command `c` ...*/
   ...
   execute_cmd_post_hook (c);

This may lead into use-after-free error.  Imagine the command
being executed is a user-defined Python command that redefines
itself.  In that case, struct `cmd_list_element` pointed to by
`c` is deallocated during its execution so it is no longer valid
when post hook is executed.

To fix this case, this commit looks up the command once again
after it is executed to get pointer to (possibly newly allocated)
`cmd_list_element`.

19 months agox86: further re-work insn/suffix recognition to also cover MOVSX
Jan Beulich [Mon, 12 Dec 2022 13:01:02 +0000 (14:01 +0100)]
x86: further re-work insn/suffix recognition to also cover MOVSX

PR gas/29524

Having templates with a suffix explicitly present has always been
quirky. After prior adjustment all that's left to also eliminate the
anomaly from move-with-sign-extend is to consolidate the insn templates
and to make may_need_pass2() cope (plus extend testsuite coverage).

19 months agox86: drop (now) stray IsString
Jan Beulich [Mon, 12 Dec 2022 12:53:40 +0000 (13:53 +0100)]
x86: drop (now) stray IsString

The need for them on the operand-less string insns has gone away with
the removal of maybe_adjust_templates() and associated logic. Since
i386_index_check() needs adjustment then anyway, take the opportunity
and also simplify it, possible again as a result of said removal (plus
the opcode template adjustments done here).

19 months agox86: move bad-use-of-TLS-reloc check
Jan Beulich [Mon, 12 Dec 2022 12:53:13 +0000 (13:53 +0100)]
x86: move bad-use-of-TLS-reloc check

Having it in match_template() is unhelpful. Neither does looking for the
next template to possibly match make any sense in that case, nor is the
resulting diagnostic making clear what the problem is.

While moving the check, also generalize it to include all SIMD and VEX-
encoded insns. This way an existing conditional can be re-used in
md_assemble(). Note though that this still leaves a lof of insns which
are also wrong to use with these relocations.

Further fold the remaining check (BFD_RELOC_386_GOT32) with the XRELEASE
related one a few lines down. This again allows re-using an existing
conditional.

19 months agox86-64: allow HLE store of accumulator to absolute 32-bit address
Jan Beulich [Mon, 12 Dec 2022 12:52:47 +0000 (13:52 +0100)]
x86-64: allow HLE store of accumulator to absolute 32-bit address

In commit 1212781b35c9 ("ix86: allow HLE store of accumulator to
absolute address") I was wrong to exclude 64-bit code. Dropping the
check also leads to better diagnostics in 64-bit code ("MOV", after
all, isn't invalid with "XRELEASE").

While there also limit the amount of further checks done: The operand
type checks that were there were effectively redundant with other ones
anyway, plus it's quite fine to also have "xrelease mov <disp>, %eax"
look for the next MOV template (in fact again also improving
diagnostics).

19 months agoix86: don't recognize/derive Q suffix in the common case
Jan Beulich [Mon, 12 Dec 2022 12:52:15 +0000 (13:52 +0100)]
ix86: don't recognize/derive Q suffix in the common case

Have its use, except where actually legitimate, result in the same "only
supported in 64-bit mode" diagnostic as emitted for other 64-bit only
insns. Also suppress deriving of the suffix in Intel mode except in the
legitimate cases. This in exchange allows dropping the respective code
from match_template().

To maintain reasonable diagnostics (in particular to avoid "`mov' is
only supported in 64-bit mode" on the SIMD forms of MOVQ) we need to
defer parse_insn()'s emitting of errors unrelated to prefix parsing.
Utilize i.error just like match_template() does.

Oddly enough despite gcc's preference towards FILDQ and FIST{,T}Q we
had no testcase whatsoever for these. Therefore such tests are being
added. Note that the removed line in the x86-64-lfence-load testcase
was redundant with the exact same one a few lines up.

19 months agox86: re-work insn/suffix recognition
Jan Beulich [Mon, 12 Dec 2022 12:51:46 +0000 (13:51 +0100)]
x86: re-work insn/suffix recognition

Having templates with a suffix explicitly present has always been
quirky. Introduce a 2nd matching pass in case the 1st one couldn't find
a suitable template _and_ didn't itself already need to trim off a
suffix to find a match at all. This requires error reporting adjustments
(albeit luckily fewer than I was afraid might be necessary), as errors
previously reported during matching now need deferring until after the
2nd pass (because, obviously, we must not emit any error if the 2nd pass
succeeds). While also related to PR gas/29524, it was requested that
move-with-sign-extend be left as broken as it always was.

PR gas/29525
Note that with the dropped CMPSD and MOVSD Intel Syntax string insn
templates taking operands, mixed IsString/non-IsString template groups
(with memory operands) cannot occur anymore. With that
maybe_adjust_templates() becomes unnecessary (and is hence being
removed).

PR gas/29526
Note further that while the additions to the intel16 testcase aren't
really proper Intel syntax, we've been permitting all of those except
for the MOVD variant. The test therefore is to avoid re-introducing such
an inconsistency.

19 months agox86: constify parse_insn()'s input
Jan Beulich [Mon, 12 Dec 2022 12:50:31 +0000 (13:50 +0100)]
x86: constify parse_insn()'s input

The function doesn't alter its input buffer: Reflect this in its
prototype. To avoid using any kind of cast, simply calculate the update
of "line" from the function's input and output.

19 months agox86: revert disassembler parts of "x86: Allow 16-bit register source for LAR and...
Jan Beulich [Mon, 12 Dec 2022 12:49:56 +0000 (13:49 +0100)]
x86: revert disassembler parts of "x86: Allow 16-bit register source for LAR and LSL"

This reverts the disassembler parts of 859aa2c86dc9 ("x86: Allow 16-bit
register source for LAR and LSL"), adjusting testcases as necessary.
That change was itself a partial revert of c9f5b96bdab0 ("x86: correct
handling of LAR and LSL"), without actually saying so. While the earlier
commit was properly agreed upon, the partial revert was not, and hence
should not have been committed. This is even more so that the revert
part of that change wasn't even necessary to address PR gas/29844.

19 months agoPR29892, Field file_table of struct module is uninitialized
Alan Modra [Mon, 12 Dec 2022 08:31:08 +0000 (19:01 +1030)]
PR29892, Field file_table of struct module is uninitialized

PR 29892
* vms-alphs.c (new_module): Use bfd_zmalloc to alloc file_table.
(parse_module): Rewrite file_table reallocation code and clear.

19 months agoLack of bounds checking in vms-alpha.c parse_module
Alan Modra [Mon, 12 Dec 2022 07:58:49 +0000 (18:28 +1030)]
Lack of bounds checking in vms-alpha.c parse_module

PR 29873
PR 29874
PR 29875
PR 29876
PR 29877
PR 29878
PR 29879
PR 29880
PR 29881
PR 29882
PR 29883
PR 29884
PR 29885
PR 29886
PR 29887
PR 29888
PR 29889
PR 29890
PR 29891
* vms-alpha.c (parse_module): Make length param bfd_size_type.
Delete length == -1 checks.  Sanity check record_length.
Sanity check DST__K_MODBEG, DST__K_RTNBEG, DST__K_RTNEND lengths.
Sanity check DST__K_SOURCE and DST__K_LINE_NUM elements
before accessing.
(build_module_list): Pass dst_section size to parse_module.

19 months agoPR29872, uninitialised value in display_debug_lines_decoded dwarf.c:5413
Alan Modra [Mon, 12 Dec 2022 05:20:42 +0000 (15:50 +1030)]
PR29872, uninitialised value in display_debug_lines_decoded dwarf.c:5413

Plus segvs if the C-library doesn't handle printf %s of NULL.

PR 29872
* dwarf.c (null_name): New function.
(process_debug_info): Use it here..
(display_debug_lines_raw): ..and here..
(display_debug_lines_decoded): ..and here.  xcalloc directory_table.
Simplify xcalloc of file_table.

19 months agogas/codeview: avoid "shadowing" of glibc function name
Jan Beulich [Mon, 12 Dec 2022 08:49:44 +0000 (09:49 +0100)]
gas/codeview: avoid "shadowing" of glibc function name

While not "index" this time, old enough glibc also has an (unguarded)
declaration of fileno() in stdio.h, which triggers a "shadows a global
declaration" warning with our choice of warning level and with at least
some gcc versions.

19 months agox86: generate template sets data at build time
Jan Beulich [Mon, 12 Dec 2022 07:49:26 +0000 (08:49 +0100)]
x86: generate template sets data at build time

Speed up gas startup by avoiding runtime allocation of the instances of
type "templates". At the same time cut the memory requirement to just
very little over half (not even accounting for any overhead
notes_alloc() may incur) by reusing the "end" slot of a preceding entry
for the "start" slot of the subsequent one.

19 months agox86: drop sentinel from i386_optab[]
Jan Beulich [Mon, 12 Dec 2022 07:49:00 +0000 (08:49 +0100)]
x86: drop sentinel from i386_optab[]

Now that the table is local to gas, ARRAY_SIZE() can be used to
determine the end of the table. Re-arrange the processing loop in
md_begin() accordingly, at the same time folding the two calls to
notes_alloc() into just one.

19 months agox86: add generated tables dependency check to gas
Jan Beulich [Mon, 12 Dec 2022 07:48:25 +0000 (08:48 +0100)]
x86: add generated tables dependency check to gas

As requested by H.J., just for the sake of people potentially building
in gas/ alone, add a check that the generated files in opcodes/ are
actually up-to-date. Personally I think this should at best be a
warning, but I can see how this may not be easily noticable among other
make output (depending in particular on the verbosity level).

19 months agox86: break gas dependency on libopcodes
Jan Beulich [Mon, 12 Dec 2022 07:47:52 +0000 (08:47 +0100)]
x86: break gas dependency on libopcodes

gas doesn't use anything from libopcodes anymore - suppress linking in
that library.

19 months agox86: remove i386-opc.c
Jan Beulich [Mon, 12 Dec 2022 07:47:26 +0000 (08:47 +0100)]
x86: remove i386-opc.c

Remove the now empty i386-opc.c. To compensate, tie table generation in
opcodes/ to the building of i386-dis.o, despite the file not really
depending on the generated data.

19 months agox86: instantiate i386_{op,reg}tab[] in gas instead of in libopcodes
Jan Beulich [Mon, 12 Dec 2022 07:46:47 +0000 (08:46 +0100)]
x86: instantiate i386_{op,reg}tab[] in gas instead of in libopcodes

Unlike many other architectures, x86 does not share an opcode table
between assembly and disassembly. Any consumer of libopcodes would only
ever access one of the two. Since gas is the only consumer of the
assembly data, move it there. While doing so mark respective entities
"static" in i386-gen (we may want to do away with i386_regtab_size
altogether).

This also shrinks the number of relocations to be processed for
libopcodes.so by about 30%.

19 months agoAutomatic date update in version.in
GDB Administrator [Mon, 12 Dec 2022 00:00:52 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agoPR29870, objdump SEGV in display_debug_lines_decoded dwarf.c:5524
Alan Modra [Sun, 11 Dec 2022 04:17:57 +0000 (14:47 +1030)]
PR29870, objdump SEGV in display_debug_lines_decoded dwarf.c:5524

DWARF5 directory and file table allow more opportunity for fuzzers
to break things.  There are likely other places in dwarf.c that should
be fixed too.

PR 29870
* dwarf.c (display_debug_lines_decoded): Handle NULL file_table
name entry.

19 months agoAutomatic date update in version.in
GDB Administrator [Sun, 11 Dec 2022 00:00:34 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months ago[gdb/tdep] Fix larl handling in s390_displaced_step_fixup
Tom de Vries [Sat, 10 Dec 2022 14:40:34 +0000 (15:40 +0100)]
[gdb/tdep] Fix larl handling in s390_displaced_step_fixup

On s390x-linux with target board unix/-m31, I run into:
...
(gdb) PASS: gdb.guile/scm-lazy-string.exp: bad length
print ptr^M
$1 = 0x804006b0 <error: Cannot access memory at address 0x804006b0>^M
(gdb) FAIL: gdb.guile/scm-lazy-string.exp: ptr: print ptr
...

A minimal example is:
...
$ gdb -q -batch -ex "set trace-commands on" -x gdb.in
+file scm-lazy-string
+break main
Breakpoint 1 at 0x4005d2: file scm-lazy-string.c, line 23.
+run

Breakpoint 1, main () at scm-lazy-string.c:23
23        const char *ptr = "pointer";
+step
24        const char array[] = "array";
+print ptr
$1 = 0x804006b0 <error: Cannot access memory at address 0x804006b0>
...

If we delete the breakpoint after running to it, we have instead the expected:
...
+delete
+step
24        const char array[] = "array";
+print ptr
$1 = 0x4006b0 "pointer"
...

The problem is in displaced stepping, forced by the presence of the breakpoint,
when stepping over this insn:
...
  0x4005d2 <main+10>      larl    %r1,0x4006b0
...

With normal stepping we have:
...
(gdb) p /x $r1
$2 = 0x3ff004006b0
...
but with displaced stepping we have instead (note the 0x80000000 difference):
...
(gdb) p /x $r1
$1 = 0x3ff804006b0
(gdb)
...

The difference comes from this code in s390_displaced_step_fixup:
...
  /* Handle LOAD ADDRESS RELATIVE LONG.  */
  else if (is_ril (insn, op1_larl, op2_larl, &r1, &i2))
    {
      /* Update PC.  */
      regcache_write_pc (regs, from + insnlen);
      /* Recompute output address in R1.  */
      regcache_cooked_write_unsigned (regs, S390_R0_REGNUM + r1,
                                      amode | (from + i2 * 2));
    }
...
where the "amode |" adds the 0x80000000.

Fix this by removing the "amode |".

Tested on s390-linux, with native and target board unix/-m31.

Approved-By: Ulrich Weigand <uweigand@de.ibm.com>
19 months agoAutomatic date update in version.in
GDB Administrator [Sat, 10 Dec 2022 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agoobjdump: sframe: fix memory leaks
Indu Bhagat [Fri, 9 Dec 2022 18:25:46 +0000 (10:25 -0800)]
objdump: sframe: fix memory leaks

ChangeLog:

* binutils/objdump.c (dump_section_sframe): free up contents and
SFrame decoder context on exit.

19 months agolibsframe: rename API sframe_fde_func_info to sframe_fde_create_func_info
Indu Bhagat [Fri, 9 Dec 2022 18:25:31 +0000 (10:25 -0800)]
libsframe: rename API sframe_fde_func_info to sframe_fde_create_func_info

The new name better reflects the purpose of the function.

ChangeLog:

* bfd/elfxx-x86.c (_bfd_x86_elf_create_sframe_plt): Use new
name.
* libsframe/sframe.c (sframe_fde_create_func_info): Rename
sframe_fde_func_info to this.
* libsframe/testsuite/libsframe.encode/encode-1.c: Use new name.

include/ChangeLog:

* sframe-api.h (sframe_fde_create_func_info): Rename
sframe_fde_func_info to this.

19 months agogas: sframe: fine tune the fragment fixup for SFrame func info
Indu Bhagat [Fri, 9 Dec 2022 18:25:14 +0000 (10:25 -0800)]
gas: sframe: fine tune the fragment fixup for SFrame func info

SFrame function info is an unsigned 8-bit field comprising of the following
(from LSB to MSB):
  - 4-bits: FRE type
  - 1-bit: FRE start address encoding
  - 3-bits: Unused

At the moment, the most-significat 4-bits are zero (The FRE start
address encoding of SFRAME_FDE_TYPE_PCINC has a value of zero, and the upper
3-bits are unused). So the current implementation works without this patch.

To be precise, however, the fragment fixup logic is meant to fixup only the
least-significant 4-bits (i.e., only the FRE type needs to be updated
according to the function size).

This patch makes the gas implementation a bit more resilient: In the
future, when the format does evolve to make use of the currently unused
3-bits in various ways, the values in those 3-bits can be propagated
unchanged while the fragment fixup continues to update the lowermost
4-bits to indicate the selected FRE type.

ChangeLog:

* gas/gen-sframe.c (create_func_info_exp): New definition.
(output_sframe_funcdesc): Call create_func_info_exp.
* gas/sframe-opt.c (sframe_estimate_size_before_relax): The
associated fragment uses O_modulus now.
(sframe_convert_frag): Adjust the fragment fixup code according
to the new composite exp.

19 months agosframe: gas: libsframe: define constants and remove magic numbers
Indu Bhagat [Fri, 9 Dec 2022 18:23:07 +0000 (10:23 -0800)]
sframe: gas: libsframe: define constants and remove magic numbers

Define constants in sframe.h for the various limits associated with the
range of offsets that can be encoded in the start address of an SFrame
FRE. E.g., sframe_frame_row_entry_addr1 is used when start address
offset can be encoded as 1-byte unsigned value.

Update the code in gas to use these defined constants as it checks for
these limits, and remove the usage of magic numbers.

ChangeLog:

* gas/sframe-opt.c (sframe_estimate_size_before_relax):
(sframe_convert_frag): Do not use magic numbers.
* libsframe/sframe.c (sframe_calc_fre_type): Likewise.

include/ChangeLog:

* sframe.h (SFRAME_FRE_TYPE_ADDR1_LIMIT): New constant.
(SFRAME_FRE_TYPE_ADDR2_LIMIT): Likewise.
(SFRAME_FRE_TYPE_ADDR4_LIMIT): Likewise.

19 months agosframe.h: make some macros more precise
Indu Bhagat [Fri, 9 Dec 2022 18:22:31 +0000 (10:22 -0800)]
sframe.h: make some macros more precise

include/ChangeLog:

* sframe.h (SFRAME_V1_FUNC_INFO): Use specific bits only.
(SFRAME_V1_FRE_INFO): Likewise.

19 months agolibsframe: minor formatting nits
Indu Bhagat [Fri, 9 Dec 2022 18:21:57 +0000 (10:21 -0800)]
libsframe: minor formatting nits

ChangeLog:

* libsframe/sframe.c: Fix formatting nits.

19 months ago[aarch64] Add TPIDR2 register support for Linux
Luis Machado [Mon, 22 Aug 2022 16:04:41 +0000 (17:04 +0100)]
[aarch64] Add TPIDR2 register support for Linux

With the AArch64 Scalable Matrix Extension we have a new TPIDR2 register, and
it will be added to the existing NT_ARM_TLS register set. Kernel patches are
being reviewed here:

https://lore.kernel.org/linux-arm-kernel/20220818170111.351889-1-broonie@kernel.org/

From GDB's perspective, we handle it in a similar way to the existing TPIDR
register. But we need to consider cases of systems that only have TPIDR and
systems that have both TPIDR and TPIDR2.

With that in mind, the following patch adds the required code to support
TPIDR2 and turns the org.gnu.gdb.aarch64.tls feature into a
dynamically-generated target description as opposed to a static target
description containing only TPIDR.

That means we can remove the gdb/features/aarch64-tls.xml file and replace the
existing gdb/features/aarch64-tls.c auto-generated file with a new file that
dynamically generates the target description containing either TPIDR alone or
TPIDR and TPIDR2.

In the future, when *BSD's start to support this register, they can just
enable it as is being done for the AArch64 Linux target.

The core file read/write code has been updated to support TPIDR2 as well.

On GDBserver's side, there is a small change to the find_regno function to
expose a non-throwing version of it.

It always seemed strange to me how find_regno causes the whole operation to
abort if it doesn't find a particular register name. The patch moves code
from find_regno into find_regno_no_throw and makes find_regno call
find_regno_no_throw instead.

This allows us to do register name lookups to find a particular register
number without risking erroring out if nothing is found.

The patch also adjusts the feature detection code for aarch64-fbsd, since
the infrastructure is shared amongst all aarch64 targets. I haven't added
code to support TPIDR2 in aarch64-fbsd though, as I'm not sure when/if
that will happen.

19 months agoPR28306, segfault in _bfd_mips_elf_reloc_unshuffle
Alan Modra [Fri, 9 Dec 2022 07:28:58 +0000 (17:58 +1030)]
PR28306, segfault in _bfd_mips_elf_reloc_unshuffle

Access to section data during relocation processing should be bounds
checked, as it is in bfd_perform_relocation.  bfd_perform_relocation
does these checks after any special_function is called.  So a reloc
special_function needs to do its own bounds checking before accessing
section data.  This patch adds many such checks to the mips backend.

Checking mips relocs is not without some difficulty.  See the comment
in _bfd_mips_reloc_offset_in_range.  In a multitple reloc sequence
applied to the same location, relocs that may appear somewhere other
than the last one of the sequence need to be treated specially since
they apply to the addend for the next relocation rather than the
section contents.  If the addend is in the section then it needs to be
checked but not when the addend is in the reloc.  check_inplace
handles this situation.  _bfd_mips_reloc_offset_in_range with
check_shuffle handles the case where contents are shuffled before
applying the relocation.

PR 28306
* elf32-mips.c (_bfd_mips_elf32_gprel16_reloc): Check reloc
address using _bfd_mips_reloc_offset_in_range.
(gprel32_with_gp, mips16_gprel_reloc): Likewise.
* elf64-mips.c (mips_elf64_gprel32_reloc): Likewise.
(mips16_gprel_reloc): Likewise.
* elfn32-mips.c (mips16_gprel_reloc): Likewise.
(gprel32_with_gp): Check reloc address using
bfd_reloc_offset_in_range.
* elfxx-mips.h (enum reloc_check): Define.
(_bfd_mips_reloc_offset_in_range): Declare.
* elfxx-mips.c (needs_shuffle): New function.
(_bfd_mips_elf_reloc_unshuffle, _bfd_mips_elf_reloc_shuffle): Use it.
(_bfd_mips_reloc_offset_in_range): New function.
(_bfd_mips_elf_gprel16_with_gp): Move reloc address checks to
partial_inplace handling.  Use bfd_reloc_offset_in_range.
(_bfd_mips_elf_lo16_reloc): Check reloc address using
bfd_reloc_offset_in_range.
(_bfd_mips_elf_generic_reloc): Check reloc address using
_bfd_mips_reloc_offset_in_range.
(mips_elf_calculate_relocation): Check reloc address before calling
mips_elf_nullify_got_load.
(_bfd_mips_elf_check_relocs): Likewise.
(mips_elf_read_rel_addend): Add sec param, check reloc address
before reading.  Adjust callers.
(mips_elf_add_lo16_rel_addend): Add sec param, adjust callers.

19 months ago[gdb/testsuite] Fix gdb.guile/scm-symtab.exp for ppc64le
Tom de Vries [Fri, 9 Dec 2022 09:41:13 +0000 (10:41 +0100)]
[gdb/testsuite] Fix gdb.guile/scm-symtab.exp for ppc64le

On powerpc64le-linux, I run into:
...
(gdb) PASS: gdb.guile/scm-symtab.exp: step out of func2
guile (print (> (sal-line (find-pc-line (frame-pc (selected-frame)))) line))^M
= #f^M
(gdb) FAIL: gdb.guile/scm-symtab.exp: test find-pc-line with resume address
...

The problem is as follows: the instructions for the call to func2 are:
...
    1000070c:   39 00 00 48     bl      10000744 <func1>
    10000710:   00 00 00 60     nop
    10000714:   59 00 00 48     bl      1000076c <func2>
    10000718:   00 00 00 60     nop
    1000071c:   00 00 20 39     li      r9,0
...
and the corresponding line number info is:
...
scm-symtab.c:
File name     Line number    Starting address    View    Stmt
scm-symtab.c           42          0x1000070c               x
scm-symtab.c           43          0x10000714               x
scm-symtab.c           44          0x1000071c               x
...

The test-case looks at the line numbers for two insns:
- the insn of the call to func2 (0x10000714), and
- the insn after that (0x10000718),
and expects the line number of the latter to be greater than the line number
of the former.

However, both insns have the same line number: 43.

Fix this by replacing ">" with ">=".

Tested on x86_64-linux and powerpc64le-linux.

19 months agoAutomatic date update in version.in
GDB Administrator [Fri, 9 Dec 2022 00:01:02 +0000 (00:01 +0000)]
Automatic date update in version.in

19 months agox86-64: Remove BND from 64-bit IBT PLT
H.J. Lu [Tue, 6 Dec 2022 19:35:42 +0000 (11:35 -0800)]
x86-64: Remove BND from 64-bit IBT PLT

Since MPX support has been removed from x86-64 psABI, remove BND from
64-bit IBT PLT by using x32 IBT PLT.

bfd/

PR ld/29851
* elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Also check
x32 IBT PLT for 64-bit.
(elf_x86_64_link_setup_gnu_properties): Always use x32 IBT PLT.

ld/

PR ld/29851
* testsuite/ld-x86-64/ibt-plt-1.d: Updated.
* testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-2d.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3a.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3b.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3c.d: Likewise.
* testsuite/ld-x86-64/ibt-plt-3d.d: Likewise.
* testsuite/ld-x86-64/plt-main-ibt-x32.dd: Moved to ...
* testsuite/ld-x86-64/plt-main-ibt.dd: This.
* testsuite/ld-x86-64/x86-64.exp: Don't use plt-main-ibt-x32.dd.

19 months ago[gdb/testsuite] Require debug info for gdb.tui/tui-layout-asm-short-prog.exp
Tom de Vries [Thu, 8 Dec 2022 14:35:47 +0000 (15:35 +0100)]
[gdb/testsuite] Require debug info for gdb.tui/tui-layout-asm-short-prog.exp

When running test-case gdb.tui/tui-layout-asm-short-prog.exp on SLE-12-SP3
aarch64, I run into:
...
FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents
FAIL: gdb.tui/tui-layout-asm-short-prog.exp: check asm box contents again
...
due to:
...
(gdb) file tui-layout-asm-short-prog^M
Reading symbols from tui-layout-asm-short-prog...^M
(No debugging symbols found in tui-layout-asm-short-prog)^M
...

I managed to reproduce the same behaviour on openSUSE Leap 15.4 x86_64, by
removing the debug option.

Fix this by making the test-case unsupported if no debug info is found.

Tested on x86_64-linux.

19 months agogdb/testsuite: update a pattern in gdb_file_cmd
Enze Li [Thu, 8 Dec 2022 14:35:47 +0000 (15:35 +0100)]
gdb/testsuite: update a pattern in gdb_file_cmd

When building GDB with the following CFLAGS and CXXFLAGS as part of
configure line:

    CFLAGS=-std=gnu11 CXXFLAGS=-std=gnu++11

Then run the selftest.exp, I see:

======
Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp
...
FAIL: gdb.gdb/selftest.exp: run until breakpoint at captured_main
WARNING: Couldn't test self

                === gdb Summary ===

 # of unexpected failures        1
/home/lee/dev/binutils-gdb/gdb/gdb version  13.0.50.20221206-git -nw -nx
-iex "set height 0" -iex "set width 0" -data-directory
/home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory
======

It is the fact that when I use the previously mentioned CFLAGS and
CXXFLAGS as part of the configuration line, the default value (-O2 -g)
is overridden, then GDB has no debug information.  When there's no debug
information, GDB should not run the testcase in selftest.exp.

The root cause of this FAIL is that the $gdb_file_cmd_debug_info didn't
get the right value ("nodebug") during the gdb_file_cmd procedure.

That's because in this commit,

  commit 3453e7e409f44a79ac6695589836edb8a49bfb08
  Date:   Sat May 19 11:25:20 2018 -0600

    Clean up "Reading symbols" output

It changed "no debugging..." to "No debugging..." which causes the above
problem.  This patch only updates the corresponding pattern to fix this
issue.

With this patch applied, I see:

======
Running /home/lee/dev/binutils-gdb/gdb/testsuite/gdb.gdb/selftest.exp
...

                === gdb Summary ===

 # of untested testcases         1
/home/lee/dev/binutils-gdb/gdb/gdb version  13.0.50.20221206-git -nw -nx
-iex "set height 0" -iex "set width 0" -data-directory
/home/lee/dev/binutils-gdb/gdb/testsuite/../data-directory
======

Tested on x86_64-linux.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
19 months agoUpdate the description of the linker script's TYPE directive.
Nick Clifton [Thu, 8 Dec 2022 13:06:31 +0000 (13:06 +0000)]
Update the description of the linker script's TYPE directive.

PR 29861
* ld.texi (Output Section Type): Note that setting the output
section type only works if the section contains untyped data.

19 months agogdb: skip objfiles with no BFD in DWARF unwinder
Jan Vrany [Thu, 8 Dec 2022 11:30:25 +0000 (11:30 +0000)]
gdb: skip objfiles with no BFD in DWARF unwinder

While playing with JIT reader I experienced GDB to crash on null-pointer
dereference when stepping through non-jitted code.

The problem was that dwarf2_frame_find_fde () assumed that all objfiles
have BFD but that's not always true. To address this problem, this
commit skips such objfiles.

To test the fix we put breakpoint in jit_function_add (). The JIT reader
does not know how unwind this function so unwinding eventually falls
back to DWARF unwinder which in turn iterates over objfiles. Since the
the code is jitted, it is guaranteed it would eventually process JIT
objfile.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
19 months agolibctf: avoid potential double free
Alan Modra [Thu, 8 Dec 2022 01:15:12 +0000 (11:45 +1030)]
libctf: avoid potential double free

* ctf-link.c (ctf_link_add_cu_mapping): Set t NULL after free.

19 months agoAutomatic date update in version.in
GDB Administrator [Thu, 8 Dec 2022 00:00:42 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agoPowerPC: Add support for RFC02655 - Saturating Subtract Instruction
Peter Bergner [Tue, 8 Nov 2022 23:41:52 +0000 (17:41 -0600)]
PowerPC: Add support for RFC02655 - Saturating Subtract Instruction

opcodes/
* ppc-opc.c (XOL): New define.
(XOL_MASK): Likewise.
(powerpc_opcodes): Add subfus, subfus., subwus, subwus., subdus, subdus.

gas/
* testsuite/gas/ppc/rfc02655.s: New test.
* testsuite/gas/ppc/rfc02655.d: Likewise
* testsuite/gas/ppc/future-raw.s: Likewise.
* testsuite/gas/ppc/future-raw.d: Likewise.
* testsuite/gas/ppc/ppc.exp: Run them.

19 months agoPowerPC: Add support for RFC02656 - Enhanced Load Store with Length Instructions
Peter Bergner [Tue, 8 Nov 2022 18:40:08 +0000 (12:40 -0600)]
PowerPC: Add support for RFC02656 - Enhanced Load Store with Length Instructions

opcodes/
* ppc-opc.c (PPCVSXF): New define.
(powerpc_opcodes): Add lxvrl, lxvrll, lxvprl, lxvprll, stxvrl,
stxvrll, stxvprl, stxvprl.

gas/
* testsuite/gas/ppc/rfc02656.s: New test.
* testsuite/gas/ppc/rfc02656.d: Likewise.
* testsuite/gas/ppc/ppc.exp: Run it.

19 months agogdb: add invalidate_selected_frame function
Simon Marchi [Fri, 2 Dec 2022 18:00:47 +0000 (13:00 -0500)]
gdb: add invalidate_selected_frame function

Instead of using `select_frame (nullptr)` to invalidate the selected
frame, introduce a function to do that.  There is no change in behavior,
but it makes the intent a bit clearer.  It also allows adding an assert
in select_frame that fi is not nullptr, so it avoids passing nullptr by
mistake.

Change-Id: I61643f46bc8eca428334513ebdaadab63997bdd0
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
19 months ago[gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp
Tom de Vries [Wed, 7 Dec 2022 15:45:26 +0000 (16:45 +0100)]
[gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp

Add KFAILs in test-case gdb.base/longjmp.exp for PR gdb/26967, covering
various ways that gdb is unable to recover the longjmp target if the libc
probe is not supported.

Tested on x86_64-linux.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
19 months agoRemove unnecessary xstrdup from bppy_init
Tom Tromey [Wed, 7 Dec 2022 15:10:55 +0000 (08:10 -0700)]
Remove unnecessary xstrdup from bppy_init

I saw that bppy_init used a non-const "char *".  Fixing this revealed
that the xstrdup here was also unnecessary, so this patch removes it.

19 months agocoff make_a_section_from_file tidy
Alan Modra [Wed, 7 Dec 2022 04:37:47 +0000 (15:07 +1030)]
coff make_a_section_from_file tidy

Also support compressing a few more sections.

* coffgen.c (make_a_section_from_file): Rename return_section
to newsect.  Don't try to be clever matching section name.
Compress .gnu.debuglto_.debug_ and .gnu.linkonce.wi. too.
Only rename debug sections when decompressing for linker.

19 months agogas compress_debug tidy
Alan Modra [Wed, 7 Dec 2022 04:16:16 +0000 (14:46 +1030)]
gas compress_debug tidy

* write.c (compress_debug): Don't set up "ob" until after
seginfo NULL check.  Simplify SEC_CONTENTS test.  Localise
variables.  Use bfd_debug_name_to_zdebug.

19 months ago_bfd_elf_slurp_secondary_reloc_section sanity check
Alan Modra [Wed, 7 Dec 2022 03:19:49 +0000 (13:49 +1030)]
_bfd_elf_slurp_secondary_reloc_section sanity check

* elf.c (_bfd_elf_slurp_secondary_reloc_section): Sanity check
section header against file size.  Avoid overflow in
reloc_count.

19 months agobfd_compress_section_contents access to elf_section_data
Alan Modra [Wed, 7 Dec 2022 03:15:46 +0000 (13:45 +1030)]
bfd_compress_section_contents access to elf_section_data

* compress.c (bfd_compress_section_contents): Don't access
elf_section_data for non-ELF.

19 months agoCompression tidy and fixes
Alan Modra [Tue, 6 Dec 2022 22:58:18 +0000 (09:28 +1030)]
Compression tidy and fixes

Tidies:
- Move stuff from bfd-in.h and libbfd.c to compress.c
- Delete COMPRESS_DEBUG from enum compressed_debug_section_type
- Move compress_debug field out of link_info to ld_config.
Fixes:
- Correct test in bfd_convert_section_setup to use obfd flags,
  not ibfd.
- Apply bfd_applicable_file_flags to compression bfd flags added
  by gas and ld to the output bfd.

bfd/
* bfd-in.h (enum compressed_debug_section_type),
(struct compressed_type_tuple),
(bfd_get_compression_algorithm),
(bfd_get_compression_algorithm_name),
* libbfd.c (compressed_debug_section_names),
(bfd_get_compression_algorithm),
(bfd_get_compression_algorithm_name): Move..
* compress.c: ..to here, deleting COMPRESS_DEBUG from
enum compressed_debug_section_type.
(bfd_convert_section_setup): Test obfd flags not ibfd for
compression flags.
* elf.c (elf_fake_sections): Replace link_info->compress_debug
test with abfd->flags test.
* bfd-in2.h: Regenerate.
binutils/
* objcopy.c (copy_file): Tidy setting of bfd compress flags.
Expand comment.
gas/
* write.c (compress_debug): Test bfd compress flags rather than
flag_compress_debug.
(write_object_file): Apply bfd_applicable_file_flags to compress
debug flags added to output bfd.
include/
* bfdlink.h (struct bfd_link_info): Delete compress_debug.
ld/
* ld.h (ld_config_type): Add compress_debug.
* emultempl/elf.em: Replace references to link_info.compress_debug
with config.compress_debug.
* lexsup.c (elf_static_list_options): Likewise.
* ldmain.c (main): Likewise.  Apply bfd_applicable_file_flags
to compress debug flags added to output bfd.

19 months agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Dec 2022 00:00:34 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agobfd: Avoid signed overflow for new_size adjustment
H.J. Lu [Tue, 6 Dec 2022 20:54:43 +0000 (12:54 -0800)]
bfd: Avoid signed overflow for new_size adjustment

When bfd_size_type is unsigned 64-bit integer and sizeof is unsigned
32-bit integer, subtraction in

*new_size += sizeof (Elf32_External_Chdr) - sizeof (Elf64_External_Chdr);

will overflow.  Use

*new_size -= sizeof (Elf64_External_Chdr) - sizeof (Elf32_External_Chdr);

to avoid overflow.

PR binutils/29860
* compress.c (bfd_convert_section_setup): Avoid signed overflow
for new_size adjustment.

19 months agoCosmetic fix in ppc-sysv-tdep.c
Tom Tromey [Tue, 6 Dec 2022 15:59:09 +0000 (08:59 -0700)]
Cosmetic fix in ppc-sysv-tdep.c

This is just a couple of cosmetic fixes in ppc-sysv-tdep.c: fixing
some formatting and correcting a typo.

19 months agoFix operator precedence bug in Rust parser
Tom Tromey [Tue, 6 Dec 2022 14:41:52 +0000 (07:41 -0700)]
Fix operator precedence bug in Rust parser

PR rust/29859 points out an operator precedence bug in the Rust
parser.  This patch fixes it and adds a regression test.

19 months agoFix a dereference of NULL when scanning the symbol hashes array in the ARM linker.
Nick Clifton [Tue, 6 Dec 2022 11:24:12 +0000 (11:24 +0000)]
Fix a dereference of NULL when scanning the symbol hashes array in the ARM linker.

PR 29852
* elf32-arm.c (cmse_scan): Check for NULL entries in the
sym_hashes array.
(elf32_arm_gc_mark_extra_sections): Likewise.

19 months ago[gdb/testsuite] Fix test names in gdb.base/longjmp.exp
Tom de Vries [Tue, 6 Dec 2022 11:01:46 +0000 (12:01 +0100)]
[gdb/testsuite] Fix test names in gdb.base/longjmp.exp

When running test-case gdb.base/longjmp.exp, we have:
...
PASS: gdb.base/longjmp.exp: next over setjmp (1)
  ...
PASS: gdb.base/longjmp.exp: next over setjmp (2)
...

The trailing " (1)" and " (2)" are interpreted as comments rather than parts
of the test name, and therefore this is a duplicate, which is currently not
detected by our duplicate detection mechanism (PR testsuite/29772).

Fix the duplicate by using with_test_prefix.

Tested on x86_64-linux.

19 months ago[gdb/testsuite] Make gdb.base/longjmp.exp FAIL more stable across archs
Tom de Vries [Tue, 6 Dec 2022 11:01:46 +0000 (12:01 +0100)]
[gdb/testsuite] Make gdb.base/longjmp.exp FAIL more stable across archs

When running test-case gdb.base/longjmp.exp on x86_64-linux, the master
longjmp breakpoint is set using probes and the test-case passes:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
0x00000000004005cc      49        if (setjmp (env) == 0) /* patt1 */^M
(gdb) PASS: gdb.base/longjmp.exp: next over longjmp(1)
next^M
56            resumes++;^M
(gdb) PASS: gdb.base/longjmp.exp: next into else block (1)
...

However, if I disable
create_longjmp_master_breakpoint_probe, we have instead:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
56            resumes++;^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...

At first glance, the failure mode doesn't look too bad: we stop
a few insns later than the passing scenario.

For contrast, if we do the same on powerpc64le, the failure mode is:
...
(gdb) PASS: gdb.base/longjmp.exp: next to longjmp (1)
next^M
^M
Breakpoint 3, main () at longjmp.c:59^M
59        i = 1; /* miss_step_1 */^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...
Here we only stop because of running into the safety net breakpoint at
miss_step_1.

So, how does this happen on x86_64?  Let's look at the code:
...
4005c7: e8 94 fe ff ff    call 400460 <_setjmp@plt>
4005cc: 85 c0             test %eax,%eax
4005ce: 75 1e             jne  4005ee <main+0x3b>
4005d0: 8b 05 8e 0a 20 00 mov  0x200a8e(%rip),%eax # 601064 <longjmps>
4005d6: 83 c0 01          add  $0x1,%eax
4005d9: 89 05 85 0a 20 00 mov  %eax,0x200a85(%rip) # 601064 <longjmps>
4005df: be 01 00 00 00    mov  $0x1,%esi
4005e4: bf 80 10 60 00    mov  $0x601080,%edi
4005e9: e8 82 fe ff ff    call 400470 <longjmp@plt>
4005ee: 8b 05 74 0a 20 00 mov  0x200a74(%rip),%eax # 601068 <resumes>
...
The next over the longjmp call at 4005e9 is supposed to stop at the longjmp
target at 4005cc, but instead we stop at 4005ee, where we have the step-resume
breakpoint inserted by the next.  In other words, we accidentally "return"
from the longjmp call to the insn immediately after it (even though
a longjmp is a noreturn function).

Try to avoid this accident and make the failure mode on x86_64 the same as on
powerpc64le, by switching the then and else branch.

Tested on x86_64-linux.

19 months agogdb/riscv: correct dwarf to gdb register number mapping
Xiao Zeng [Tue, 6 Dec 2022 06:59:43 +0000 (14:59 +0800)]
gdb/riscv: correct dwarf to gdb register number mapping

According to the riscv psabi, the mapping relationship between the
DWARF registers and the machine registers is as follows:

  DWARF Number | Register Name | Description
  0 - 31       | x0 - x31      | Integer Registers
  32 - 63      | f0 - f31      | Floating-point Registers

This is not modelled quite right in riscv_dwarf_reg_to_regnum, the
DWARF register numbers 31 and 63 are not handled correctly due to a
use of '<' instead of '<='.  This commit fixes this issue.

19 months agox86: Remove unnecessary vex.w check for xh_mode in disassembler
Haochen Jiang [Mon, 5 Dec 2022 02:32:00 +0000 (10:32 +0800)]
x86: Remove unnecessary vex.w check for xh_mode in disassembler

For all the xh_mode usage in table, they are all using %XH, which will
print "{bad}" while EVEX.W=1. This makes this vex.w check unnecessary.

opcodes/ChangeLog:

* i386-dis.c (OP_E_memory): Remove vex.w check for xh_mode.

19 months agoGet rid of SEC_ELF_COMPRESS
Alan Modra [Tue, 6 Dec 2022 04:38:31 +0000 (15:08 +1030)]
Get rid of SEC_ELF_COMPRESS

This flag also isn't needed, except for some sanity checks which we
can omit.

* elf.c (elf_fake_sections): Don't set SEC_ELF_COMPRESS for
compressed debug sections, just leave sh_name as -1.
(assign_file_positions_for_non_load_sections),
(assign_file_positions_except_relocs): Decide whether a section
needs compressing and thus should not have its file offset set
by looking at sh_name.
(_bfd_elf_assign_file_positions_for_non_load): Similarly decide
which sections need compressing.
* elflink.c (bfd_elf_final_link): Don't test SEC_ELF_COMPRESS.
* merge.c (_bfd_write_merged_section): Likewise.
* section.c (SEC_ELF_COMPRESS): Don't define.
(SEC_ELF_PURECODE): Renumber.
* bfd-in2.h: Regenerate.

19 months agoGet rid of SEC_ELF_RENAME
Alan Modra [Tue, 6 Dec 2022 04:10:10 +0000 (14:40 +1030)]
Get rid of SEC_ELF_RENAME

SEC_ELF_RENAME is a flag used to effect section name changes when
compressing/decompressing zlib-gnu debug sections.  This can be
accomplished more directly in one of the objcopy specific bfd
functions.  Renaming for ld input is simplified too.  Ld input object
files always have BFD_DECOMPRESS set.

bfd/
* compress.c (bfd_convert_section_size): Rename to..
(bfd_convert_section_setup): ..this.  Handle objcopy renaming
of compressed/decompressed debug sections.
* elf.c (_bfd_elf_make_section_from_shdr): Only rename zdebug
input for linker.
(elf_fake_sections): Don't handle renaming of debug sections for
objcopy here.
* section.c (SEC_ELF_RENAME): Delete.
* bfd-in2.h: Regenerate.
binutils/
* objcopy.c (setup_section): Call bfd_convert_section_setup.
Don't call bfd_convert_section_size.

19 months agoCompression header enum
Alan Modra [Mon, 5 Dec 2022 22:13:31 +0000 (08:43 +1030)]
Compression header enum

Define an enum instead of using ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD
in bfd and binutils, and move some functions from bfd.c to compress.c.
When looking at the COFF/PE debug compression support, I wondered
about extending it to support zstd.  I likely won't do that, but
the compression header ch_type field isn't just ELF specific if these
headers are to be used in COFF/PE too.

bfd/
* bfd.c (bfd_update_compression_header),
(bfd_check_compression_header, bfd_get_compression_header_size),
(bfd_convert_section_size, bfd_convert_section_contents): Move to..
* compress.c: ..here.
(enum compression_type): New.  Use it throughout file.
* elf.c (_bfd_elf_make_section_from_shdr): Replace uses of
ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with ch_compress_zlib and
ch_compress_zstd.
* bfd-in2.h: Regenerate.
binutils/
* readelf.c (process_section_headers, dump_section_as_strings),
(dump_section_as_bytes, load_specific_debug_section): Replace
uses of ELFCOMPRESS_ZLIB and ELFCOMPRESS_ZSTD with
ch_compress_zlib and ch_compress_zstd.

19 months agoLoongArch: Fix dynamic reloc not generated bug in some cases.
mengqinggang [Sat, 3 Dec 2022 07:34:35 +0000 (15:34 +0800)]
LoongArch: Fix dynamic reloc not generated bug in some cases.

bfd/ChangeLog:

* elfnn-loongarch.c (loongarch_elf_relocate_section): Likewise.

19 months agoPR29855, ch_type in bfd_init_section_decompress_status can be uninitialized
Alan Modra [Mon, 5 Dec 2022 22:07:52 +0000 (08:37 +1030)]
PR29855, ch_type in bfd_init_section_decompress_status can be uninitialized

PR 29855
* compress.c (bfd_init_section_decompress_status): Set ch_type
to zero for zlib-gnu case.

19 months agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Dec 2022 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

19 months agogdb/linux-nat: add ptid parameter to linux_xfer_siginfo
Simon Marchi [Fri, 2 Dec 2022 20:09:25 +0000 (15:09 -0500)]
gdb/linux-nat: add ptid parameter to linux_xfer_siginfo

Make the inferior_ptid bubble up to linux_nat_target::xfer_partial.

Change-Id: I62dbc5734c26648bb465f449c2003c73751cd812

19 months agogdb/linux-nat: use l linux_nat_get_siginfo in linux_xfer_siginfo
Simon Marchi [Fri, 2 Dec 2022 20:09:24 +0000 (15:09 -0500)]
gdb/linux-nat: use l linux_nat_get_siginfo in linux_xfer_siginfo

I noticed we could reduce duplication a bit here.

Change-Id: If24e54d1dac71b46f7c1f68a18a073d4c084b644