]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
10 months ago[gdb/testsuite] Fix gdb.tui/wrap-line.exp with wrapping disabled
Bernd Edlinger [Mon, 12 Aug 2024 15:32:44 +0000 (17:32 +0200)] 
[gdb/testsuite] Fix gdb.tui/wrap-line.exp with wrapping disabled

There are a couple of ways that readline wrapping can be disabled:
- using "set horizontal-scroll-mode on" in INPUTRC,
- using a TERM setting like TERM=dumb, and
- building gdb with stub-termcap.

Using a trigger patch in default_gdb_init that adds
"set horizontal-scroll-mode on" to INPUTRC:
...
-    setenv INPUTRC [cached_file inputrc "set enable-bracketed-paste off"]
+    setenv INPUTRC [cached_file inputrc "set enable-bracketed-paste off\nset horizontal-scroll-mode on"]
...
we can easily reproduce a failure in gdb.tui/wrap-line.exp mentioned in
PR testsuite/31201 (which was reported for the stub-termcap case):
...
WARNING: timeout in accept_gdb_output
Screen Dump (size 50 columns x 24 rows, cursor at column 34, row 1):
    0 Quit
    1 <89012345678901234567890123456789W
    2
    ...
    23
FAIL: gdb.tui/wrap-line.exp: width-hard-coded: cli: wrap
...

Fix this by accepting the horizontal-scroll-mode style output.  We do
this only when in CLI mode though, when in TUI wrapping works as before
because it doesn't rely on readline.

Tested on x86_64-linux.

Co-Authored-By: Tom de Vries <tdevries@suse.de>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31201

10 months agogdb/amd-dbgapi-target: adjust to amd-dbgapi 0.75.0
Simon Marchi [Mon, 5 Aug 2024 14:39:15 +0000 (10:39 -0400)] 
gdb/amd-dbgapi-target: adjust to amd-dbgapi 0.75.0

amd-dbgapi 0.75 (from ROCm release 6.2.0) brings a few backwards
incompatible changes.  Adjust the amd-dbgapi target code accordingly.
Given that the AMD GPU port in upstream GDB today is of limited use
(it's still missing important  pieces), we don't really care about
supporting amd-dbgapi versions other than the latest stable one, so no
effort is made to keep compatibility with versions 6.1.2 and older.

The changes are:

 - AMD_DBGAPI_EXCEPTION_WAVE_APERTURE_VIOLATION was renamed to
   AMD_DBGAPI_EXCEPTION_WAVE_ADDRESS_ERROR (the old name still exists
   but is deprecated), use the latter.

 - In the callbacks structure, the get_os_pid callback was replaced with
   client_process_get_info, which is more general and extensible.
   Convert our get_os_pid to a new, equivalent, client_process_get_info
   callback.  Handle the new AMD_DBGAPI_CLIENT_PROCESS_INFO_CORE_STATE
   query, but just return "not available".

 - The xfer_global_memory callback was added to the callbacks structure,
   add that new callback.

 - Update configure.ac to check for amd-dbgapi >= 0.75.0.

Change-Id: If012398cf55ebf6146b007f6b4e8395dd48ef981
Approved-By: Lancelot Six <lancelot.six@amd.com>
Reviewed-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
10 months agogdb: pass inferior to gdbarch_update_p
Simon Marchi [Mon, 29 Jul 2024 03:25:58 +0000 (23:25 -0400)] 
gdb: pass inferior to gdbarch_update_p

Make the current inferior reference bubble up one level.  I think this
makes it clearer what gdbarch_update_p, which is update the passed
inferior's architecture (although the function name could probably be
better).

When gdbarch_find_by_info, it is possible for the new architecture's
init callback to be called.  I have not audited all of them (there are
just too many), it's possible that some of them do care about the
current inferior, for some reason (for instance, if one of them makes a
target call).  If so, they should be changed too.

Change-Id: I89f012188d7fdca395a830f4b013743565f26847

10 months agogdb: pass inferior to target_current_description
Simon Marchi [Mon, 29 Jul 2024 03:25:57 +0000 (23:25 -0400)] 
gdb: pass inferior to target_current_description

Make the current inferior reference bubble up one level.

Change-Id: I441f954877749dc5a861ab03e881b529dafc2efd

10 months agogdb: change names of enumerations in enum flags selftest
Simon Marchi [Thu, 30 May 2024 20:28:21 +0000 (16:28 -0400)] 
gdb: change names of enumerations in enum flags selftest

When reading this test (in the context of PR 31331), I had trouble
understanding the tests, because of the abbreviated names.  I would
prefer if the names were a bit more explicit, like this.

Change-Id: I85669b238a9d5dacf673a7bbfc1ca18f80d2b2cf

10 months agogdb, gdbsupport: use `using` in enum flags code
Simon Marchi [Thu, 30 May 2024 20:28:20 +0000 (16:28 -0400)] 
gdb, gdbsupport: use `using` in enum flags code

I think that `using` is easier to read than `typedef`, and it's the
modern C++ thing anyway.

Change-Id: Iccb62dc3869cddfb6a684ef3023dcd5b799f3ab2

10 months agogdbsupport: remove C enum flags fallback
Simon Marchi [Thu, 30 May 2024 20:28:19 +0000 (16:28 -0400)] 
gdbsupport: remove C enum flags fallback

This might have been useful during the C -> C++ conversion (not sure),
but it doesn't appear useful today.  I don't see when enum-flags.h would
be used in a C context.

Change-Id: I6c7ed655757248a62a1bf6615995f42e8aa2b4bd

10 months agogdb/NEWS: announce removal of QNX Neutrino support
Simon Marchi [Mon, 12 Aug 2024 14:29:36 +0000 (10:29 -0400)] 
gdb/NEWS: announce removal of QNX Neutrino support

QNX Neutrino support was removed here [1], but I forgot to mention in in
NEWS.

[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=36fb20fa93484b104d91e42e38930ee8629192ab

Change-Id: I8db7957acdd0be3c1e0b751c7c245870c4cd7101
Approved-By: Eli Zaretskii <eliz@gnu.org>
10 months agogdb: add program_space parameter to lookup_minimal_symbol_text
Simon Marchi [Wed, 17 Jul 2024 03:52:05 +0000 (23:52 -0400)] 
gdb: add program_space parameter to lookup_minimal_symbol_text

Make the current program space reference bubble up one level.  Use a
program space from the context whenever that makes sense.

Change-Id: Id3b0bf4490178d71a9aecdbf404b9287c22b30f5
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: add program_space parameter to lookup_minimal_symbol_linkage
Simon Marchi [Wed, 17 Jul 2024 03:52:04 +0000 (23:52 -0400)] 
gdb: add program_space parameter to lookup_minimal_symbol_linkage

Make the current_program_space reference bubble up one level.

Change-Id: Ic349dc96b7d375ad7c66022d84657136f0de8c87
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: add program_space parameter to get_symbol_leading_char
Simon Marchi [Wed, 17 Jul 2024 03:52:03 +0000 (23:52 -0400)] 
gdb: add program_space parameter to get_symbol_leading_char

Make the current_program_space references bubble up one level.  In this
case, I think it makes sense to use m_objfile's program space.

Change-Id: Ibecb89b5e8a0363328240f1675d0fb95ff99c99a
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: add program_space parameter to lookup_minimal_symbol
Simon Marchi [Wed, 17 Jul 2024 03:52:02 +0000 (23:52 -0400)] 
gdb: add program_space parameter to lookup_minimal_symbol

>From what I can see, lookup_minimal_symbol doesn't have any dependencies
on the global current state other than the single reference to
current_program_space.  Add a program_space parameter and make that
current_program_space reference bubble up one level.

Change-Id: I759415e2f9c74c9627a2fe05bd44eb4147eee6fe
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: remove lookup_bound_minimal_symbol
Simon Marchi [Wed, 17 Jul 2024 03:52:01 +0000 (23:52 -0400)] 
gdb: remove lookup_bound_minimal_symbol

Now that lookup_minimal_symbol has default values for sfile and objf,
calling lookup_bound_minimal_symbol is identical to calling
lookup_minimal_symbol without sfile and objf.  Remove
lookup_bound_minimal_symbol, replace call sites with
lookup_minimal_symbol.

Change-Id: I0a420fb56de1de8bee8a7303228c9e4546e3577b
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: make lookup_minimal_symbol objf and sfile parameters optional
Simon Marchi [Wed, 17 Jul 2024 03:52:00 +0000 (23:52 -0400)] 
gdb: make lookup_minimal_symbol objf and sfile parameters optional

Most calls to lookup_minimal_symbol don't pass a value for sfile and
objf.  Make these parameters optional (have a default value of
nullptr).  And since passing a value to `objf` is much more common than
passing a value to `sfile`, swap the order so `objf` comes first, to
avoid having to pass a nullptr value to `sfile` when wanting to pass a
value to `objf`.

Change-Id: I8e9cc6b942e593bec640f9dfd30f62786b0f5a27
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: drop struct keyword when using bound_minimal_symbol
Simon Marchi [Wed, 17 Jul 2024 03:51:59 +0000 (23:51 -0400)] 
gdb: drop struct keyword when using bound_minimal_symbol

This is a simple find / replace from "struct bound_minimal_symbol" to
"bound_minimal_symbol", to make things shorter and more consisten
througout.  In some cases, move variable declarations where first used.

Change-Id: Ica4af11c4ac528aa842bfa49a7afe8fe77a66849
Reviewed-by: Keith Seitz <keiths@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: remove find_and_open_solib so_list method
Simon Marchi [Thu, 25 Jul 2024 17:41:37 +0000 (13:41 -0400)] 
gdb: remove find_and_open_solib so_list method

Now that the nto port is removed, this is unused.

Change-Id: I86565310cdbcde17a837eb10585cdd153f4f03d8
Approved-by: Kevin Buettner <kevinb@redhat.com>
10 months agogdbsupport: remove #ifndef REALTIME_LO in signals.cc
Simon Marchi [Thu, 25 Jul 2024 17:41:36 +0000 (13:41 -0400)] 
gdbsupport: remove #ifndef REALTIME_LO in signals.cc

REALTIME_LO was only possibly previously defined in config/nm-nto.h,
which is now removed.  So we can remove the #ifndef protecting against a
redefinition of REALTIME_LO in gdbsupport/signals.cc.

Change-Id: I021b9518ceaa6223bd480ff1e07e9a978b0b241e
Approved-by: Kevin Buettner <kevinb@redhat.com>
10 months agogdb: remove QNX Neutrino support
Simon Marchi [Thu, 25 Jul 2024 17:41:35 +0000 (13:41 -0400)] 
gdb: remove QNX Neutrino support

Remove the support for the QNX Neutrino OS (tdep and native bits).  This
has been unmaintained for years, and we don't have a way to see if it
works (or even builds, for the native parts).  Without somebody actively
maintaining it, this is just a burden for developers, especially that
this port does a few weird unique things that require reasoning about
when doing big change.

Support for GDBserver was removed in 2020, commit 613f149a90d6
("gdbserver: remove support for Neutrino").

Change-Id: I4e25ec26ab06636629adebd02ceb161ee31c232d
Approved-by: Kevin Buettner <kevinb@redhat.com>
10 months agogdb: rename target-delegates.c to target-delegates-gen.c
Simon Marchi [Mon, 5 Aug 2024 15:24:36 +0000 (11:24 -0400)] 
gdb: rename target-delegates.c to target-delegates-gen.c

Following this suggestion:

https://inbox.sourceware.org/gdb-patches/2a0520ec-ccfe-4fc3-b051-7b8c60294de5@efficios.com/T/#md537792a1871addf153f3e406224f9baf025414a

Change-Id: I30988c46505f130ca16155891958f92621cada97
Approved-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agoAutomatic date update in version.in
GDB Administrator [Mon, 12 Aug 2024 00:00:29 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoAutomatic date update in version.in
GDB Administrator [Sun, 11 Aug 2024 00:00:36 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agold: Add PR ld/32067 tests
H.J. Lu [Sat, 10 Aug 2024 14:23:53 +0000 (07:23 -0700)] 
ld: Add PR ld/32067 tests

Add PR ld/32067 tests with the compiler driver since the -plugin option
is needed to trigger this --oformat binary bug.

PR ld/32067
* testsuite/ld-i386/i386.exp: Run PR ld/32067 test.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* testsuite/ld-i386/start.s: Add .note.GNU-stack section.
* testsuite/ld-x86-64/pr32067.s: New file.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
10 months agoPR32067, ld -Wl,--oformat,binary crash in _bfd_elf_link_keep_memory
Alan Modra [Fri, 9 Aug 2024 23:11:16 +0000 (08:41 +0930)] 
PR32067, ld -Wl,--oformat,binary crash in _bfd_elf_link_keep_memory

The direct fix for this segfault is to test for a non-NULL bed in
_bfd_elf_link_keep_memory, but also there isn't much point in running
code for LTO if the output is binary.

PR 32067
* elflink.c (_bfd_elf_link_keep_memory): Test for non-NULL bed.
(elf_link_add_object_symbols): Don't run the loop setting
non_ir_ref_regular if the output hash table is not ELF.

10 months agoAutomatic date update in version.in
GDB Administrator [Sat, 10 Aug 2024 00:00:30 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoFix test failure when TUI is not enabled
Bernd Edlinger [Fri, 9 Aug 2024 08:39:56 +0000 (10:39 +0200)] 
Fix test failure when TUI is not enabled

This adds a missing allow_tui_tests guard.

When tui is not enabled this test case does
typically fail:

FAIL: gdb.base/new-ui.exp: do_test_invalid_args: new-ui with tui

Approved-By: Tom de Vries <tdevries@suse.de>
10 months agogdb: adjust the default place of 'list' to main's prologue
Stephan Rohr [Sat, 3 Aug 2024 09:07:42 +0000 (02:07 -0700)] 
gdb: adjust the default place of 'list' to main's prologue

The 'list' command prints around the 'main' function if the current
source location is not set.  The prologue of 'main' is skipped and the
first real line of 'main' is offset by 'lines_to_print - 1'.  This is
incorrect, the location should be defaulted to main's prologue without
applying offsets (similar to 'list main').  Printing around the selected
line is then done in 'list_around_line'.

The patch also fixes an issue if the list command is used before the
program is started.  For example, with the following code:

26 static void attribute ((used)) ambiguous_fun (void) {}
27
28 static int attribute ((used)) ambiguous_var;
29
30
31
32
33
34
35
36
37
38 int
39 main (void)
40 {
41   return 0;
42 }

GDB offsets the relevant line by 'lines_to_print - 1' and then by another
'lines_to_print / 2' and prints:

(gdb) list
27
28 static int attribute ((used)) ambiguous_var;
29
30
31
32
33
34
35
36

With this patch, GDB correctly prints:

37
38      int
39      main (void)
40      {
41        return 0;
42      }

Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogas: drop scrubber states 14 and 15
Jan Beulich [Fri, 9 Aug 2024 10:00:26 +0000 (12:00 +0200)] 
gas: drop scrubber states 14 and 15

While sadly 5262831592fb doesn't say anything on why these would have
been needed, the latest with the removal of most of the opcode vs
operands distinction in the scrubber these shouldn't be needed anymore.
The implementation was a little questionable anyway, in moving back to
states expecting labels, when clearly labels shouldn't really be
following predicates (in practice, due to another bug, at least ia64
permits such).

10 months agogas: have scrubber retain more whitespace
Jan Beulich [Fri, 9 Aug 2024 09:59:31 +0000 (11:59 +0200)] 
gas: have scrubber retain more whitespace

According to the description of the state machine, the expectation
appears to be that (leaving aside labels) any insn mnemonic or
directive would be followed by a comma separated list of operands. That
may have been true very long ago, but the latest with the advent of more
elaborate macros this isn't rhe case anymore. Neither macro parameters
in macro definitions nor macro arguments in macro invocations are
required to be separated by commas. Hence whitespace serves a crucial
role there. Plus even without "real" macros issues exist, in e.g.

.irp n, ...
insn\n\(suffix) operand1, operand2
.endr

Whitespace following the closing parenthesis would have been removed
(ahead of even processing the .irp), as the "opcode" was deemed to have
ended earlier already.

Therefore, squash the distinction between "opcode" and operands, i.e.
fold state 10 back into state 3. Also drop most of the distinction
between "symbol chars" and "relatively normal" ones. Not entirely
unexpectedly this results in the need to skip whitespace in a few more
places in arch-specific code (and quite likely more changes are needed
for insn forms not covered by the testsuite).

As a result the D10V special case is no longer necessary.

In config/tc-sparc.c also move a comment to be next to the code being
commented.

In opcodes/cgen-asm.in some further cleanup is done, following the local
var adjustments.

10 months agoMIPS: relax gas testsuite whitespace expectations
Jan Beulich [Fri, 9 Aug 2024 09:52:42 +0000 (11:52 +0200)] 
MIPS: relax gas testsuite whitespace expectations

In a subsequent change the scrubber is going to be changed to retain
further whitespace.  Test case expectations generally would better not
depend on the specific whitespace treatment by the scrubber, unless of
course a test is specifically about it.  Adjust relevant test cases to
permit blanks where those will subsequently appear.

10 months agoaarch64: relax gas testsuite whitespace expectations
Jan Beulich [Fri, 9 Aug 2024 09:52:18 +0000 (11:52 +0200)] 
aarch64: relax gas testsuite whitespace expectations

In a subsequent change the scrubber is going to be changed to retain
further whitespace. Test case expectations generally would better not
depend on the specific whitespace treatment by the scrubber, unless of
course a test is specifically about it. Adjust relevant test cases to
permit blanks where those will subsequently appear.

10 months agoArm: relax gas testsuite whitespace expectations
Jan Beulich [Fri, 9 Aug 2024 09:51:47 +0000 (11:51 +0200)] 
Arm: relax gas testsuite whitespace expectations

In a subsequent change the scrubber is going to be changed to retain
further whitespace. Test case expectations generally would better not
depend on the specific whitespace treatment by the scrubber, unless of
course a test is specifically about it. Adjust relevant test cases to
permit blanks where those will subsequently appear.

10 months agom32r: move scrubber override to target header
Jan Beulich [Fri, 9 Aug 2024 09:49:36 +0000 (11:49 +0200)] 
m32r: move scrubber override to target header

Other than LEX_IS_* settings, such #define-s don't belong into the
common source file.

10 months agoArm: respect line separators for .symver scrubber special case
Jan Beulich [Fri, 9 Aug 2024 09:49:04 +0000 (11:49 +0200)] 
Arm: respect line separators for .symver scrubber special case

Directives end at "line" (really: statement) separators, not just at
new-line chars.

10 months agogas: respect CR_EOL also for scrubbing
Jan Beulich [Fri, 9 Aug 2024 09:48:32 +0000 (11:48 +0200)] 
gas: respect CR_EOL also for scrubbing

While apparently intended to be only externally controlled (e.g. via
specifying CFLAGS at make invocation), we should still keep scrubber and
lexer in sync in this regard. There's one place which imo was previously
wrong already, but would go further wrong and hence is being adjusted
right here: An .mri directive can be terminated by any kind of "line"
(really: statement) separators.

10 months agogas: have scrubber also respect quoted labels
Jan Beulich [Fri, 9 Aug 2024 09:48:05 +0000 (11:48 +0200)] 
gas: have scrubber also respect quoted labels

For the handling of ':' elsewhere in the scrubber to be correct with
regard to labels, the state after parsing a string found at the start of
a line must match that after finding a symbol character at the start of
a line. (Things are largely okay when there's whitespace ahead of the
label: Whitespace after the colon then is retained rather than dropped
for typical targets like x86, but read.c will know to deal with that.)

10 months agoRISC-V: PR32014, .option directives shuoldn't affect elf attribute.
Nelson Chu [Wed, 31 Jul 2024 05:00:11 +0000 (13:00 +0800)] 
RISC-V: PR32014, .option directives shuoldn't affect elf attribute.

The .option arch/rvc/norvc/push/pop directives can only take effect for a
small/large specific code region, so they are not file-level architecture
setting.  They should only affect the mapping symbols only rather than the
file-level elf architecture attribute.  Otherwise, the elf architecture
attribute will appear to missing some extensions when -flto merges files
with different .option architecture settings.

gas/
PR 32014
* config/tc-riscv.c (file_arch_str): New const char *, rather than the
arch_str in the riscv_rps_as.subset_list, it's file-level so only be
affected by .attribute arch directive.
(riscv_reset_subsets_list_arch_str): Renamed to riscv_set_arch_str, and
also can handle both file_arch_str and arch_str in subset_list, just
give the pointer address as the input.
(riscv_set_arch): Called by -march and .attribute arch, so set both
file_arch_str and arch_str in subset_list.
(s_riscv_option): Updated .option arch/rvc/norvc/push/pop that only
set the arch_str in subset_list.
(riscv_write_out_attrs): Output elf architecture attribute according to
file_arch_str.  Freed file_arch_str.
* doc/c-riscv.texi: Added destrbution that .option directives shouldn't
affect the elf attribute settings.
* testsuite/gas/riscv/option-arch.s: From option-arch-01/02/03 merged.
* testsuite/gas/riscv/option-arch-dis.d: Likewise, for dis-assembler.
* testsuite/gas/riscv/option-arch-attr.d: Likewise, to check readelf -A.

10 months agoAutomatic date update in version.in
GDB Administrator [Fri, 9 Aug 2024 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agogas: sparc: Fix faligndatai assembly and disassembly
Richard Henderson [Thu, 8 Aug 2024 22:32:54 +0000 (08:32 +1000)] 
gas: sparc: Fix faligndatai assembly and disassembly

The first operand is a general register, not an fp register;
the third operand is encoded into RS2, not RS3;
the second operand must match the destination operand.

10 months ago[gdb/python] Fix handling of ^C during disassembly
Tom de Vries [Thu, 8 Aug 2024 21:52:00 +0000 (23:52 +0200)] 
[gdb/python] Fix handling of ^C during disassembly

Inspired by the trigger patch I used here [1], I tried this in
gdbpy_print_insn:
...
   /* Call into the registered disassembler to (possibly) perform the
      disassembly.  */
+  set_quit_flag ();
   PyObject *insn_disas_obj = (PyObject *) disasm_info;
   gdbpy_ref<> result (PyObject_CallFunctionObjArgs (hook.get (),
                                                    insn_disas_obj,
...
and with test-case gdb.python/py-disasm-exec.exp ran into:
...
(gdb) disassemble test^M
Dump of assembler code for function test:^M
   0x00000000004101ac <+0>:     Python Exception <class 'KeyboardInterrupt'>: ^M
^M
unknown disassembler error (error = -1)^M
(gdb)
...

This is incorrect, the KeyboardInterrupt should propagate and interrupt the
command.

Fix this by using gdbpy_print_stack_or_quit instead of gdbpy_print_stack in
gdbpy_print_insn, giving us instead:
...
(gdb) disassemble test^M
Dump of assembler code for function test:^M
   0x00000000004101ac <+0>:     ^M
Quit^M
(gdb)
...

Tested on aarch64-linux.

Approved-By: Andrew Burgess <aburgess@redhat.com>
[1] https://sourceware.org/pipermail/gdb-patches/2024-July/210798.html

10 months ago[gdb] Handle ^C during disassembly
Tom de Vries [Thu, 8 Aug 2024 21:52:00 +0000 (23:52 +0200)] 
[gdb] Handle ^C during disassembly

In PR gdb/32025, a fatal error was reported when sending a SIGINT to gdb while
disassembling.

I managed to reproduce this on aarch64-linux in a Leap 15.5 container using
this trigger patch:
...
 gdb_disassembler_memory_reader::dis_asm_read_memory
   (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len,
    struct disassemble_info *info) noexcept
 {
+  set_quit_flag ();
   return target_read_code (memaddr, myaddr, len);
 }
...
and a simple gdb command line calling the disassemble command:
...
$ gdb -q -batch a.out -ex "disassemble main"
...

The following scenario leads to the fatal error:
- the disassemble command is executed,
- set_quit_flag is called in
  gdb_disassembler_memory_reader::dis_asm_read_memory, pretending that a
  user pressed ^C,
- target_read_code calls QUIT, which throws a
  gdb_exception_quit,
- the exception propagation mechanism reaches c code in libopcodes and a fatal
  error triggers because the c code is not compiled with -fexception.

Fix this by:
- wrapping the body of gdb_disassembler_memory_reader::dis_asm_read_memory in
  catch_exceptions (which consequently needs moving to a header file), and
- reraising the caught exception in default_print_insn using QUIT.

Tested on aarch64-linux.

Approved-By: Andrew Burgess <aburgess@redhat.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32025

10 months agoAutomatic date update in version.in
GDB Administrator [Thu, 8 Aug 2024 00:00:35 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoscore: drop TC_ALPHA code
Jan Beulich [Wed, 7 Aug 2024 14:32:43 +0000 (16:32 +0200)] 
score: drop TC_ALPHA code

I can't see how that could ever have come into play.

10 months agogas: drop dead VMS code from command line handling
Jan Beulich [Wed, 7 Aug 2024 14:32:15 +0000 (16:32 +0200)] 
gas: drop dead VMS code from command line handling

The only time 'v' was overridden, allowing for an optional value, was
when OBJ_VMS support still existed (until a little less than 20 years
ago). Drop the respective leftovers.

With that OPTION_VERBOSE also becomes redundant and hence is being
dropped.

10 months agoVAX: drop OBJ_VMS leftovers
Jan Beulich [Wed, 7 Aug 2024 14:31:54 +0000 (16:31 +0200)] 
VAX: drop OBJ_VMS leftovers

OBJ_VMS support was dropped almost 20 years ago (e330299ed5ee). Drop
respective code from tc-vax.c as well.

While there, make adjustments for OBJ_ELF as well: -K was dropped over
20 years ago (530556a951f5), yet left in md_shortopts. OPTION_PIC isn't
really necessary either; 'k' can be used instead. And then the ELF
options available weren't displayed by md_show_usage().

10 months agogas: improve unrecognized command line option diagnostic
Jan Beulich [Wed, 7 Aug 2024 14:31:00 +0000 (16:31 +0200)] 
gas: improve unrecognized command line option diagnostic

Printing optc with %c makes sense only when optc is actually a
character. Add logic to also deal with unrecognized long options,
rejected by md_parse_option() rather than get_opt_long_only(). Also
quote the reproduced strings, such that possible included whitespace
can be recognized.

10 months agogas/NEWS: Moved RISC-V Zimop/Zcmop changes into 2.43 section due to backport.
Nelson Chu [Wed, 7 Aug 2024 08:17:05 +0000 (16:17 +0800)] 
gas/NEWS: Moved RISC-V Zimop/Zcmop changes into 2.43 section due to backport.

10 months agoloongarch ld testsuite xpasses
Alan Modra [Tue, 6 Aug 2024 22:26:33 +0000 (07:56 +0930)] 
loongarch ld testsuite xpasses

Some tests started passing with commit 3a83f0342e54.  However,
supporting a changed ld output format is not so simple, and the change
to the loongarch_elf_hash_table macro needs further changes to the
rest of the code.  It is true that some uses of
loongarch_elf_hash_table do not need to check the type of the hash
table, but others like loongarch_elf_relax_section do need to check.
bfd_relax_section is called in lang_size_sections using the input bfd,
not the output bfd.  If the input bfd may be of different type to the
output, then the hash table type must be checked before accessing
elements of the hash table.  This patch corrects
loongarch_elf_relax_section.  I haven't checked all the uses of the
hash table throughout the loongarch backend.

bfd/
* elfnn-loongarch.c (loongarch_elf_relax_section): Don't relax
unless the hash table is loongarch_elf_link_hash_table.
Move variable declarations.  Formatting.
ld/
* testsuite/ld-elf/pr21884.d: Don't xfail loongarach.
* testsuite/ld-unique/pr21529.d: Likewise.

10 months agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Aug 2024 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoMark unavailable bytes of limited-length arrays when allocating contents
Hannes Domani [Tue, 6 Aug 2024 17:34:18 +0000 (19:34 +0200)] 
Mark unavailable bytes of limited-length arrays when allocating contents

Using 'output' to print arrays larger than max-value-size, with only
repeating elements, can cause gdb to crash:
```
$ cat a.c:
char a[1000000];

int main()
{
  return a[0];
}
$ gdb -q a
(gdb) print a
$1 = {0 '\000' <repeats 65536 times>, <unavailable> <repeats 934464 times>}
(gdb) output a

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
```

Using 'print' works, because value::record_latest sets the unavailable
bytes of the value when it's added to the value history.
But 'outout' doesn't do that, so the printing tries to access more bytes
than are available.

The original problem in PR32015 was about using 'print' of a dynamic
array in a D program.
Here the crash happens because for 'print' the value was a struct with
length/ptr fields, which is converted in d-valprint.c into an array.
So value::record_latest didn't have a chance to mark the unavailable
bytes in this case.

To make sure the unavailable bytes always match the contents, this fixes
it by marking the unavailable bytes immediately after the contents are
allocated.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32015
Reviewed-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogas: scfi: replace verbose expressions with local vars
Indu Bhagat [Tue, 6 Aug 2024 16:46:06 +0000 (09:46 -0700)] 
gas: scfi: replace verbose expressions with local vars

Replace the scattered and repeated uses of verbose expressions with
variables.  E.g.,
  ginsn_get_src_reg (src1)  -> src1_reg
  ginsn_get_src_type (src1) -> src1_type
etc.

This hopefully makes the logic bit more maintainable.  While at it,
include minor adjustments to make few checks in gen_scfi_ops () more
precise:
  - When getting imm value from src operand, ensure the src type is
    GINSN_SRC_IMM,
  - When getting reg from src operand, ensure the src type is checked
    too (GINSN_SRC_REG or GINSN_SRC_INDIRECT as appropriate).

On the other hand, the changes in verify_heuristic_traceable_reg_fp ()
and verify_heuristic_traceable_stack_manipulation () are purely
mechanical.

gas/
        * scfi.c (verify_heuristic_traceable_reg_fp): Add new local
vars and reuse them.
        (verify_heuristic_traceable_stack_manipulation): Likewise.
        (gen_scfi_ops): Likewise.  Additionally, make some conditionals
more precise.

10 months agoRISC-V: map zext.h to pack/packw if Zbkb is enabled
Hau Hsu [Tue, 6 Aug 2024 03:56:18 +0000 (11:56 +0800)] 
RISC-V: map zext.h to pack/packw if Zbkb is enabled

The `zext.h` is zero-extend halfword instruction that belongs to Zbb.
Currently `zext.h` falls back to 2 shifts if Zbb is not enabled.  However, the
encoding and operation is a special case of `pack/packw rd, rs1, rs2`, which
belongs to Zbkb.  The instructions pack the low halves of rs1 and rs2 into rd.
When rs2 is zero (x0), they behave like zero-extend instruction, and the
encoding are exactly the same as zext.h.

Thus we can map `zext.h` to `pack` or `packw` (rv64) if Zbkb is enabled,
instead of 2 shifts. This reduces one instruction.

This patch does this by making `zext.h` also available for Zbkb.

opcodes/
* riscv-opc.c (riscv_opcodes): Update `zext.h` entries to use
`ZBB_OR_ZBKB` instruction class.

gas/
* testsuite/gas/riscv/zext-to-pack.s: Add test for mapping zext to
pack/packw encoding.
* testsuite/gas/riscv/zext-to-pack-encoding.d: Likewise.
* testsuite/gas/riscv/zext-to-packw-encoding.d: Likewise.

10 months agoRISC-V: Add support for XCvBitmanip extension in CV32E40P
Mary Bennett [Sun, 4 Aug 2024 17:12:26 +0000 (18:12 +0100)] 
RISC-V: Add support for XCvBitmanip extension in CV32E40P

Spec: https://docs.openhwgroup.org/projects/cv32e40p-user-manual/en/latest/instruction_set_extensions.html

Contributors:
  Mary Bennett <mary.bennett682@gmail.com>
  Nandni Jamnadas <nandni.jamnadas@embecosm.com>
  Pietra Ferreira <pietra.ferreira@embecosm.com>
  Charlie Keaney
  Jessica Mills
  Craig Blackmore <craig.blackmore@embecosm.com>
  Simon Cook <simon.cook@embecosm.com>
  Jeremy Bennett <jeremy.bennett@embecosm.com>
  Helene Chelin <helene.chelin@embecosm.com>

bfd/ChangeLog:
* elfxx-riscv.c (riscv_multi_subset_supports): Add `xcvbitmanip`
instruction class.
(riscv_multi_subset_supports_ext): Likewise.

gas/ChangeLog:
* config/tc-riscv.c (validate_riscv_insn): Add custom operands `Xc6` and `Xc7`.
(riscv_ip): Likewise.
* doc/c-riscv.texi: Note XCVbitmanip as an additional ISA extension
for CORE-V.
* testsuite/gas/riscv/march-help.l: Add xcvbitmanip.
* testsuite/gas/riscv/x-cv-bitmanip-fail.d: New Test.
* testsuite/gas/riscv/x-cv-bitmanip-fail.l: New Test.
* testsuite/gas/riscv/x-cv-bitmanip-fail.s: New Test.
* testsuite/gas/riscv/x-cv-bitmanip.d: New Test.
* testsuite/gas/riscv/x-cv-bitmanip.s: New Test.

include/opcode/ChangeLog:
* riscv-opc.h: Add corresponding MATCH and MASK macros for
XCVbitmanip.
* riscv.h: Add corresponding EXTRACT and ENCODE macros for
XCVbitmanip.
(enum riscv_insn_class): Add the XCVbitmanip instruction class.

opcodes/ChangeLog:
* riscv-dis.c (print_insn_args): Add custom operands `Xc6` and `Xc7`.
* riscv-opc.c: Add XCvBitmanip instructions.

10 months agoRISC-V: Add support for Zcmop extension
Xiao Zeng [Wed, 12 Jun 2024 01:28:18 +0000 (09:28 +0800)] 
RISC-V: Add support for Zcmop extension

This implements the Zcmop (Compressed Zimop) extension, as of version 1.0.

View detailed information in:
<https://github.com/riscv/riscv-isa-manual/blob/main/src/zimop.adoc>

The Zcmop extension requires the Zca extension.

bfd/ChangeLog:

* elfxx-riscv.c (riscv_multi_subset_supports): Handle Zcmop.
(riscv_multi_subset_supports_ext): Ditto.

gas/ChangeLog:

* NEWS: Updated.
* testsuite/gas/riscv/march-help.l: Ditto.
* testsuite/gas/riscv/zcmop.d: New test.
* testsuite/gas/riscv/zcmop.s: New test.

include/ChangeLog:

* opcode/riscv-opc.h (DECLARE_INSN): New declarations for Zcmop.
(MATCH_C_MOP_1, MATCH_C_MOP_3, MATCH_C_MOP_5, MATCH_C_MOP_7,
MATCH_C_MOP_9, MATCH_C_MOP_11, MATCH_C_MOP_13, MATCH_C_MOP_15): Define.
(MASK_C_MOP_1, MASK_C_MOP_3, MASK_C_MOP_5, MASK_C_MOP_7,
MASK_C_MOP_9, MASK_C_MOP_11, MASK_C_MOP_13, MASK_C_MOP_15): Ditto.
* opcode/riscv.h (enum riscv_insn_class): Add INSN_CLASS_ZCMOP.

opcodes/ChangeLog:

* riscv-opc.c: Add Zcmop instructions.

10 months agoRISC-V: Add support for Zimop extension
Xiao Zeng [Wed, 12 Jun 2024 01:28:17 +0000 (09:28 +0800)] 
RISC-V: Add support for Zimop extension

This implements the Zimop (May-Be-Operations) extension, as of version 1.0.

View detailed information in:
<https://github.com/riscv/riscv-isa-manual/blob/main/src/zimop.adoc>

bfd/ChangeLog:

* elfxx-riscv.c (riscv_multi_subset_supports): Handle Zimop
(riscv_multi_subset_supports_ext): Ditto.

gas/ChangeLog:

* NEWS: Updated.
* testsuite/gas/riscv/march-help.l: Ditto.
* testsuite/gas/riscv/zimop.d: New test.
* testsuite/gas/riscv/zimop.s: New test.

include/ChangeLog:

* opcode/riscv-opc.h (DECLARE_INSN): New declarations for Zimop.
(MATCH_MOP_R_0, MATCH_MOP_R_1, MATCH_MOP_R_2, MATCH_MOP_R_3,
MATCH_MOP_R_4, MATCH_MOP_R_5, MATCH_MOP_R_6, MATCH_MOP_R_7,
MATCH_MOP_R_8, MATCH_MOP_R_9, MATCH_MOP_R_10, MATCH_MOP_R_11,
MATCH_MOP_R_12, MATCH_MOP_R_13, MATCH_MOP_R_14, MATCH_MOP_R_15,
MATCH_MOP_R_16, MATCH_MOP_R_17, MATCH_MOP_R_18, MATCH_MOP_R_19,
MATCH_MOP_R_20, MATCH_MOP_R_21, MATCH_MOP_R_22, MATCH_MOP_R_23,
MATCH_MOP_R_24, MATCH_MOP_R_25, MATCH_MOP_R_26, MATCH_MOP_R_27,
MATCH_MOP_R_28, MATCH_MOP_R_29, MATCH_MOP_R_30, MATCH_MOP_R_31,
MATCH_MOP_RR_0, MATCH_MOP_RR_1, MATCH_MOP_RR_2, MATCH_MOP_RR_3,
MATCH_MOP_RR_4, MATCH_MOP_RR_5, MATCH_MOP_RR_6, MATCH_MOP_RR_7): Define.
(MASK_MOP_R_0, MASK_MOP_R_1, MASK_MOP_R_2, MASK_MOP_R_3, MASK_MOP_R_4,
MASK_MOP_R_5, MASK_MOP_R_6, MASK_MOP_R_7, MASK_MOP_R_8, MASK_MOP_R_9,
MASK_MOP_R_10, MASK_MOP_R_11, MASK_MOP_R_12, MASK_MOP_R_13,
MASK_MOP_R_14, MASK_MOP_R_15, MASK_MOP_R_16, MASK_MOP_R_17,
MASK_MOP_R_18, MASK_MOP_R_19, MASK_MOP_R_20, MASK_MOP_R_21,
MASK_MOP_R_22, MASK_MOP_R_23, MASK_MOP_R_24, MASK_MOP_R_25,
MASK_MOP_R_26, MASK_MOP_R_27, MASK_MOP_R_28, MASK_MOP_R_29,
MASK_MOP_R_30, MASK_MOP_R_31, MASK_MOP_RR_0, MASK_MOP_RR_1,
MASK_MOP_RR_2, MASK_MOP_RR_3, MASK_MOP_RR_4, MASK_MOP_RR_5,
MASK_MOP_RR_6, MASK_MOP_RR_7): Ditto.
* opcode/riscv.h (enum riscv_insn_class): Add INSN_CLASS_ZIMOP.

opcodes/ChangeLog:

* riscv-opc.c: Add Zimop instructions.

10 months agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Aug 2024 00:00:29 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agogdb: rename gdbarch.c to gdbarch-gen.c
Simon Marchi [Wed, 31 Jul 2024 18:34:53 +0000 (14:34 -0400)] 
gdb: rename gdbarch.c to gdbarch-gen.c

For clarity and symmetry with `gdbarch-gen.h`.  I wouldn't mind
if all generated files had the `-gen` suffix.

Change-Id: Icb70194fb0e3e2fa9d1c6f0d9331be09b805b428
Approved-By: John Baldwin <jhb@FreeBSD.org>
10 months agogas: maintain line numbers correctly after #APP / #NO_APP
Jan Beulich [Mon, 5 Aug 2024 14:29:54 +0000 (16:29 +0200)] 
gas: maintain line numbers correctly after #APP / #NO_APP

Maintaining line numbers correctly both inside the region and past it
requires special care. The SB produced there is somewhat different from
that produced for e.g. macro expansions, and hence also needs treating
differently: In particular we aren't doing anything resembling macro
expansion here.

The new testcase may be a little misplaced in macros/, but that's where
all the other #APP / #NO_APP ones are.

10 months agogas: generalize / tighten #APP / #NO_APP recognition
Jan Beulich [Mon, 5 Aug 2024 14:29:28 +0000 (16:29 +0200)] 
gas: generalize / tighten #APP / #NO_APP recognition

For one '#' may not be in line_comment_chars[] in the first place. Look
for just it when it is (these "directives" are akin to C preprocessor
directives after all), but accept any other line comment character
otherwise (in read.c further requiring a match on the counterpart
"directive").

Then, when in the middle of a file, the constructs should be all on
their own on a line.  There needs to be a newline ahead of them and
after them.

Finally '\n' may not be the only end-of-line character. Accept any (but
not end-of-statement ones) in read.c, while making sure in input-file.c
there is one in the first place - merely any kind of whitespace isn't
good enough.

10 months agogas: recognize #APP at start-of-physical-line only
Jan Beulich [Mon, 5 Aug 2024 14:28:43 +0000 (16:28 +0200)] 
gas: recognize #APP at start-of-physical-line only

It's not valid to recognize it after mere line separators (often
semicolon) or after labels, let alone after tc_unrecognized_line()
perhaps having parsed off parts of a line. It shouldn't even be
preceded by whitespace, aiui.

However, keep ignoring line comments as before, for backwards
compatibility.

10 months ago[gdb] Notice when stepping into different file
Tom de Vries [Mon, 5 Aug 2024 12:00:42 +0000 (14:00 +0200)] 
[gdb] Notice when stepping into different file

Consider the following test-case:
...
$ cat -n test.c
     1 int var;
     2
     3 int
     4 foo (void)
     5 {
     6   var = 1;
     7 #include "test.h"
     8 }
     9
    10 int
    11 main ()
    12 {
    13   return foo ();
    14 }
$ cat -n test.h
     1   return 1;
$ gcc test.c -g
...

When stepping through the test-case, gdb doesn't make it explicit that line 1
is not in test.c:
...
Temporary breakpoint 1, main () at test.c:13
13   return foo ();
(gdb) step
foo () at test.c:6
6   var = 1;
(gdb) n
1   return 1;
(gdb)
8 }
(gdb)
...
which makes it easy to misinterpret the output.

This is with the default "print frame-info" == auto, with documented
behaviour [1]:
...
stepi will switch between source-line and source-and-location depending on the
program counter.
...

What is actually implemented is that source-line is used unless stepping into
or out of a function.

The problem can be worked around by using
"set print frame-info source-and-location", but that's a bit verbose.

Instead, change the behaviour of "print frame-info" == auto to also use
source-and-location when stepping into another file, which gets us:
...
(gdb) n
foo () at test.h:1
1   return 1;
...

Tested on x86_64-linux.

Reviewed-By: Kevin Buettner <kevinb@redhat.com>
Reviewed-By: Kévin Le Gouguec <legouguec@adacore.com>
PR gdb/32011
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32011

[1] https://sourceware.org/gdb/current/onlinedocs/gdb.html/Print-Settings.html#index-set-print-frame_002dinfo

10 months agoLoongArch: Add support for OUTPUT_FORMAT("binary")
mengqinggang [Fri, 28 Jun 2024 06:24:19 +0000 (14:24 +0800)] 
LoongArch: Add support for OUTPUT_FORMAT("binary")

In binary output format, loongarch_elf_hash_table return NULL and result
in segment fault.

When ld output binary file, it seems that elf related functions should
not be called. But loongarch_elf_relax_section be called and
loongarch_elf_hash_table cause segment fault.

Just redefined loongarch_elf_hash_table and always return
link_info->hash.

The tests of binutils, glibc and gcc is ok.

0  loongarch_elf_relax_section ()
1  0x000055555557ab28 in lang_size_sections_1 ()
2  0x000055555557a16c in lang_size_sections_1 ()
3  0x000055555557b0a8 in one_lang_size_sections_pass ()
4  0x000055555557b478 in lang_size_sections ()
5  0x000055555557e65c in lang_relax_sections ()
6  0x000055555559f9c8 in ldelf_map_segments ()
7  0x000055555559783c in gldelf64loongarch_after_allocation ()
8  0x000055555558dac0 in ldemul_after_allocation ()
9  0x000055555557f6c0 in lang_process ()
10 0x0000555555585314 in main ()

10 months agoAutomatic date update in version.in
GDB Administrator [Mon, 5 Aug 2024 00:00:29 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoUpdate release-README after completing the 2.43 release.
Nick Clifton [Sun, 4 Aug 2024 16:47:49 +0000 (17:47 +0100)] 
Update release-README after completing the 2.43 release.

10 months agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Aug 2024 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agoLTO: Restore the wrapper symbol check for standard function
H.J. Lu [Sat, 3 Aug 2024 02:52:00 +0000 (19:52 -0700)] 
LTO: Restore the wrapper symbol check for standard function

Call unwrap_hash_lookup to restore the wrapper symbol check for standard
function since reference to standard function may not show up in LTO
symbol table:

[hjl@gnu-tgl-3 pr31956-3]$ nm foo.o
00000000 T main
         U __real_malloc
00000000 T __wrap_malloc
[hjl@gnu-tgl-3 pr31956-3]$  lto-dump -list foo.o
Type   Visibility  Size  Name
function  default     0  malloc
function  default     0  __real_malloc
function  default     3  main
function  default     5  __wrap_malloc
[hjl@gnu-tgl-3 pr31956-3]$ make
gcc -O2 -flto -Wall   -c -o foo.o foo.c
gcc -Wl,--wrap=malloc -O2 -flto -Wall -o x foo.o
/usr/local/bin/ld: /tmp/ccsPW0a9.ltrans0.ltrans.o: in function `main':
<artificial>:(.text.startup+0xa): undefined reference to `__wrap_malloc'
collect2: error: ld returned 1 exit status
make: *** [Makefile:22: x] Error 1
[hjl@gnu-tgl-3 pr31956-3]$

Also add a test to verify that the unused wrapper is removed.

PR ld/31956
* plugin.c (get_symbols): Restore the wrapper symbol check for
standard function.
* testsuite/ld-plugin/lto.exp: Run the malloc test and the
unused test.
* testsuite/ld-plugin/pr31956c.c: New file.
* testsuite/ld-plugin/pr31956d.c: New file.
* testsuite/ld-plugin/pr31956d.d: New file.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
10 months agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Aug 2024 00:00:17 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agogdb, gdbserver, gdbsupport: remove -Wno-vla-cxx-extension
Simon Marchi [Wed, 31 Jul 2024 18:06:13 +0000 (14:06 -0400)] 
gdb, gdbserver, gdbsupport: remove -Wno-vla-cxx-extension

Now that all known uses of VLAs within GDB are removed, remove the
`-Wno-vla-cxx-extension` (which was used to silence clang warnings) and
add `-Wvla`, such that any use of a VLA will trigger a warning.

Change-Id: I69a8d7f93f973743165b0ba46f9c2ea8adb89025
Reviewed-By: Keith Seitz <keiths@redhat.com>
10 months agogdb: remove uses of VLA
Simon Marchi [Wed, 31 Jul 2024 18:06:12 +0000 (14:06 -0400)] 
gdb: remove uses of VLA

Remove uses of VLAs, replace with gdb::byte_vector.  There might be more
in files that I can't compile, but it's difficult to tell without
actually compiling on all platforms.

Many thanks to the Linaro pre-commit CI for helping find some problems
with an earlier iteration of this patch.

Change-Id: I3e5e34fcac51f3e6b732bb801c77944e010b162e
Reviewed-by: Keith Seitz <keiths@redhat.com>
10 months agogdb,testsuite: fix gdb.base/list-dot-nodebug and make it more robust
Guinevere Larsen [Fri, 31 May 2024 13:48:54 +0000 (10:48 -0300)] 
gdb,testsuite: fix gdb.base/list-dot-nodebug and make it more robust

Thiago Jung Bauermann noticed that gdb.base/list-dot-nodebug was not
actually compiling the test with some debuginfo in the relevant part,
and while fixing I noticed that the base assumption of the "some" case
was wrong, GDB would select some symtab as a default location and the
test would always fail. This fix makes printing the default location
only be tested when there is no debuginfo.

When testing with no debuginfo, if a system had static libc debuginfo,
the test would also fail. To add an extra layer of robustness to the
test, this rewrite also strips any stray debuginfo from the executable.
The test would only fail now if it runs in a system that can't handle
stripped debuginfo and has static debuginfo pre-installed.

Reported-By: Tom de Vries <tdevries@suse.de>
Reported-By: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31721
Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb: remove inline_frame::skipped_frames
Simon Marchi [Tue, 30 Jul 2024 14:47:58 +0000 (10:47 -0400)] 
gdb: remove inline_frame::skipped_frames

While reviewing [1], it occurred to me that having both the
skipped_frames counter and the skipped_syms vector is redundant.  When
stepping into an inline frame, we can just pop the last element.

[1] https://inbox.sourceware.org/gdb-patches/96cfee31-6a50-4a78-a25b-67e5d061c2a3@simark.ca/T/#m7e0e4b5b6cfc91be3d8ab6d5025a97c2e647103a

Change-Id: I8c10e7fcd05e41c2c838431d06c9e793d18a2198
Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agoUpdated Bulgarian translation for the binutils/ directory
Nick Clifton [Fri, 2 Aug 2024 14:40:14 +0000 (15:40 +0100)] 
Updated Bulgarian translation for the binutils/ directory

10 months agoFix typo in --help output of the strings program.
Aapo Rantalainen [Fri, 2 Aug 2024 14:13:44 +0000 (15:13 +0100)] 
Fix typo in --help output of the strings program.

  PR 31940

10 months agogdb/testsuite: fix gdb.python/py-framefilter-invalidarg.exp with clang
Guinevere Larsen [Wed, 31 Jul 2024 14:13:25 +0000 (11:13 -0300)] 
gdb/testsuite: fix gdb.python/py-framefilter-invalidarg.exp with clang

The final test of gdb.python/py-framefilter-invalidarg.exp expected that
the the backtrace only printed the source file name. However, when using
clang, gdb will always print the full path to the file, which would
cause the test to fail. This commit introduces a regexp that optionally
matches paths, preprended to the file name, which fixes the clang
failure without introducing gcc failures.

Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb/testsuite: extend XFAIL to gdb.fortran/entry-point.exp to clang too
Guinevere Larsen [Tue, 30 Jul 2024 17:36:45 +0000 (14:36 -0300)] 
gdb/testsuite: extend XFAIL to gdb.fortran/entry-point.exp to clang too

The test gdb.fortran/entry-point.exp already has an XFAIL when trying to
set a breakpoint in mod::mod_foo because gcc puts that subprogram in the
wrong scope in the debug information. Clang's debug information looks
the same as gcc's, so the test to setup the xfail has been extended to
also include clang.

Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogdb/testsuite: add build-id compile flag to tests that expect it
Guinevere Larsen [Wed, 31 Jul 2024 14:23:51 +0000 (11:23 -0300)] 
gdb/testsuite: add build-id compile flag to tests that expect it

Clang doesn't add build-id information by default, unlike gcc. This
means that tests that rely on build-id being available and don't
explicitly add it to the compilation options will fail with clang.
This commit fixes the fails in gdb.python/py-missing-debug.exp,
gdb.server/remote-read-msgs.exp, gdb.base/coredump-filter-build-id.exp
and gdb.server/solib-list.exp

Approved-By: Andrew Burgess <aburgess@redhat.com>
10 months agogas: drop unnecessary use of tc_comment_chars
Jan Beulich [Fri, 2 Aug 2024 07:44:53 +0000 (09:44 +0200)] 
gas: drop unnecessary use of tc_comment_chars

The override is necessary only when a target needs other than an array
of const char.

For cris drop redundant sibling declarations at the same time.

10 months agogas: correctly deal with line comments when not preprocessing
Jan Beulich [Fri, 2 Aug 2024 07:43:58 +0000 (09:43 +0200)] 
gas: correctly deal with line comments when not preprocessing

Internal naming of functions / data as well as commentary mixes lines
and statements. It is presumably this confusion which has led to the
wrong use of ignore_rest_of_line() when dealing with line comments in
read_a_source_file(). We shall not (silently) produce different output
depending on whether -f is passed (for suitable input).

Introduce two new helper macros, intended to be used in favor of open-
coded accesses to is_end_of_line[]. To emphasize the difference, convert
ignore_rest_of_line() right away, including adjustments to its comments.

Since most targets have # in line_comment_chars[], add a target-
independent test for that, plus an x86-only one also checking for non-#
to work as intended.

10 months agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Aug 2024 00:00:31 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agogas: ginsn: minor improvements in ginsn_dst_print and ginsn_src_print
Indu Bhagat [Thu, 1 Aug 2024 18:50:10 +0000 (11:50 -0700)] 
gas: ginsn: minor improvements in ginsn_dst_print and ginsn_src_print

Keep the two symmetrical looking.  Makes sense to perform the sanity
checks similarly too.

gas/
        * ginsn.c (ginsn_src_print): Buffer up result of snprintf and
add sanity checks on the value.
        (ginsn_dst_print): Use switch case instead.

10 months agogas: ginsn: do not emit an unnecessary trailing comma in textual dump
Indu Bhagat [Thu, 1 Aug 2024 18:34:08 +0000 (11:34 -0700)] 
gas: ginsn: do not emit an unnecessary trailing comma in textual dump

For ginsns with less than 2 source operands or no destination operands,
the current textual dump contains a superfluous comma, like the relevant
testcases show.

Adjust the code a bit to not emit the lone trailing comma.  Also, adjust
the aarch64 and x86_64 testcases.

gas/
        * ginsn.c (ginsn_src_print): Do not use a trailing comma when
printing the src of ginsn.
        (ginsn_print): Check the strlen and prefix a comma before the
src string.

gas/testsuite/
* gas/scfi/aarch64/ginsn-cofi-1.l: Adjust the expected textual
dump of the ginsn.
* gas/scfi/x86_64/ginsn-cofi-1.l: Likewise.

10 months agogas: x86: ginsn: handle previously missed indirect call and jmp ops
Indu Bhagat [Thu, 1 Aug 2024 17:07:07 +0000 (10:07 -0700)] 
gas: x86: ginsn: handle previously missed indirect call and jmp ops

Some flavors of indirect call and jmp instructions were not being
handled earlier, leading to a GAS error (#1):
  (#1) "Error: SCFI: unhandled op 0xff may cause incorrect CFI"

Not handling jmp/call (direct or indirect) ops is an error (as shown
above) because SCFI needs an accurate CFG to synthesize CFI correctly.
Recall that the presence of indirect jmp/call, however, does make the
CFG ineligible for SCFI. In other words, generating the ginsns for them
now, will eventually cause SCFI to bail out later with an error (#2)
anyway:
  (#2) "Error: untraceable control flow for func 'XXX'"

The first error (#1) gives the impression of missing functionality in
GAS.  So, it seems cleaner to synthesize a GINSN_TYPE_JUMP /
GINSN_TYPE_CALL now in the backend, and let SCFI machinery complain with
the error as expected.

The handling for these indirect jmp/call instructions is similar, so
reuse the code by carving out a function for the same.

Adjust the testcase to include the now handled jmp/call instructions as
well.

gas/
* config/tc-i386-ginsn.c (x86_ginsn_indirect_branch): New
function.
(x86_ginsn_new): Refactor out functionality to above.

gas/testsuite/
* gas/scfi/x86_64/ginsn-cofi-1.l: Adjust the output.
* gas/scfi/x86_64/ginsn-cofi-1.s: Add further varieties of
jmp/call opcodes.

10 months agogdb: LoongArch: Add show-debug-regs maintenance command
Hui Li [Tue, 30 Jul 2024 11:41:05 +0000 (19:41 +0800)] 
gdb: LoongArch: Add show-debug-regs maintenance command

This patch register the command "maint set show-debug-regs on/off"
and make it settable by the user. If show-debug-regs is enabled,
the debug register values are shown when GDB inserts or removes a
hardware breakpoint or watchpoint. This is helpful for the use and
development of hardware watchpoints.

With this patch, the effect of this maintenance command as follows:

lihui@bogon:~$ cat test.c
int a = 0;
int main()
{
a = 1;
return 0;
}
lihui@bogon:~$ gcc -g test.c -o test
lihui@bogon:~$ gdb test
...
(gdb) watch a
Hardware watchpoint 1: a
(gdb) maint set show-debug-regs on
(gdb) r
Starting program: /home/lihui/test
...
...

prepare_to_resume thread 41525
...
insert_watchpoint (addr=0x12000803c, len=4, type=hw-write-watchpoint):
BREAKPOINTs:
BP0: addr=0x0, ctrl=0x00000000, ref.count=0
BP1: addr=0x0, ctrl=0x00000000, ref.count=0
BP2: addr=0x0, ctrl=0x00000000, ref.count=0
BP3: addr=0x0, ctrl=0x00000000, ref.count=0
BP4: addr=0x0, ctrl=0x00000000, ref.count=0
BP5: addr=0x0, ctrl=0x00000000, ref.count=0
BP6: addr=0x0, ctrl=0x00000000, ref.count=0
BP7: addr=0x0, ctrl=0x00000000, ref.count=0
WATCHPOINTs:
WP0: addr=0x0, ctrl=0x00000000, ref.count=0
WP1: addr=0x0, ctrl=0x00000000, ref.count=0
WP2: addr=0x0, ctrl=0x00000000, ref.count=0
WP3: addr=0x0, ctrl=0x00000000, ref.count=0
WP4: addr=0x0, ctrl=0x00000000, ref.count=0
WP5: addr=0x0, ctrl=0x00000000, ref.count=0
WP6: addr=0x0, ctrl=0x00000000, ref.count=0
WP7: addr=0x12000803c, ctrl=0x00000610, ref.count=1
...
remove_watchpoint (addr=0x12000803c, len=4, type=hw-write-watchpoint):
BREAKPOINTs:
BP0: addr=0x0, ctrl=0x00000000, ref.count=0
BP1: addr=0x0, ctrl=0x00000000, ref.count=0
BP2: addr=0x0, ctrl=0x00000000, ref.count=0
BP3: addr=0x0, ctrl=0x00000000, ref.count=0
BP4: addr=0x0, ctrl=0x00000000, ref.count=0
BP5: addr=0x0, ctrl=0x00000000, ref.count=0
BP6: addr=0x0, ctrl=0x00000000, ref.count=0
BP7: addr=0x0, ctrl=0x00000000, ref.count=0
WATCHPOINTs:
WP0: addr=0x0, ctrl=0x00000000, ref.count=0
WP1: addr=0x0, ctrl=0x00000000, ref.count=0
WP2: addr=0x0, ctrl=0x00000000, ref.count=0
WP3: addr=0x0, ctrl=0x00000000, ref.count=0
WP4: addr=0x0, ctrl=0x00000000, ref.count=0
WP5: addr=0x0, ctrl=0x00000000, ref.count=0
WP6: addr=0x0, ctrl=0x00000000, ref.count=0
WP7: addr=0x0, ctrl=0x00000000, ref.count=0

Hardware watchpoint 1: a

Old value = 0
New value = 1
main () at test.c:5
5 return 0;
(gdb)

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
10 months agoskip_attr_bytes assertion (data) <= (end) fail
Alan Modra [Thu, 1 Aug 2024 11:06:42 +0000 (20:36 +0930)] 
skip_attr_bytes assertion (data) <= (end) fail

get_type_abbrev_from_form is lax in not limiting data for a uleb to
the current CU, because DW_FORM_ref_addr allows access to other CU's
data.  This can lead to an assertion fail when skipping or reading
attributes in get_type_signedness.

* dwarf.c (get_type_abbrev_from_form): Limit uleb data to map end
for ref_addr, cu_end otherwise.

10 months agogdb: AArch64: Support MTE on baremetal
Gustavo Romero [Tue, 30 Jul 2024 14:39:36 +0000 (14:39 +0000)] 
gdb: AArch64: Support MTE on baremetal

This commit moves aarch64_linux_memtag_matches_p,
aarch64_linux_set_memtags, aarch64_linux_get_memtag, and
aarch64_linux_memtag_to_string hooks (plus the aarch64_mte_get_atag
function used by them), along with the setting of the memtag granule
size, from aarch64-linux-tdep.c to aarch64-tdep.c, making MTE available
on baremetal targets. Since the aarch64-linux-tdep.c layer inherits
these hooks from aarch64-tdep.c, there is no effective change for
aarch64-linux targets.

Helpers used both by aarch64-tdep.c and by aarch64-linux-tdep.c were
moved from arch/aarch64-mte-linux.{c,h} to new arch/aarch64-mte.{c,h}
files.

Signed-off-by: Gustavo Romero <gustavo.romero@linaro.org>
Tested-By: Luis Machado <luis.machado@arm.com>
Approved-By: Luis Machado <luis.machado@arm.com>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
10 months ago[gdb/testsuite] Fix gdb.python/py-format-string.exp with python 3.13
Tom de Vries [Thu, 1 Aug 2024 07:23:24 +0000 (09:23 +0200)] 
[gdb/testsuite] Fix gdb.python/py-format-string.exp with python 3.13

On fedora rawhide, with python 3.13, I run into:
...
(gdb) python print (gdb.parse_and_eval ('a_point_t').format_string (invalid=True))^M
Python Exception <class 'TypeError'>: \
  this function got an unexpected keyword argument 'invalid'^M
Error occurred in Python: \
  this function got an unexpected keyword argument 'invalid'^M
(gdb) FAIL: $exp: format_string: lang_c: test_all_common: test_invalid_args: \
  a_point_t with option invalid=True
...

A passing version with an older python version looks like:
...
(gdb) python print (gdb.parse_and_eval ('a_point_t').format_string (invalid=True))^M
Python Exception <class 'TypeError'>: \
  'invalid' is an invalid keyword argument for this function^M
Error occurred in Python: \
  'invalid' is an invalid keyword argument for this function^M
(gdb) PASS: $exp: format_string: lang_c: test_all_common: test_invalid_args: \
  a_point_t with option invalid=True
...

Fix this by accepting the updated error message.

Tested on aarch64-linux.

PR testsuite/31912
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31912

10 months agoLoongArch: Fix ld FAIL test cases
Lulu Cai [Wed, 17 Jul 2024 02:54:46 +0000 (10:54 +0800)] 
LoongArch: Fix ld FAIL test cases

To avoid differences in C library paths on different systems
use gcc instead of ld to perform the test.

Problems caused by adding options to different distributions
will not be fixed.

10 months agold/PDB: handle empty LF_FIELDLIST types
Mark Harmstone [Mon, 29 Jul 2024 21:19:36 +0000 (22:19 +0100)] 
ld/PDB: handle empty LF_FIELDLIST types

Empty structs in C++ lead to empty LF_FIELDLIST types in the .debug$T
section, but we were mistakenly rejecting these as invalid. Allow
CodeView types of two bytes, and add a test for this.

10 months agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Aug 2024 00:00:43 +0000 (00:00 +0000)] 
Automatic date update in version.in

10 months agolibctf: fix ctf_archive_count return value on big-endian
Nick Alcock [Tue, 30 Jul 2024 11:28:04 +0000 (12:28 +0100)] 
libctf: fix ctf_archive_count return value on big-endian

This failed to properly byteswap its return value.

The ctf_archive format predates the idea of "just write natively and
flip on open", and byteswaps all over the place.  It's too easy to
forget one.  The next revision of the archive format (not versioned,
so we just tweak the magic number instead) should be native-endianned
like the dicts inside it are.

libctf/
* ctf-archive.c (ctf_archive_count): Byteswap return value.

10 months agolibctf: dump: fix small leak
Nick Alcock [Mon, 29 Jul 2024 17:02:03 +0000 (18:02 +0100)] 
libctf: dump: fix small leak

If you asprintf something and then use it only as input to another asprintf,
it helps to free it afterwards.

libctf/
* ctf-dump.c (ctf_dump_header): Free the flagstr after use.
(ctf_dump): Make a NULL return slightly clearer.

10 months agolibctf: fix ref leak of names of newly-inserted non-root-visible types
Nick Alcock [Mon, 29 Jul 2024 11:45:09 +0000 (12:45 +0100)] 
libctf: fix ref leak of names of newly-inserted non-root-visible types

A bug in ctf_dtd_delete led to refs in the string table to the
names of non-root-visible types not being removed when the DTD
was.  This seems harmless, but actually it would lead to a write
down a pointer into freed memory if such a type was ctf_rollback()ed
over and then the dict was serialized (updating all the refs as the
strtab was serialized in turn).

Bug introduced in commit fe4c2d55634c700ba527ac4183e05c66e9f93c62
("libctf: create: non-root-visible types should not appear in name tables")
which is included in binutils 2.35.

libctf/
* ctf-create.c (ctf_dtd_delete): Remove refs for all types
with names, not just root-visible ones.

10 months agolibctf: clean up hashtab error handling mess
Nick Alcock [Fri, 26 Jul 2024 20:58:03 +0000 (21:58 +0100)] 
libctf: clean up hashtab error handling mess

The dict and archive opening code in libctf is somewhat unusual, because
unlike everything else, it cannot report errors by setting an error on the
dict, because in case of error there isn't one.  They get passed an error
integer pointer that is set on error instead.

Inside ctf_bufopen this is implemented by calling ctf_set_open_errno and
passing it a positive error value.  In turn this means that most things it
calls (including init_static_types) return zero on success and a *positive*
ECTF_* or errno value on error.

This trickles down to ctf_dynhash_insert_type, which is used by
init_static_types to add newly-detected types to the name tables.  This was
returning the error value it received from a variety of functions without
alteration.  ctf_dynhash_insert conformed to this contract by returning a
positive value on error (usually OOM), which is unfortunate for multiple
reasons:

- ctf_dynset_insert returns a *negative* value
- ctf_dynhash_insert and ctf_dynset_insert don't take an fp, so the value
  they return is turned into the errno, so it had better be right, callers
  don't just check for != 0 here
- more or less every single caller of ctf_dyn*_insert in libctf other than
  ctf_dynhash_insert_type (and there are a *lot*, mostly in the
  deduplicator) assumes that ctf_dynhash_insert returns a negative value
  on error, even though it doesn't.  In practice the only possible error is
  OOM, but if OOM does happen we end up with a nonsense error value.

The simplest fix for this seems to be to make ctf_dynhash_insert and
ctf_dynset_insert conform to the usual interface contract: negative
values are errors.  This in turn means that ctf_dynhash_insert_type
needs to change: let's make it consistent too, returning a negative
value on error, putting the error on the fp in non-negated form.

init_static_types_internal adapts to this by negating the error return from
ctf_dynhash_insert_type, so the value handed back to ctf_bufopen is still
positive: the new call site in ctf_track_enumerator does not need to change.

(The existing tests for this reliably detect when I get it wrong.
I know, because they did.)

libctf/
* ctf-hash.c (ctf_dynhash_insert): Negate return value.
(ctf_dynhash_insert_type): Set de-negated error on the dict:
        return negated error.
* ctf-open.c (init_static_types_internal): Adapt to this change.

10 months agolibctf, include: add ctf_dict_set_flag: less enum dup checking by default
Nick Alcock [Fri, 26 Jul 2024 20:38:24 +0000 (21:38 +0100)] 
libctf, include: add ctf_dict_set_flag: less enum dup checking by default

The recent change to detect duplicate enum values and return ECTF_DUPLICATE
when found turns out to perturb a great many callers.  In particular, the
pahole-created kernel BTF has the same problem we historically did, and
gleefully emits duplicated enum constants in profusion.  Handling the
resulting duplicate errors from BTF -> CTF converters reasonably is
unreasonably difficult (it amounts to forcing them to skip some types or
reimplement the deduplicator).

So let's step back a bit.  What we care about mostly is that the
deduplicator treat enums with conflicting enumeration constants as
conflicting types: programs that want to look up enumeration constant ->
value mappings using the new APIs to do so might well want the same checks
to apply to any ctf_add_* operations they carry out (and since they're
*using* the new APIs, added at the same time as this restriction was
imposed, there is likely to be no negative consequence of this).

So we want some way to allow processes that know about duplicate detection
to opt into it, while allowing everyone else to stay clear of it: but we
want ctf_link to get this behaviour even if its caller has opted out.

So add a new concept to the API: dict-wide CTF flags, set via
ctf_dict_set_flag, obtained via ctf_dict_get_flag.  They are not bitflags
but simple arbitrary integers and an on/off value, stored in an unspecified
manner (the one current flag, we translate into an LCTF_* flag value in the
internal ctf_dict ctf_flags word). If you pass in an invalid flag or value
you get a new ECTF_BADFLAG error, so the caller can easily tell whether
flags added in future are valid with a particular libctf or not.

We check this flag in ctf_add_enumerator, and set it around the link
(including on child per-CU dicts).  The newish enumerator-iteration test is
souped up to check the semantics of the flag as well.

The fact that the flag can be set and unset at any time has curious
consequences. You can unset the flag, insert a pile of duplicates, then set
it and expect the new duplicates to be detected, not only by
ctf_add_enumerator but also by ctf_lookup_enumerator.  This means we now
have to maintain the ctf_names and conflicting_enums enum-duplication
tracking as new enums are added, not purely as the dict is opened.
Move that code out of init_static_types_internal and into a new
ctf_track_enumerator function that addition can also call.

(None of this affects the file format or serialization machinery, which has
to be able to handle duplicate enumeration constants no matter what.)

include/
* ctf-api.h (CTF_ERRORS) [ECTF_BADFLAG]: New.
(ECTF_NERR): Update.
(CTF_STRICT_NO_DUP_ENUMERATORS): New flag.
(ctf_dict_set_flag): New function.
(ctf_dict_get_flag): Likewise.

libctf/
* ctf-impl.h (LCTF_STRICT_NO_DUP_ENUMERATORS): New flag.
(ctf_track_enumerator): Declare.
* ctf-dedup.c (ctf_dedup_emit_type): Set it.
* ctf-link.c (ctf_create_per_cu): Likewise.
(ctf_link_deduplicating_per_cu): Likewise.
(ctf_link): Likewise.
(ctf_link_write): Likewise.
* ctf-subr.c (ctf_dict_set_flag): New function.
(ctf_dict_get_flag): New function.
* ctf-open.c (init_static_types_internal): Move enum tracking to...
* ctf-create.c (ctf_track_enumerator): ... this new function.
(ctf_add_enumerator): Call it.
* libctf.ver: Add the new functions.
* testsuite/libctf-lookup/enumerator-iteration.c: Test them.

10 months agoinclude, libctf: improve ECTF_DUPLICATE error message
Nick Alcock [Fri, 26 Jul 2024 20:20:50 +0000 (21:20 +0100)] 
include, libctf: improve ECTF_DUPLICATE error message

It applies to enums now, so it should mention them.

include/
* ctf-api.h (_CTF_ERRORS) ECTF_DUPLICATE]: Mention enums.

10 months agolibctf: link: remember to turn off the LCTF_LINKING flag after ctf_link_write
Nick Alcock [Mon, 15 Jul 2024 22:25:25 +0000 (23:25 +0100)] 
libctf: link: remember to turn off the LCTF_LINKING flag after ctf_link_write

We set this flag at the top of ctf_link_write (to tell ctf_serialize, way
down under the archive file writing functions, to do the various link- time
serialization things like symbol filtering and the like), but we never
remember to clear it except on error.  This is probably bad if you want to
serialize the dict yourself directly in the future after linking it (which
is...  definitely a *possible* use of the API, if rather strange).

libctf/
* ctf-link.c (ctf_link_write): Clear LCTF_LINKING before exit.

10 months agolibctf: link: fix error handling
Nick Alcock [Mon, 15 Jul 2024 21:05:57 +0000 (22:05 +0100)] 
libctf: link: fix error handling

We were calling the wrong error function if opening failed, causing leaks.

libctf/
* ctf-link.c (ctf_link_deduplicating_per_cu): Fix error handling.

10 months agolibctf, open: Fix enum error handling path
Nick Alcock [Mon, 15 Jul 2024 20:05:43 +0000 (21:05 +0100)] 
libctf, open: Fix enum error handling path

This new error-handling path was not properly initializing the
fp's errno.

libctf/
* ctf-open.c (init_static_types_internal): Set errno properly.

10 months agolibctf, subr: don't mix up errors and warnings
Nick Alcock [Mon, 15 Jul 2024 20:04:24 +0000 (21:04 +0100)] 
libctf, subr: don't mix up errors and warnings

ctf_err_warn() was debug-logging warnings as if they were errors and vice
versa.

libctf/
* ctf-subr.c (ctf_err_warn): Fix debugging thinko.

10 months agolibctf: fix dynset insertion
Nick Alcock [Mon, 15 Jul 2024 19:50:25 +0000 (20:50 +0100)] 
libctf: fix dynset insertion

libctf's dynsets are a straight wrapper around libiberty hashtab, storing
the key directly in the hashtab slot.  However, we'd often like to be able
to store 0 and 1 (HTAB_EMPTY_ENTRY and HTAB_DELETED_ENTRY) in there, so we
move them out of the way and replace them with huge unlikely values
instead.  Unfortunately we failed to do this replacement in one place, so
insertion of 0 or 1 ended up misinforming the hashtab machinery that an
entry was empty or deleted when it wasn't.

libctf/
* ctf-hash.c (ctf_dynset_insert): Call key_to_internal properly.

10 months agolibctf: dedup: tiny tweaks
Nick Alcock [Mon, 15 Jul 2024 19:00:59 +0000 (20:00 +0100)] 
libctf: dedup: tiny tweaks

Drop an unnecessary variable, and fix a buggy comment.

No effect on generated code.

libctf/
* ctf-dedup.c (ctf_dedup_detect_name_ambiguity): Drop unnecessary
        variable.
(ctf_dedup_rwalk_output_mapping): Fix comment.