8833 Commits

Author SHA1 Message Date
Alex Langford
dc91a55b2c [lldb] Fix fallout from e9eaf7b430ee
Minor logic mistake. This caused TestObjCClassMethod to fail.
2023-05-05 14:56:49 -07:00
Alex Langford
e9eaf7b430 Re-land "[lldb] Expose a const iterator for SymbolContextList"
Re-lands 04aa943be8ed5c03092e2a90112ac638360ec253 with modifications
to fix tests.
I originally reverted this because it caused a test to fail on Linux.
The problem was that I inverted a condition on accident.
2023-05-05 11:19:21 -07:00
Saleem Abdulrasool
039fc57191 ObjectFile: remove extraneous shadowed variable (NFCI)
We already construct the shared pointer for the module.  Avoid creating
a shadow copy and use the original definition.
2023-05-05 10:55:29 -07:00
Saleem Abdulrasool
6bca093976 SymbolFile: invert condition, remove unnecessary else (NFC)
Remove an unnecessary `else` condition and swap the condition to be
positive rather than negative to make simpler to follow.  NFC
2023-05-05 07:31:19 -07:00
Jonas Devlieghere
300dce986f
[lldb] Migrate to GetPropertyAtIndexAs for FileSpecList (NFC)
Use the templated GetPropertyAtIndexAs helper for FileSpecList.
2023-05-04 22:24:23 -07:00
Jonas Devlieghere
ab73a9c1a7
[lldb] Eliminate {Get,Set}PropertyAtIndexAsFileSpec (NFC)
This patch is a continuation of 6f8b33f6dfd0 and eliminates the
{Get,Set}PropertyAtIndexAsFileSpec functions.
2023-05-04 22:10:28 -07:00
Jonas Devlieghere
917b3a7e62
[lldb] Move Core/FileSpecList -> Utility/FileSpecList (NFC)
There's no reason for FileSpecList to live in lldb/Core while FileSpec
lives in lldb/Utility. Move FileSpecList next to FileSpec.
2023-05-04 22:00:17 -07:00
Alex Langford
3d6073a9c3 Revert "[lldb] Expose a const iterator for SymbolContextList"
This reverts commit 04aa943be8ed5c03092e2a90112ac638360ec253.

This broke the debian buildbot and I'm not sure why. Reverting so I can
investigate.
2023-05-04 16:49:30 -07:00
Jonas Devlieghere
6f8b33f6df
[lldb] Use templates to simplify {Get,Set}PropertyAtIndex (NFC)
Use templates to simplify {Get,Set}PropertyAtIndex. It has always
bothered me how cumbersome those calls are when adding new properties.
After this patch, SetPropertyAtIndex infers the type from its arguments
and GetPropertyAtIndex required a single template argument for the
return value. As an added benefit, this enables us to remove a bunch of
wrappers from UserSettingsController and OptionValueProperties.

Differential revision: https://reviews.llvm.org/D149774
2023-05-04 16:42:46 -07:00
Alex Langford
04aa943be8 [lldb] Expose a const iterator for SymbolContextList
There are many situations where we'll iterate over a SymbolContextList
with the pattern:
```
SymbolContextList sc_list;
// Fill in sc_list here
for (auto i = 0; i < sc_list.GetSize(); i++) {
  SymbolContext sc;
  sc_list.GetSymbolAtContext(i, sc);

  // Do work with sc
}
```
Adding an iterator to iterate over the instances directly means we don't
have to do bounds checking or create a copy of every element of the
SymbolContextList.

Differential Revision: https://reviews.llvm.org/D149900
2023-05-04 16:36:44 -07:00
Jason Molenda
4fac08ff1d Recognize addressing_bits kv in stop reply packet
If a remote stub provides the addressing_bits kv pair in
the stop reply packet, update the Process address masks with
that value as it possibly changes during the process runtime.
This is an unusual situation, most likely a JTAG remote stub
and some very early startup code that is setting up the page
tables.  Nearly all debug sessions will have a single address
mask that cannot change during the lifetime of a Process.

Differential Revision: https://reviews.llvm.org/D149803
rdar://61900565
2023-05-04 13:14:10 -07:00
Dave Lee
eee32d66fe [lldb] Remove unused g_objc_Tagged_ISA constants (NFC)
Last use removed in f7420453e80b9294273009efcebaceac2383269e.
2023-05-04 11:01:37 -07:00
Jim Ingham
c2be702104 Allow scripted thread plans to modify the thread stop description when
they are completed.
2023-05-03 10:52:12 -07:00
Alex Langford
cd05ffdbb2 [lldb] Remove distribution_id from ArchSpec
The qHostInfo packet in the gdb-remote communication protocol specifies
that distribution_id can be set, so lldb handles that. But we store that
in the ArchSpec representing the "Host" platform (whatever platform the
debug server is running on). This field is otherwise unused in ArchSpec,
so it would be a lot easier if we stored that information at the
gdb-remote communication layer.

Sidenote: The distribution_id field is currently unused but I did not
want to remove it in case some folks found it useful (e.g. in downstream
forks).

Differential Revision: https://reviews.llvm.org/D149697
2023-05-03 10:30:42 -07:00
Alex Langford
c4f3f5225d [lldb] Remove FileSpec::GetLastPathComponent
As far as I can tell, this just computes the filename of the FileSpec,
which is already conveniently stored in m_filename. We can use
FileSpec::GetFilename() instead.

Differential Revision: https://reviews.llvm.org/D149663
2023-05-02 17:21:33 -07:00
Alex Langford
50e79d725c [lldb] Minor cleanups at callsites of FileSpec::GetFileNameExtension
FileSpec::GetFileNameExtension returns a StringRef. In some cases we
are calling it and then storing the result in a local. To prevent
cases where we store the StringRef, mutate the Filespec, and then try to
use the stored StringRef afterwards, I've audited the callsites and made
adjustments to mitigate: Either marking the FileSpec it comes from as
const (to avoid mutations) or by not storing the StringRef in a local if
it makes sense not to.

Differential Revision: https://reviews.llvm.org/D149671
2023-05-02 17:20:29 -07:00
Ilya Kuklin
8be139fc12 [lldb] Add settings for expression evaluation memory allocations.
Expression evaluation allocates memory for storing intermediate data during evaluation. For it to work properly it has to be allocated within target's available address space, for example within first 0xFFFF bytes for the 16-bit MSP430. The memory for such targets can be very tightly packed, but not all targets support GetMemoryRegionInfo API to pick an unused region, like MSP430 with MSPDebug GDB server.

These settings allow the programmer to manually pick precisely where and how much memory to allocate for expression evaluation in order not to overlap with existing data in process memory.

Reviewed By: bulbazord

Differential Revision: https://reviews.llvm.org/D149262
2023-05-02 11:02:44 -07:00
Jonas Devlieghere
611bd6c6ae
[lldb] Make exe_ctx an optional argument in OptionValueProperties (NFC)
The majority of call sites are nullptr as the execution context.
Refactor OptionValueProperties to make the argument optional and
simplify all the callers.
2023-05-02 10:36:11 -07:00
Jonas Devlieghere
ddd9358bca
[lldb] Remove unused will_modify argument (NFC)
Various OptionValue related classes are passing around will_modify but
the value is never used. This patch simplifies the interfaces by
removing the redundant argument.
2023-05-02 00:20:34 -07:00
Jonas Devlieghere
9c48aa68f4
[lldb] Refactor OptionValueProperties to return a std::optional (NFC)
Similar to fdbe7c7faa54, refactor OptionValueProperties to return a
std::optional instead of taking a fail value. This allows the caller to
handle situations where there's no value, instead of being unable to
distinguish between the absence of a value and the value happening the
match the fail value. When a fail value is required,
std::optional::value_or() provides the same functionality.
2023-05-01 21:46:32 -07:00
Jonas Devlieghere
fdbe7c7faa
[lldb] Refactor OptionValue to return a std::optional (NFC)
Refactor OptionValue to return a std::optional instead of taking a fail
value. This allows the caller to handle situations where there's no
value, instead of being unable to distinguish between the absence of a
value and the value happening the match the fail value. When a fail
value is required, std::optional::value_or() provides the same
functionality.
2023-05-01 21:08:23 -07:00
Jorge Gorbe Moya
d69518b4e5 Re-land "[lldb] Make the libcxx unique_ptr prettyprinter support custom deleters."
This reverts commit 45351120105a7257ccb1e38ec1b1f8a452269da2.
2023-05-01 16:19:01 -07:00
Alex Langford
e53e1de57e [lldb] Change ObjectValueDictionary to use a StringMap
llvm has a structure for maps where the key's type is a string. Using
that also means that the keys for OptionValueDictionary don't stick
around forever in ConstString's StringPool (even after they are gone).

The only thing we lose here is ordering: iterating over the map where the keys
are ConstStrings guarantees that we iterate in alphabetical order.
StringMap makes no guarantees about the ordering when you iterate over
the entire map.

Differential Revision: https://reviews.llvm.org/D149482
2023-05-01 16:17:24 -07:00
Jorge Gorbe Moya
4535112010 Revert "[lldb] Make the libcxx unique_ptr prettyprinter support custom deleters."
This reverts commit d366da97bd24ddfb91c9f260fa0aaf105d947652.
2023-05-01 14:14:09 -07:00
Jorge Gorbe Moya
d366da97bd [lldb] Make the libcxx unique_ptr prettyprinter support custom deleters.
The unique_ptr prettyprinter calls `GetValueOfLibCXXCompressedPair`,
which looks for a `__value_` child. However, when the second value in
the compressed pair is not an empty class, there are two `__value_`
children because `__compressed_pair` derives twice from
`__compressed_pair_elem`, one for each member of the pair. And then the
lookup fails because it's ambiguous.

This patch makes the following changes:

- Rename `GetValueOfLibCXXCompressedPair` to
  `GetFirstValueOfLibCXXCompressedPair`, and add a similar function to
  get the second value. Put both functions in
  Plugin/Language/CPlusPlus/LibCxx.cpp because it seems inappropriate to
  have libcxx-specific helpers separate from all the libcxx-dependent
  code.

- Read the second value of the `__ptr_` pair and display a "deleter"
  child in the unique_ptr synthetic child provider, when available.

- Add a test case for the non-empty deleter case.

Differential Revision: https://reviews.llvm.org/D148662
2023-05-01 13:08:04 -07:00
Douglas Yung
c46d9af26c Revert "Host: generalise GetXcodeSDKPath"
This reverts commit ade3c6a6a88ed3a9b06c076406f196da9d3cc1b9.

This breaks the build with GCC and affects at least 2 build bots:
https://lab.llvm.org/buildbot/#/builders/217/builds/20568
https://lab.llvm.org/buildbot/#/builders/243/builds/5576
2023-05-01 10:22:53 -07:00
Stefan Gränitz
64a2520bac [lldb][ObjectFileELF] Support AArch32 in ApplyRelocations
Allow the ObjectFileELF plugin to resolve R_ARM_ABS32 relocations from AArch32 object files. This fixes https://github.com/llvm/llvm-project/issues/61948

The existing architectures work with RELA-type relocation records that read addend from the relocation entry. REL-type relocations in AArch32 store addend in-place.
The new function doesn't re-use ELFRelocation::RelocAddend32(), because the interface doesn't match: in addition to the relocation entry we need the actual target section memory.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D147642
2023-04-29 17:34:39 +02:00
Saleem Abdulrasool
ade3c6a6a8 Host: generalise GetXcodeSDKPath
This generalises the GetXcodeSDKPath hook to a GetSDKRoot path which
will be re-used for the Windows support to compute a language specific
SDK path on the platform. Because there may be other options that we
wish to use to compute the SDK path, sink the XcodeSDK parameter into
a structure which can pass a disaggregated set of options. Furthermore,
optionalise the parameter as Xcode is not available for all platforms.

Differential Revision: https://reviews.llvm.org/D149397
Reviewed By: JDevlieghere
2023-04-28 09:30:59 -07:00
Jim Ingham
47f72aede1 Make the TSan report capture data structure anonymous.
This was using `struct data` which is way to common a name to use in
an lldb expression, and was causing occasional failures in the
TSan report gatherer.  The structure doesn't need to have a tag,
so remove it to avoid future problems.

The same job was done for the other sanitizers in D145569, but this
one was overlooked.

Differential Revision: https://reviews.llvm.org/D149394
2023-04-27 17:36:31 -07:00
Manoj Gupta
be5f35e24f lldb: Fix usage of sve functions on arm64
Use correct internal sve functions for arm64.
Otherwise, when cross-compling lld for AArch64 there are build
errors like:
NativeRegisterContextLinux_arm64.cpp:936:11:
   error: use of undeclared identifier 'sve_vl_valid
NativeRegisterContextLinux_arm64.cpp:63:28:
    error: variable has incomplete type 'struct user_sve_header'

Reviewed By: omjavaid

Differential Revision: https://reviews.llvm.org/D148752
2023-04-27 14:59:49 -07:00
Alex Langford
6fcdfc378c [lldb] Change return type of FileSpec::GetFileNameExtension
These don't really need to be in ConstStrings. It's nice that comparing
ConstStrings is fast (just a pointer comparison) but the cost of
creating the ConstString usually already includes the cost of doing a
StringRef comparison anyway, so this is just extra work and extra memory
consumption for basically no benefit.

Differential Revision: https://reviews.llvm.org/D149300
2023-04-26 15:56:29 -07:00
Alex Langford
33d6bd1c66 [lldb] Remove finding .Bundle directories in PlatformDarwinKernel
Jason isn't sure what this is used for and isn't aware of a .Bundle
suffix related to kernel debugging. Let's remove it.

Differential Revision: https://reviews.llvm.org/D149284
2023-04-26 14:53:55 -07:00
Jason Molenda
6b6bac2cd8 Fix off-by-one error in armv7 mach-o corefile register context
The sanity check on the size of the register context we found in
the corefile was off by one, so lldb would not add the register
contents.  Add a test case to ensure it doesn't regress.

Differential Revision: https://reviews.llvm.org/D149224
rdar://108306070
2023-04-26 13:06:07 -07:00
Med Ismail Bennani
da0700829f [lldb] Fix another GCC build failure in ScriptedPythonInterface.h
In 6c961ae, I've introduced a new explicit fully specialized templated method
`ScriptedPythonInterface::ReverseTransform(bool&, PythonObject, Status&)`.

However, that explicit specialization is causing GCC to choke when
building the file as shown here:

https://lab.llvm.org/buildbot/#/builders/217/builds/20430

To address that issue, this patch turns the method explicit specialization
into an method overload.

Differential Revision: https://reviews.llvm.org/D149218

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 17:26:45 -07:00
Med Ismail Bennani
e31d0c20e4 [lldb] Improve breakpoint management for interactive scripted process
This patch improves breakpoint management when doing interactive
scripted process debugging.

In other to know which process set a breakpoint, we need to do some book
keeping on the multiplexer scripted process. When initializing the
multiplexer, we will first copy breakpoints that are already set on the
driving target.

Everytime we launch or resume, we should copy breakpoints from the
multiplexer to the driving process.

When creating a breakpoint from a child process, it needs to be set both
on the multiplexer and on the driving process. We also tag the created
breakpoint with the name and pid of the originator process.

This patch also implements all the requirement to achieve proper
breakpoint management. That involves:

- Adding python interator for breakpoints and watchpoints in SBTarget
- Add a new `ScriptedProcess.create_breakpoint` python method

Differential Revision: https://reviews.llvm.org/D148548

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 15:03:15 -07:00
Med Ismail Bennani
ad03aeadfb [lldb/Plugin] Add breakpoint setting support to ScriptedProcess
This patch adds support for breakpoint setting to Scripted Processes.

For now, Scripted Processes only support setting software breakpoints.

When doing interactive scripted process debugging, it makes use of the
memory writing capability to write the trap opcodes in the memory of the
driving process. However the real process' target doesn't keep track of
the breakpoints that got added by the scripted process. This is a design
that we might need to change in the future, since we'll probably need to
do some book keeping to handle breakpoints that were set by different
scripted processes.

Differential Revision: https://reviews.llvm.org/D145296

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 15:02:34 -07:00
Med Ismail Bennani
6382fcb16d [lldb/Utility] Add opt-in shadow mode to event listeners
This patch augments lldb's event listeners with a new shadow mode.

As the name suggests, this mode allows events to be copied to an
additional listener to perform event monitoring, without interferring
with the event life cycle.

One of our use case for this, is to be able to listen to public process
events while making sure the events will still be delivered to the
default process listener (the debugger listener in most cases).

Differential Revision: https://reviews.llvm.org/D148397

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 15:02:34 -07:00
Med Ismail Bennani
6c961ae1b5 [lldb] Move ScriptedProcess private state update to implementation
While debugging a Scripted Process, in order to update its state and
work nicely with lldb's execution model, it needs to toggle its private
state from running to stopped, which will result in broadcasting a
process state changed event to the debugger listener.

Originally, this state update was done systematically in the Scripted
Process C++ plugin, however in order to make scripted process
interactive, we need to be able to update their state dynamically.

This patch makes use of the recent addition of the
SBProcess::ForceScriptedState to programatically, and moves the
process private state update to the python implementation of the resume
method instead of doing it in ScriptedProcess::DoResume.

This patch also removes the unused ShouldStop & Stop scripted
process APIs, and adds new ScriptedInterface transform methods for
boolean arguments. This allow the user to programmatically decide if
after running the process, we should stop it (which is the default setting).

Differential Revision: https://reviews.llvm.org/D145295

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 15:02:34 -07:00
Med Ismail Bennani
0d77e03474 [lldb/API] Introduce SBProcess::ForceScriptedState method
This patch introduces a new method to the SBProcess API called
ForceScriptedState. As the name suggests, this affordance will allow the
user to alter the state of the scripted process programatically.

This is necessary to update the scripted process state when perform
interactive debugging.

Differential Revision: https://reviews.llvm.org/D145294

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
2023-04-25 15:02:33 -07:00
Jim Ingham
076341d108 Make sure SelectMostRelevantFrame happens only when returning to the user.
This is a user facing action, it is meant to focus the user's attention on
something other than the 0th frame when you stop somewhere where that's
helpful. For instance, stopping in pthread_kill after an assert will select
the assert frame.

This is not something you want to have happen internally in lldb, both
because internally you really don't want the selected frame changing out
from under you, and because the recognizers can do arbitrary work, and that
can cause deadlocks or other unexpected behavior.

However, it's not something that the current code does
explicitly after a stop has been delivered, it's expected to happen implicitly
as part of stopping. I changing this to call SMRF explicitly after a user
stop, but that got pretty ugly quickly.

So I added a bool to control whether to run this and audited all the current
uses to determine whether we're returning to the user or not.

Differential Revision: https://reviews.llvm.org/D148863
2023-04-21 14:21:25 -07:00
Jonas Devlieghere
c1d55d26d3
[lldb] Let Mangled decide whether a name is mangled or not
We have a handful of places in LLDB where we try to outsmart the logic
in Mangled to determine whether a string is mangled or not. There's at
least one place (*) where we are getting this wrong and causes a subtle
bug. The `cstring_is_mangled` is cheap enough that we should always rely
on it to determine whether a string is mangled or not.

(*) `ObjectFileMachO` assumes that a symbol that starts with a double
underscore (such as `__pthread_kill`) is mangled. That's mostly
harmless, until you use `function.name-without-args` in the frame
format. The formatter calls `Symbol::GetNameNoArguments()` which is a
wrapper around `Mangled::GetName(ePreferDemangledWithoutArguments)`. The
latter will first try using the appropriate language plugin to get the
demangled name without arguments, and if that fails, falls back to
returning the demangled name. Because we forced Mangled to treat the
symbol as a mangled name (even though it's not) there's no demangled
name. The result is that frames don't show any symbol at all.

Differential revision: https://reviews.llvm.org/D148846
2023-04-21 10:23:24 -07:00
Nick Desaulniers
7c59e8001a Reland: [Demangle] replace use of llvm::StringView w/ std::string_view
This reverts commit d81cdb49d74064e88843733e7da92db865943509.

This refactoring was waiting on converting LLVM to C++17.

Leave StringView.h and cleanup around for subsequent cleanup.

Additional fixes for missing std::string_view conversions for MSVC.

Reviewed By: MaskRay, DavidSpickett, ayzhao

Differential Revision: https://reviews.llvm.org/D148546
2023-04-20 11:22:20 -07:00
David Spickett
dbc34e2bed [LLDB] Discard register flags where the size doesn't match the register
In the particular case I was looking at I autogenerated a 128 bit set
of flags that is only 64 bit. This doesn't crash lldb but it was certainly
not expected.

I suspect that we would have crashed if the top 64 bits weren't
marked as unused (or at least invoked some very undefined behaviour).

When this happens, log the details and ignore the flags. Like this:
```
Size of register flags TTBR0_EL1_flags (16 bytes) for register TTBR0_EL1 does not match the register size (8 bytes). Ignoring this set of flags.
```

Turns out a few of the tests relied on this bug so I have updated
them and added a specific test for this case.

Reviewed By: jasonmolenda

Differential Revision: https://reviews.llvm.org/D148715
2023-04-20 08:36:49 +00:00
Alex Langford
96a800c07f [lldb] Change setting descriptions to use StringRef instead of ConstString
These probably do not need to be in the ConstString StringPool as they
don't really need any of the advantages that ConstStrings offer.
Lifetime for these things is always static and we never need to perform
comparisons for setting descriptions.

Differential Revision: https://reviews.llvm.org/D148679
2023-04-19 14:45:02 -07:00
David Spickett
ee9a646192 [lldb][RISCV] Add missing flags pointer to register infos
efd64c2f2506df3e2ed6d9da68e49f03fc31763c added these.
2023-04-19 11:42:14 +00:00
Emmmer
efd64c2f25 [LLDB][RISCV] Add RVV register infos
RVV stands for "RISC-V V Extension", which adds 32 vector registers, and seven unprivileged CSRs (vstart, vxsat, vxrm, vcsr, vtype, vl, vlenb) to a base scalar RISC-V ISA.

The base vector extension is intended to provide general support for data-parallel execution within the 32-bit instruction encoding space, with later vector extensions supporting richer functionality for certain domains.

This patch adds the definitions of RVV registers in `RegisterInfos_riscv64.h`, whose purpose is to provide support (such as reading, writing, and calculating the offsets) for future register-related functions.

Reviewed By: kito-cheng

Differential Revision: https://reviews.llvm.org/D143374
2023-04-19 16:26:33 +08:00
Jason Molenda
53430bfd5c Remove hardcoded address bits in ABIMacOS_arm64
A default number of addressing bits was hardcoded in
ABIMacOSX_arm64::FixAddress while we updated different
environments to fetch the value dynamically.  Remove
the old hardcoded value.

Differential Revision: https://reviews.llvm.org/D148603
rdar://108068497
2023-04-18 13:01:49 -07:00
Alex Langford
8bddb13c24 [lldb] Change parameter type of StructuredData::ParseJSON
Instead of taking a `const std::string &` we can take an
`llvm::StringRef`. The motivation for this change is that many of the
callers of `ParseJSON` end up creating a temporary `std::string` from an existing
`StringRef` or `const char *` in order to satisfy the API. There's no
reason we need to do this.

Differential Revision: https://reviews.llvm.org/D148579
2023-04-17 17:25:05 -07:00
Ilya Kuklin
81beb15d7e [lldb] Add support for MSP430 in LLDB.
Add MSP430 to the list of available targets, implement MSP430 ABI, add support for debugging targets with 16-bit address size.

The update is intended for use with MSPDebug, a GDB server implementation for MSP430.

Reviewed By: bulbazord, DavidSpickett

Differential Revision: https://reviews.llvm.org/D146965
2023-04-17 16:03:35 -07:00
Anton Korobeynikov
8456120623 Revert "[lldb] Add support for MSP430 in LLDB."
This reverts commit 82c02b733c7736507a41a26bebd37d3f8e88bd4e.

Apparently, the original patch was not rebased onto `main
2023-04-17 11:30:27 -07:00