simoncook updated this revision to Diff 205287.
simoncook added a comment.
- Refactored register tables to match style used in i386/x86_64
- Add enum for RISC-V DWARF numbers
- Add F registers (assuming 32-bit, at runtime this seems to be overwritten to
64-bit if D extension is provided)
- Add default unwind plan for first frame
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62732/new/
https://reviews.llvm.org/D62732
Files:
lldb/include/lldb/Utility/ArchSpec.h
lldb/source/API/SystemInitializerFull.cpp
lldb/source/Plugins/ABI/CMakeLists.txt
lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.cpp
lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.h
lldb/source/Plugins/ABI/SysV-riscv/CMakeLists.txt
lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
lldb/source/Target/Platform.cpp
lldb/source/Target/Thread.cpp
lldb/source/Utility/ArchSpec.cpp
Index: lldb/source/Utility/ArchSpec.cpp
===================================================================
--- lldb/source/Utility/ArchSpec.cpp
+++ lldb/source/Utility/ArchSpec.cpp
@@ -210,6 +210,11 @@
{eByteOrderLittle, 4, 4, 4, llvm::Triple::hexagon,
ArchSpec::eCore_hexagon_hexagonv5, "hexagonv5"},
+ {eByteOrderLittle, 4, 2, 4, llvm::Triple::riscv32,
+ ArchSpec::eCore_riscv32, "riscv32"},
+ {eByteOrderLittle, 8, 2, 4, llvm::Triple::riscv64,
+ ArchSpec::eCore_riscv64, "riscv64"},
+
{eByteOrderLittle, 4, 4, 4, llvm::Triple::UnknownArch,
ArchSpec::eCore_uknownMach32, "unknown-mach-32"},
{eByteOrderLittle, 8, 4, 4, llvm::Triple::UnknownArch,
@@ -446,6 +451,10 @@
ArchSpec::eMIPSSubType_mips64r6el, 0xFFFFFFFFu, 0xFFFFFFFFu}, // mips64r6el
{ArchSpec::eCore_hexagon_generic, llvm::ELF::EM_HEXAGON,
LLDB_INVALID_CPUTYPE, 0xFFFFFFFFu, 0xFFFFFFFFu}, // HEXAGON
+ {ArchSpec::eCore_riscv32, llvm::ELF::EM_RISCV, LLDB_INVALID_CPUTYPE,
+ 0xFFFFFFFFu, 0xFFFFFFFFu}, // riscv32
+ {ArchSpec::eCore_riscv64, llvm::ELF::EM_RISCV, LLDB_INVALID_CPUTYPE,
+ 0xFFFFFFFFu, 0xFFFFFFFFu}, // riscv64
};
static const ArchDefinition g_elf_arch_def = {
Index: lldb/source/Target/Thread.cpp
===================================================================
--- lldb/source/Target/Thread.cpp
+++ lldb/source/Target/Thread.cpp
@@ -2070,6 +2070,8 @@
case llvm::Triple::ppc:
case llvm::Triple::ppc64:
case llvm::Triple::ppc64le:
+ case llvm::Triple::riscv32:
+ case llvm::Triple::riscv64:
case llvm::Triple::systemz:
case llvm::Triple::hexagon:
m_unwinder_up.reset(new UnwindLLDB(*this));
Index: lldb/source/Target/Platform.cpp
===================================================================
--- lldb/source/Target/Platform.cpp
+++ lldb/source/Target/Platform.cpp
@@ -1911,6 +1911,15 @@
trap_opcode_size = sizeof(g_i386_opcode);
} break;
+ case llvm::Triple::riscv32:
+ case llvm::Triple::riscv64: {
+ // TODO: Use ebreak when c_ebreak is not available.
+ static const uint8_t g_riscv_c_opcode[] = {0x02, 0x90}; // c_ebreak
+ trap_opcode = g_riscv_c_opcode;
+ trap_opcode_size = sizeof(g_riscv_c_opcode);
+ break;
+ }
+
default:
llvm_unreachable(
"Unhandled architecture in Platform::GetSoftwareBreakpointTrapOpcode");
Index: lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
===================================================================
--- lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
+++ lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
@@ -1198,6 +1198,11 @@
cpu = "apple-latest";
}
+ // For RISC-V, enable all standard extensions so these can be disassembled.
+ if (triple.getArch() == llvm::Triple::riscv32 ||
+ triple.getArch() == llvm::Triple::riscv64)
+ features_str += "+a,+c,+d,+f,+m";
+
// We use m_disasm_up.get() to tell whether we are valid or not, so if this
// isn't good for some reason, we won't be valid and FindPlugin will fail and
// we won't get used.
Index: lldb/source/Plugins/ABI/SysV-riscv/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/source/Plugins/ABI/SysV-riscv/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_lldb_library(lldbPluginABISysV_riscv PLUGIN
+ ABISysV_riscv.cpp
+
+ LINK_LIBS
+ lldbCore
+ lldbSymbol
+ lldbTarget
+ LINK_COMPONENTS
+ Support
+ )
Index: lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.h
===================================================================
--- /dev/null
+++ lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.h
@@ -0,0 +1,108 @@
+//===-- ABISysV_riscv.h -----------------------------------------*- C++ -*-===//
+//
+// 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 liblldb_ABISysV_riscv_h_
+#define liblldb_ABISysV_riscv_h_
+
+#include "lldb/Target/ABI.h"
+#include "lldb/lldb-private.h"
+
+class ABISysV_riscv : public lldb_private::ABI {
+ bool isRV64;
+
+public:
+ size_t GetRedZoneSize() const override { return 0; }
+
+ bool PrepareTrivialCall(lldb_private::Thread &thread, lldb::addr_t sp,
+ lldb::addr_t functionAddress,
+ lldb::addr_t returnAddress,
+ llvm::ArrayRef<lldb::addr_t> args) const override {
+ // TODO: Implement
+ return false;
+ }
+
+ bool GetArgumentValues(lldb_private::Thread &thread,
+ lldb_private::ValueList &values) const override {
+ // TODO: Implement
+ return false;
+ }
+
+ lldb_private::Status
+ SetReturnValueObject(lldb::StackFrameSP &frame_sp,
+ lldb::ValueObjectSP &new_value) override {
+ // TODO: Implement
+ lldb_private::Status error;
+ error.SetErrorString("Not yet implemented");
+ return error;
+ }
+
+ lldb::ValueObjectSP
+ GetReturnValueObjectImpl(lldb_private::Thread &thread,
+ lldb_private::CompilerType &type) const override {
+ // TODO: Implement
+ lldb::ValueObjectSP return_valobj;
+ return return_valobj;
+ }
+
+ bool CreateFunctionEntryUnwindPlan(
+ lldb_private::UnwindPlan &unwind_plan) override {
+ // TODO: Implement disassembly-based unwinding
+ unwind_plan.Clear();
+ return false;
+ }
+
+ bool CreateDefaultUnwindPlan(lldb_private::UnwindPlan &unwind_plan) override;
+
+ bool RegisterIsVolatile(const lldb_private::RegisterInfo *reg_info) override {
+ // TODO: Implement
+ return false;
+ }
+
+ bool CallFrameAddressIsValid(lldb::addr_t cfa) override {
+ // Assume any address except zero is valid
+ if (cfa == 0)
+ return false;
+ return true;
+ }
+
+ bool CodeAddressIsValid(lldb::addr_t pc) override {
+ // Any address in the address space is valid
+ if (!isRV64)
+ return (pc <= UINT32_MAX);
+ return (pc <= UINT64_MAX);
+ }
+
+ const lldb_private::RegisterInfo *
+ GetRegisterInfoArray(uint32_t &count) override;
+
+ // Static Functions
+
+ static void Initialize();
+
+ static void Terminate();
+
+ static lldb::ABISP CreateInstance(lldb::ProcessSP process_sp,
+ const lldb_private::ArchSpec &arch);
+
+ // PluginInterface protocol
+
+ static lldb_private::ConstString GetPluginNameStatic();
+
+ lldb_private::ConstString GetPluginName() override;
+
+ uint32_t GetPluginVersion() override { return 1; }
+
+protected:
+private:
+ ABISysV_riscv(lldb::ProcessSP process_sp, bool _isRV64)
+ : lldb_private::ABI(process_sp), isRV64(_isRV64) {
+ // Call CreateInstance instead.
+ }
+};
+
+#endif // liblldb_ABISysV_riscv_h_
Index: lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.cpp
===================================================================
--- /dev/null
+++ lldb/source/Plugins/ABI/SysV-riscv/ABISysV_riscv.cpp
@@ -0,0 +1,329 @@
+//===-- ABISysV_riscv.cpp ---------------------------------------*- C++ -*-===//
+//
+// 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 "ABISysV_riscv.h"
+
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/Triple.h"
+
+#include "lldb/Core/Module.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Core/Value.h"
+#include "lldb/Core/ValueObjectConstResult.h"
+#include "lldb/Core/ValueObjectMemory.h"
+#include "lldb/Core/ValueObjectRegister.h"
+#include "lldb/Symbol/UnwindPlan.h"
+#include "lldb/Target/Process.h"
+#include "lldb/Target/RegisterContext.h"
+#include "lldb/Target/StackFrame.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Target/Thread.h"
+#include "lldb/Utility/ConstString.h"
+#include "lldb/Utility/DataExtractor.h"
+#include "lldb/Utility/Log.h"
+#include "lldb/Utility/RegisterValue.h"
+#include "lldb/Utility/Status.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+enum riscv_dwarf_regnums {
+ dwarf_x0 = 0,
+ dwarf_x1,
+ dwarf_x2,
+ dwarf_x3,
+ dwarf_x4,
+ dwarf_x5,
+ dwarf_x6,
+ dwarf_x7,
+ dwarf_x8,
+ dwarf_x9,
+ dwarf_x10,
+ dwarf_x11,
+ dwarf_x12,
+ dwarf_x13,
+ dwarf_x14,
+ dwarf_x15,
+ dwarf_x16,
+ dwarf_x17,
+ dwarf_x18,
+ dwarf_x19,
+ dwarf_x20,
+ dwarf_x21,
+ dwarf_x22,
+ dwarf_x23,
+ dwarf_x24,
+ dwarf_x25,
+ dwarf_x26,
+ dwarf_x27,
+ dwarf_x28,
+ dwarf_x29,
+ dwarf_x30,
+ dwarf_x31,
+ dwarf_f0 = 32,
+ dwarf_f1,
+ dwarf_f2,
+ dwarf_f3,
+ dwarf_f4,
+ dwarf_f5,
+ dwarf_f6,
+ dwarf_f7,
+ dwarf_f8,
+ dwarf_f9,
+ dwarf_f10,
+ dwarf_f11,
+ dwarf_f12,
+ dwarf_f13,
+ dwarf_f14,
+ dwarf_f15,
+ dwarf_f16,
+ dwarf_f17,
+ dwarf_f18,
+ dwarf_f19,
+ dwarf_f20,
+ dwarf_f21,
+ dwarf_f22,
+ dwarf_f23,
+ dwarf_f24,
+ dwarf_f25,
+ dwarf_f26,
+ dwarf_f27,
+ dwarf_f28,
+ dwarf_f29,
+ dwarf_f30,
+ dwarf_f31
+};
+
+static RegisterInfo g_register_infos_rv32[] = {
+ // clang-format off
+ {"x0", "zero", 4, 0, eEncodingUint, eFormatHex, {dwarf_x0, dwarf_x0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x1", "ra", 4, 0, eEncodingUint, eFormatHex, {dwarf_x1, dwarf_x1, LLDB_REGNUM_GENERIC_RA, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x2", "sp", 4, 0, eEncodingUint, eFormatHex, {dwarf_x2, dwarf_x2, LLDB_REGNUM_GENERIC_SP, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x3", "gp", 4, 0, eEncodingUint, eFormatHex, {dwarf_x3, dwarf_x3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x4", "tp", 4, 0, eEncodingUint, eFormatHex, {dwarf_x4, dwarf_x4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x5", "t0", 4, 0, eEncodingUint, eFormatHex, {dwarf_x5, dwarf_x5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x6", "t1", 4, 0, eEncodingUint, eFormatHex, {dwarf_x6, dwarf_x6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x7", "t2", 4, 0, eEncodingUint, eFormatHex, {dwarf_x7, dwarf_x7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x8", "s0", 4, 0, eEncodingUint, eFormatHex, {dwarf_x8, dwarf_x8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x9", "s1", 4, 0, eEncodingUint, eFormatHex, {dwarf_x9, dwarf_x9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x10", "a0", 4, 0, eEncodingUint, eFormatHex, {dwarf_x10, dwarf_x10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x11", "a1", 4, 0, eEncodingUint, eFormatHex, {dwarf_x11, dwarf_x11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x12", "a2", 4, 0, eEncodingUint, eFormatHex, {dwarf_x12, dwarf_x12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x13", "a3", 4, 0, eEncodingUint, eFormatHex, {dwarf_x13, dwarf_x13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x14", "a4", 4, 0, eEncodingUint, eFormatHex, {dwarf_x14, dwarf_x14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x15", "a5", 4, 0, eEncodingUint, eFormatHex, {dwarf_x15, dwarf_x15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x16", "a6", 4, 0, eEncodingUint, eFormatHex, {dwarf_x16, dwarf_x16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x17", "a7", 4, 0, eEncodingUint, eFormatHex, {dwarf_x17, dwarf_x17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x18", "s2", 4, 0, eEncodingUint, eFormatHex, {dwarf_x18, dwarf_x18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x19", "s3", 4, 0, eEncodingUint, eFormatHex, {dwarf_x19, dwarf_x19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x20", "s4", 4, 0, eEncodingUint, eFormatHex, {dwarf_x20, dwarf_x20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x21", "s5", 4, 0, eEncodingUint, eFormatHex, {dwarf_x21, dwarf_x21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x22", "s6", 4, 0, eEncodingUint, eFormatHex, {dwarf_x22, dwarf_x22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x23", "s7", 4, 0, eEncodingUint, eFormatHex, {dwarf_x23, dwarf_x23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x24", "s8", 4, 0, eEncodingUint, eFormatHex, {dwarf_x24, dwarf_x24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x25", "s9", 4, 0, eEncodingUint, eFormatHex, {dwarf_x25, dwarf_x25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x26", "s10", 4, 0, eEncodingUint, eFormatHex, {dwarf_x26, dwarf_x26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x27", "s11", 4, 0, eEncodingUint, eFormatHex, {dwarf_x27, dwarf_x27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x28", "t3", 4, 0, eEncodingUint, eFormatHex, {dwarf_x28, dwarf_x28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x29", "t4", 4, 0, eEncodingUint, eFormatHex, {dwarf_x29, dwarf_x29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x30", "t5", 4, 0, eEncodingUint, eFormatHex, {dwarf_x30, dwarf_x30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x31", "t6", 4, 0, eEncodingUint, eFormatHex, {dwarf_x31, dwarf_x31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"pc", nullptr, 4, 0, eEncodingUint, eFormatHex, {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_REGNUM_GENERIC_PC, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f0", "ft0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f0, dwarf_f0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f1", "ft1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f1, dwarf_f1, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f2", "ft2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f2, dwarf_f2, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f3", "ft3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f3, dwarf_f3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f4", "ft4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f4, dwarf_f4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f5", "ft5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f5, dwarf_f5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f6", "ft6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f6, dwarf_f6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f7", "ft7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f7, dwarf_f7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f8", "fs0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f8, dwarf_f8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f9", "fs1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f9, dwarf_f9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f10", "fa0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f10, dwarf_f10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f11", "fa1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f11, dwarf_f11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f12", "fa2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f12, dwarf_f12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f13", "fa3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f13, dwarf_f13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f14", "fa4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f14, dwarf_f14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f15", "fa5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f15, dwarf_f15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f16", "fa6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f16, dwarf_f16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f17", "fa7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f17, dwarf_f17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f18", "fs2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f18, dwarf_f18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f19", "fs3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f19, dwarf_f19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f20", "fs4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f20, dwarf_f20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f21", "fs5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f21, dwarf_f21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f22", "fs6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f22, dwarf_f22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f23", "fs7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f23, dwarf_f23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f24", "fs8", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f24, dwarf_f24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f25", "fs9", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f25, dwarf_f25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f26", "fs10", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f26, dwarf_f26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f27", "fs11", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f27, dwarf_f27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f28", "ft8", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f28, dwarf_f28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f29", "ft9", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f29, dwarf_f29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f30", "ft10", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f30, dwarf_f30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f31", "ft11", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f31, dwarf_f31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ // clang-format on
+};
+
+static RegisterInfo g_register_infos_rv64[] = {
+ // clang-format off
+ {"x0", "zero", 8, 0, eEncodingUint, eFormatHex, {dwarf_x0, dwarf_x0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x1", "ra", 8, 0, eEncodingUint, eFormatHex, {dwarf_x1, dwarf_x1, LLDB_REGNUM_GENERIC_RA, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x2", "sp", 8, 0, eEncodingUint, eFormatHex, {dwarf_x2, dwarf_x2, LLDB_REGNUM_GENERIC_SP, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x3", "gp", 8, 0, eEncodingUint, eFormatHex, {dwarf_x3, dwarf_x3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x4", "tp", 8, 0, eEncodingUint, eFormatHex, {dwarf_x4, dwarf_x4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x5", "t0", 8, 0, eEncodingUint, eFormatHex, {dwarf_x5, dwarf_x5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x6", "t1", 8, 0, eEncodingUint, eFormatHex, {dwarf_x6, dwarf_x6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x7", "t2", 8, 0, eEncodingUint, eFormatHex, {dwarf_x7, dwarf_x7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x8", "s0", 8, 0, eEncodingUint, eFormatHex, {dwarf_x8, dwarf_x8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x9", "s1", 8, 0, eEncodingUint, eFormatHex, {dwarf_x9, dwarf_x9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x10", "a0", 8, 0, eEncodingUint, eFormatHex, {dwarf_x10, dwarf_x10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x11", "a1", 8, 0, eEncodingUint, eFormatHex, {dwarf_x11, dwarf_x11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x12", "a2", 8, 0, eEncodingUint, eFormatHex, {dwarf_x12, dwarf_x12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x13", "a3", 8, 0, eEncodingUint, eFormatHex, {dwarf_x13, dwarf_x13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x14", "a4", 8, 0, eEncodingUint, eFormatHex, {dwarf_x14, dwarf_x14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x15", "a5", 8, 0, eEncodingUint, eFormatHex, {dwarf_x15, dwarf_x15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x16", "a6", 8, 0, eEncodingUint, eFormatHex, {dwarf_x16, dwarf_x16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x17", "a7", 8, 0, eEncodingUint, eFormatHex, {dwarf_x17, dwarf_x17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x18", "s2", 8, 0, eEncodingUint, eFormatHex, {dwarf_x18, dwarf_x18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x19", "s3", 8, 0, eEncodingUint, eFormatHex, {dwarf_x19, dwarf_x19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x20", "s4", 8, 0, eEncodingUint, eFormatHex, {dwarf_x20, dwarf_x20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x21", "s5", 8, 0, eEncodingUint, eFormatHex, {dwarf_x21, dwarf_x21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x22", "s6", 8, 0, eEncodingUint, eFormatHex, {dwarf_x22, dwarf_x22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x23", "s7", 8, 0, eEncodingUint, eFormatHex, {dwarf_x23, dwarf_x23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x24", "s8", 8, 0, eEncodingUint, eFormatHex, {dwarf_x24, dwarf_x24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x25", "s9", 8, 0, eEncodingUint, eFormatHex, {dwarf_x25, dwarf_x25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x26", "s10", 8, 0, eEncodingUint, eFormatHex, {dwarf_x26, dwarf_x26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x27", "s11", 8, 0, eEncodingUint, eFormatHex, {dwarf_x27, dwarf_x27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x28", "t3", 8, 0, eEncodingUint, eFormatHex, {dwarf_x28, dwarf_x28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x29", "t4", 8, 0, eEncodingUint, eFormatHex, {dwarf_x29, dwarf_x29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x30", "t5", 8, 0, eEncodingUint, eFormatHex, {dwarf_x30, dwarf_x30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"x31", "t6", 8, 0, eEncodingUint, eFormatHex, {dwarf_x31, dwarf_x31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"pc", nullptr, 8, 0, eEncodingUint, eFormatHex, {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_REGNUM_GENERIC_PC, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f0", "ft0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f0, dwarf_f0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f1", "ft1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f1, dwarf_f1, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f2", "ft2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f2, dwarf_f2, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f3", "ft3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f3, dwarf_f3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f4", "ft4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f4, dwarf_f4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f5", "ft5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f5, dwarf_f5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f6", "ft6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f6, dwarf_f6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f7", "ft7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f7, dwarf_f7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f8", "fs0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f8, dwarf_f8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f9", "fs1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f9, dwarf_f9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f10", "fa0", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f10, dwarf_f10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f11", "fa1", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f11, dwarf_f11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f12", "fa2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f12, dwarf_f12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f13", "fa3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f13, dwarf_f13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f14", "fa4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f14, dwarf_f14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f15", "fa5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f15, dwarf_f15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f16", "fa6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f16, dwarf_f16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f17", "fa7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f17, dwarf_f17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f18", "fs2", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f18, dwarf_f18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f19", "fs3", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f19, dwarf_f19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f20", "fs4", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f20, dwarf_f20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f21", "fs5", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f21, dwarf_f21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f22", "fs6", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f22, dwarf_f22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f23", "fs7", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f23, dwarf_f23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f24", "fs8", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f24, dwarf_f24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f25", "fs9", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f25, dwarf_f25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f26", "fs10", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f26, dwarf_f26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f27", "fs11", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f27, dwarf_f27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f28", "ft8", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f28, dwarf_f28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f29", "ft9", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f29, dwarf_f29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f30", "ft10", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f30, dwarf_f30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ {"f31", "ft11", 4, 0, eEncodingIEEE754, eFormatFloat, {dwarf_f31, dwarf_f31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM}, nullptr, nullptr, nullptr, 0},
+ // clang-format on
+};
+
+static const uint32_t k_num_register_infos_rv32 =
+ llvm::array_lengthof(g_register_infos_rv32);
+static const uint32_t k_num_register_infos_rv64 =
+ llvm::array_lengthof(g_register_infos_rv64);
+static bool g_register_info_names_constified = false;
+
+static void ConstantifyTable(RegisterInfo *register_infos, uint32_t count) {
+ for (uint32_t i = 0; i < count; ++i) {
+ if (register_infos[i].name)
+ register_infos[i].name = ConstString(register_infos[i].name).GetCString();
+ if (register_infos[i].alt_name)
+ register_infos[i].alt_name =
+ ConstString(register_infos[i].alt_name).GetCString();
+ }
+}
+
+const lldb_private::RegisterInfo *
+ABISysV_riscv::GetRegisterInfoArray(uint32_t &count) {
+ // Make the C-string names and alt_names for the register infos into const
+ // C-string values by having the ConstString unique the names in the global
+ // constant C-string pool.
+ if (!g_register_info_names_constified) {
+ g_register_info_names_constified = true;
+ ConstantifyTable(g_register_infos_rv32, k_num_register_infos_rv32);
+ ConstantifyTable(g_register_infos_rv64, k_num_register_infos_rv64);
+ }
+
+ if (isRV64) {
+ count = k_num_register_infos_rv64;
+ return g_register_infos_rv64;
+ }
+ count = k_num_register_infos_rv32;
+ return g_register_infos_rv32;
+}
+
+bool ABISysV_riscv::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
+ unwind_plan.Clear();
+ unwind_plan.SetRegisterKind(eRegisterKindGeneric);
+
+ uint32_t pc_reg_num = LLDB_REGNUM_GENERIC_PC;
+ uint32_t sp_reg_num = LLDB_REGNUM_GENERIC_SP;
+ uint32_t ra_reg_num = LLDB_REGNUM_GENERIC_RA;
+
+ UnwindPlan::RowSP row(new UnwindPlan::Row);
+
+ // This defines the CFA as the current stack pointer.
+ row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
+ row->SetOffset(0);
+
+ // The previous frames pc is stored in the ra register.
+ row->SetRegisterLocationToRegister(pc_reg_num, ra_reg_num, true);
+
+ unwind_plan.AppendRow(row);
+ unwind_plan.SetSourceName("riscv default unwind plan");
+ unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
+ unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
+ return true;
+}
+
+ABISP
+ABISysV_riscv::CreateInstance(lldb::ProcessSP process_sp,
+ const ArchSpec &arch) {
+ if (arch.GetTriple().getArch() == llvm::Triple::riscv32 ||
+ arch.GetTriple().getArch() == llvm::Triple::riscv64) {
+ return ABISP(new ABISysV_riscv(process_sp, arch.GetTriple().getArch() ==
+ llvm::Triple::riscv64));
+ }
+ return ABISP();
+}
+
+void ABISysV_riscv::Initialize() {
+ PluginManager::RegisterPlugin(
+ GetPluginNameStatic(), "System V ABI for riscv targets", CreateInstance);
+}
+
+void ABISysV_riscv::Terminate() {
+ PluginManager::UnregisterPlugin(CreateInstance);
+}
+
+// PluginInterface protocol
+
+lldb_private::ConstString ABISysV_riscv::GetPluginNameStatic() {
+ static ConstString g_name("sysv-riscv");
+ return g_name;
+}
+
+lldb_private::ConstString ABISysV_riscv::GetPluginName() {
+ return GetPluginNameStatic();
+}
Index: lldb/source/Plugins/ABI/CMakeLists.txt
===================================================================
--- lldb/source/Plugins/ABI/CMakeLists.txt
+++ lldb/source/Plugins/ABI/CMakeLists.txt
@@ -8,6 +8,7 @@
add_subdirectory(SysV-s390x)
add_subdirectory(SysV-i386)
add_subdirectory(SysV-x86_64)
+add_subdirectory(SysV-riscv)
add_subdirectory(MacOSX-i386)
add_subdirectory(MacOSX-arm)
add_subdirectory(MacOSX-arm64)
Index: lldb/source/API/SystemInitializerFull.cpp
===================================================================
--- lldb/source/API/SystemInitializerFull.cpp
+++ lldb/source/API/SystemInitializerFull.cpp
@@ -32,6 +32,7 @@
#include "Plugins/ABI/SysV-mips64/ABISysV_mips64.h"
#include "Plugins/ABI/SysV-ppc/ABISysV_ppc.h"
#include "Plugins/ABI/SysV-ppc64/ABISysV_ppc64.h"
+#include "Plugins/ABI/SysV-riscv/ABISysV_riscv.h"
#include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
#include "Plugins/Architecture/Arm/ArchitectureArm.h"
@@ -185,6 +186,7 @@
ABISysV_ppc64::Initialize();
ABISysV_mips::Initialize();
ABISysV_mips64::Initialize();
+ ABISysV_riscv::Initialize();
ABISysV_s390x::Initialize();
ArchitectureArm::Initialize();
Index: lldb/include/lldb/Utility/ArchSpec.h
===================================================================
--- lldb/include/lldb/Utility/ArchSpec.h
+++ lldb/include/lldb/Utility/ArchSpec.h
@@ -180,6 +180,9 @@
eCore_hexagon_hexagonv4,
eCore_hexagon_hexagonv5,
+ eCore_riscv32,
+ eCore_riscv64,
+
eCore_uknownMach32,
eCore_uknownMach64,
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits