From 0c5cee779929f840f4f286c5894a01f583ee7b4a Mon Sep 17 00:00:00 2001 From: Alex Langford Date: Wed, 22 Mar 2023 16:17:49 -0700 Subject: [PATCH] [lldb-server] Use Platform plugin corresponding to the host In ee232506b870ce5282cc4da5ca493d41d361feb3 I moved UnixSignal initialization from lldbTarget to the various platform plugins. This inadvertently broke lldb-server because lldb-server doesn't use Platform plugins. lldb-server still needs to be able to create a UnixSignals object for the host platform so we can add the relevant platform plugin to lldb-server to make sure we always have a HostPlatform. Differential Revision: https://reviews.llvm.org/D146668 --- .../inferior-crashing/TestInferiorCrashing.py | 4 +++- lldb/tools/lldb-server/CMakeLists.txt | 9 +++++++++ lldb/tools/lldb-server/SystemInitializerLLGS.cpp | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lldb/test/API/functionalities/inferior-crashing/TestInferiorCrashing.py b/lldb/test/API/functionalities/inferior-crashing/TestInferiorCrashing.py index b63a09d..172c00e 100644 --- a/lldb/test/API/functionalities/inferior-crashing/TestInferiorCrashing.py +++ b/lldb/test/API/functionalities/inferior-crashing/TestInferiorCrashing.py @@ -63,7 +63,9 @@ class CrashingInferiorTestCase(TestBase): # The exact stop reason depends on the platform if self.platformIsDarwin(): stop_reason = 'stop reason = EXC_BAD_ACCESS' - elif self.getPlatform() == "linux" or self.getPlatform() == "freebsd": + elif self.getPlatform() == "linux": + stop_reason = 'stop reason = signal SIGSEGV: address not mapped to object' + elif self.getPlatform() == "freebsd": stop_reason = 'stop reason = signal SIGSEGV' else: stop_reason = 'stop reason = invalid address' diff --git a/lldb/tools/lldb-server/CMakeLists.txt b/lldb/tools/lldb-server/CMakeLists.txt index 67103e8..56da4c8 100644 --- a/lldb/tools/lldb-server/CMakeLists.txt +++ b/lldb/tools/lldb-server/CMakeLists.txt @@ -7,20 +7,29 @@ set(LLDB_PLUGINS) if(CMAKE_SYSTEM_NAME MATCHES "Linux|Android") list(APPEND LLDB_PLUGINS lldbPluginProcessLinux) + if (CMAKE_SYSTEM_NAME MATCHES "Linux") + list(APPEND LLDB_PLUGINS lldbPluginPlatformLinux) + else() + list(APPEND LLDB_PLUGINS lldbPluginPlatformAndroid) + endif() endif() if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") list(APPEND LLDB_PLUGINS lldbPluginProcessFreeBSD) + list(APPEND LLDB_PLUGINS lldbPluginPlatformFreeBSD) endif() if(CMAKE_SYSTEM_NAME MATCHES "NetBSD") list(APPEND LLDB_PLUGINS lldbPluginProcessNetBSD) + list(APPEND LLDB_PLUGINS lldbPluginPlatformNetBSD) endif() if(CMAKE_SYSTEM_NAME MATCHES "Darwin") list(APPEND LLDB_PLUGINS lldbPluginObjectFileMachO) + list(APPEND LLDB_PLUGINS lldbPluginPlatformMacOSX) elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") list(APPEND LLDB_PLUGINS lldbPluginObjectFilePECOFF) + list(APPEND LLDB_PLUGINS lldbPluginPlatformWindows) else() list(APPEND LLDB_PLUGINS lldbPluginObjectFileELF) endif() diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp index 4233252..1909ea4 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp @@ -11,12 +11,29 @@ #if defined(__APPLE__) #include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h" using HostObjectFile = ObjectFileMachO; +#include "Plugins/Platform/MacOSX/PlatformMacOSX.h" +using HostPlatform = lldb_private::PlatformMacOSX; #elif defined(_WIN32) #include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h" using HostObjectFile = ObjectFilePECOFF; +#include "Plugins/Platform/Windows/PlatformWindows.h" +using HostPlatform = lldb_private::PlatformWindows; #else #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" using HostObjectFile = ObjectFileELF; +#if defined(__ANDROID__) +#include "Plugins/Platform/Android/PlatformAndroid.h" +using HostPlatform = lldb_private::platform_android::PlatformAndroid; +#elif defined(__FreeBSD__) +#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h" +using HostPlatform = lldb_private::platform_freebsd::PlatformFreeBSD; +#elif defined(__linux__) +#include "Plugins/Platform/Linux/PlatformLinux.h" +using HostPlatform = lldb_private::platform_linux::PlatformLinux; +#elif defined(__NetBSD__) +#include "Plugins/Platform/NetBSD/PlatformNetBSD.h" +using HostPlatform = lldb_private::platform_netbsd::PlatformNetBSD; +#endif #endif #if defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64) @@ -58,6 +75,7 @@ llvm::Error SystemInitializerLLGS::Initialize() { return e; HostObjectFile::Initialize(); + HostPlatform::Initialize(); #if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64) EmulateInstructionARM::Initialize(); @@ -80,6 +98,7 @@ llvm::Error SystemInitializerLLGS::Initialize() { void SystemInitializerLLGS::Terminate() { HostObjectFile::Terminate(); + HostPlatform::Terminate(); #if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64) EmulateInstructionARM::Terminate(); -- 2.7.4