Commit Graph

30829 Commits

Author SHA1 Message Date
Jonas Devlieghere
c8209943fa [lldb] Improve locking in PathMappingLists (NFC) (#114576)
In [D148380](https://reviews.llvm.org/D148380), Alex added locking to
PathMappingLists. The current implementation runs the callback under the
lock, which I don't believe is necessary. As far as I can tell, no users
of the callback are relying on the list not having been modified until
the callback is handled.

This patch implements my suggestion to unlock the mutex before the
callback. I also switched to a non-recursive mutex as I don't believe
the recursive property is needed. To make the class fully thread safe, I
did have to introduce another mutex to protect the callback members.

The motivation for this change is #114507. Specifically,
Target::SetExecutableModule calls Target::GetOrCreateModule, which
potentially performs path remapping, which in turns has a callback to
Target::SetExecutableModule.
2024-11-01 16:38:14 -07:00
Walter Erquinigo
c1df376b0c [LLDB] Finish implementing support for DW_FORM_data16 (#113508)
This FORM already has support within LLDB to be parsed as a 16-byte
BLOCK, and all that is left to properly support it in the DWARFParser is
to add it to some enums.

With this, I can debug programs that use libstdc++.so.6.0.33 built with
GCC.
2024-11-01 17:33:08 -04:00
Dave Lee
2bd21b26e2 [lldb] Improve command status when dwim-print has no result (#114478)
When an expression produces no result, set `dwim-print` status to 
`eReturnStatusSuccessFinishNoResult`.
2024-11-01 13:39:14 -07:00
Zequan Wu
0cfcd387f9 [lldb][NativePDB] Parse global variables. (#114303)
This doesn't parse S_CONSTANT case yet, because I found that the global
variable `std::strong_ordering::equal` is a S_CONSTANT and has type of
LF_STRUCTURE which is not currently handled when creating dwarf
expression for the variable. Left a TODO for it to finish later.

This makes `lldb/test/Shell/SymbolFile/PDB/ast-restore.test` and
`lldb/test/Shell/SymbolFile/PDB/calling-conventions-x86.test` pass on
windows with native pdb plugin only.
2024-11-01 14:15:54 -04:00
Alex Langford
c3782f67da [lldb] Disable automatically opening editor for TestSessionSave (#114469) 2024-11-01 11:12:29 -07:00
Jonas Devlieghere
16a6c10bd4 [lldb] Fix warning: comparison of integers of different signs 2024-11-01 11:06:18 -07:00
Jonas Devlieghere
f33b5b7937 [lldb] INSTANTIATE_TEST_CASE_P -> INSTANTIATE_TEST_SUITE_P
INSTANTIATE_TEST_CASE_P is deprecated in favor of
INSTANTIATE_TEST_SUITE_P.
2024-11-01 11:03:19 -07:00
Felipe de Azevedo Piovezan
d6a1501377 [lldb] Skip TestDAP_completions on older versions of libcxx 2024-11-01 08:55:23 -07:00
Jonas Devlieghere
cf3464bbb7 [lldb] Set LLDB_USE_NATIVE_PDB_READER at the directory level (#114455)
Lit allows you to set environment variables for all tests in a directory
using a `lit.local.cfg` file. Do this for the PDB and NativePDB tests.
2024-10-31 15:31:51 -07:00
Jonas Devlieghere
88591aa0ca [lldb] Remove lldb-repro utility
Remove lldb-repro which was used to run the test suite against a
reproducer. The corresponding functionality has been removed from LLDB
so there's no need for the tool anymore.
2024-10-31 10:39:48 -07:00
Jonas Devlieghere
42fae38e6a [lldb] Add a fuzzer for the DWARF Expression Evaluator (#114286)
This adds a fuzzer for the DWARF expression evaluator. It does pretty
much the same thing as what we do in the corresponding unit test but
with data generated by libfuzzer.
2024-10-31 10:27:41 -07:00
Augusto Noronha
d6b9028257 [lldb] Extend FindTypes to optionally search by mangled type name (#113007)
Swift types have mangled type names. This adds functionality to look up
those types through the FindTypes API by searching for the mangled type
name instead of the regular name.
2024-10-31 09:45:58 -07:00
Adrian Vogelsgesang
2aed0d9cd3 [lldb][test] Fix LibCxxInternalsRecognizerTestCase on clang <= 17 (#114122)
We had to disable the tests for libc++ <= 15 because the `std::ranges`
functions were not available, yet.

Also, on libc++17 there was still an additional `__fn` struct withing
`ranges::__sort`. The test expectation was updated to use a regular
expression, so we can match both the old and the new name.

See
https://green.lab.llvm.org/job/llvm.org/view/LLDB/job/lldb-cmake-matrix/912/execution/node/107/log/
2024-10-31 09:01:46 -07:00
Jonas Devlieghere
9ce0a61bdb [lldb] Use PY_VERSION_HEX to simplify conditional compilation (NFC) (#114346)
Use PY_VERSION_HEX to simplify conditional compilation depending on the
Python version.

This also adds a static_assert to lldb-python to error out with a
meaningful diagnostic when you try building LLDB with an older Python
version in preparation for [1].

[1]
https://discourse.llvm.org/t/rfc-lets-document-and-enforce-a-minimum-python-version-for-lldb/82731/15
2024-10-31 08:46:35 -07:00
Muhammad Omair Javaid
3bc58fc7f7 [lldb][test] Fix FileActionTest.cpp for Windows (#112657)
Disable part of the test failing on windows. as O_NOCTTY and
O_RDONLY dont have same behavior on windows vs linux.
2024-10-31 14:37:32 +05:00
David Spickett
7557972884 [lldb][test] Fix formatting in TestInlineStepping.py
Fixes a218f0f354
2024-10-31 09:08:00 +00:00
jimingham
a218f0f354 [lldb][test] Skip one inline stepping test for arm-ubuntu. (#114295)
The test is currently passing everywhere but this 32-bit arm ubuntu bot.
I don't have an easy way to debug this, so I'm skipping the test on that
platform till we get a chance to figure this out.
2024-10-31 09:06:42 +00:00
Jonas Devlieghere
75aaa312ff [lldb] Fix formatting and whitespace in ScriptInterpreterPython (NFC) 2024-10-30 20:33:28 -07:00
Jonas Devlieghere
de7ad6b682 [lldb] Use Py_InitializeFromConfig with Python >= 3.8 (NFC) (#114112)
This fixes the deprecation warning for Py_SetPythonHome, which was
deprecated in Python 3.11. With this patch, when building against Python
3.8 or later, we now use Py_InitializeFromConfig instead.

Fixes #113475
2024-10-30 18:48:43 -07:00
jimingham
3243e3d887 Fix stepping away from the bottom-most frame of a virtual inlined call stack. (#114337)
The computation of 'Thread::IsVirtualStep" was wrong - it called being
at the bottom of a virtual call stack a "virtual step" but that is
actually when you've gotten to concrete code and need to step for real.

I also added a test for this.
2024-10-30 18:26:38 -07:00
Jonas Devlieghere
3a782ef97d [lldb] Add a link to LLDB's Discord channel on the website (#114289)
Looking at #114276, I realized we have a link to Discourse on the
website, but not Discord. I think it would be helpful to have that link
there for real-time community discussion.
2024-10-30 15:47:48 -07:00
Wanyi
f7c36d2f88 [lldb] Fix API test for file redirection to existing files (#114119)
API test failed for remote platform in
[#112657](https://github.com/llvm/llvm-project/pull/112657)

Previously when putting files onto remote platform, I used `platform
file write -d <data>` which actually required a `platform file open
<path>` first in order to obtain a file descriptor.
eg. in file
[TestGDBRemotePlatformFile.py](94e7d9c0bf/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py (L24-L32))
To fix this, use the `platform put-file` method, which is used in the
`redirect_stdin` from this test already.
2024-10-30 17:00:40 -04:00
Jonas Devlieghere
2bc5302706 Revert "[lldb] Use Py_InitializeFromConfig with Python >= 3.8 (NFC)" (#114290)
Reverts llvm/llvm-project#114112 because this triggers a compile error:

```
no known conversion from 'str_type' (aka 'wchar_t *') to 'const char *' for 3rd argument
  221 | PyAPI_FUNC(PyStatus) PyConfig_SetBytesString(
      |                      ^
  222 |     PyConfig *config,
  223 |     wchar_t **config_str,
  224 |     const char *str);
      |     ~~~~~~~~~~~~~~~
1 error generated.

```
2024-10-30 11:36:10 -07:00
Jonas Devlieghere
49277253f0 [lldb] Use LLVM's helper for Unicode conversion (NFC) (#112582)
The codecvt header has been deprecated in C++17. Use LLVM's unicode
helpers to convert between UTF-8 and UTF-16.
2024-10-30 09:31:32 -07:00
jimingham
7dbbd2b251 Fix call site breakpoint patch (#114158)
This fixes the two test suite failures that I missed in the PR:

https://github.com/llvm/llvm-project/pull/112939

One was a poorly written test case - it assumed that on connect to a
gdb-remote with a running process, lldb MUST have fetched all the frame
0 registers. In fact, there's no need for it to do so (as the CallSite
patch showed...) and if we don't need to we shouldn't. So I fixed the
test to only expect a `g` packet AFTER calling read_registers.

The other was a place where some code had used 0 when it meant
LLDB_INVALID_LINE_NUMBER, which I had fixed but missed one place where
it was still compared to 0.
2024-10-30 09:28:38 -07:00
jimingham
9cd30b1ef3 Fix the sort function for languages to have "strict weak ordering". (#114160)
If you build libstdc++ with "debug" strictness, the test
TestTypeLookup.py will assert. That's because we're calling llvm::sort
(which redirects to std::sort) with a function that doesn't obey strict
weak ordering.

The error was that when the two languages were equal, we're sometimes
returning `true` but strict weak ordering requires that always be false.

This patch just makes the function behave properly.
2024-10-30 09:26:37 -07:00
jimingham
a575e6e5ca Fix a couple of tests that were incorrectly using configuration.dwarf_version (#114161)
The tests were using the variable directly to get the dwarf version used
for the test. That's only the overridden value, and won't be set if
we're using the compiler default. I also put a comment by the variable
to make sure people don't make the same mistake in the future.
2024-10-30 09:25:47 -07:00
Adrian Prantl
eac2c182c6 Remove a flaky and unnecessary check (#114251)
The order in which the libraries appear is not always stable and even if
it were, this test is not the right place to check for this.
2024-10-30 08:59:08 -07:00
Jonas Devlieghere
45f420e344 [lldb] Use Py_InitializeFromConfig with Python >= 3.8 (NFC) (#114112)
This fixes the deprecation warning for Py_SetPythonHome, which was
deprecated in Python 3.11. With this patch, when building against Python
3.8 or later, we now use Py_InitializeFromConfig instead.

Fixes #113475
2024-10-30 08:41:30 -07:00
Santhosh Kumar Ellendula
62ff85f079 [lldb-dap] Fix for missing 'raw_string_ostream::flush' removal in ProgressEvent.cpp; addressing #108745 (#114087)
I hope it was missed unintentionally, pushing the same for the review.
Ref: https://github.com/llvm/llvm-project/pull/108745

---------

Co-authored-by: Santhosh Kumar Ellendula <sellendu@hu-sellendu-hyd.qualcomm.com>
Co-authored-by: Santhosh Kumar Ellendula <sellendu@hu-sellendu-lv.qualcomm.com>
2024-10-30 10:50:59 +05:30
jeffreytan81
cb04d33780 Improve namespace lookup using .debug_names parent chain (#110062)
## Summary
This PR is a continuation of
https://github.com/llvm/llvm-project/pull/108907 by using `.debug_names`
parent chain faster lookup for namespaces.


## Implementation
Similar to https://github.com/llvm/llvm-project/pull/108907. This PR
adds a new API: `GetNamespacesWithParents` in `DWARFIndex` base class.
The API performs the same function as `GetNamespaces()` with additional
filtering using parents `CompilerDeclContext`. A default implementation
is given in `DWARFIndex` class which parses debug info and performs the
matching. In the `DebugNameDWARFIndex` override, parents
`CompilerDeclContext` is cross checked with parent chain in
`.debug_names` for much faster filtering before fallback to base
implementation for final filtering.

## Performance Results
For the same benchmark used in
https://github.com/llvm/llvm-project/pull/108907, this PR improves: 48s
=> 28s

---------

Co-authored-by: jeffreytan81 <jeffreytan@fb.com>
2024-10-29 20:42:54 -07:00
Jonas Devlieghere
75b37c3191 [DWARF] Fix arity of DW_OP_bra (#114136)
Found by my proof-of-concept DWARF expression evaluator fuzzer.
2024-10-29 16:41:01 -07:00
Zequan Wu
a325c53593 [lldb] Fix lldb windows build breakage from https://github.com/llvm/llvm-project/pull/112657.
LLDB windows build failure: https://lab.llvm.org/buildbot/#/builders/141/builds/3462
2024-10-29 14:38:02 -07:00
Zequan Wu
8193832fb9 [lldb] Search main function with lldb::eFunctionNameTypeFull when getting default file and line. (#113980)
This is to work around the fact that
`SymbolFileNativePDB::FindFunctions` only support
`lldb::eFunctionNameTypeFull` and `lldb::eFunctionNameTypeMethod` now.
Since `main`'s full name is the same as base name (`main`), it's okay to
search with `lldb::eFunctionNameTypeFull` when trying to get the default
file and line. With this, `lldb/test/Shell/Driver/TestSingleQuote.test`
passes on Windows with NativePDB plugin.
2024-10-29 16:23:33 -04:00
Michael Buch
b4e1af0096 [lldb-dap] Always pass disableASLR to the DAP executable (#113891)
More context can be found in
https://github.com/llvm/llvm-project/pull/110303

For DAP tests running in constrained environments (e.g., Docker
containers), disabling ASLR isn't allowed. So we set `disableASLR=False`
(since https://github.com/llvm/llvm-project/pull/113593).

However, the `dap_server.py` will currently only forward the value
of `disableASLR` to the DAP executable if it's set to `True`. If the
DAP executable wasn't provided a `disableASLR` field it defaults to
`true` too:
f147437945/lldb/tools/lldb-dap/lldb-dap.cpp (L2103-L2104)

This means that passing `disableASLR=False` from the tests is currently
not possible.

This is also true for many of the other boolean arguments of
`request_launch`. But this patch only addresses `disableASLR` for now
since it's blocking a libc++ patch.
2024-10-29 18:40:06 +00:00
Wanyi
efc6d33be9 [lldb] Fix write only file action to truncate the file (#112657)
When `FileAction` opens file with write access, it doesn't clear the
file nor append to the end of the file if it already exists. Instead, it
writes from cursor index 0.

For example, by using the settings `target.output-path` and
`target.error-path`, lldb will redirect process stdout/stderr to files.
It then calls this function to write to the files which the above
symptoms appear.

## Test
- Added unit test checking the file flags
- Added 2 api tests checking
  - File content overwritten if the file path already exists
- Stdout and stderr redirection to the same file doesn't change its
behavior
2024-10-29 14:22:51 -04:00
Jonas Devlieghere
2ab98dfe19 [lldb] Update link to GreenDragon in the docs 2024-10-29 09:45:29 -07:00
Felipe de Azevedo Piovezan
474234a096 [debugserver] Mark ASAN memory regions as "heap" (#113968)
This memory type is currently not handled, but it makes sense to mark it
as a heap allocation in requests asking for memory region info.
2024-10-28 15:02:07 -07:00
jimingham
b54bc104ea Revert "Add the ability to break on call-site locations, improve inli… (#113947)
…ne stepping (#112939)"

This was breaking some gdb-remote packet counting tests on the bots. I
can't see how this patch could cause that breakage, but I'm reverting to
figure that out.

This reverts commit f147437945.
2024-10-28 11:52:32 -07:00
Zequan Wu
19c0a74ad6 [lldb] Fix lldb windows build breakage from https://github.com/llvm/llvm-project/pull/113839. 2024-10-28 11:13:00 -07:00
jimingham
f147437945 Add the ability to break on call-site locations, improve inline stepping (#112939)
Previously lldb didn't support setting breakpoints on call site
locations. This patch adds that ability.

It would be very slow if we did this by searching all the debug
information for every inlined subroutine record looking for a call-site
match, so I added one restriction to the call-site support. This change
will find all call sites for functions that also supply at least one
line to the regular line table. That way we can use the fact that the
line table search will move the location to that subsequent line (but
only within the same function). When we find an actually moved source
line match, we can search in the function that contained that line table
entry for the call-site, and set the breakpoint location back to that.

When I started writing tests for this new ability, it quickly became
obvious that our support for virtual inline stepping was pretty buggy.
We didn't print the right file & line number for the breakpoint, and we
didn't set the position in the "virtual inlined stack" correctly when we
hit the breakpoint. We also didn't step through the inlined frames
correctly. There was code to try to detect the right inlined stack
position, but it had been refactored a while back with the comment that
it was super confusing and the refactor was supposed to make it clearer,
but the refactor didn't work either.

That code was made much clearer by abstracting the job of "handling the
stack readjustment" to the various StopInfo's. Previously, there was a
big (and buggy) switch over stop info's. Moving the responsibility to
the stop info made this code much easier to reason about.

We also had no tests for virtual inlined stepping (our inlined stepping
test was actually written specifically to avoid the formation of a
virtual inlined stack... So I also added tests for that along with the
tests for setting the call-site breakpoints.
2024-10-28 10:01:57 -07:00
Adrian Vogelsgesang
09c258ef6a [NFC][lldb-dap] Clean-up includes (#113839)
This commit cleans up the includes in the `lldb-dap` subfolder. The main
motivation was that I got annoyed by `clangd` always complaining about
unused includes while working on lldb-dap.
2024-10-28 11:01:57 +01:00
Kazu Hirata
ccc15cd6f5 [lldb] Avoid repeated hash lookups (NFC) (#113412) 2024-10-25 15:35:01 -07:00
Michael Buch
2d26ef09fc [lldb-dap][test] Set disableASLR to False for tests (#113593)
When running in constrained environments like docker, disabling ASLR
might fail with errors like:
```
AssertionError: False is not true : launch failed (Cannot launch
'/__w/.../lldb-dap/stackTrace/subtleFrames/TestDAP_subtleFrames.test_subtleFrames/a.out':
personality set failed: Operation not permitted)
```
E.g., https://github.com/llvm/llvm-project/pull/110303

Hence we already run `settings set target.disable-aslr false` as part of
the init-commands for the non-DAP tests (see
https://github.com/llvm/llvm-project/pull/88312 and
https://discourse.llvm.org/t/running-lldb-in-a-container/76801).

But we never adjusted it for the DAP tests. As a result we get
conflicting test logs like:
```
 {
    "arguments": {
      "commandEscapePrefix": null,
      "disableASLR": true,
     ....
      "initCommands": [
        ...
        "settings set target.disable-aslr false",
```

Disabling ASLR by default in tests isn't useulf (it's only really a
debugging aid for users). So this patch sets `disableASLR=False` by
default.
2024-10-25 12:06:57 +01:00
Jonas Devlieghere
b852fb1ec5 [lldb] Move ValueObject into its own library (NFC) (#113393)
ValueObject is part of lldbCore for historical reasons, but conceptually
it deserves to be its own library. This does introduce a (link-time) circular
dependency between lldbCore and lldbValueObject, which is unfortunate
but probably unavoidable because so many things in LLDB rely on
ValueObject. We already have cycles and these libraries are never built
as dylibs so while this doesn't improve the situation, it also doesn't
make things worse.

The header includes were updated with the following command:

```
find . -type f -exec sed -i.bak "s%include \"lldb/Core/ValueObject%include \"lldb/ValueObject/ValueObject%" '{}' \;
```
2024-10-24 20:20:48 -07:00
jeffreytan81
25909b811a Fix pointer to reference type (#113596)
We have got customer reporting "v &obj" and "p &obj" reporting different
results.
Turns out it only happens for obj that is itself a reference type which
"v &obj" reports the address of the reference itself instead of the
target object the reference points to. This diverged from C++ semantics.

This PR fixes this issue by returning the address of the dereferenced
object if it is reference type.

A new test is added which fails before.

Co-authored-by: jeffreytan81 <jeffreytan@fb.com>
2024-10-24 17:13:32 -07:00
Stefan Gränitz
76edf72501 Reland: [lldb] Fix crash missing MSInheritanceAttr with DWARF on Windows (#112928)
Member pointers refer to data or function members of a `CXXRecordDecl`,
which require a `MSInheritanceAttr` in order to be complete. Without that
we cannot calculate the size of a member pointer in memory. The attempt
has been causing a crash further down in the clang AST context. In order
to implement the feature, DWARF will need a new attribtue to convey the
information. For the moment, this patch teaches LLDB to handle to
situation and avoid the crash.
2024-10-24 13:47:15 +02:00
David Spickett
f52b89561f [lldb][AArch64] Read fpmr register from core files (#110104)
https://developer.arm.com/documentation/ddi0601/2024-06/AArch64-Registers/FPMR--Floating-point-Mode-Register
for details of the register.
2024-10-24 10:27:56 +01:00
Shubham Sandeep Rastogi
c9199700b8 Revert "[lldb] Fix crash missing MSInheritanceAttr on CXXRecordDecl with DWARF on Windows" (#113498)
Reverts llvm/llvm-project#112928

This is because it broke greendragon:
SymbolFile/DWARF/x86/member-pointers.cpp
2024-10-23 14:31:15 -07:00
Spencer Abson
3309061b2d [lldb] Cover all of SVE_TYPE in encoding switch 2024-10-23 17:05:28 +00:00