[Lldb-commits] [PATCH] D82855: [LLDB] Send SVE vg register in custom expedited registerset
Muhammad Omair Javaid via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Jun 30 03:46:35 PDT 2020
omjavaid created this revision.
omjavaid added a reviewer: labath.
Herald added subscribers: kristof.beyls, tschuett.
Herald added a reviewer: rengolin.
omjavaid added parent revisions: D79699: Add ptrace register access for AArch64 SVE registers, D77047: AArch64 SVE register infos and core file support.
This patch ovverides GetExpeditedRegisterSet for NativeRegisterContextLinux_arm64 to send vector granule register in expedited register set if SVE mode is selected.
https://reviews.llvm.org/D82855
Files:
lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
lldb/source/Plugins/Process/Utility/lldb-arm64-register-enums.h
Index: lldb/source/Plugins/Process/Utility/lldb-arm64-register-enums.h
===================================================================
--- lldb/source/Plugins/Process/Utility/lldb-arm64-register-enums.h
+++ lldb/source/Plugins/Process/Utility/lldb-arm64-register-enums.h
@@ -315,6 +315,7 @@
k_last_sve_arm64 = sve_ffr_arm64,
k_num_registers_arm64_sve,
+ k_num_expedited_registers_arm64_sve = gpr_cpsr_arm64 - gpr_x0_arm64 + 2,
k_num_sve_registers_arm64 = k_last_sve_arm64 - k_first_sve_arm64 + 1
};
Index: lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
===================================================================
--- lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
+++ lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.h
@@ -58,6 +58,8 @@
void ConfigureRegisterContext() override;
+ const RegisterSet *GetExpeditedRegisterSet() const override;
+
// Hardware breakpoints/watchpoint management functions
uint32_t NumSupportedHardwareBreakpoints() override;
Index: lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
===================================================================
--- lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
+++ lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
@@ -127,6 +127,23 @@
enum { k_num_register_sets = 3 };
}
+// ARM64 expedited expedited register set.
+static const uint32_t g_expedited_regnums_arm64_sve[] = {
+ gpr_x0_arm64, gpr_x1_arm64, gpr_x2_arm64, gpr_x3_arm64,
+ gpr_x4_arm64, gpr_x5_arm64, gpr_x6_arm64, gpr_x7_arm64,
+ gpr_x8_arm64, gpr_x9_arm64, gpr_x10_arm64, gpr_x11_arm64,
+ gpr_x12_arm64, gpr_x13_arm64, gpr_x14_arm64, gpr_x15_arm64,
+ gpr_x16_arm64, gpr_x17_arm64, gpr_x18_arm64, gpr_x19_arm64,
+ gpr_x20_arm64, gpr_x21_arm64, gpr_x22_arm64, gpr_x23_arm64,
+ gpr_x24_arm64, gpr_x25_arm64, gpr_x26_arm64, gpr_x27_arm64,
+ gpr_x28_arm64, gpr_fp_arm64, gpr_lr_arm64, gpr_sp_arm64,
+ gpr_pc_arm64, gpr_cpsr_arm64, sve_vg_arm64, LLDB_INVALID_REGNUM};
+static_assert(
+ ((sizeof g_expedited_regnums_arm64_sve /
+ sizeof g_expedited_regnums_arm64_sve[0]) -
+ 1) == k_num_expedited_registers_arm64_sve,
+ "g_expedited_regnums_arm64_sve has wrong number of register infos");
+
// Register sets for ARM64.
static const RegisterSet g_reg_sets_arm64[k_num_register_sets] = {
{"General Purpose Registers", "gpr", k_num_gpr_registers_arm64,
@@ -135,6 +152,11 @@
g_fpu_regnums_arm64},
{"SVE Registers", "sve", k_num_sve_registers_arm64, g_sve_regnums_arm64}};
+// AArch64 SVE expedited registers set
+static const RegisterSet g_expedited_reg_sets_arm64_sve = {
+ "General Purpose Registers", "expedited",
+ k_num_expedited_registers_arm64_sve, g_expedited_regnums_arm64_sve};
+
std::unique_ptr<NativeRegisterContextLinux>
NativeRegisterContextLinux::CreateHostNativeRegisterContextLinux(
const ArchSpec &target_arch, NativeThreadProtocol &native_thread) {
@@ -1221,4 +1243,13 @@
return m_sve_ptrace_payload.data();
}
+ const RegisterSet *
+ NativeRegisterContextLinux_arm64::GetExpeditedRegisterSet() const {
+ if (m_sve_state == SVE_STATE::SVE_STATE_FPSIMD ||
+ m_sve_state == SVE_STATE::SVE_STATE_FULL)
+ return &g_expedited_reg_sets_arm64_sve;
+ else
+ return &g_reg_sets_arm64[0];
+ }
+
#endif // defined (__arm64__) || defined (__aarch64__)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82855.274396.patch
Type: text/x-patch
Size: 3486 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200630/032b2468/attachment-0001.bin>
More information about the lldb-commits
mailing list