|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
1b4b12a3 |
| 23-Jul-2022 |
Nico Weber <[email protected]> |
Revert "[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching of resolved/absolute." and follow-ups
This reverts commit 9429b67b8e300e638d7828bbcb95585f85c4df4d.
It broke
Revert "[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching of resolved/absolute." and follow-ups
This reverts commit 9429b67b8e300e638d7828bbcb95585f85c4df4d.
It broke the build on Windows, see comments on https://reviews.llvm.org/D130309
It also reverts these follow-ups:
Revert "Fix buildbot breakage after https://reviews.llvm.org/D130309." This reverts commit f959d815f4637890ebbacca379f1c38ab47e4e14.
Revert "Fix buildbot breakage after https://reviews.llvm.org/D130309." This reverts commit 0bbce7a4c2d2bff622bdadd4323f93f5d90e6d24.
Revert "Cache the value for absolute path in FileSpec." This reverts commit dabe877248b85b34878e75d5510339325ee087d0.
show more ...
|
| #
9429b67b |
| 21-Jul-2022 |
Greg Clayton <[email protected]> |
[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching of resolved/absolute.
The FileSpect APIs allow users to modify instance variables directly by getting a non const ref
[NFC] Improve FileSpec internal APIs and usage in preparation for adding caching of resolved/absolute.
The FileSpect APIs allow users to modify instance variables directly by getting a non const reference to the directory and filename instance variables. This makes it impossibly to control all of the times the FileSpec object is modified so we can clear the cache. This patch modifies the APIs of FileSpec so no one can modify the directory or filename directly by adding set accessors and by removing the get accessors that are non const.
Many clients were using FileSpec::GetCString(...) which returned a unique C string from a ConstString'ified version of the result of GetPath() which returned a std::string. This caused many locations to use this convenient function incorrectly and could cause many strings to be added to the constant string pool that didn't need to. Most clients were converted to using FileSpec::GetPath().c_str() when possible. Other clients were modified to use the newly renamed version of this function which returns an actualy ConstString: ConstString FileSpec::GetPathAsConstString(bool denormalize = true) const;
This avoids the issue where people were getting an already uniqued "const char *" that came from a ConstString only to put the "const char *" back into a "ConstString" object. By returning the ConstString instead of a "const char *" clients can be more efficient with the result.
The patch: - Removes the non const GetDirectory() and GetFilename() get accessors - Adds set accessors to replace the above functions: SetDirectory() and SetFilename(). - Adds ClearDirectory() and ClearFilename() to replace usage of the FileSpec::GetDirectory().Clear()/FileSpec::GetFilename().Clear() call sites - Fixed all incorrect usage of FileSpec::GetCString() to use FileSpec::GetPath().c_str() where appropriate, and updated other call sites that wanted a ConstString to use the newly returned ConstString appropriately and efficiently.
Differential Revision: https://reviews.llvm.org/D130309
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4 |
|
| #
bff4673b |
| 11-May-2022 |
Jim Ingham <[email protected]> |
Add a darwin platform setting to specify which exceptions debugserver should not receive as exceptions (some will get converted to BSD signals instead). This is really the only stable way to ensure
Add a darwin platform setting to specify which exceptions debugserver 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
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
af921006 |
| 25-Feb-2022 |
Pavel Labath <[email protected]> |
[lldb] Remove the global platform list
This patch moves the platform creation and selection logic into the per-debugger platform lists. I've tried to keep functional changes to a minimum -- the main
[lldb] Remove the global platform list
This patch moves the platform creation and selection logic into the per-debugger platform lists. I've tried to keep functional changes to a minimum -- the main (only) observable difference in this change is that APIs, which select a platform by name (e.g., Debugger::SetCurrentPlatform) will not automatically pick up a platform associated with another debugger (or no debugger at all).
I've also added several tests for this functionality -- one of the pleasant consequences of the debugger isolation is that it is now possible to test the platform selection and creation logic.
This is a product of the discussion at <https://discourse.llvm.org/t/multiple-platforms-with-the-same-name/59594>.
Differential Revision: https://reviews.llvm.org/D120810
show more ...
|
| #
fc54427e |
| 01-Apr-2022 |
Jonas Devlieghere <[email protected]> |
[lldb] Refactor DataBuffer so we can map files as read-only
Currently, all data buffers are assumed to be writable. This is a problem on macOS where it's not allowed to load unsigned binaries in mem
[lldb] Refactor DataBuffer so we can map files as read-only
Currently, all data buffers are assumed to be writable. This is a problem on macOS where it's not allowed to load unsigned binaries in memory as writable. To be more precise, MAP_RESILIENT_CODESIGN and MAP_RESILIENT_MEDIA need to be set for mapped (unsigned) binaries on our platform.
Binaries are mapped through FileSystem::CreateDataBuffer which returns a DataBufferLLVM. The latter is backed by a llvm::WritableMemoryBuffer because every DataBuffer in LLDB is considered to be writable. In order to use a read-only llvm::MemoryBuffer I had to split our abstraction around it.
This patch distinguishes between a DataBuffer (read-only) and WritableDataBuffer (read-write) and updates LLDB to use the appropriate one.
rdar://74890607
Differential revision: https://reviews.llvm.org/D122856
show more ...
|
| #
331150a4 |
| 01-Apr-2022 |
Pavel Labath <[email protected]> |
[lldb] Move host platform implementations into the base class
About half of our host platform code was implemented in the Platform class, while the rest was it RemoteAwarePlatform. Most of the time,
[lldb] Move host platform implementations into the base class
About half of our host platform code was implemented in the Platform class, while the rest was it RemoteAwarePlatform. Most of the time, this did not matter, as nearly all our platforms are also RemoteAwarePlatforms. It makes a difference for PlatformQemu, which descends directly from the base class (as it is local-only).
This patch moves all host code paths into the base class, and marks PlatformQemu as a "host" platform so it can make use of them (it sounds slightly strange, but that is consistent with what the apple simulator platforms are doing). Not all of the host implementations make sense for this platform, but it can always override those that don't.
I add some basic tests using the platform file apis to exercise this functionality.
Differential Revision: https://reviews.llvm.org/D122898
show more ...
|
| #
a114ec0c |
| 30-Mar-2022 |
Jonas Devlieghere <[email protected]> |
[lldb] Change the way we pick a platform for fat binaries
Currently, when creating a target for a fat binary, we error out if more than one platforms can support the different architectures in the b
[lldb] Change the way we pick a platform for fat binaries
Currently, when creating a target for a fat binary, we error out if more than one platforms can support the different architectures in the binary. There are situations where it makes sense for multiple platforms to support the same architectures: for example the host and remote-macosx platform on Darwin.
The only way to currently disambiguate between them is to specify the architecture. This patch changes that to take into account the selected and host platform. The new algorithm works a follows:
1. Pick the selected platform if it matches any of the architectures. 2. Pick the host platform if it matches any of the architectures. 3. If there's one platform that works for all architectures, pick that.
If none of the above apply then we either have no platform supporting the architectures in the fat binary or multiple platforms with no good way to disambiguate between them.
I've added a bunch of unit tests to codify this new behavior.
rdar://90360204
Differential revision: https://reviews.llvm.org/D122684
show more ...
|
| #
dde487e5 |
| 14-Mar-2022 |
Jonas Devlieghere <[email protected]> |
[lldb] Plumb process host architecture through platform selection
To allow us to select a different platform based on where the process is running, plumb the process host architecture through platfo
[lldb] Plumb process host architecture through platform selection
To allow us to select a different platform based on where the process is running, plumb the process host architecture through platform selection.
This patch is in preparation for D121444 which needs this functionality to tell apart iOS binaries running on Apple Silicon vs on a remote iOS device.
Differential revision: https://reviews.llvm.org/D121484
show more ...
|
| #
d65e6ff2 |
| 09-Mar-2022 |
Pavel Labath <[email protected]> |
Revert "[lldb] Remove the global platform list"
It makes module dependencies loopier.
This reverts commits 49cffe3c7fab74252d4b6a073303c803dc1659f0 and ffb9429b6f3c29ab4687b96fd85374924c98ad16.
|
| #
ffb9429b |
| 25-Feb-2022 |
Pavel Labath <[email protected]> |
[lldb] Remove the global platform list
This patch moves the platform creation and selection logic into the per-debugger platform lists. I've tried to keep functional changes to a minimum -- the main
[lldb] Remove the global platform list
This patch moves the platform creation and selection logic into the per-debugger platform lists. I've tried to keep functional changes to a minimum -- the main (only) observable difference in this change is that APIs, which select a platform by name (e.g., Debugger::SetCurrentPlatform) will not automatically pick up a platform associated with another debugger (or no debugger at all).
I've also added several tests for this functionality -- one of the pleasant consequences of the debugger isolation is that it is now possible to test the platform selection and creation logic.
This is a product of the discussion at <https://discourse.llvm.org/t/multiple-platforms-with-the-same-name/59594>.
Differential Revision: https://reviews.llvm.org/D120810
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1 |
|
| #
d2edca62 |
| 07-Feb-2022 |
Pavel Labath <[email protected]> |
[lldb/Platform] Prepare decouple instance and plugin names
This patch changes the return value of Platform::GetName() to a StringRef, and uses the opportunity (compile errors) to change some callsit
[lldb/Platform] Prepare decouple instance and plugin names
This patch changes the return value of Platform::GetName() to a StringRef, and uses the opportunity (compile errors) to change some callsites to use GetPluginName() instead. The two methods still remain hardwired to return the same thing, but this will change once the ideas in <https://discourse.llvm.org/t/multiple-platforms-with-the-same-name/59594> are implemented.
Differential Revision: https://reviews.llvm.org/D119146
show more ...
|
| #
a53c5c66 |
| 07-Feb-2022 |
Pavel Labath <[email protected]> |
[lldb/Platform] s/m_name/m_hostname
m_name is confusing, as there is a getter called GetName, but it returns a completely different thing.
|
| #
c34698a8 |
| 03-Feb-2022 |
Pavel Labath <[email protected]> |
[lldb] Rename Logging.h to LLDBLog.h and clean up includes
Most of our code was including Log.h even though that is not where the "lldb" log channel is defined (Log.h defines the generic logging inf
[lldb] Rename Logging.h to LLDBLog.h and clean up includes
Most of our code was including Log.h even though that is not where the "lldb" log channel is defined (Log.h defines the generic logging infrastructure). This worked because Log.h included Logging.h, even though it should.
After the recent refactor, it became impossible the two files include each other in this direction (the opposite inclusion is needed), so this patch removes the workaround that was put in place and cleans up all files to include the right thing. It also renames the file to LLDBLog to better reflect its purpose.
show more ...
|
|
Revision tags: llvmorg-15-init |
|
| #
a007a6d8 |
| 31-Jan-2022 |
Pavel Labath <[email protected]> |
[lldb] Convert "LLDB" log channel to the new API
|
|
Revision tags: llvmorg-13.0.1, llvmorg-13.0.1-rc3 |
|
| #
3053e143 |
| 19-Jan-2022 |
Michał Górny <[email protected]> |
[lldb] [Platform] Support synthesizing siginfo_t
Support synthesizing the siginfo_t type from the Platform plugin. This type is going to be used by LLDB client to process the raw siginfo data receiv
[lldb] [Platform] Support synthesizing siginfo_t
Support synthesizing the siginfo_t type from the Platform plugin. This type is going to be used by LLDB client to process the raw siginfo data received from lldb-server without the necessity of relying on target's debug info being present.
Differential Revision: https://reviews.llvm.org/D117707
show more ...
|
| #
90342453 |
| 18-Jan-2022 |
Pavel Labath <[email protected]> |
[lldb] Introduce SBPlatform::SetSDKRoot
It complements the existing SBDebugger::SetCurrentPlatformSDKRoot and allows one to set the sysroot of a platform without making it current.
Differential Rev
[lldb] Introduce SBPlatform::SetSDKRoot
It complements the existing SBDebugger::SetCurrentPlatformSDKRoot and allows one to set the sysroot of a platform without making it current.
Differential Revision: https://reviews.llvm.org/D117550
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc2 |
|
| #
a6e67364 |
| 26-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Inline Platform::LoadCachedExecutable into its (single) caller
|
| #
96beb30f |
| 24-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Move GetSupportedArchitectureAtIndex to PlatformDarwin
All other platforms use GetSupportedArchitectures now.
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
3a56f562 |
| 17-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Convert internal platform usages GetSupportedArchitectures
|
| #
098c01c1 |
| 09-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Refactor Platform::ResolveExecutable
Module resolution is probably the most complex piece of lldb [citation needed], with numerous levels of abstraction, each one implementing various retry a
[lldb] Refactor Platform::ResolveExecutable
Module resolution is probably the most complex piece of lldb [citation needed], with numerous levels of abstraction, each one implementing various retry and fallback strategies.
It is also a very repetitive, with only small differences between "host", "remote-and-connected" and "remote-but-not-(yet)-connected" scenarios.
The goal of this patch (first in series) is to reduce the number of abstractions, and deduplicate the code.
One of the reasons for this complexity is the tension between the desire to offload the process of module resolution to the remote platform instance (that's how most other platform methods work), and the desire to keep it local to the outer platform class (its easier to subclass the outer class, and it generally makes more sense).
This patch resolves that conflict in favour of doing everything in the outer class. The gdb-remote (our only remote platform) implementation of ResolveExecutable was not doing anything gdb-specific, and was rather similar to the other implementations of that method (any divergence is most likely the result of fixes not being applied everywhere rather than intentional).
It does this by excising the remote platform out of the resolution codepath. The gdb-remote implementation of ResolveExecutable is moved to Platform::ResolveRemoteExecutable, and the (only) call site is redirected to that. On its own, this does not achieve (much), but it creates new opportunities for layer peeling and code sharing, since all of the code now lives closer together.
Differential Revision: https://reviews.llvm.org/D113487
show more ...
|
| #
669e57eb |
| 10-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Simplify specifying of platform supported architectures
The GetSupportedArchitectureAtIndex pattern forces the use of complicated patterns in both the implementations of the function and in t
[lldb] Simplify specifying of platform supported architectures
The GetSupportedArchitectureAtIndex pattern forces the use of complicated patterns in both the implementations of the function and in the various callers.
This patch creates a new method (GetSupportedArchitectures), which returns a list (vector) of architectures. The GetSupportedArchitectureAtIndex is kept in order to enable incremental rollout. Base Platform class contains implementations of both of these methods, using the other method as the source of truth. Platforms without infinite stacks should implement at least one of them.
This patch also ports Linux, FreeBSD and NetBSD platforms to the new API. A new helper function (CreateArchList) is added to simplify the common task of creating a list of ArchSpecs with the same OS but different architectures.
Differential Revision: https://reviews.llvm.org/D113608
show more ...
|
| #
52a3ed5b |
| 10-Nov-2021 |
Quinn Pham <[email protected]> |
[lldb][NFC] Inclusive language: replace master/slave names for ptys
[NFC] This patch replaces master and slave with primary and secondary respectively when referring to pseudoterminals/file descript
[lldb][NFC] Inclusive language: replace master/slave names for ptys
[NFC] This patch replaces master and slave with primary and secondary respectively when referring to pseudoterminals/file descriptors.
Reviewed By: clayborg, teemperor
Differential Revision: https://reviews.llvm.org/D113687
show more ...
|
| #
a40929dc |
| 04-Nov-2021 |
Pavel Labath <[email protected]> |
[lldb] Fix cross-platform kills
This patch fixes an amusing bug where a Platform::Kill operation would happily terminate a proces on a completely different platform, as long as they have the same pr
[lldb] Fix cross-platform kills
This patch fixes an amusing bug where a Platform::Kill operation would happily terminate a proces on a completely different platform, as long as they have the same process ID. This was due to the fact that the implementation was iterating through all known (debugged) processes in order terminate them directly.
This patch just deletes that logic, and makes everything go through the OS process termination APIs. While it would be possible to fix the logic to check for a platform match, it seemed to me that the implementation was being too smart for its own good -- accessing random Process objects without knowing anything about their state is risky at best. Going through the os ensures we avoid any races.
I also "upgrade" the termination signal to a SIGKILL to ensure the process really dies after this operation.
Differential Revision: https://reviews.llvm.org/D113184
show more ...
|
| #
f5158ca4 |
| 26-Oct-2021 |
Pavel Labath <[email protected]> |
Modernize Platform::GetOSKernelDescription
|
| #
0a39a9c2 |
| 25-Oct-2021 |
Pavel Labath <[email protected]> |
Modernize and simplify HostInfo::GetOSKernelDescription
Replace bool+by-ref argument with llvm::Optional, and move the common implementation into HostInfoPOSIX. Based on my (simple) experiment, the
Modernize and simplify HostInfo::GetOSKernelDescription
Replace bool+by-ref argument with llvm::Optional, and move the common implementation into HostInfoPOSIX. Based on my (simple) experiment, the uname and the sysctl approach return the same value on MacOS, so there's no need for a mac-specific implementation of this functionality.
Differential Revision: https://reviews.llvm.org/D112457
show more ...
|