summaryrefslogtreecommitdiff
path: root/lldb/tools/debugserver/source/DNB.cpp
AgeCommit message (Collapse)Author
2025-10-02[debugserver] Support for `qMemTags` packet (#160952)Julian Lettner
Support for `qMemTags` packet in debugserver which allows usage of LLDB's `memory tag read` on Darwin.
2025-04-28[debugserver] Remove PThreadMutex (NFC) (#137555)Jonas Devlieghere
Now that all uses of PThreadMutex have been migrated to their C++ equivalent, this PR removes PThreadMutex itself.
2024-10-03[lldb][debugserver] Check if Rosetta debugserver exists (#110943)Jason Molenda
If lldb tries to attach to a process that is marked 'Translated' with debugserver, it will exec the Rosetta debugserver to handle the debug session without checking if it is present. If there is a configuration that is somehow missing this, it will fail poorly. rdar://135641680
2024-02-26Change debugserver to report the cpu(sub)type of process, not the host.Adrian Prantl
This way debugserver can correctly report qProcessInfo for arm64 processes on arm64e-capable hosts. Patch implemented with help from Jason Molenda!
2023-11-30Send an explicit interrupt to cancel an attach waitfor. (#72565)jimingham
Currently when you interrupt a: (lldb) process attach -w -n some_process lldb just closes the connection to the stub and kills the lldb_private::Process it made for the attach. The stub at the other end notices the connection go down and exits because of that. But when communication to a device is handled through some kind of proxy server which isn't as well behaved as one would wish, that signal might not be reliable, causing debugserver to persist on the machine, waiting to steal the next instance of that process. We can work around those failures by sending an explicit interrupt before closing down the connection. The stub will also have to be waiting for the interrupt for this to make any difference. I changed debugserver to do that. I didn't make the equivalent change in lldb-server. So long as you aren't faced with a flakey connection, this should not be necessary.
2023-08-11[lldb] Improve error message when trying to debug a non-debuggable processJonas Devlieghere
On the Swift forums, people are disabling SIP in order to debug process that are missing the get-task-allow entitlement. Improve the error to give developers a hint at the potential issues. rdar://113704200 Differential revision: https://reviews.llvm.org/D157640
2023-07-12Improve error msg in DNBProcessAttach if we can't stop inferiorJason Molenda
When we attach to a process, we task_for_pid(), ptrace(), and then we try to halt execution of the process and time out after thirty seconds if we cannot interrupt it. At this point, we must assume we have no control of the inferior process and the attach has failed. The error message we return currently is "operation timed out"; this change improves on that error message to make it more clear what is going on. Thanks to Jim for pointing this out. rdar://101152233
2023-07-12Improve error messaging when debugserver fails to complete attachingJason Molenda
When debugserver is attaching to a process, it first task_for_pid()'s and then ptrace(PT_ATTACHEXC)'s. When that ptrace() fails to complete, we are in a semi-attached state that we need to give up from, and our error reporting isn't ideal -- we can even claim that the process is already being debugged (by ourselves). Differential Revision: https://reviews.llvm.org/D155037 rdar://101152233
2023-06-01Prevent some spurious error messages in the debugserver logs.Jim Ingham
DNBGetDeploymentInfo was calling GetPlatformString w/o checking that the load command it was processing actually provided a platform string. That caused a bunch of worrisome looking error messages in the debugserver log output. Differential Revision: https://reviews.llvm.org/D151861
2023-05-08Add a new report_load_commands option to jGetLoadedDynamicLibrariesInfosJason Molenda
jGetLoadedDynamicLibrariesInfos has a mode where it will list every binary in the process - the load address and filepath from dyld SPI, and the mach-o header and load commands from a scan by debugserver for perf reasons. With a large enough number of libraries, creating that StructuredData representation of all of this, and formatting it into an ascii string to send up to lldb, can grow debugserver's heap size too large for some environments. This patch adds a new report_load_commands:false boolean to the jGetLoadedDynamicLibrariesInfos packet, where debugserver will now only report the dyld SPI load address and filepath for all of the binaries. lldb can then ask for the detailed information on the process binaries in smaller chunks, and avoid debugserver having ever growing heap use as the number of binaries inevitably increases. This patch also removes a version of jGetLoadedDynamicLibrariesInfos for pre-iOS 10 and pre-macOS 10.12 systems where we did not use dyld SPI. We can't back compile to those OS builds any longer with modern Xcode. Finally, it removes a requirement in DynamicLoaderMacOS that the JSON reply from jGetLoadedDynamicLibrariesInfos include the mod_date field for each binary. This has always been reported as 0 in modern dyld, and is another reason for packet growth in the reply. debugserver still puts the mod_date field in its replies for interop with existing lldb's, but we will be able to remove it the field from debugserver's output after the next release cycle when this patch has had time to circulate. I'll add lldb support for requesting the load addresses only and splitting the request up into chunks in a separate patch. Differential Revision: https://reviews.llvm.org/D150158 rdar://107848326
2023-04-28Remove i386 and armv7 native support in debugserverJason Molenda
i386 and armv7 macOS/iOS cannot be built with current Xcode any longer; we cannot build or test the support code for running debugserver on these targets. Remove the code. Differential Revision: https://reviews.llvm.org/D149503
2023-02-23[debugserver] Add one additional sleep before attaching after waitingAlex Langford
It's possible for debugserver to attach to a process during the handoff between /usr/lib/dyld and the dyld in the shared cache. When that happens, we may end up in a state where there is no dyld in the process and our debugging session is doomed. To make that scenario a lot less likely, we can insert a sleep right before attaching after waiting to find the right pid. rdar://105513180 Differential Revision: https://reviews.llvm.org/D144311
2022-12-13Launch state discoverable in Darwin, use for SafeToCallFunctionsJason Molenda
The dynamic linker on Darwin, dyld, can provide status of the process state for a few significant points early on, most importantly, when libSystem has been initialized and it is safe to call functions behind the scenes. Pipe this information up from debugserver to DynamicLoaderMacOS, for the DynamicLoader::IsFullyInitialized() method, then have Thread::SafeToCallFunctions use this information. Finally, for the two utility functions in the AppleObjCRuntimeV2 LanguageRuntime plugin that I was fixing, call this method before running our utility functions to collect the list of objc classes registered in the runtime. User expressions will still be allowed to run any time - we assume the user knows what they are doing - but these two additional utility functions that they are unaware of will be limited by this state. Differential Revision: https://reviews.llvm.org/D139054 rdar://102436092 can probably make function calls.
2022-10-27Handle an unknown binary platform type in debugserverJason Molenda
debugserver parses the Mach-O header & load commands of binaries; if it does this with a binary whose LC_BUILD platform enum it does not recognize, it will currently crash. This patch changes MachProcss::GetPlatformString to return an optional platform string, and updates the callers to do the right thing when this optional could not be provided. Differential Revision: https://reviews.llvm.org/D136719 rdar://100452994
2022-10-25Quick fix for previous commit; small code change before commitJason Molenda
2022-10-25Change debugserver to clear PAC auth bits manuallyJason Molenda
debugserver is currently using kernel supplied macros, arm_thread_state64_get_{pc,fp,sp,lr} which can crash on an authorization failure when the inferior has crashed with an invalid pc value, for instance. debugserver needs to be resistant to crashing in this scenario, and we're merely clearing the bits, so do it with a bit mask operation instead. Differential Revision: https://reviews.llvm.org/D136620 rdar://98073271 rdar://100663221
2022-05-18Add a darwin platform setting to specify which exceptions debugserverJim Ingham
should not receive as exceptions (some will get converted to BSD signals instead). This is really the only stable way to ensure that a Mach exception gets converted to it's equivalent BSD signal. For programs that rely on BSD signal handlers, this has to happen or you can't even get the program to invoke the signal handler when under the debugger. This builds on a previous solution to this problem which required you start debugserver with the -U flag. This was not very discoverable and required lldb be the one to launch debugserver, which is not always the case. Differential Revision: https://reviews.llvm.org/D125434
2022-05-05Fix debugserver translation checkAlexandre Perez
Currently, debugserver has a test to check if it was launched in translation. The intent was to cover the case where an x86_64 debugserver attempts to control an arm64/arm64e process, returning an error. However, this check also covers the case where users are attaching to an x86_64 process, exiting out before attempting to hand off control to the translated debugserver at `/Library/Apple/usr/libexec/oah/debugserver`. This diff delays the debugserver translation check until after determining whether to hand off control to `/Library/Apple/usr/libexec/oah/debugserver`. Only when the process is not translated and thus has not been handed off do we check if the debugserver is translated, erroring out in that case. Reviewed By: jasonmolenda Differential Revision: https://reviews.llvm.org/D124814
2021-07-20Remove the DarwinLog functionality from debguserverJason Molenda
Remove the DarwinLog and qStructuredDataPlugins support from debugserver. The DarwinLog plugin was never debugged fully and made reliable, and the underlying private APIs it uses have migrated since 2016 so none of them exist any longer. Differential Revision: https://reviews.llvm.org/D106324 rdar://75073283
2021-05-26[lldb][NFC] Use C++ versions of the deprecated C standard library headersRaphael Isemann
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
2021-05-12Add some warnings when debugserver is running in translationJason Molenda
A debugserver launched x86_64 cannot control an arm64/arm64e process on an Apple Silicon system. Warn when this situation has happened and return an error for the most common case of attach. I think there will be refinements to this in the future, but start out by making it easy to spot the problem when it happens. rdar://76630595
2021-02-15[debugserver] Correctly pass argv[0] to execlJonas Devlieghere
The execl function takes both the executable and argv[0].
2020-12-04[debugserver] Honor the cpu sub type if specifiedJonas Devlieghere
Use the newly added spawnattr API, posix_spawnattr_setarchpref_np, to select a slice preferences per cpu and subcpu types, instead of just cpu with posix_spawnattr_setarchpref_np. rdar://16094957 Differential revision: https://reviews.llvm.org/D92712
2020-11-17[debugserver] Add option to propagate SIGSEGV to target processAlessandro Arzilli
Adds a command line option that makes debugserver propagate the SIGSEGV signal to the target process. Motivation: I'm one of the maintainers of Delve [1] a debugger for Go. We use debugserver as our backend on macOS and one of the most often reported bugs is that, on macOS, we don't propagate SIGSEGV back to the target process [2]. Sometimes some programs will actually cause a SIGSEGV, by design, and then handle it. Those programs can not be debugged at all. Since catching signals isn't very important for a Go debugger I'd much rather have a command line option in debugserver that causes it to let SIGSEGV go directly to the target process. [1] https://github.com/go-delve/delve/ [2] https://github.com/go-delve/delve/issues/852 Differential revision: https://reviews.llvm.org/D89315
2020-08-04Fix debugserver's qProcessInfo reporting of maccatalyst binariesAdrian Prantl
This patch is similar in spirit to https://reviews.llvm.org/D84480, but does the maccatalyst/macosx disambiguation. I also took the opportunity to factor out the gdb-remote packet log scanning used by several testcases into lldbutil functions. rdar://problem/66059257 Differential Revision: https://reviews.llvm.org/D84576
2020-07-30[debugserver/Apple Silicon] Handoff connections when attaching to translated ↵Davide Italiano
processes When we detect a process that the native debugserver cannot handle, handoff the connection fd to the translated debugserver.
2020-07-24debugserver: Support ios simulator load command disambiguation in qProcessInfoAdrian Prantl
This patch basically moves the disambiguation code from a place where it was complicated to implement straight to where the load command is parsed, which has the neat side affect of actually supporting all call sites! rdar://problem/66011909 Differential Revision: https://reviews.llvm.org/D84480
2020-07-01Revert "Revert "Improve the detection of iOS/tvOS/watchOS simulator binaries ↵Adrian Prantl
in"" This reverts commit 98c3a38a1967ece4e70891aa188c51e29ca0f8d3.
2020-07-01Revert "Improve the detection of iOS/tvOS/watchOS simulator binaries in"Jonas Devlieghere
This reverts commit 0da0437b2afbd8ebef6b11f114cca33b118e7639 to unbreak the following tests: lldb-api.tools/lldb-server.TestAppleSimulatorOSType.py lldb-api.tools/lldb-server.TestGdbRemoteAttach.py lldb-api.tools/lldb-server.TestGdbRemoteProcessInfo.py lldb-api.tools/lldb-server.TestGdbRemoteRegisterState.py lldb-api.tools/lldb-server.TestGdbRemoteThreadsInStopReply.py lldb-api.tools/lldb-server.TestLldbGdbServer.py
2020-06-30Improve the detection of iOS/tvOS/watchOS simulator binaries inAdrian Prantl
debugserver and lldb This patch improves the heuristics for correctly identifying simulator binaries on Darwin and adds support for simulators running on Apple Silicon. rdar://problem/64046344 Differential Revision: https://reviews.llvm.org/D82616
2020-04-06[debugserver] Get rid of `else` after `return`. NFC.Davide Italiano
2020-02-04Enhance debugserver's err reporting on attach failsJason Molenda
Explicitly check for a request to attach to a pid that doesn't exist, to attach to a pid that is already being debugged, unify the SIP process check, and an attempt at checking if developer mode is enabled on the system (which isn't working in debugserver, for some reason; I can't get the authorization record which should be an unprivileged operation and works in a standalone program I wrote). I'll debug the developer mode check later, but I wanted to land it along with everything else; right now it will claim that developer mode is always enabled so it's harmless to include as-is.
2019-12-04Upstream debugserver arm64e support.Jason Molenda
The changes are minor; primarily debugserver needs to go through accessor functions/macros when changing pc/fp/sp/lr, and debugserver needs to clear any existing pointer auth bits from values in two cases. debugserver can fetch the number of bits used for addressing from a sysctl, and will include that in the qHostInfo reply. Update qHostInfo documentation to document it.
2019-10-16Add arm64_32 support to lldb, an ILP32 codegen Jason Molenda
that runs on arm64 ISA targets, specifically Apple watches. Differential Revision: https://reviews.llvm.org/D68858 llvm-svn: 375032
2019-08-07Upstream a few small Apple changes to debugserver - arm64_32, CatalystJason Molenda
Adrian's changes to support Catalyst processes and my changes to support debugserver running on an arm64_32 device (Apple Watch Series 4, which uses an IPL32 model on arm64 cpus). llvm-svn: 368118
2019-05-24Fix integer literals which are cast to boolJonas Devlieghere
This change replaces built-in types that are implicitly converted to booleans. Differential revision: https://reviews.llvm.org/D62284 llvm-svn: 361580
2019-04-10[NFC] Remove ASCII lines from commentsJonas Devlieghere
A lot of comments in LLDB are surrounded by an ASCII line to delimit the begging and end of the comment. Its use is not really consistent across the code base, sometimes the lines are longer, sometimes they are shorter and sometimes they are omitted. Furthermore, it looks kind of weird with the 80 column limit, where the comment actually extends past the line, but not by much. Furthermore, when /// is used for Doxygen comments, it looks particularly odd. And when // is used, it incorrectly gives the impression that it's actually a Doxygen comment. I assume these lines were added to improve distinguishing between comments and code. However, given that todays editors and IDEs do a great job at highlighting comments, I think it's worth to drop this for the sake of consistency. The alternative is fixing all the inconsistencies, which would create a lot more churn. Differential revision: https://reviews.llvm.org/D60508 llvm-svn: 358135
2019-01-19Update the file headers across all of the LLVM projects in the monorepoChandler Carruth
to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
2018-04-06[debugserver] Fix LC_BUILD_VERSION load command handling.Frederic Riss
Summary: In one of the 2 places the LC_BUILD_VERSION load command is handled, there is a bug preventing us from actually handling them (the address where to read the load command was not updated). This patch factors reading the deployment target load commands into a helper and adds testing for the 2 code paths calling the helper. The testing is a little bit complicated because the only times those load commands matter is when debugging a simulator process. I added a new decorator to check that a specific SDK is available. The actual testing was fairly easy once I knew how to run a simulated process. Reviewers: jasonmolenda, labath Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D45298 llvm-svn: 329374
2017-12-09Change uses of strncpy in debugserver to strlcpyJason Molenda
for better safety. <rdar://problem/32906923> llvm-svn: 320242
2016-09-06*** This commit represents a complete reformatting of the LLDB source codeKate Stone
*** to conform to clang-format’s LLVM style. This kind of mass change has *** two obvious implications: Firstly, merging this particular commit into a downstream fork may be a huge effort. Alternatively, it may be worth merging all changes up to this commit, performing the same reformatting operation locally, and then discarding the merge for this particular commit. The commands used to accomplish this reformatting were as follows (with current working directory as the root of the repository): find . \( -iname "*.c" -or -iname "*.cpp" -or -iname "*.h" -or -iname "*.mm" \) -exec clang-format -i {} + find . -iname "*.py" -exec autopep8 --in-place --aggressive --aggressive {} + ; The version of clang-format used was 3.9.0, and autopep8 was 1.2.4. Secondly, “blame” style tools will generally point to this commit instead of a meaningful prior commit. There are alternatives available that will attempt to look through this change and find the appropriate prior commit. YMMV. llvm-svn: 280751
2016-08-19Add StructuredData plugin type; showcase with new DarwinLog featureTodd Fiala
Take 2, with missing cmake line fixed. Build tested on Ubuntu 14.04 with clang-3.6. See docs/structured_data/StructuredDataPlugins.md for details. differential review: https://reviews.llvm.org/D22976 reviewers: clayborg, jingham llvm-svn: 279202
2016-08-19Revert "Add StructuredData plugin type; showcase with new DarwinLog feature"Todd Fiala
This reverts commit 1d885845d1451e7b232f53fba2e36be67aadabd8. llvm-svn: 279200
2016-08-19Add StructuredData plugin type; showcase with new DarwinLog featureTodd Fiala
See docs/structured_data/StructuredDataPlugins.md for details. differential review: https://reviews.llvm.org/D22976 reviewers: clayborg, jingham llvm-svn: 279198
2016-07-07Add support to debugserver for some new ways to interact with dyldJason Molenda
to find the solibs loaded in a process. Support two new ways of sending the jGetLoadedDynamicLibrariesInfos packet to debugserver and add a new jGetSharedCacheInfo packet. Update the documentation for these packets as well. The changes to lldb to use these will be a separate commit. <rdar://problem/25251243> llvm-svn: 274718
2016-05-06debugserver: fix some -Wformat-pedantic warningsSaleem Abdulrasool
Perform explicit casts for the log message to address some `-Wformat-pedantic` warnings from clang. NFC. llvm-svn: 268755
2015-10-23Upstreaming the apple internal changes that accumulated during theJason Molenda
previous release. Most of the diffs are duplication in the xcode project file caused by adding a "debugserver-mini" target. Jim Ingham added support for a new SPI needed to request app launches on iOS. Greg Clayton added code to indicate the platform of the binary (macosx, ios, watchos, tvos) based on Mach-O load commands. Jason Molenda added code so debugserver will identify when it is running on a tvos/watchos device to lldb. llvm-svn: 251091
2015-08-12Have debugserver send the OS version string plusJason Molenda
major, minor, and patchlevel in the qHostInfo reply. Document that qHostInfo may report major/minor/patch separately / in addition to the version: combination. <rdar://problem/22125465> llvm-svn: 244716
2015-07-29When debugserver fails to attach to a process on a DarwinJason Molenda
system, make a couple of additional checks to see if the attach was denied via the System Integrity Protection that is new in Mac OS X 10.11. If so, return a special E87 error code to indicate this to lldb. Up in lldb, if we receive the E87 error code, be specific about why the attach failed. Also detect the more common case of general attach failure and print a better error message than "lost connection". I believe this code will all build on Mac OS X 10.10 systems. It may not compile or run on earlier versions of the OS. None of this should build on other non-darwin systems. llvm-svn: 243511
2015-07-24Add UNUSED_IF_ASSERT_DISABLED and apply it.Bruce Mitchener
Summary: This replaces (void)x; usages where they x was subsequently involved in an assertion with this macro to make the intent more clear. Reviewers: clayborg Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D11451 llvm-svn: 243074