Commit Graph

51197 Commits

Author SHA1 Message Date
Tom Tromey
c65030964b Use std::string in do_set_command
do_set_command manually updates a string, only to copy it to a
std::string and free the working copy.  This patch changes this code
to use std::string for everything, simplifying the code and removing a
copy.

Reviewed-by: John Baldwin <jhb@FreeBSD.org>
2023-06-20 07:52:28 -06:00
Tom Tromey
6b19f38ae3 Use byte_vector in remote.c:readahead_cache
This patch changes the remote.c readahead_cache to use
gdb::byte_vector.  This simplifies the code by removing manual memory
management.

Reviewed-by: John Baldwin <jhb@FreeBSD.org>
2023-06-20 07:52:28 -06:00
Tom Tromey
b68e4ea64e Use std::string in linux-osdata.c
I found some code in linux-osdata that manually managed a string.
Replacing this with std::string simplifies it.

Reviewed-by: John Baldwin <jhb@FreeBSD.org>
2023-06-20 07:52:28 -06:00
Tom Tromey
8ca8b801ed Use unique_xmalloc_ptr for mi_parse::command
This changes mi_parse::command to be a unique_xmalloc_ptr and fixes up
all the uses.  This avoids some manual memory management.  std::string
is not used here due to how the Python API works -- this approach
avoids an extra copy there.

Reviewed-by: Keith Seitz <keiths@redhat.com>
2023-06-20 06:23:30 -06:00
Tom Tromey
550194db38 Use std::string for MI token
This changes the MI "token" to be a std::string, removing some manual
memory management.  It also makes current_token 'const' in order to
support this change.

Reviewed-by: Keith Seitz <keiths@redhat.com>
2023-06-20 06:23:30 -06:00
Tom de Vries
e11a2ebb8e Revert "[gdb/testsuite] Clean standard_output_file dir in gdb_init"
This reverts commit b7b77500dc.
2023-06-19 19:09:58 +02:00
Simon Farre
d32d7e918d Fixes 28ab59607e
Python formatting errors fixed, introduced by this commit.
2023-06-19 17:13:05 +02:00
Simon Farre
ce65796b17 Fixes f1a614dc8f
Fixes failure reported by buildbot regarding ill-formatted Python code.
2023-06-19 17:06:05 +02:00
Simon Farre
28ab59607e gdb/Python: Added ThreadExitedEvent
v6:
Fix comments.
Fix copyright
Remove unnecessary test suite stuff. save_var had to stay, as it mutates
some test suite state that otherwise fails.

v5:
Did what Tom Tromey requested in v4; which can be found here: https://pi.simark.ca/gdb-patches/87pmjm0xar.fsf@tromey.com/

v4:
Doc formatting fixed.

v3:
Eli:
Updated docs & NEWS to reflect new changes. Added
a reference from the .ptid attribute of the ThreadExitedEvent
to the ptid attribute of InferiorThread. To do this,
I've added an anchor to that attribute.

Tom:
Tom requested that I should probably just emit the thread object;
I ran into two issues for this, which I could not resolve in this patch;

1 - The Thread Object (the python type) checks it's own validity
by doing a comparison of it's `thread_info* thread` to nullptr. This
means that any access of it's attributes may (probably, since we are
in "async" land) throw Python exceptions because the thread has been
removed from the thread object. Therefore I've decided in v3 of this
patch to just emit most of the same fields that gdb.InferiorThread has, namely
global_num, name, num and ptid (the 3-attribute tuple provided by
gdb.InferiorThread.ptid).

2 - A python user can hold a global reference to an exiting thread. Thus
in order to have a ThreadExit event that can provide attribute access
reliably (both as a global reference, but also inside the thread exit
handler, as we can never guarantee that it's executed _before_ the
thread_info pointer is removed from the gdbpy thread object),
the `thread_info *` thread pointer must not be null. However, this
comes at the cost of gdb.InferiorThread believing it is "valid" - which means,
that if a user holds takes a global reference to that
exiting event thread object, they can some time later do `t.switch()` at which
point GDB will 'explode' so to speak.

v2:
Fixed white space issues and NULL/nullptr stuff,
as requested by Tom Tromey.

v1:
Currently no event is emitted for a thread exit.

This adds this functionality by emitting a new gdb.ThreadExitedEvent.

It currently provides four attributes:
- global_num: The GDB assigned global thread number
- num: the per-inferior thread number
- name: name of the thread or none if not set
- ptid: the PTID of the thread, a 3-attribute tuple, identical to
InferiorThread.ptid attribute

Added info to docs & the NEWS file as well.

Added test to test suite.

Fixed formatting.

Feedback wanted and appreciated.
2023-06-19 16:17:21 +02:00
Simon Farre
f1a614dc8f gdb/dap - Getting thread names
Renamed thread_name according to convention (_ first)

When testing firefox tests, it is apparent that
_get_threads returns threads with name field = None.

I had initially thought that this was due to Firefox setting the names
using /proc/pid/task/tid/comm, by writing directly to the proc fs the
names, but apparently GDB seems to catch this, because I re-wrote
the basic-dap.exp/c to do this specifically and it saw the changes.

So I couldn't determine right now, what operation of name change that
GDB does not pick up, but with this patch, GDB will pick up the thread
names for an applications that set the name of a thread in ways that
aren't obvious.
2023-06-19 16:08:45 +02:00
Tom de Vries
319626ca73 [gdb/testsuite] Add shared_gnat_runtime_has_debug_info
Test-case gdb.ada/catch_ex_std.exp passes for me with package
libada7-debuginfo installed, but after removing it I get:
...
(gdb) catch exception some_kind_of_error^M
Your Ada runtime appears to be missing some debugging information.^M
Cannot insert Ada exception catchpoint in this configuration.^M
(gdb) FAIL: gdb.ada/catch_ex_std.exp: catch exception some_kind_of_error
...

The test-case contains a require gnat_runtime_has_debug_info to deal with
this, but the problem is that this checks the static gnat runtime, while this
test-case uses the shared one.

Fix this by introducing shared_gnat_runtime_has_debug_info, and requiring that
one instead.

Tested on x86_64-linux.

PR testsuite/30094
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30094
2023-06-19 11:47:29 +02:00
Tom de Vries
ba769bb0e6 [gdb/tui] Simplify tui_update_variables
Simplify tui_update_variables by using template function
assign_return_if_changed.

Tested on x86_64-linux.
2023-06-19 11:15:56 +02:00
Tom de Vries
2e12e79882 [gdb] Add template functions assign_return/set_if_changed
Add template functions assign_return_if_changed and assign_set_if_changed in
gdb/utils.h:
...
template<typename T> void assign_set_if_changed (T &lval, const T &val, bool &changed)
{ ... }
template<typename T> bool assign_return_if_changed (T &lval, const T &val)
{ ... }
...

This allows us to rewrite code like this:
...
  if (tui_border_attrs != entry->value)
    {
      tui_border_attrs = entry->value;
      need_redraw = true;
    }
...
into this:
...
  need_redraw |= assign_return_if_changed<int> (tui_border_attrs, entry->value);
...
or:
...
  assign_set_if_changed<int> (tui_border_attrs, entry->value, need_redraw);
...

The names are a composition of the functionality.  The functions:
- assign VAL to LVAL, and either
- return true if the assignment changed LVAL, or
- set CHANGED to true if the assignment changed LVAL.

Tested on x86_64-linux.
2023-06-19 11:15:56 +02:00
Tom de Vries
b7b77500dc [gdb/testsuite] Clean standard_output_file dir in gdb_init
In commit e2adba909e ("[gdb/testsuite] Clean up before compilation in
gdb.ada/call-no-debug.exp") I added some code in the test-case to remove some
files at the start of the test-case:
...
remote_file host delete [standard_output_file prog.o]
remote_file host delete [standard_output_file prog.ali]
...

Replace this with cleaning up the entire directory instead, for all
test-cases.

Tested on x86_64-linux.

Suggested-By: Tom Tromey <tom@tromey.com>
Reviewed-By: Tom Tromey <tom@tromey.com>
2023-06-18 11:05:31 +02:00
Tom de Vries
34a6dcd442 [gdb/testsuite] Remove f-string in gdb.python/py-unwind.py
on openSUSE Leap 42.3, with python 3.4, I run into a
"SyntaxError: invalid syntax" due to usage of an f-string in test-case
gdb.python/py-unwind.py.

Fix this by using string concatenation using '+' instead.

Tested on x86_64-linux.
2023-06-17 12:28:58 +02:00
Tom de Vries
90cce6c055 [gdb/testsuite] Add nopie in a few test-cases
When running test-case gdb.arch/i386-disp-step.exp with target board
unix/-m32/-fPIE/-pie we run into:
...
gdb compile failed, ld: i386-disp-step0.o: warning: relocation in read-only section `.text'
ld: warning: creating DT_TEXTREL in a PIE
...

Fix this by adding nopie in the compilation flags.

Likewise in a few other test-cases.

Tested on x86_64-linux.
2023-06-17 12:28:58 +02:00
Tom de Vries
09ea7c9c49 [gdb/testsuite] Use require in gdb.dwarf2/implptr.exp
In test-case gdb.dwarf2/implptr.exp I noticed:
...
} elseif {![is_x86_like_target]} {
    # This test can only be run on x86 targets.
    unsupported "needs x86-like target"
    return 0
}
...

Use instead "require is_x86_like_target".

Tested on x86_64-linux.
2023-06-17 12:28:58 +02:00
Tom de Vries
e2adba909e [gdb/testsuite] Clean up before compilation in gdb.ada/call-no-debug.exp
Running test-case gdb.ada/call-no-debug.exp with target board unix/-m64 works
fine, but if we run it again with target board unix-m32, we run into:
...
gnatlink prog.ali -m32 -g -o prog^M
ld: i386:x86-64 architecture of input file `b~prog.o' is incompatible with \
  i386 output^M
...

This is due to compiling with no-force.

The test-case:
- first compiles pck.adb into pck.o (without debug info), and
- then compiles prog.adb and pck.o into prog (with debug info).

Using no-force in the second compilation make sure that pck.adb is not
compiled again, with debug info.

But it also means it will pick up intermediate files related to prog.adb from
a previous compilation.

Fix this by removing prog.o and prog.ali before compilation.

Tested on x86_64-linux.
2023-06-16 13:32:43 +02:00
Tom de Vries
9fb3860866 [gdb/testsuite] Use %progbits in gdb.arch/thumb*.S
In commit 0f2cd53cf4 ("[gdb/testsuite] Handle missing .note.GNU-stack") I
updated a gdb.arch/arm*.S test-case to use %progbits rather than @progbits,
but failed to do so for gdb.arch/thumb*.S.  Fix this oversight.

Tested on arm-linux-gnueabihf.
2023-06-16 12:56:32 +02:00
Andrew Burgess
8203d5e72e gdb: update IRC reference from Freenode to Libera.Chat
It's been some time since the switch from Freenode to Libera.Chat,
however, there's still a reference to Freenode in the 'gdb --help'
output.  Lets update that.
2023-06-16 10:17:40 +01:00
Tom de Vries
df3b9a6dfa [gdb/testsuite] Fix gdb.base/step-over-exit.exp with glibc debuginfo
In test-case gdb.base/step-over-exit.exp, we set a breakpoint on _exit and
continue, expecting to hit the breakpoint.

Without glibc debug info installed, we have with target board unix/-m64:
...
Thread 2.1 "step-over-exit" hit Breakpoint 2.2, 0x00007ffff7d46aee in \
  _exit () from /lib64/libc.so.6^M
(gdb) PASS: gdb.base/step-over-exit.exp: continue to exit
...
and with target board unix/-m32:
...
Thread 2.1 "step-over-exit" hit Breakpoint 2.2, 0xf7d84c25 in _exit () from \
  /lib/libc.so.6^M
(gdb) PASS: gdb.base/step-over-exit.exp: continue to exit
...

However after installing debug info (packages glibc-debuginfo and
glibc-32bit-debuginfo), we have for -m64 (note: __GI__exit instead of _exit):
...
Thread 2.1 "step-over-exit" hit Breakpoint 2.2, \
  __GI__exit (status=<optimized out>) at \
  ../sysdeps/unix/sysv/linux/_exit.c:27^M
27      {^M
(gdb) PASS: gdb.base/step-over-exit.exp: continue to exit
...
and -m32 (note: _Exit instead of _exit):
...
Thread 2.1 "step-over-exit" hit Breakpoint 2.2, _Exit () at \
  ../sysdeps/unix/sysv/linux/i386/_exit.S:24^M
24      ../sysdeps/unix/sysv/linux/i386/_exit.S: No such file or directory.^M
(gdb) FAIL: gdb.base/step-over-exit.exp: continue to exit
...

The gdb_test allows for both _exit and __GI__exit, but not _Exit:
...
gdb_test "continue" \
    "Continuing\\..*Breakpoint $decimal.*_exit \\(.*\\).*" \
    "continue to exit"
...

Fix this by allowing _Exit as well.

Tested on x86_64-linux.
2023-06-14 17:39:34 +02:00
Tom de Vries
63224e96d0 [gdb/testsuite] Fix gdb.tui/long-prompt.exp with read1
When running test-case gdb.tui/long-prompt.exp with check-read1, we get:
...
(gdb) FAIL: gdb.tui/long-prompt.exp: prompt size == width + 1: \
  end of screen: at last line
...

The problem is in these commands:
...
    Term::command "echo \\n"
    Term::command "echo \\n"
    Term::command "echo \\n"
    Term::command "echo \\n"
...

The last one makes the terminal scroll, and the scrolling makes the expected
output match on a different line.

Fix this by replacing the sequence with a single command:
...
    Term::command "echo \\n\\n\\n\\n\\n\\n"
...
which avoids scrolling.

Tested on x86_64-linux.
2023-06-13 13:21:09 +02:00
Tom de Vries
3e543c18b1 [gdb/testsuite] Fix and add prompt anchoring in tuiterm
There is a test-case that contains a unit test for tuiterm:
gdb.tui/tuiterm.exp.

However, this only excercises the tuiterm itself, and not the functions that
interact with it, like Term::command.

Add a new test-case gdb.tui/tuiterm-2.exp that:
- overrides proc accept_gdb_output (to be able simulate incorrect responses
  while avoiding the timeout),
- overrides proc send_gdb (to be able to call Term::command without a gdb
  instance, such that all tuiterm input is generated by the test-case).
- issues Term::command calls, and
- checks whether they behave correctly.

This exposes a problem in Term::command.  The "prompt before command" regexp
starts with a bit that is supposed to anchor the prompt to the border:
...
	set str "(^|\|)$gdb_prompt $str"
...
but that doesn't work due to insufficient escaping.  Fix this by adding the
missing escape:
...
	set str "(^|\\|)$gdb_prompt $str"
...

Futhermore, the "prompt after command" regexp in Term::wait_for has no
anchoring at all:
...
	set prompt_wait_for "$gdb_prompt \$"
...
so add that as well.

Tested on x86_64-linux.
2023-06-13 12:24:17 +02:00
Tom de Vries
cc313a1d84 [gdb/testsuite] Allow procs with default value args in with_override
Currently proc with_override does not work with procs with default value args.

Fix this, and add a test-case excercising this scenario.

Tested on x86_64-linux.
2023-06-13 12:24:17 +02:00
Tom de Vries
40bea10383 [gdb/testsuite] Fix gdb.dap/type_check.exp with older python
On openSUSE Leap 15.4 with system python 3.6, I run into:
...
(gdb) python check_everything()^M
(gdb) FAIL: gdb.dap/type_check.exp: type checker
...

In check_everything, the hasattr test fails silently:
...
def check_everything():
    # Older versions of Python can't really implement this.
    if hasattr(typing, "get_origin"):
...
and that makes the gdb_test in the test-case fail.

Fix this by emitting UNSUPPORTED instead in check_everything, and detecting
this in the test-case.

Tested on x86_64-linux.
2023-06-13 12:21:45 +02:00
Lancelot SIX
bdde90c4ce gdb/testsuite: use proper int size for gdb.dwarf2/symbol_needs_eval*.exp
We recently realized that symbol_needs_eval_fail.exp and
symbol_needs_eval_timeout.exp invalidly dereference an int (4 bytes on
x86_64) by reading 8 bytes (the size of a pointer).

Here how it goes:

In gdb/testsuite/gdb.dwarf2/symbol_needs_eval.c a global variable is
defined:

    int exec_mask = 1;

and later both tests build some DWARF using the assembler doing:

    set exec_mask_var [gdb_target_symbol exec_mask]
    ...
        DW_TAG_variable {
          {DW_AT_name a}
          {DW_AT_type :$int_type_label}
          {DW_AT_location {
            DW_OP_addr $exec_mask_var
            DW_OP_deref
            ...
          }
        }

The definition of the DW_OP_deref (from Dwarf5 2.5.1.3 Stack Operations)
says that "The size of the data retrieved from the dereferenced address
is the size of an address on the target machine."

On x86_64, the size of an int is 4 while the size of an address is 8.
The result is that when evaluating this expression, the debugger reads
outside of the `a` variable.

Fix this by using `DW_OP_deref_size $int_size` instead.  To achieve
this, this patch adds the necessary steps so we can figure out what
`sizeof(int)` evaluates to for the current target.

While at it, also change the definition of the int type in the assembled
DWARF information so we use the actual target's size for an int instead
of the literal 4.

Tested on x86_64 Linux.

Approved-By: Tom Tromey <tom@tromey.com>
2023-06-13 09:22:39 +01:00
Kevin Buettner
f3741bbd18 Simplify case DW_OP_GNU_uninit in dwarf_expr_context::execute_stack_op
Tom Tromey pointed out that the test and call to error() for the
DW_OP_GNU_uninit case in dwarf_expr_context::execute_stack_op (in
gdb/dwarf2/expr.c)...

	  if (op_ptr != op_end && *op_ptr != DW_OP_piece
	      && *op_ptr != DW_OP_bit_piece)
	    error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
		   "be the very last op in a DWARF expression or "
		   "DW_OP_piece/DW_OP_bit_piece piece."));

...could be replaced by a call to dwarf_expr_require_composition which
performs a similar check and outputs a suitable error message.
2023-06-12 16:02:40 -07:00
Simon Farre
9af6e8c6df Added self to W.A.A. maintainers 2023-06-12 21:45:03 +02:00
Richard Bunt
2e3aff2762 gdb/testsuite: Testing with the armflang compiler
Currently the Fortran test suite does not run with armflang because the
compiler detection fails. This in turn means fortran_runto_main does not
know which main method to use to start a test case.

Fortran compiler detection was added in 44d469c5f85; however, the commit
message notes that it was not tested with armflang.

This commit tests and fixes up a minor issue to get the detection
working.

The goal here is to get the tests running and preventing further
regressions during future work. This change does not do anything to fix
existing failures.

>From what I can understand, the auto detection leverages the
preprocessor to extract the Fortran compiler identity from the defines.
This preprocessor output is then evaluated by the test suite to import
these defines.

In the case of armflang, this evaluation step is disrupted by the
presence of the following warning:

    $ armflang -E -fdiagnostics-color=never testsuite/lib/compiler.F90 -o compiler.exp
    $ clang-13: warning: argument unused during compilation: '-fdiagnostics-color=never' [-Wunused-command-line-argument]

The evaluation logic is already set up to filter this warning, but the
prefix differs.

This commit fixes the issue by updating the filter to exclude the
armflang flavour of warning.

gdb.fortran regression tests run with GNU, Intel and Intel LLVM. No
regressions detected.

The gdb.fortran test results with ACfL 23.04.1 are as follows.

Before:

 # of expected passes		560
 # of unexpected failures	113
 # of unresolved testcases	2
 # of untested testcases	5
 # of duplicate test names	2

After:

 # of expected passes		5388
 # of unexpected failures	628
 # of known failures		10
 # of untested testcases	8
 # of unsupported tests		5
 # of duplicate test names	5

As can be seen from the above, there are now considerably more passing
assertions.

Reviewed-By: Luis Machado <luis.machado@arm.com>
Approved-By: Tom Tromey <tom@tromey.com>
2023-06-12 12:32:52 -06:00
Tom Tromey
a1ef65231b Remove f-strings from DAP
Kévin pointed out that gdb claims a minimum Python version of 3.2, but
the DAP code uses f-strings, which were added in 3.6.

This patch removes the uses of f-strings from the DAP code.  I can't
test an older version of Python, but I did confirm that this still
works with the version I have.
2023-06-12 12:24:07 -06:00
Tom Tromey
d294a0fc26 Implement DAP conditional breakpoints
I realized that I had only implemented DAP breakpoint conditions for
exception breakpoints, and not other kinds of breakpoints.  This patch
corrects the oversight.
2023-06-12 12:10:15 -06:00
Tom Tromey
7cb909c409 Do not report totalFrames from DAP stackTrace request
Currently, gdb will unwind the entire stack in response to the
stackTrace request.  I had erroneously thought that the totalFrames
attribute was required in the response.  However, the spec says:

    If omitted or if `totalFrames` is larger than the available
    frames, a client is expected to request frames until a request
    returns less frames than requested (which indicates the end of the
    stack).

This patch removes this from the response in order to improve
performance when the stack trace is very long.
2023-06-12 12:10:15 -06:00
Tom Tromey
3c453cfb19 Implement DAP breakpointLocations request
This implements the DAP breakpointLocations request.
2023-06-12 12:10:15 -06:00
Tom Tromey
ad9cdfbcfd Add "stop at main" extension to DAP launch request
Co-workers who work on a program that uses DAP asked for the ability
to have gdb stop at the main subprogram when launching.  This patch
implements this extension.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
2023-06-12 12:10:10 -06:00
Tom Tromey
67efac36f1 Add "target" parameter to DAP attach request
This adds a new "target" to the DAP attach request.  This is passed to
"target remote".  I thought "attach" made the most sense for this,
because in some sense gdb is attaching to a running process.  It's
worth noting that all DAP "attach" parameters are defined by the
implementation.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
2023-06-12 12:09:56 -06:00
Tom Tromey
8115dffa1e Handle DAP supportsVariableType capability
A DAP client can report the supportsVariableType capability in the
initialize request.  In this case, gdb can include the type of a
variable or expression in various results.
2023-06-12 12:09:46 -06:00
Tom Tromey
c2a0d767db Implement DAP setExpression request
This implements the DAP setExpression request.
2023-06-12 12:09:45 -06:00
Tom Tromey
ed80156930 Add gdb.Value.assign method
This adds an 'assign' method to gdb.Value.  This allows for assignment
without requiring the use of parse_and_eval.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
2023-06-12 12:09:39 -06:00
Tom Tromey
510586589e Add type-checking to DAP requests
It occurred to me recently that gdb's DAP implementation should
probably check the types of objects coming from the client.  This
patch implements this idea by reusing Python's existing type
annotations, and supplying a decorator that verifies these at runtime.

Python doesn't make it very easy to do runtime type-checking, so the
core of the checker is written by hand.  I haven't tried to make a
fully generic runtime type checker.  Instead, this only checks the
subset that is needed by DAP.  For example, only keyword-only
functions are handled.

Furthermore, in a few spots, it wasn't convenient to spell out the
type that is accepted.  I've added a couple of comments to this effect
in breakpoint.py.

I've tried to make this code compatible with older versions of Python,
but I've only been able to try it with 3.9 and 3.10.
2023-06-12 12:09:28 -06:00
Tom Tromey
5e20b4cd17 Use tuples for default arguments in DAP
My co-worker Kévin taught me that using a mutable object as a default
argument in Python is somewhat dangerous, because the object is
created a single time (when the function is defined), and so if it is
mutated in the body of the function, the changes will stick around.

This patch changes the cases like this in DAP to use () rather than []
as the default.  This patch is merely preventative, as no bugs like
this are in the code.
2023-06-12 12:09:28 -06:00
Tom Tromey
5c7cdc95aa Fix a latent bug in DAP request decorator
The 'request' decorator is intended to also ensure that the request
function runs in the DAP thread.  However, the unwrapped function is
installed in the global request map, so the wrapped version is never
called.  This patch fixes the bug.
2023-06-12 12:09:28 -06:00
Tom Tromey
070e93a8b8 Add test for DAP pause request
I neglected to write a test for the DAP "pause" request.  This patch
adds one.
2023-06-12 12:09:28 -06:00
Tom Tromey
8c8701f9cf Rename one DAP function
When I first started implementing DAP, I had some vague plan of having
the implementation functions use the same name as the request.  I
abandoned this idea, but one vestige remained.  This patch renames the
one remaining function to be gdb-ish.
2023-06-12 12:09:28 -06:00
Tom Tromey
fc2d72afc0 Add singleThread support to some DAP requests
A few DAP requests support a "singleThread" parameter, which is
somewhat similar to scheduler-locking.  This patch implements support
for this.
2023-06-12 12:09:28 -06:00
Tom Tromey
3eb64586f0 Implement DAP stepOut request
This implements the DAP "stepOut" request.
2023-06-12 12:09:28 -06:00
Tom Tromey
d01f36bdfa Implement DAP attach request
This implements the DAP "attach" request.

Note that the copyright dates on the new test source file are not
incorrect -- this was copied verbatim from another directory.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
2023-06-12 12:09:18 -06:00
Tom Tromey
69ed07d546 Implement DAP setExceptionBreakpoints request
This implements the DAP setExceptionBreakpoints request for Ada.  This
is a somewhat minimal implementation, in that "exceptionOptions" are
not implemented (or advertised) -- I wasn't completely sure how this
feature is supposed to work.

I haven't added C++ exception handling here, but it's easy to do if
needed.

This patch relies on the new MI command execution support to do its
work.
2023-06-12 11:51:52 -06:00
Tom Tromey
2c4c710f56 Don't require inferior execution for Ada catchpoints
Currently, Ada catchpoints require that the inferior be running.
However, there's no deep reason for this -- for example, C++ exception
catchpoints do not have this requirement.  Instead, those work like
ordinary breakpoints: they are pending until the needed runtime
locations are seen.

This patch changes Ada catchpoints to work the same way.
2023-06-12 11:51:52 -06:00
Tom Tromey
03f531ea22 Mark members of ada_catchpoint "private"
This changes the members of ada_catchpoint to be private.
2023-06-12 11:51:52 -06:00
Tom Tromey
971149cb9a Turn should_stop_exception into a method of ada_catchpoint
This turns the should_stop_exception function in ada-lang.c into a
method of ada_catchpoint.
2023-06-12 11:51:52 -06:00