[Lldb-commits] [lldb] 2bfef8d - Revert "[LLDB][LoongArch] Make software single stepping work"
Weining Lu via lldb-commits
lldb-commits at lists.llvm.org
Thu Dec 8 03:57:29 PST 2022
Author: Weining Lu
Date: 2022-12-08T19:56:58+08:00
New Revision: 2bfef8d5370fbe9d500441b2e1e3fe4a4d68deec
URL: https://github.com/llvm/llvm-project/commit/2bfef8d5370fbe9d500441b2e1e3fe4a4d68deec
DIFF: https://github.com/llvm/llvm-project/commit/2bfef8d5370fbe9d500441b2e1e3fe4a4d68deec.diff
LOG: Revert "[LLDB][LoongArch] Make software single stepping work"
This reverts commit 3a9e07b1e7f4718a0e117f3a732f1679c4bf2e30.
Reason to revert: author name is wrong.
Added:
Modified:
lldb/source/Plugins/Instruction/CMakeLists.txt
lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
lldb/source/Plugins/Process/Utility/NativeProcessSoftwareSingleStep.cpp
lldb/tools/lldb-server/CMakeLists.txt
lldb/tools/lldb-server/SystemInitializerLLGS.cpp
Removed:
lldb/source/Plugins/Instruction/LoongArch/CMakeLists.txt
lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp
lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h
################################################################################
diff --git a/lldb/source/Plugins/Instruction/CMakeLists.txt b/lldb/source/Plugins/Instruction/CMakeLists.txt
index 46d610f261e0d..631c0b307cac4 100644
--- a/lldb/source/Plugins/Instruction/CMakeLists.txt
+++ b/lldb/source/Plugins/Instruction/CMakeLists.txt
@@ -1,6 +1,5 @@
add_subdirectory(ARM)
add_subdirectory(ARM64)
-add_subdirectory(LoongArch)
add_subdirectory(MIPS)
add_subdirectory(MIPS64)
add_subdirectory(PPC64)
diff --git a/lldb/source/Plugins/Instruction/LoongArch/CMakeLists.txt b/lldb/source/Plugins/Instruction/LoongArch/CMakeLists.txt
deleted file mode 100644
index 59802ee8fa9ad..0000000000000
--- a/lldb/source/Plugins/Instruction/LoongArch/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-add_lldb_library(lldbPluginInstructionLoongArch PLUGIN
- EmulateInstructionLoongArch.cpp
-
- LINK_LIBS
- lldbCore
- lldbInterpreter
- lldbPluginProcessUtility
- lldbSymbol
- LINK_COMPONENTS
- Support
- )
diff --git a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp
deleted file mode 100644
index 14ac993d9ac0f..0000000000000
--- a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-//===---EmulateInstructionLoongArch.cpp------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include <cstdlib>
-
-#include "EmulateInstructionLoongArch.h"
-#include "Plugins/Process/Utility/InstructionUtils.h"
-#include "Plugins/Process/Utility/RegisterInfoPOSIX_loongarch64.h"
-#include "Plugins/Process/Utility/lldb-loongarch-register-enums.h"
-#include "lldb/Core/Address.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Interpreter/OptionValueArray.h"
-#include "lldb/Interpreter/OptionValueDictionary.h"
-#include "lldb/Symbol/UnwindPlan.h"
-#include "lldb/Utility/ArchSpec.h"
-#include "lldb/Utility/LLDBLog.h"
-#include "lldb/Utility/RegisterValue.h"
-#include "lldb/Utility/Stream.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/Support/MathExtras.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-LLDB_PLUGIN_DEFINE_ADV(EmulateInstructionLoongArch, InstructionLoongArch)
-
-namespace lldb_private {
-
-EmulateInstructionLoongArch::Opcode *
-EmulateInstructionLoongArch::GetOpcodeForInstruction(uint32_t inst) {
- // TODO: Add the mask of jump instruction.
- static EmulateInstructionLoongArch::Opcode g_opcodes[] = {
- {0x00000000, 0x00000000, &EmulateInstructionLoongArch::EmulateNonJMP,
- "NonJMP"}};
- static const size_t num_loongarch_opcodes = std::size(g_opcodes);
-
- for (size_t i = 0; i < num_loongarch_opcodes; ++i)
- if ((g_opcodes[i].mask & inst) == g_opcodes[i].value)
- return &g_opcodes[i];
- return nullptr;
-}
-
-bool EmulateInstructionLoongArch::EvaluateInstruction(uint32_t options) {
- uint32_t inst_size = m_opcode.GetByteSize();
- uint32_t inst = m_opcode.GetOpcode32();
- bool increase_pc = options & eEmulateInstructionOptionAutoAdvancePC;
- bool success = false;
-
- Opcode *opcode_data = GetOpcodeForInstruction(inst);
- if (!opcode_data)
- return false;
-
- lldb::addr_t old_pc = 0;
- if (increase_pc) {
- old_pc = ReadPC(&success);
- if (!success)
- return false;
- }
-
- // Call the Emulate... function.
- if (!(this->*opcode_data->callback)(inst))
- return false;
-
- if (increase_pc) {
- lldb::addr_t new_pc = ReadPC(&success);
- if (!success)
- return false;
-
- if (new_pc == old_pc && !WritePC(old_pc + inst_size))
- return false;
- }
- return true;
-}
-
-bool EmulateInstructionLoongArch::ReadInstruction() {
- bool success = false;
- m_addr = ReadPC(&success);
- if (!success) {
- m_addr = LLDB_INVALID_ADDRESS;
- return false;
- }
-
- Context ctx;
- ctx.type = eContextReadOpcode;
- ctx.SetNoArgs();
- uint32_t inst = (uint32_t)ReadMemoryUnsigned(ctx, m_addr, 4, 0, &success);
- m_opcode.SetOpcode32(inst, GetByteOrder());
-
- return true;
-}
-
-lldb::addr_t EmulateInstructionLoongArch::ReadPC(bool *success) {
- return ReadRegisterUnsigned(eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC,
- LLDB_INVALID_ADDRESS, success);
-}
-
-bool EmulateInstructionLoongArch::WritePC(lldb::addr_t pc) {
- EmulateInstruction::Context ctx;
- ctx.type = eContextAdvancePC;
- ctx.SetNoArgs();
- return WriteRegisterUnsigned(ctx, eRegisterKindGeneric,
- LLDB_REGNUM_GENERIC_PC, pc);
-}
-
-llvm::Optional<RegisterInfo>
-EmulateInstructionLoongArch::GetRegisterInfo(lldb::RegisterKind reg_kind,
- uint32_t reg_index) {
- if (reg_kind == eRegisterKindGeneric) {
- switch (reg_index) {
- case LLDB_REGNUM_GENERIC_PC:
- reg_kind = eRegisterKindLLDB;
- reg_index = gpr_pc_loongarch;
- break;
- case LLDB_REGNUM_GENERIC_SP:
- reg_kind = eRegisterKindLLDB;
- reg_index = gpr_sp_loongarch;
- break;
- case LLDB_REGNUM_GENERIC_FP:
- reg_kind = eRegisterKindLLDB;
- reg_index = gpr_fp_loongarch;
- break;
- case LLDB_REGNUM_GENERIC_RA:
- reg_kind = eRegisterKindLLDB;
- reg_index = gpr_ra_loongarch;
- break;
- // We may handle LLDB_REGNUM_GENERIC_ARGx when more instructions are
- // supported.
- default:
- llvm_unreachable("unsupported register");
- }
- }
-
- const RegisterInfo *array =
- RegisterInfoPOSIX_loongarch64::GetRegisterInfoPtr(m_arch);
- const uint32_t length =
- RegisterInfoPOSIX_loongarch64::GetRegisterInfoCount(m_arch);
-
- if (reg_index >= length || reg_kind != eRegisterKindLLDB)
- return {};
- return array[reg_index];
-}
-
-bool EmulateInstructionLoongArch::SetTargetTriple(const ArchSpec &arch) {
- return SupportsThisArch(arch);
-}
-
-bool EmulateInstructionLoongArch::TestEmulation(
- Stream *out_stream, ArchSpec &arch, OptionValueDictionary *test_data) {
- return false;
-}
-
-void EmulateInstructionLoongArch::Initialize() {
- PluginManager::RegisterPlugin(GetPluginNameStatic(),
- GetPluginDescriptionStatic(), CreateInstance);
-}
-
-void EmulateInstructionLoongArch::Terminate() {
- PluginManager::UnregisterPlugin(CreateInstance);
-}
-
-lldb_private::EmulateInstruction *
-EmulateInstructionLoongArch::CreateInstance(const ArchSpec &arch,
- InstructionType inst_type) {
- if (EmulateInstructionLoongArch::SupportsThisInstructionType(inst_type) &&
- SupportsThisArch(arch))
- return new EmulateInstructionLoongArch(arch);
- return nullptr;
-}
-
-bool EmulateInstructionLoongArch::SupportsThisArch(const ArchSpec &arch) {
- return arch.GetTriple().isLoongArch();
-}
-
-bool EmulateInstructionLoongArch::EmulateNonJMP(uint32_t inst) { return false; }
-
-} // namespace lldb_private
diff --git a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h b/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h
deleted file mode 100644
index 06abc99d1ee92..0000000000000
--- a/lldb/source/Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h
+++ /dev/null
@@ -1,76 +0,0 @@
-//===---EmulateInstructionLoongArch.h--------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SOURCE_PLUGINS_INSTRUCTION_LOONGARCH_EMULATEINSTRUCTIONLOONGARCH_H
-#define LLDB_SOURCE_PLUGINS_INSTRUCTION_LOONGARCH_EMULATEINSTRUCTIONLOONGARCH_H
-
-#include "lldb/Core/EmulateInstruction.h"
-#include "lldb/Interpreter/OptionValue.h"
-#include "lldb/Utility/Log.h"
-#include "lldb/Utility/Status.h"
-
-namespace lldb_private {
-
-class EmulateInstructionLoongArch : public EmulateInstruction {
-public:
- static llvm::StringRef GetPluginNameStatic() { return "LoongArch"; }
-
- static llvm::StringRef GetPluginDescriptionStatic() {
- return "Emulate instructions for the LoongArch architecture.";
- }
-
- static bool SupportsThisInstructionType(InstructionType inst_type) {
- return inst_type == eInstructionTypePCModifying;
- }
-
- static bool SupportsThisArch(const ArchSpec &arch);
-
- static lldb_private::EmulateInstruction *
- CreateInstance(const lldb_private::ArchSpec &arch, InstructionType inst_type);
-
- static void Initialize();
-
- static void Terminate();
-
-public:
- EmulateInstructionLoongArch(const ArchSpec &arch)
- : EmulateInstruction(arch) {}
-
- llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
-
- bool SupportsEmulatingInstructionsOfType(InstructionType inst_type) override {
- return SupportsThisInstructionType(inst_type);
- }
-
- bool SetTargetTriple(const ArchSpec &arch) override;
- bool ReadInstruction() override;
- bool EvaluateInstruction(uint32_t options) override;
- bool TestEmulation(Stream *out_stream, ArchSpec &arch,
- OptionValueDictionary *test_data) override;
-
- llvm::Optional<RegisterInfo> GetRegisterInfo(lldb::RegisterKind reg_kind,
- uint32_t reg_num) override;
- lldb::addr_t ReadPC(bool *success);
- bool WritePC(lldb::addr_t pc);
-
-private:
- struct Opcode {
- uint32_t mask;
- uint32_t value;
- bool (EmulateInstructionLoongArch::*callback)(uint32_t opcode);
- const char *name;
- };
-
- Opcode *GetOpcodeForInstruction(uint32_t inst);
-
- bool EmulateNonJMP(uint32_t inst);
-};
-
-} // namespace lldb_private
-
-#endif // LLDB_SOURCE_PLUGINS_INSTRUCTION_LOONGARCH_EMULATEINSTRUCTIONLOONGARCH_H
diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
index 5485d8c7f327c..ffa15f4023dba 100644
--- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
+++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
@@ -883,7 +883,7 @@ bool NativeProcessLinux::MonitorClone(NativeThreadLinux &parent,
bool NativeProcessLinux::SupportHardwareSingleStepping() const {
if (m_arch.IsMIPS() || m_arch.GetMachine() == llvm::Triple::arm ||
- m_arch.GetTriple().isRISCV() || m_arch.GetTriple().isLoongArch())
+ m_arch.GetTriple().isRISCV())
return false;
return true;
}
diff --git a/lldb/source/Plugins/Process/Utility/NativeProcessSoftwareSingleStep.cpp b/lldb/source/Plugins/Process/Utility/NativeProcessSoftwareSingleStep.cpp
index 6bf8a0dc28b22..b8bf30f3b6de4 100644
--- a/lldb/source/Plugins/Process/Utility/NativeProcessSoftwareSingleStep.cpp
+++ b/lldb/source/Plugins/Process/Utility/NativeProcessSoftwareSingleStep.cpp
@@ -168,7 +168,7 @@ Status NativeProcessSoftwareSingleStep::SetupSoftwareSingleStepping(
size_hint = 4;
}
} else if (arch.IsMIPS() || arch.GetTriple().isPPC64() ||
- arch.GetTriple().isRISCV() || arch.GetTriple().isLoongArch())
+ arch.GetTriple().isRISCV())
size_hint = 4;
error = process.SetBreakpoint(next_pc, size_hint, /*hardware=*/false);
diff --git a/lldb/tools/lldb-server/CMakeLists.txt b/lldb/tools/lldb-server/CMakeLists.txt
index 67103e87a1d4a..833563b5a0fe5 100644
--- a/lldb/tools/lldb-server/CMakeLists.txt
+++ b/lldb/tools/lldb-server/CMakeLists.txt
@@ -51,7 +51,6 @@ add_lldb_tool(lldb-server
lldbVersion
${LLDB_PLUGINS}
lldbPluginInstructionARM
- lldbPluginInstructionLoongArch
lldbPluginInstructionMIPS
lldbPluginInstructionMIPS64
lldbPluginInstructionRISCV
diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp
index 4233252a84dfc..a8bdcdf0e77c9 100644
--- a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp
+++ b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp
@@ -29,11 +29,6 @@ using HostObjectFile = ObjectFileELF;
#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
#endif
-#if defined(__loongarch__)
-#define LLDB_TARGET_LoongArch
-#include "Plugins/Instruction/LoongArch/EmulateInstructionLoongArch.h"
-#endif
-
#if defined(__mips64__) || defined(mips64) || defined(__mips64) || \
defined(__MIPS64__) || defined(_M_MIPS64)
#define LLDB_TARGET_MIPS64
@@ -62,9 +57,6 @@ llvm::Error SystemInitializerLLGS::Initialize() {
#if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64)
EmulateInstructionARM::Initialize();
#endif
-#if defined(LLDB_TARGET_LoongArch)
- EmulateInstructionLoongArch::Initialize();
-#endif
#if defined(LLDB_TARGET_MIPS) || defined(LLDB_TARGET_MIPS64)
EmulateInstructionMIPS::Initialize();
#endif
@@ -84,9 +76,6 @@ void SystemInitializerLLGS::Terminate() {
#if defined(LLDB_TARGET_ARM) || defined(LLDB_TARGET_ARM64)
EmulateInstructionARM::Terminate();
#endif
-#if defined(LLDB_TARGET_LoongArch)
- EmulateInstructionLoongArch::Terminate();
-#endif
#if defined(LLDB_TARGET_MIPS) || defined(LLDB_TARGET_MIPS64)
EmulateInstructionMIPS::Terminate();
#endif
More information about the lldb-commits
mailing list