[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