2807 Commits

Author SHA1 Message Date
Miro Bucko
11a4d43f4a
Fix flaky TestDAP_console test. (#94494)
Test Plan:
llvm-lit
llvm-project/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
2024-06-12 06:21:17 +07:00
Chelsea Cassanova
7cff05ada0 Revert "[lldb][api-test] Add API test for SBCommandInterpreter::CommandOverrideCallback (#94518)"
This reverts commit 6fb6eba9304b63e86ebf039edcb9a0b32e4b39e7.
This test breaks due to an incorrect import in the test.
2024-06-11 15:27:10 -07:00
Chelsea Cassanova
6fb6eba930
[lldb][api-test] Add API test for SBCommandInterpreter::CommandOverrideCallback (#94518)
`SBCommandInterpreter::CommandOverrideCallback` was not being exposed to
the Python API and has no coverage in the
API test suite, so this commits exposes and adds a test for it. Doing
this involves also adding a typemap for the callback used for this
function so that it matches the functionality of other callback
functions that are exposed to Python.
2024-06-11 15:20:35 -07:00
Greg Clayton
a118f5f398
Fix type lookup bug where wrong decl context was being used for a DIE. (#94846)
The function that calculated the declaration context for a DIE was incorrectly transparently traversing acrosss DW_TAG_subprogram dies when climbing the parent DIE chain. This meant that types defined in functions would appear to have the declaration context of anything above the function. I fixed the GetTypeLookupContextImpl(...) function in DWARFDIE.cpp to not transparently skip over functions, lexical blocks and inlined functions and compile and type units. Added a test to verify things are working.
2024-06-11 13:58:26 -07:00
Felipe de Azevedo Piovezan
2e007b89c6 [lldb] Skip TestAttachDenied under asan
Like many other tests, this one times out when run under the address sanitizer.
To reduce noise, this commit skips it in those builds.
2024-06-11 09:28:10 -07:00
Jason Molenda
1934208132
[lldb] NFC add comments and test case for ObjectFileMachO delay-init (#95067)
Add comments and a test for delay-init libraries on macOS. I originally
added the support in 954d00e87cdd77d0e9e367be52e62340467bd779 a month
ago, but without these additional clarifications.

rdar://126885033
2024-06-10 20:33:38 -07:00
Dmitry Vasilyev
3e39328b62
[lldb] Fix TestModuleLoadedNotifys API test to work correctly on most of Linux targets (#94672)
The different build configuration and target Linux system can load a
different number of .so libraries. Add and check own libraries.
2024-06-10 18:51:47 +04:00
Dmitry Vasilyev
23b8f59f09
[lldb] Gracefully down TestCoroutineHandle test in case the 'coroutine' feature is missing (#94903)
Do not let the compiler gets failed in case the target platform does not
support the 'coroutine' C++ features. Just compile without it and let
lldb know about missed/unsupported feature.
2024-06-10 13:02:55 +04:00
jimingham
435dd97461
Add AllowRepeats to SBCommandInterpreterRunOptions. (#94786)
This is useful if you have a transcript of a user session and want to
rerun those commands with RunCommandInterpreter. The same functionality
is also useful in testing.

I'm adding it primarily for the second reason. In a subsequent patch,
I'm adding the ability to Python based commands to provide their
"auto-repeat" command. Among other things, that will allow potentially
state destroying user commands to prevent auto-repeat. Testing this with
Shell or pexpect tests is not nearly as accurate or convenient as using
RunCommandInterpreter, but to use that I need to allow auto-repeat.

I think for consistency's sake, having interactive sessions always do
auto-repeats is the right choice, though that's a lightly held
opinion...
2024-06-07 17:05:29 -07:00
Alex Langford
ba7f52ccf4
[lldb] Fix TestStatisticsAPI after 9293fc798152 (#94683) 2024-06-06 14:25:53 -07:00
Dmitry Vasilyev
a6cc363b27
[lldb] Disable TestPtyServer API test when remote testing (#94587)
The local PTY is not available for the remotely executed lldb-server to
pass the test. Also, in general, we cannot execute the local lldb-server
instance because it could be compiled for the different system/cpu
target.
2024-06-06 10:02:27 +01:00
Jason Molenda
19bce1702b
[lldb] [NFC] Rewrite TestRedefinitionsInInlines.py as an API test (#94539)
Rewrite an inline test as an API test, to be a little easier to debug,
and add some additional checks that we're in the inlined test1, then
step and we are now in the inlined test2 functions.
2024-06-05 15:39:40 -07:00
Jonas Devlieghere
39e12e0ab2
[lldb] Update error message in TestDAP_optimized after #94420
Fixes:
  https://lab.llvm.org/buildbot/#/builders/68/builds/75571
2024-06-05 11:25:17 -07:00
Jonas Devlieghere
539b72f2e1
[lldb] Return an llvm::Expected from DWARFExpression::Evaluate (NFCI) (#94420)
Change the signature of `DWARFExpression::Evaluate` and
`DWARFExpressionList::Evaluate` to return an `llvm::Expected` instead of a
boolean. This eliminates the `Status` output parameter and generally improves
error handling.
2024-06-05 10:57:46 -07:00
Alexey Merzlyakov
d3a9043ec2
[lldb][RISCV] Add RegisterContextPOSIXCore for RISC-V 64 (#93297)
The PR adds the support of CoreDump debugging for RISC-V 64. It
implements new `RegisterContextCorePOSIX_riscv64` class.

Also, the contribution fixes `GetRegisterCount()` ->
`GetRegisterSetCount()` misprint in
`RegisterContextPOSIX_riscv64::GetRegisterSetCount()` method, which
leaded to `set && "Register set should be valid."` assertion during
`register info aX` command call.

The patch was tested (on coredumps generated for simple Integer/FP
calculation code) for _cross x86_64 -> RISCV_ and _native RISCV_ LLDB
builds. There were performed basic LLDB functionality tests, such as:

 - CoreDump file load
 - Backtrace / frames
 - GP/FP registers read/info/list
 - Basic switch between threads
 - Disassembler code
 - Memory regions read / display
2024-06-05 10:14:48 +01:00
royitaqi
c2d061da7e
Re-merge A few updates around "transcript" (#92843) (#94067)
Problematic PR: https://github.com/llvm/llvm-project/pull/92843
Reverted by: https://github.com/llvm/llvm-project/pull/94088

The first PR added a test which fails in Linux builds (see the last few
comments there).
This PR contains all the changes in the first PR, plus the fix to the
said test.

---------

Co-authored-by: Roy Shi <royshi@meta.com>
2024-06-03 13:52:03 -07:00
Michael Buch
aad7874000 [lldb][test][NFC] TestBreakpointSetRestart.py: split up assertion to determine which check specifically fails in CI
This test consistently fails on the public macOS ASAN CI (and isn't
reproducible locally):
```
FAIL: test_breakpoint_set_restart_dwarf
(TestBreakpointSetRestart.BreakpointSetRestart)
----------------------------------------------------------------------
Traceback (most recent call last):
  File
"/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/packages/Python/lldbsuite/test/lldbtest.py",
line 1756, in test_method
    return attrvalue(self)
  File
"/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/packages/Python/lldbsuite/test/decorators.py",
line 150, in wrapper
    return func(*args, **kwargs)
  File
"/Users/ec2-user/jenkins/workspace/llvm.org/lldb-cmake-sanitized/llvm-project/lldb/test/API/functionalities/breakpoint/breakpoint_set_restart/TestBreakpointSetRestart.py",
line 36, in test_breakpoint_set_restart
    self.assertTrue(bp.IsValid() and bp.GetNumLocations() == 1,
VALID_BREAKPOINT)
AssertionError: False is not true : Got a valid breakpoint
```

From this error we're not quite sure what about the breakpoint here is
the problem.

This patch splits up the assertion to narrow down the issue.
2024-06-03 17:04:16 +01:00
Pavel Labath
d00731cb7f [lldb] s/assertEquals/assertEqual in TestDAP_variables_children 2024-06-03 11:23:51 +02:00
David Spickett
6abf361953
[lldb][test] Fix D lang mangling test on Windows (#94196)
On Windows the function does not have a symbol associated with it:
Function: id = {0x000001c9}, name = "_Dfunction", range =
[0x0000000140001000-0x0000000140001004)
      LineEntry: <...>

Whereas it does on Linux:
Function: id = {0x00000023}, name = "_Dfunction", range =
[0x0000000000000734-0x0000000000000738)
      LineEntry: <...>
Symbol: id = {0x00000058}, range =
[0x0000000000000734-0x0000000000000738), name="_Dfunction"

This means that frame.symbol is not valid on Windows.

However, frame.function is valid and it also has a "mangled" attribute.

So I've updated the test to check the symbol if we've got it, and the
function always.

In both cases we check that mangled is empty (meaning it has not been
treated as mangled) and that the display name matches the original
symbol name.
2024-06-03 10:18:39 +01:00
David Spickett
770b6c7924 [lldb][test] Add missing import in D lang mangling test 2024-06-03 09:16:49 +00:00
David Spickett
09c0607919 [lldb][test] Skip D lang mangling test on Windows
While the fix is reviewed.
2024-06-03 09:02:06 +00:00
Pavel Labath
763b96c86d
[lldb] Avoid (unlimited) GetNumChildren calls when printing values (#93946)
For some data formatters, even getting the number of children can be an
expensive operations (e.g., needing to walk a linked list to determine
the number of elements). This is then wasted work when we know we will
be printing only small number of them.

This patch replaces the calls to GetNumChildren (at least those on the
"frame var" path) with the calls to the capped version, passing the
value of `max-children-count` setting (plus one)
2024-06-03 10:34:44 +02:00
gulfemsavrun
85fd1688b2
Revert "A few updates around "transcript"" (#94088)
Reverts llvm/llvm-project#92843 because it broke some lldb tests:

https://luci-milo.appspot.com/ui/p/fuchsia/builders/toolchain.ci/clang-linux-x64/b8746385730949743489/overview
2024-05-31 20:06:18 -07:00
royitaqi
ad884d9728
A few updates around "transcript" (#92843)
# Changes

1. Changes to the structured transcript.
1. Add fields `commandName` and `commandArguments`. They will hold the
name and the arguments string of the expanded/executed command (e.g.
`breakpoint set` and `-f main.cpp -l 4`). This is not to be confused
with the `command` field, which holds the user input (e.g. `br s -f
main.cpp -l 4`).
2. Add field `timestampInEpochSeconds`. It will hold the timestamp when
the command is executed.
3. Rename field `seconds` to `durationInSeconds`, to improve
readability, especially since `timestampInEpochSeconds` is added.
2. When transcript is available and the newly added option
`--transcript` is present, add the transcript to the output of
`statistics dump`, as a JSON array under a new field `transcript`.
3. A few test name and comment changes.
2024-05-31 14:42:00 -07:00
Dave Lee
5a02a9a2e6
[lldb] Improve identification of Dlang mangled names (#93881)
Reduce false positive identification of C names as Dlang mangled names. This happens 
when a C function uses the prefix `_D`.

The [Dlang ABI](https://dlang.org/spec/abi.html#name_mangling) shows that mangled names 
have a length immediately following the `_D` prefix. This change checks for a digit 
after the `_D` prefix, when identifying the mangling scheme of a symbol. This doesn't 
prevent false positives entirely, but does make it less likely.
2024-05-31 11:20:23 -07:00
jimingham
1e81b67925
[lldb] FormatManager::GetPossibleMatches assumes all ValueObjects have targets. (#93880)
But one made in a situation where that's impossible might only have an
error, and no symbol context, so that's not necessarily true. Check for
the target's validity before using it.

Fixes issue #93313
2024-05-31 10:43:05 -07:00
Vladislav Dzhidzhoev
c5e417a812 [lldb] Fix 'session save' command on Windows
1. Use dashes (-) instead of colons (:) as time separator in a session log
file name since Windows doesn't support saving files with names containing
colons.

2. Temporary file creation code is changed in the test:
On Windows, the temporary file should be closed before 'session save'
writes session log to it. NamedTemporaryFile() can preserve the file
after closing it with delete_on_close=False option.
However, this option is only available since Python 3.12. Thus
mkstemp() is used for temporary file creation as the more compatible
option.
2024-05-31 17:18:21 +02:00
Miro Bucko
493eefc93f
[lldb][test] Fix failing test TestAddressRange.py (#93871)
Test llvm-project/lldb/test/API/python_api/address_range/TestAddressRange.py is failing on Windows due adding a carriage return character at the end of line. Original PR is #93836.
2024-05-30 13:44:51 -07:00
Miro Bucko
48175a5d9f
[lldb] Add SBAddressRange and SBAddressRangeList to SB API (#93836)
This adds new SB API calls and classes to allow a user of the SB API to obtain an address range from SBFunction and SBBlock. This is a second attempt to land the reverted PR #92014.
2024-05-30 10:38:21 -07:00
Dmitry Vasilyev
b62ba7f5b1
[lldb] Fixed the TestGdbRemotePlatformFile test running on a remote target (#93832)
Skip checking of few stat fields like st_dev (ID of device containing
file) in case of a remote target.
2024-05-30 19:57:16 +04:00
Dmitry Vasilyev
59e2a6b08f
[lldb] Fixed the TestDebuggerAPI test running on a remote target (#93829)
Recently we have disabled this test for Windows host and Linux target.
Now we faced the same issue #92419 in case of Linux x86_64 host and
Linux Aarch64 target.
2024-05-30 19:56:46 +04:00
Dmitry Vasilyev
facb767e5b
[lldb] Fixed the TestGdbRemoteLibrariesSvr4Support test running on a remote target (#93825)
The TestGdbRemoteLibrariesSvr4Support test failed in case of Linux
x86_64 host and Linux Aarch64 target. Installing libraries to the remote
target is not enough. This test actively uses self.getBuildDir() and
os.path.realpath() which does not work in case of the remote target. So,
disable this test for remote target now.
2024-05-30 19:56:04 +04:00
Pavel Labath
a2bcb932f3 [lldb] Attempt to fix TestCompletion on macos
Macos will automatically load dependent modules when creating a target,
resulting in more modules than the test expects.
2024-05-30 15:28:13 +00:00
Michael Buch
8b600a3732 Revert "Add SBAddressRange and SBAddressRangeList to SB API (#92014)"
This reverts commit 42944e4600827738fae868f0df831fb2678be8b4.
2024-05-30 12:40:05 +01:00
Pavel Labath
d554f2379b
[lldb] Fix module name tab completion (#93458)
Module names can be matched either by a full path or just their
basename. The completion machinery tried to do both, but had several
bugs:
- it always inserted the basename as a completion candidate, even if the
string being completed was a full path
- due to FileSpec canonicalization, it lost information about trailing
slashes (it treated "lib/<TAB>" as "lib<TAB>", even though it's clear
the former was trying to complete a directory name)
- due to both of the previous issues, the completion candidates could
end up being shorter than the string being completed, which caused
crashes (string out of range errors) when attempting to substitute the
results.

This patch rewrites to logic to remove these kinds of issues:
- basename and full path completion are handled separately
- full path completion is attempted always, basename only if the input
string does not contain a slash
- the code remembers both the canonical and original spelling or the
completed argument. The canonical arg is used for matching, while the
original spelling is used for completion. This way "/foo///.//b<TAB>"
can still match "/foo/bar", but it will complete to "/foo///.//bar".
2024-05-30 09:57:13 +02:00
Pavel Labath
f38ebec710
[lldb-dap] Don't call GetNumChildren on non-indexed synthetic variables (#93534)
A synthetic child provider might need to do considerable amount of work
to compute the number of children. lldb-dap is currently calling that
for all synthethic variables, but it's only actually using the value for
values which it deems to be "indexed" (which is determined by looking at
the name of the first child). This patch reverses the logic so that
GetNumChildren is only called for variables with a suitable first child.
2024-05-30 09:54:13 +02:00
David Spickett
23a09b9931 [lldb][Test] Remove some xfails for AArch64 Linux
PR #92245 fixed these tests on Linux. They likely work on FreeBSD too
but leaving the xfail for that so it can be confirmed later.

Also updated a bugzilla link to one that redirects to Github issues.

Relates to issues #43398 and #48751.
2024-05-29 10:28:10 +00:00
David Spickett
971f1aaad3 [lldb][Test][Windows] Fix flaky address range API tests
The new tests added in #92014 have been flaky on Linaro's
Windows on Arm bot. They appear to be hitting a deadlock trying
to clean up the test process.

This only happens in async mode and I don't see why this test
case needs async mode, so the simple workaround is to stick to
sync mode.
2024-05-29 10:07:47 +00:00
Miro Bucko
42944e4600
Add SBAddressRange and SBAddressRangeList to SB API (#92014)
This adds new SB API calls and classes to allow a user of the SB API to obtain an address ranges from SBFunction and SBBlock.
2024-05-28 09:29:10 -07:00
Michael Kruse
c3efb57655
[lldb] Revise IDE folder structure (#89748)
Update the folder titles for targets in the monorepository that have not
seen taken care of for some time. These are the folders that targets are
organized in Visual Studio and XCode
(`set_property(TARGET <target> PROPERTY FOLDER "<title>")`)
when using the respective CMake's IDE generator.

 * Ensure that every target is in a folder
 * Use a folder hierarchy with each LLVM subproject as a top-level folder
 * Use consistent folder names between subprojects
 * When using target-creating functions from AddLLVM.cmake, automatically
deduce the folder. This reduces the number of
`set_property`/`set_target_property`, but are still necessary when
`add_custom_target`, `add_executable`, `add_library`, etc. are used. A
LLVM_SUBPROJECT_TITLE definition is used for that in each subproject's
root CMakeLists.txt.
2024-05-25 17:29:18 +02:00
Dmitry Vasilyev
77369a7f1a
[lldb] Fixed the TestDebuggerAPI test on x86_64 Windows host (#90580)
Disable the TestDebuggerAPI test in case of the remote target and
Windows host.
2024-05-24 23:19:51 +04:00
Pavel Labath
fa6377119c
[lldb-dap] Automatically skip lldb-dap tests for remote platforms (#93169)
The don't currently work (and they're also not particularly useful,
since all of the remote stuff happens inside lldb).

This saves us from annotating tests one by one.
2024-05-24 08:52:32 +02:00
David Spickett
32c3561d44 [lldb][Test] Escape | chars in enum tests
| is a reserved character in regex.
2024-05-23 12:28:26 +00:00
Dmitry Vasilyev
e37da2cef7
[lldb] Fixed the TestExitDuringExpression test in case of a remote target (#93119)
Sometimes this test failed on the assert `The thread exited` in case of
a remote target. Increase the timeout to 1 second to avoid a racing
condition.
2024-05-23 14:01:10 +04:00
Dmitry Vasilyev
4d9e7b14e4
[lldb][Windows] Fixed the TestBreakpointCommand test (#93122)
The TestBreakpointCommand test is incorrectly disabled for Windows
target. We can disable it for Windows host instead or just fix the
issue. This patch fixes the path separator in
BreakpointResolverFileLine::DeduceSourceMapping() and the Windows
specific absolute path in the test in case of the Windows host.
2024-05-23 13:59:02 +04:00
Med Ismail Bennani
ae3f68066c
Revert "[lldb] Make use of Scripted{Python,}Interface for ScriptedThreadPlan (Reland #70392)" (#93153)
Reverts llvm/llvm-project#93149 since it breaks
https://lab.llvm.org/buildbot/#/builders/68/builds/74799
2024-05-23 01:46:29 -07:00
Med Ismail Bennani
4cc6d0f4df
[lldb] Make use of Scripted{Python,}Interface for ScriptedThreadPlan (Reland #70392) (#93149)
This patch makes ScriptedThreadPlan conforming to the ScriptedInterface
& ScriptedPythonInterface facilities by introducing 2
ScriptedThreadPlanInterface & ScriptedThreadPlanPythonInterface classes.

This allows us to get rid of every ScriptedThreadPlan-specific SWIG
method and re-use the same affordances as other scripting offordances,
like Scripted{Process,Thread,Platform} & OperatingSystem.

To do so, this adds new transformer methods for `ThreadPlan`, `Stream` &
`Event`, to allow the bijection between C++ objects and their python
counterparts.

This just re-lands #70392 after fixing test failures.

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
2024-05-23 01:25:48 -07:00
Daniel Thornburgh
c93a67038d
Revert "[lldb] Added Debuginfod tests and fixed a couple issues" (#93094)
Reverts llvm/llvm-project#92572 due to Fuchsia CI breakages (using CLI
tools in tests that weren't necessarily built).
2024-05-22 13:56:33 -07:00
Kevin Frei
e558d21e87
[lldb] Added Debuginfod tests and fixed a couple issues (#92572)
Here we go with attempt number five. Again, no changes to the LLDB code
diff, which has been reviewed several times.

For the tests, I added a `@skipIfCurlSupportMissing` annotation so that
the Debuginfod mocked server stuff won't run, and I also disabled
non-Linux/FreeBSD hosts altogether, as they fail for platform reasons on
macOS and Windows. In addition, I updated the process for extracting the
GNU BuildID to no create a target, per some feedback on the previous
diff.

For reference, previous PR's (landed, backed out after the fact for
various reasons) #90622, #87676, #86812, #85693

---------

Co-authored-by: Kevin Frei <freik@meta.com>
2024-05-22 10:31:04 -07:00
Pavel Labath
9677e8171c
[lldb/dwarf] Fix DW_IDX_parent processing for split dwarf (#92745)
DWARFDebugInfo only knows how to resolve references in its own file, but
in split dwarf, the index entries will refer to DIEs in the separate
(DWO) file. To resolve the DIERef correctly we'd either need to go
through the SymbolFileDWARF to get the full logic for resolving a
DIERef, or use the fact that ToDIERef already looks up the correct unit
while computing its result.

This patch does the latter.

This bug manifested itself in not being able to find type definitions
for types in namespaces, so I've modified one of our type resolving test
cases to run with debug_names, and added a namespaced class into it (it
originally contained only a top-level class).
2024-05-21 12:45:59 +02:00