#
ff569ed0 |
| 22-Oct-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Utility/UriParser] Replace port==-1 with llvm::None
Use llvm::Optional<uint16_t> instead of int for port number in UriParser::Parse(), and use llvm::None to indicate missing port instead of
[lldb] [Utility/UriParser] Replace port==-1 with llvm::None
Use llvm::Optional<uint16_t> instead of int for port number in UriParser::Parse(), and use llvm::None to indicate missing port instead of a magic value of -1.
Differential Revision: https://reviews.llvm.org/D112309
show more ...
|
#
66e06cc8 |
| 27-Sep-2021 |
Michał Górny <mgorny@moritz.systems> |
[llvm] [ADT] Update llvm::Split() per Pavel Labath's suggestions
Optimize the iterator comparison logic to compare Current.data() pointers. Use std::tie for assignments from std::pair. Replace the
[llvm] [ADT] Update llvm::Split() per Pavel Labath's suggestions
Optimize the iterator comparison logic to compare Current.data() pointers. Use std::tie for assignments from std::pair. Replace the custom class with a function returning iterator_range.
Differential Revision: https://reviews.llvm.org/D110535
show more ...
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4 |
|
#
202af507 |
| 23-Sep-2021 |
Pavel Labath <pavel@labath.sk> |
Recommit: [lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo
The previous version of the patch did not update the definitions in conditionally compiled code. This patch includ
Recommit: [lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo
The previous version of the patch did not update the definitions in conditionally compiled code. This patch includes changes to ARC and windows targets.
Original commit message was:
These were added to support some mips registers on linux, but linux mips support has now been removed due.
They are still referenced in the freebds mips implementation, but the completeness of that implementation is also unknown. All other architectures just set these fields to zero, which is a cause of significant bloat in our register info definitions.
Arm also has registers with variable sizes, but they were implemented in a more gdb-compatible fashion and don't use this feature.
Differential Revision: https://reviews.llvm.org/D110914
show more ...
|
#
b2c906da |
| 06-Oct-2021 |
Michael Forster <forster@google.com> |
Revert "[lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo"
This reverts commit 00e704bf080ffeeb9e334fb3ab71594f9aa50969.
This commit should should have updated llvm/llvm-pro
Revert "[lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo"
This reverts commit 00e704bf080ffeeb9e334fb3ab71594f9aa50969.
This commit should should have updated llvm/llvm-project/lldb/source/Plugins/ABI/ARC/ABISysV_arc.cpp like the other architectures.
show more ...
|
#
00e704bf |
| 23-Sep-2021 |
Pavel Labath <pavel@labath.sk> |
[lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo
These were added to support some mips registers on linux, but linux mips support has now been removed due.
They are still r
[lldb] Remove "dwarf dynamic register size expressions" from RegisterInfo
These were added to support some mips registers on linux, but linux mips support has now been removed due.
They are still referenced in the freebds mips implementation, but the completeness of that implementation is also unknown. All other architectures just set these fields to zero, which is a cause of significant bloat in our register info definitions.
Arm also has registers with variable sizes, but they were implemented in a more gdb-compatible fashion and don't use this feature.
Differential Revision: https://reviews.llvm.org/D110914
show more ...
|
#
f4b71e34 |
| 26-Sep-2021 |
Michał Górny <mgorny@moritz.systems> |
[llvm] [ADT] Add a range/iterator-based Split()
Add a llvm::Split() implementation that can be used via range-for loop, e.g.:
for (StringRef x : llvm::Split("foo,bar,baz", ',')) ...
The
[llvm] [ADT] Add a range/iterator-based Split()
Add a llvm::Split() implementation that can be used via range-for loop, e.g.:
for (StringRef x : llvm::Split("foo,bar,baz", ',')) ...
The implementation uses an additional SplittingIterator class that uses StringRef::split() internally.
Differential Revision: https://reviews.llvm.org/D110496
show more ...
|
Revision tags: llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2 |
|
#
6ba3f723 |
| 11-Aug-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote] Implement the vRun packet
Implement the simpler vRun packet and prefer it over the A packet. Unlike the latter, it tranmits command-line arguments without redundant indices and l
[lldb] [gdb-remote] Implement the vRun packet
Implement the simpler vRun packet and prefer it over the A packet. Unlike the latter, it tranmits command-line arguments without redundant indices and lengths. This also improves GDB compatibility since modern versions of gdbserver do not implement the A packet at all.
Make qLaunchSuccess not obligatory when using vRun. It is not implemented by gdbserver, and since vRun returns the stop reason, we can assume it to be successful.
Differential Revision: https://reviews.llvm.org/D107931
show more ...
|
#
a97efde5 |
| 07-Sep-2021 |
David Spickett <david.spickett@linaro.org> |
[lldb] Add missing newline to stderr output on failed attach
|
#
ac312a9d |
| 06-Sep-2021 |
Benjamin Kramer <benny.kra@googlemail.com> |
[lldb] Silence compiler warnings from 37cbd817d3e2b8c673862e2eb262cad6dd3dd244
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp:3638:30: error: moving a temporary object p
[lldb] Silence compiler warnings from 37cbd817d3e2b8c673862e2eb262cad6dd3dd244
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp:3638:30: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move] return SendErrorResponse(std::move(ret.takeError())); ^ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp:3638:30: note: remove std::move call here return SendErrorResponse(std::move(ret.takeError())); ^~~~~~~~~~ ~ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp:3622:8: error: unused variable 'cf' [-Werror,-Wunused-variable] bool cf = packet_str.consume_front("qSaveCore");
show more ...
|
Revision tags: llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1 |
|
#
37cbd817 |
| 26-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [llgs server] Support creating core dumps on NetBSD
Add a new SaveCore() process method that can be used to request a core dump. This is currently implemented on NetBSD via the PT_DUMPCORE p
[lldb] [llgs server] Support creating core dumps on NetBSD
Add a new SaveCore() process method that can be used to request a core dump. This is currently implemented on NetBSD via the PT_DUMPCORE ptrace(2) request, and enabled via 'savecore' extension.
Protocol-wise, a new qSaveCore packet is introduced. It accepts zero or more semicolon-separated key:value options, invokes the core dump and returns a key:value response. Currently the only option supported is "path-hint", and the return value contains the "path" actually used. The support for the feature is exposed via qSaveCore qSupported feature.
Differential Revision: https://reviews.llvm.org/D101285
show more ...
|
#
555cd031 |
| 25-Jun-2021 |
David Spickett <david.spickett@linaro.org> |
[lldb] Correct format of qMemTags type field
The type field is a signed integer. (https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.html)
However it's not packed in the packet
[lldb] Correct format of qMemTags type field
The type field is a signed integer. (https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.html)
However it's not packed in the packet in the way you might think. For example the type -1 should be: qMemTags:<addr>,<len>:ffffffff Instead of: qMemTags:<addr>,<len>:-1
This change makes lldb-server's parsing more strict and adds more tests to check that we handle negative types correctly in lldb and lldb-server.
We only support one tag type value at this point, for AArch64 MTE, which is positive. So this doesn't change any of those interactions. It just brings us in line with GDB.
Also check that the test target has MTE. Previously we just checked that we were AArch64 with a toolchain that supports MTE.
Finally, update the tag type check for QMemTags to use the same conversion steps that qMemTags now does. Using static_cast can invoke UB and though we do do a limit check to avoid this, I think it's clearer with the new method.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D104914
show more ...
|
Revision tags: llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4 |
|
#
7d27230d |
| 31-Mar-2021 |
David Spickett <david.spickett@linaro.org> |
[lldb][AArch64] Add memory tag writing to lldb-server
This is implemented using the QMemTags packet, as specified by GDB in: https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.h
[lldb][AArch64] Add memory tag writing to lldb-server
This is implemented using the QMemTags packet, as specified by GDB in: https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.html#General-Query-Packets
(recall that qMemTags was previously added to read tags)
On receipt of a valid packet lldb-server will: * align the given address and length to granules (most of the time lldb will have already done this but the specification doesn't guarantee it) * Repeat the supplied tags as many times as needed to cover the range. (if tags > range we just use as many as needed) * Call ptrace POKEMTETAGS to write the tags.
The ptrace step will loop just like the tag read does, until all tags are written or we get an error. Meaning that if ptrace succeeds it could be a partial write. So we call it again and if we then get an error, return an error to lldb.
We are not going to attempt to restore tags after a partial write followed by an error. This matches the behaviour of the existing memory writes.
The lldb-server tests have been extended to include read and write in the same test file. With some updated function names since "qMemTags" vs "QMemTags" isn't very clear when they're next to each other.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D105180
show more ...
|
#
b7c14033 |
| 11-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote server] Support selecting process via Hg
Support using the extended thread-id syntax with Hg packet to select a subprocess. This makes it possible to start providing support for
[lldb] [gdb-remote server] Support selecting process via Hg
Support using the extended thread-id syntax with Hg packet to select a subprocess. This makes it possible to start providing support for running some of the debugger packets against another subprocesses.
Differential Revision: https://reviews.llvm.org/D100261
show more ...
|
Revision tags: llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2 |
|
#
da2e614f |
| 19-Feb-2021 |
David Spickett <david.spickett@linaro.org> |
[lldb][AArch64] Add memory tag reading to lldb-server
This adds memory tag reading using the new "qMemTags" packet and ptrace on AArch64 Linux.
This new packet is following the one used by GDB. (ht
[lldb][AArch64] Add memory tag reading to lldb-server
This adds memory tag reading using the new "qMemTags" packet and ptrace on AArch64 Linux.
This new packet is following the one used by GDB. (https://sourceware.org/gdb/current/onlinedocs/gdb/General-Query-Packets.html)
On AArch64 Linux we use ptrace's PEEKMTETAGS to read tags and we assume that lldb has already checked that the memory region actually has tagging enabled.
We do not assume that lldb has expanded the requested range to granules and expand it again to be sure. (although lldb will be sending aligned ranges because it happens to need them client side anyway) Also we don't assume untagged addresses. So for AArch64 we'll remove the top byte before using them. (the top byte includes MTE and other non address data)
To do the ptrace read NativeProcessLinux will ask the native register context for a memory tag manager based on the type in the packet. This also gives you the ptrace numbers you need. (it's called a register context but it also has non register data, so it saves adding another per platform sub class)
The only supported platform for this is AArch64 Linux and the only supported tag type is MTE allocation tags. Anything else will error.
Ptrace can return a partial result but for lldb-server we will be treating that as an error. To succeed we need to get all the tags we expect.
(Note that the protocol leaves room for logical tags to be read via qMemTags but this is not going to be implemented for lldb at this time.)
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D95601
show more ...
|
#
8d58fbd0 |
| 19-Feb-2021 |
David Spickett <david.spickett@linaro.org> |
[lldb][AArch64] Add memory-tagging qSupported feature
This feature "memory-tagging+" indicates that lldb-server supports memory tagging packets. (added in a later patch)
We check HWCAP2_MTE to deci
[lldb][AArch64] Add memory-tagging qSupported feature
This feature "memory-tagging+" indicates that lldb-server supports memory tagging packets. (added in a later patch)
We check HWCAP2_MTE to decide whether to enable this feature for Linux.
Reviewed By: omjavaid
Differential Revision: https://reviews.llvm.org/D97282
show more ...
|
#
76e47d48 |
| 26-May-2021 |
Raphael Isemann <teemperor@gmail.com> |
[lldb][NFC] Use C++ versions of the deprecated C standard library headers
The C headers are deprecated so as requested in D102845, this is replacing them all with their (not deprecated) C++ equivale
[lldb][NFC] Use C++ versions of the deprecated C standard library headers
The C headers are deprecated so as requested in D102845, this is replacing them all with their (not deprecated) C++ equivalent.
Reviewed By: shafik
Differential Revision: https://reviews.llvm.org/D103084
show more ...
|
#
ca7824c2 |
| 24-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote] Report QPassSignals and qXfer via extensions API
Remove hardcoded platform list for QPassSignals, qXfer:auxv:read and qXfer:libraries-svr4:read and instead query the process plug
[lldb] [gdb-remote] Report QPassSignals and qXfer via extensions API
Remove hardcoded platform list for QPassSignals, qXfer:auxv:read and qXfer:libraries-svr4:read and instead query the process plugin via the GetSupportedExtensions() API.
Differential Revision: https://reviews.llvm.org/D101241
show more ...
|
#
bbae0c1f |
| 13-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [llgs] Support owning and detaching extra processes
Add a NativeDelegate API to pass new processes (forks) to LLGS, and support detaching them via the 'D' packet. A 'D' packet without a spec
[lldb] [llgs] Support owning and detaching extra processes
Add a NativeDelegate API to pass new processes (forks) to LLGS, and support detaching them via the 'D' packet. A 'D' packet without a specific PID detaches all processes, otherwise it detaches either the specified subprocess or the main process, depending on the passed PID.
Differential Revision: https://reviews.llvm.org/D100191
show more ...
|
#
6c37984e |
| 29-Mar-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote server] Introduce new stop reasons for fork and vfork
Introduce three new stop reasons for fork, vfork and vforkdone events. This includes server support for serializing fork/vfor
[lldb] [gdb-remote server] Introduce new stop reasons for fork and vfork
Introduce three new stop reasons for fork, vfork and vforkdone events. This includes server support for serializing fork/vfork events into gdb-remote protocol. The stop infos for the two base events take a pair of PID and TID for the newly forked process.
Differential Revision: https://reviews.llvm.org/D100196
show more ...
|
#
31225768 |
| 08-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [Process] Introduce protocol extension support API
Introduce a NativeProcessProtocol API for indicating support for protocol extensions and enabling them. LLGS calls GetSupportedExtensions()
[lldb] [Process] Introduce protocol extension support API
Introduce a NativeProcessProtocol API for indicating support for protocol extensions and enabling them. LLGS calls GetSupportedExtensions() method on the process factory to determine which extensions are supported by the plugin. If the future is both supported by the plugin and reported as supported by the client, LLGS enables it and reports to the client as supported by the server.
The extension is enabled on the process instance by calling SetEnabledExtensions() method. This is done after qSupported exchange (if the debugger is attached to any process), as well as after launching or attaching to a new inferior.
The patch adds 'fork' extension corresponding to 'fork-events+' qSupported feature and 'vfork' extension for 'vfork-events+'. Both features rely on 'multiprocess+' being supported as well.
Differential Revision: https://reviews.llvm.org/D100153
show more ...
|
#
2494243e |
| 13-Apr-2021 |
Pavel Labath <pavel@labath.sk> |
[lldb] Move QThreadSuffixSupported and QListThreadsInStopReply into llgs
These were in the shared llgs+platform code, but they only make sense for llgs (as they deal with how the server reports info
[lldb] Move QThreadSuffixSupported and QListThreadsInStopReply into llgs
These were in the shared llgs+platform code, but they only make sense for llgs (as they deal with how the server reports information about debugged processes).
show more ...
|
#
f1812a28 |
| 11-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote server] Abstract away getting current process
Introduce new m_current_process and m_continue_process variables that keep the pointers to currently selected process. At this momen
[lldb] [gdb-remote server] Abstract away getting current process
Introduce new m_current_process and m_continue_process variables that keep the pointers to currently selected process. At this moment, this is equivalent to m_debugged_process_up but it lays foundations for the future multiprocess support.
Differential Revision: https://reviews.llvm.org/D100256
show more ...
|
#
aab81c2f |
| 08-Apr-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [gdb-remote server] Refactor handling qSupported
Refactor handling qSupported to use a virtual HandleFeatures() method. The client-provided features are split into an array and passed to the
[lldb] [gdb-remote server] Refactor handling qSupported
Refactor handling qSupported to use a virtual HandleFeatures() method. The client-provided features are split into an array and passed to the method. The method returns an array of server features that are concatenated into the qSupported response to the server.
The base implementation of HandleFeatures() in GDBRemoteCommunicationServerCommon now includes only flags common to both platform server and llgs, while llgs-specific flags are inserted in GDBRemoteCommunicationServerLLGS.
Differential Revision: https://reviews.llvm.org/D100140
show more ...
|
Revision tags: llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1 |
|
#
0b697561 |
| 09-Nov-2020 |
Walter Erquinigo <a20012251@gmail.com> |
[trace][intel-pt] Implement trace start and trace stop
This implements the interactive trace start and stop methods.
This diff ended up being much larger than I anticipated because, by doing it, I
[trace][intel-pt] Implement trace start and trace stop
This implements the interactive trace start and stop methods.
This diff ended up being much larger than I anticipated because, by doing it, I found that I had implemented in the beginning many things in a non optimal way. In any case, the code is much better now.
There's a lot of boilerplate code due to the gdb-remote protocol, but the main changes are:
- New tracing packets: jLLDBTraceStop, jLLDBTraceStart, jLLDBTraceGetBinaryData. The gdb-remote packet definitions are quite comprehensive. - Implementation of the "process trace start|stop" and "thread trace start|stop" commands. - Implementaiton of an API in Trace.h to interact with live traces. - Created an IntelPTDecoder for live threads, that use the debugger's stop id as checkpoint for its internal cache. - Added a functionality to stop the process in case "process tracing" is enabled and a new thread can't traced. - Added tests
I have some ideas to unify the code paths for post mortem and live threads, but I'll do that in another diff.
Differential Revision: https://reviews.llvm.org/D91679
show more ...
|
#
6c1a8039 |
| 30-Mar-2021 |
Michał Górny <mgorny@moritz.systems> |
[lldb] [server] Support for multiprocess extension
Add a minimal support for the multiprocess extension in lldb-server. The server indicates support for it via qSupported, and accepts thread-ids con
[lldb] [server] Support for multiprocess extension
Add a minimal support for the multiprocess extension in lldb-server. The server indicates support for it via qSupported, and accepts thread-ids containing a PID. However, it still does not support debugging more than one inferior, so any other PID value results in an error.
Differential Revision: https://reviews.llvm.org/D98482
show more ...
|