krytarowski added a comment. Diff
diff -u source/Plugins/Platform/Linux/PlatformLinux.cpp source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp Mostly everything is the same for now. --- source/Plugins/Platform/Linux/PlatformLinux.cpp 2016-12-19 17:48:18.156356172 +0100 +++ source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp 2017-01-31 16:48:56.313379692 +0100 @@ -1,4 +1,4 @@ -//===-- PlatformLinux.cpp ---------------------------------------*- C++ -*-===// +//===-- PlatformNetBSD.cpp -------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "PlatformLinux.h" +#include "PlatformNetBSD.h" #include "lldb/Host/Config.h" // C Includes @@ -36,27 +36,27 @@ #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" -// Define these constants from Linux mman.h for use when targeting +// Define these constants from NetBSD mman.h for use when targeting // remote linux systems even when host has different values. -#define MAP_PRIVATE 2 -#define MAP_ANON 0x20 +#define MAP_PRIVATE 0x0002 +#define MAP_ANON 0x1000 using namespace lldb; using namespace lldb_private; -using namespace lldb_private::platform_linux; +using namespace lldb_private::platform_netbsd; static uint32_t g_initialize_count = 0; //------------------------------------------------------------------ -/// Code to handle the PlatformLinux settings +/// Code to handle the PlatformNetBSD settings //------------------------------------------------------------------ namespace { -class PlatformLinuxProperties : public Properties { +class PlatformNetBSDProperties : public Properties { public: - PlatformLinuxProperties(); + PlatformNetBSDProperties(); - ~PlatformLinuxProperties() override = default; + ~PlatformNetBSDProperties() override = default; static ConstString &GetSettingName(); @@ -64,49 +64,49 @@ static const PropertyDefinition *GetStaticPropertyDefinitions(); }; -typedef std::shared_ptr<PlatformLinuxProperties> PlatformLinuxPropertiesSP; +typedef std::shared_ptr<PlatformNetBSDProperties> PlatformNetBSDPropertiesSP; } // anonymous namespace -PlatformLinuxProperties::PlatformLinuxProperties() : Properties() { +PlatformNetBSDProperties::PlatformNetBSDProperties() : Properties() { m_collection_sp.reset(new OptionValueProperties(GetSettingName())); m_collection_sp->Initialize(GetStaticPropertyDefinitions()); } -ConstString &PlatformLinuxProperties::GetSettingName() { - static ConstString g_setting_name("linux"); +ConstString &PlatformNetBSDProperties::GetSettingName() { + static ConstString g_setting_name("netbsd"); return g_setting_name; } const PropertyDefinition * -PlatformLinuxProperties::GetStaticPropertyDefinitions() { +PlatformNetBSDProperties::GetStaticPropertyDefinitions() { static PropertyDefinition g_properties[] = { {NULL, OptionValue::eTypeInvalid, false, 0, NULL, NULL, NULL}}; return g_properties; } -static const PlatformLinuxPropertiesSP &GetGlobalProperties() { - static PlatformLinuxPropertiesSP g_settings_sp; +static const PlatformNetBSDPropertiesSP &GetGlobalProperties() { + static PlatformNetBSDPropertiesSP g_settings_sp; if (!g_settings_sp) - g_settings_sp.reset(new PlatformLinuxProperties()); + g_settings_sp.reset(new PlatformNetBSDProperties()); return g_settings_sp; } -void PlatformLinux::DebuggerInitialize(Debugger &debugger) { +void PlatformNetBSD::DebuggerInitialize(Debugger &debugger) { if (!PluginManager::GetSettingForPlatformPlugin( - debugger, PlatformLinuxProperties::GetSettingName())) { + debugger, PlatformNetBSDProperties::GetSettingName())) { const bool is_global_setting = true; PluginManager::CreateSettingForPlatformPlugin( debugger, GetGlobalProperties()->GetValueProperties(), - ConstString("Properties for the PlatformLinux plug-in."), + ConstString("Properties for the PlatformNetBSD plug-in."), is_global_setting); } } //------------------------------------------------------------------ -PlatformSP PlatformLinux::CreateInstance(bool force, const ArchSpec *arch) { +PlatformSP PlatformNetBSD::CreateInstance(bool force, const ArchSpec *arch) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PLATFORM)); if (log) { const char *arch_name; @@ -118,7 +118,7 @@ const char *triple_cstr = arch ? arch->GetTriple().getTriple().c_str() : "<null>"; - log->Printf("PlatformLinux::%s(force=%s, arch={%s,%s})", __FUNCTION__, + log->Printf("PlatformNetBSD::%s(force=%s, arch={%s,%s})", __FUNCTION__, force ? "true" : "false", arch_name, triple_cstr); } @@ -126,18 +126,10 @@ if (create == false && arch && arch->IsValid()) { const llvm::Triple &triple = arch->GetTriple(); switch (triple.getOS()) { - case llvm::Triple::Linux: + case llvm::Triple::NetBSD: create = true; break; -#if defined(__linux__) - // Only accept "unknown" for the OS if the host is linux and - // it "unknown" wasn't specified (it was just returned because it - // was NOT specified) - case llvm::Triple::OSType::UnknownOS: - create = !arch->TripleOSWasSpecified(); - break; -#endif default: break; } @@ -145,67 +137,67 @@ if (create) { if (log) - log->Printf("PlatformLinux::%s() creating remote-linux platform", + log->Printf("PlatformNetBSD::%s() creating remote-netbsd platform", __FUNCTION__); - return PlatformSP(new PlatformLinux(false)); + return PlatformSP(new PlatformNetBSD(false)); } if (log) log->Printf( - "PlatformLinux::%s() aborting creation of remote-linux platform", + "PlatformNetBSD::%s() aborting creation of remote-netbsd platform", __FUNCTION__); return PlatformSP(); } -ConstString PlatformLinux::GetPluginNameStatic(bool is_host) { +ConstString PlatformNetBSD::GetPluginNameStatic(bool is_host) { if (is_host) { static ConstString g_host_name(Platform::GetHostPlatformName()); return g_host_name; } else { - static ConstString g_remote_name("remote-linux"); + static ConstString g_remote_name("remote-netbsd"); return g_remote_name; } } -const char *PlatformLinux::GetPluginDescriptionStatic(bool is_host) { +const char *PlatformNetBSD::GetPluginDescriptionStatic(bool is_host) { if (is_host) - return "Local Linux user platform plug-in."; + return "Local NetBSD user platform plug-in."; else - return "Remote Linux user platform plug-in."; + return "Remote NetBSD user platform plug-in."; } -ConstString PlatformLinux::GetPluginName() { +ConstString PlatformNetBSD::GetPluginName() { return GetPluginNameStatic(IsHost()); } -void PlatformLinux::Initialize() { +void PlatformNetBSD::Initialize() { PlatformPOSIX::Initialize(); if (g_initialize_count++ == 0) { -#if defined(__linux__) && !defined(__ANDROID__) - PlatformSP default_platform_sp(new PlatformLinux(true)); +#if defined(__NetBSD__) + PlatformSP default_platform_sp(new PlatformNetBSD(true)); default_platform_sp->SetSystemArchitecture(HostInfo::GetArchitecture()); Platform::SetHostPlatform(default_platform_sp); #endif PluginManager::RegisterPlugin( - PlatformLinux::GetPluginNameStatic(false), - PlatformLinux::GetPluginDescriptionStatic(false), - PlatformLinux::CreateInstance, PlatformLinux::DebuggerInitialize); + PlatformNetBSD::GetPluginNameStatic(false), + PlatformNetBSD::GetPluginDescriptionStatic(false), + PlatformNetBSD::CreateInstance, PlatformNetBSD::DebuggerInitialize); } } -void PlatformLinux::Terminate() { +void PlatformNetBSD::Terminate() { if (g_initialize_count > 0) { if (--g_initialize_count == 0) { - PluginManager::UnregisterPlugin(PlatformLinux::CreateInstance); + PluginManager::UnregisterPlugin(PlatformNetBSD::CreateInstance); } } PlatformPOSIX::Terminate(); } -Error PlatformLinux::ResolveExecutable( +Error PlatformNetBSD::ResolveExecutable( const ModuleSpec &ms, lldb::ModuleSP &exe_module_sp, const FileSpecList *module_search_paths_ptr) { Error error; @@ -330,7 +322,7 @@ return error; } -Error PlatformLinux::GetFileWithUUID(const FileSpec &platform_file, +Error PlatformNetBSD::GetFileWithUUID(const FileSpec &platform_file, const UUID *uuid_ptr, FileSpec &local_file) { if (IsRemote()) { @@ -347,7 +339,7 @@ //------------------------------------------------------------------ /// Default Constructor //------------------------------------------------------------------ -PlatformLinux::PlatformLinux(bool is_host) +PlatformNetBSD::PlatformNetBSD(bool is_host) : PlatformPOSIX(is_host) // This is the local host platform {} @@ -357,9 +349,9 @@ /// The destructor is virtual since this class is designed to be /// inherited from by the plug-in instance. //------------------------------------------------------------------ -PlatformLinux::~PlatformLinux() = default; +PlatformNetBSD::~PlatformNetBSD() = default; -bool PlatformLinux::GetProcessInfo(lldb::pid_t pid, +bool PlatformNetBSD::GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &process_info) { bool success = false; if (IsHost()) { @@ -372,8 +364,8 @@ } uint32_t -PlatformLinux::FindProcesses(const ProcessInstanceInfoMatch &match_info, - ProcessInstanceInfoList &process_infos) { +PlatformNetBSD::FindProcesses(const ProcessInstanceInfoMatch &match_info, + ProcessInstanceInfoList &process_infos) { uint32_t match_count = 0; if (IsHost()) { // Let the base class figure out the host details @@ -387,11 +379,11 @@ return match_count; } -bool PlatformLinux::GetSupportedArchitectureAtIndex(uint32_t idx, - ArchSpec &arch) { +bool PlatformNetBSD::GetSupportedArchitectureAtIndex(uint32_t idx, + ArchSpec &arch) { if (IsHost()) { ArchSpec hostArch = HostInfo::GetArchitecture(HostInfo::eArchKindDefault); - if (hostArch.GetTriple().isOSLinux()) { + if (hostArch.GetTriple().isOSNetBSD()) { if (idx == 0) { arch = hostArch; return arch.IsValid(); @@ -408,8 +400,8 @@ return m_remote_platform_sp->GetSupportedArchitectureAtIndex(idx, arch); llvm::Triple triple; - // Set the OS to linux - triple.setOS(llvm::Triple::Linux); + // Set the OS to NetBSD + triple.setOS(llvm::Triple::NetBSD); // Set the architecture switch (idx) { case 0: @@ -418,30 +410,6 @@ case 1: triple.setArchName("i386"); break; - case 2: - triple.setArchName("arm"); - break; - case 3: - triple.setArchName("aarch64"); - break; - case 4: - triple.setArchName("mips64"); - break; - case 5: - triple.setArchName("hexagon"); - break; - case 6: - triple.setArchName("mips"); - break; - case 7: - triple.setArchName("mips64el"); - break; - case 8: - triple.setArchName("mipsel"); - break; - case 9: - triple.setArchName("s390x"); - break; default: return false; } @@ -461,12 +429,12 @@ return false; } -void PlatformLinux::GetStatus(Stream &strm) { +void PlatformNetBSD::GetStatus(Stream &strm) { Platform::GetStatus(strm); #ifndef LLDB_DISABLE_POSIX // Display local kernel information only when we are running in host mode. - // Otherwise, we would end up printing non-Linux information (when running + // Otherwise, we would end up printing non-NetBSD information (when running // on Mac OS for example). if (IsHost()) { struct utsname un; @@ -482,7 +450,7 @@ } int32_t -PlatformLinux::GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) { +PlatformNetBSD::GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) { int32_t resume_count = 0; // Always resume past the initial stop when we use eLaunchFlagDebug @@ -516,7 +484,7 @@ return resume_count; } -bool PlatformLinux::CanDebugProcess() { +bool PlatformNetBSD::CanDebugProcess() { if (IsHost()) { return true; } else { @@ -525,19 +493,19 @@ } } -// For local debugging, Linux will override the debug logic to use llgs-launch +// For local debugging, NetBSD will override the debug logic to use llgs-launch // rather than // lldb-launch, llgs-attach. This differs from current lldb-launch, // debugserver-attach // approach on MacOSX. lldb::ProcessSP -PlatformLinux::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, +PlatformNetBSD::DebugProcess(ProcessLaunchInfo &launch_info, Debugger &debugger, Target *target, // Can be NULL, if NULL create a new // target, else use existing one Error &error) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PLATFORM)); if (log) - log->Printf("PlatformLinux::%s entered (target %p)", __FUNCTION__, + log->Printf("PlatformNetBSD::%s entered (target %p)", __FUNCTION__, static_cast<void *>(target)); // If we're a remote host, use standard behavior from parent class. @@ -562,14 +530,14 @@ // Ensure we have a target. if (target == nullptr) { if (log) - log->Printf("PlatformLinux::%s creating new target", __FUNCTION__); + log->Printf("PlatformNetBSD::%s creating new target", __FUNCTION__); TargetSP new_target_sp; error = debugger.GetTargetList().CreateTarget(debugger, "", "", false, nullptr, new_target_sp); if (error.Fail()) { if (log) - log->Printf("PlatformLinux::%s failed to create new target: %s", + log->Printf("PlatformNetBSD::%s failed to create new target: %s", __FUNCTION__, error.AsCString()); return process_sp; } @@ -578,13 +546,13 @@ if (!target) { error.SetErrorString("CreateTarget() returned nullptr"); if (log) - log->Printf("PlatformLinux::%s failed: %s", __FUNCTION__, + log->Printf("PlatformNetBSD::%s failed: %s", __FUNCTION__, error.AsCString()); return process_sp; } } else { if (log) - log->Printf("PlatformLinux::%s using provided target", __FUNCTION__); + log->Printf("PlatformNetBSD::%s using provided target", __FUNCTION__); } // Mark target as currently selected target. @@ -593,7 +561,7 @@ // Now create the gdb-remote process. if (log) log->Printf( - "PlatformLinux::%s having target create process with gdb-remote plugin", + "PlatformNetBSD::%s having target create process with gdb-remote plugin", __FUNCTION__); process_sp = target->CreateProcess( launch_info.GetListenerForProcess(debugger), "gdb-remote", nullptr); @@ -601,12 +569,12 @@ if (!process_sp) { error.SetErrorString("CreateProcess() failed for gdb-remote process"); if (log) - log->Printf("PlatformLinux::%s failed: %s", __FUNCTION__, + log->Printf("PlatformNetBSD::%s failed: %s", __FUNCTION__, error.AsCString()); return process_sp; } else { if (log) - log->Printf("PlatformLinux::%s successfully created process", + log->Printf("PlatformNetBSD::%s successfully created process", __FUNCTION__); } @@ -614,10 +582,10 @@ ListenerSP listener_sp; if (!launch_info.GetHijackListener()) { if (log) - log->Printf("PlatformLinux::%s setting up hijacker", __FUNCTION__); + log->Printf("PlatformNetBSD::%s setting up hijacker", __FUNCTION__); listener_sp = - Listener::MakeListener("lldb.PlatformLinux.DebugProcess.hijack"); + Listener::MakeListener("lldb.PlatformNetBSD.DebugProcess.hijack"); launch_info.SetHijackListener(listener_sp); process_sp->HijackProcessEvents(listener_sp); } @@ -625,7 +593,7 @@ // Log file actions. if (log) { log->Printf( - "PlatformLinux::%s launching process with the following file actions:", + "PlatformNetBSD::%s launching process with the following file actions:", __FUNCTION__); StreamString stream; @@ -648,11 +616,11 @@ if (state == eStateStopped) { if (log) - log->Printf("PlatformLinux::%s pid %" PRIu64 " state %s\n", + log->Printf("PlatformNetBSD::%s pid %" PRIu64 " state %s\n", __FUNCTION__, process_sp->GetID(), StateAsCString(state)); } else { if (log) - log->Printf("PlatformLinux::%s pid %" PRIu64 + log->Printf("PlatformNetBSD::%s pid %" PRIu64 " state is not stopped - %s\n", __FUNCTION__, process_sp->GetID(), StateAsCString(state)); } @@ -664,18 +632,18 @@ if (pty_fd != lldb_utility::PseudoTerminal::invalid_fd) { process_sp->SetSTDIOFileDescriptor(pty_fd); if (log) - log->Printf("PlatformLinux::%s pid %" PRIu64 + log->Printf("PlatformNetBSD::%s pid %" PRIu64 " hooked up STDIO pty to process", __FUNCTION__, process_sp->GetID()); } else { if (log) - log->Printf("PlatformLinux::%s pid %" PRIu64 + log->Printf("PlatformNetBSD::%s pid %" PRIu64 " not using process STDIO pty", __FUNCTION__, process_sp->GetID()); } } else { if (log) - log->Printf("PlatformLinux::%s process launch failed: %s", __FUNCTION__, + log->Printf("PlatformNetBSD::%s process launch failed: %s", __FUNCTION__, error.AsCString()); // FIXME figure out appropriate cleanup here. Do we delete the target? Do // we delete the process? Does our caller do that? @@ -684,30 +652,22 @@ return process_sp; } -void PlatformLinux::CalculateTrapHandlerSymbolNames() { +void PlatformNetBSD::CalculateTrapHandlerSymbolNames() { m_trap_handlers.push_back(ConstString("_sigtramp")); } -uint64_t PlatformLinux::ConvertMmapFlagsToPlatform(const ArchSpec &arch, +uint64_t PlatformNetBSD::ConvertMmapFlagsToPlatform(const ArchSpec &arch, unsigned flags) { uint64_t flags_platform = 0; - uint64_t map_anon = MAP_ANON; - - // To get correct flags for MIPS Architecture - if (arch.GetTriple().getArch() == llvm::Triple::mips64 || - arch.GetTriple().getArch() == llvm::Triple::mips64el || - arch.GetTriple().getArch() == llvm::Triple::mips || - arch.GetTriple().getArch() == llvm::Triple::mipsel) - map_anon = 0x800; if (flags & eMmapFlagsPrivate) flags_platform |= MAP_PRIVATE; if (flags & eMmapFlagsAnon) - flags_platform |= map_anon; + flags_platform |= MAP_ANON; return flags_platform; } -ConstString PlatformLinux::GetFullNameForDylib(ConstString basename) { +ConstString PlatformNetBSD::GetFullNameForDylib(ConstString basename) { if (basename.IsEmpty()) return basename; and --- source/Plugins/Platform/Linux/PlatformLinux.h 2016-09-10 20:16:06.905683528 +0200 +++ source/Plugins/Platform/NetBSD/PlatformNetBSD.h 2017-01-31 16:48:56.332198593 +0100 @@ -1,4 +1,4 @@ -//===-- PlatformLinux.h -----------------------------------------*- C++ -*-===// +//===-- PlatformNetBSD.h ----------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#ifndef liblldb_PlatformLinux_h_ -#define liblldb_PlatformLinux_h_ +#ifndef liblldb_PlatformNetBSD_h_ +#define liblldb_PlatformNetBSD_h_ // C Includes // C++ Includes @@ -17,13 +17,13 @@ #include "Plugins/Platform/POSIX/PlatformPOSIX.h" namespace lldb_private { -namespace platform_linux { +namespace platform_netbsd { -class PlatformLinux : public PlatformPOSIX { +class PlatformNetBSD : public PlatformPOSIX { public: - PlatformLinux(bool is_host); + PlatformNetBSD(bool is_host); - ~PlatformLinux() override; + ~PlatformNetBSD() override; static void DebuggerInitialize(Debugger &debugger); @@ -83,10 +83,10 @@ ConstString GetFullNameForDylib(ConstString basename) override; private: - DISALLOW_COPY_AND_ASSIGN(PlatformLinux); + DISALLOW_COPY_AND_ASSIGN(PlatformNetBSD); }; -} // namespace platform_linux +} // namespace platform_netbsd } // namespace lldb_private -#endif // liblldb_PlatformLinux_h_ +#endif // liblldb_PlatformNetBSD_h_ How would you like to enhance it? How to name the base class, where to put it? Reuse C++ class inheritance? Repository: rL LLVM https://reviews.llvm.org/D29266 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits