diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-12-18 20:30:12 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-06 20:11:55 +0000 |
commit | 5f757f3ff9144b609b3c433dfd370cc6bdc191ad (patch) | |
tree | 1b4e980b866cd26a00af34c0a653eb640bd09caf /contrib/llvm-project/lldb/source/Plugins/Platform | |
parent | 3e1c8a35f741a5d114d0ba670b15191355711fe9 (diff) | |
parent | 312c0ed19cc5276a17bacf2120097bec4515b0f1 (diff) | |
download | src-5f757f3ff9144b609b3c433dfd370cc6bdc191ad.tar.gz src-5f757f3ff9144b609b3c433dfd370cc6bdc191ad.zip |
Diffstat (limited to 'contrib/llvm-project/lldb/source/Plugins/Platform')
5 files changed, 42 insertions, 17 deletions
diff --git a/contrib/llvm-project/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp b/contrib/llvm-project/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp index 7abc71a1c53f..d7584be2b95e 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp @@ -206,7 +206,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigval_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_sigval_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigval_type); ast->AddFieldToRecordType(sigval_type, "sival_int", int_type, lldb::eAccessPublic, 0); @@ -217,7 +217,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { // siginfo_t CompilerType siginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_siginfo_t", - clang::TTK_Struct, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(siginfo_type); ast->AddFieldToRecordType(siginfo_type, "si_signo", int_type, lldb::eAccessPublic, 0); @@ -239,7 +239,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { // union used to hold the signal data CompilerType union_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(union_type); ast->AddFieldToRecordType( diff --git a/contrib/llvm-project/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp b/contrib/llvm-project/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp index 393519d708d3..ce81aab55706 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp @@ -228,7 +228,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigval_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_sigval_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigval_type); ast->AddFieldToRecordType(sigval_type, "sival_int", int_type, lldb::eAccessPublic, 0); @@ -238,7 +238,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType ptrace_option_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(ptrace_option_type); ast->AddFieldToRecordType(ptrace_option_type, "_pe_other_pid", pid_type, lldb::eAccessPublic, 0); @@ -249,13 +249,13 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { // siginfo_t CompilerType siginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_siginfo_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(siginfo_type); // struct _ksiginfo CompilerType ksiginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Struct, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(ksiginfo_type); ast->AddFieldToRecordType(ksiginfo_type, "_signo", int_type, lldb::eAccessPublic, 0); @@ -272,7 +272,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { // union used to hold the signal data CompilerType union_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(union_type); ast->AddFieldToRecordType( diff --git a/contrib/llvm-project/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp b/contrib/llvm-project/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp index 1e91f2ccd198..b4f1b76c39db 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp @@ -949,7 +949,7 @@ uint32_t PlatformPOSIX::DoLoadImage(lldb_private::Process *process, Status PlatformPOSIX::UnloadImage(lldb_private::Process *process, uint32_t image_token) { const addr_t image_addr = process->GetImagePtrFromToken(image_token); - if (image_addr == LLDB_INVALID_ADDRESS) + if (image_addr == LLDB_INVALID_IMAGE_TOKEN) return Status("Invalid image token"); StreamString expr; diff --git a/contrib/llvm-project/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp b/contrib/llvm-project/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp index 72a039d18872..460f5560573d 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp @@ -36,7 +36,7 @@ class PluginProperties : public Properties { public: PluginProperties() { m_collection_sp = std::make_shared<OptionValueProperties>( - ConstString(PlatformQemuUser::GetPluginNameStatic())); + PlatformQemuUser::GetPluginNameStatic()); m_collection_sp->Initialize(g_platformqemuuser_properties); } @@ -89,8 +89,8 @@ void PlatformQemuUser::Terminate() { } void PlatformQemuUser::DebuggerInitialize(Debugger &debugger) { - if (!PluginManager::GetSettingForPlatformPlugin( - debugger, ConstString(GetPluginNameStatic()))) { + if (!PluginManager::GetSettingForPlatformPlugin(debugger, + GetPluginNameStatic())) { PluginManager::CreateSettingForPlatformPlugin( debugger, GetGlobalProperties().GetValueProperties(), "Properties for the qemu-user platform plugin.", @@ -162,9 +162,18 @@ lldb::ProcessSP PlatformQemuUser::DebugProcess(ProcessLaunchInfo &launch_info, Target &target, Status &error) { Log *log = GetLog(LLDBLog::Platform); + // If platform.plugin.qemu-user.emulator-path is set, use it. FileSpec qemu = GetGlobalProperties().GetEmulatorPath(); - if (!qemu) - qemu.SetPath(("qemu-" + GetGlobalProperties().GetArchitecture()).str()); + // If platform.plugin.qemu-user.emulator-path is not set, build the + // executable name from platform.plugin.qemu-user.architecture. + if (!qemu) { + llvm::StringRef arch = GetGlobalProperties().GetArchitecture(); + // If platform.plugin.qemu-user.architecture is not set, build the + // executable name from the target Triple's ArchName + if (arch.empty()) + arch = target.GetArchitecture().GetTriple().getArchName(); + qemu.SetPath(("qemu-" + arch).str()); + } FileSystem::Instance().ResolveExecutableLocation(qemu); llvm::SmallString<0> socket_model, socket_path; diff --git a/contrib/llvm-project/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/contrib/llvm-project/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 053d79b8c3b5..88f1ad15b6b4 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -15,7 +15,6 @@ #include "lldb/Core/ModuleList.h" #include "lldb/Core/ModuleSpec.h" #include "lldb/Core/PluginManager.h" -#include "lldb/Core/StreamFile.h" #include "lldb/Host/ConnectionFileDescriptor.h" #include "lldb/Host/Host.h" #include "lldb/Host/HostInfo.h" @@ -29,10 +28,12 @@ #include "lldb/Utility/Status.h" #include "lldb/Utility/StreamString.h" #include "lldb/Utility/UriParser.h" +#include "llvm/ADT/StringSet.h" #include "llvm/Support/FormatAdapters.h" #include "Plugins/Process/Utility/GDBRemoteSignals.h" #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h" +#include <mutex> #include <optional> using namespace lldb; @@ -42,6 +43,11 @@ using namespace lldb_private::platform_gdb_server; LLDB_PLUGIN_DEFINE_ADV(PlatformRemoteGDBServer, PlatformGDB) static bool g_initialized = false; +// UnixSignals does not store the signal names or descriptions itself. +// It holds onto StringRefs. Becaue we may get signal information dynamically +// from the remote, these strings need persistent storage client-side. +static std::mutex g_signal_string_mutex; +static llvm::StringSet<> g_signal_string_storage; void PlatformRemoteGDBServer::Initialize() { Platform::Initialize(); @@ -750,8 +756,18 @@ const UnixSignalsSP &PlatformRemoteGDBServer::GetRemoteUnixSignals() { if (object_sp && object_sp->IsValid()) description = std::string(object_sp->GetStringValue()); - remote_signals_sp->AddSignal(signo, name.str().c_str(), suppress, stop, - notify, description.c_str()); + llvm::StringRef name_backed, description_backed; + { + std::lock_guard<std::mutex> guard(g_signal_string_mutex); + name_backed = + g_signal_string_storage.insert(name).first->getKeyData(); + if (!description.empty()) + description_backed = + g_signal_string_storage.insert(description).first->getKeyData(); + } + + remote_signals_sp->AddSignal(signo, name_backed, suppress, stop, notify, + description_backed); return true; }); |