Skip to content

Commit

Permalink
Remove use of multiple reg index enums by RegisterContextPOSIX_arm64
Browse files Browse the repository at this point in the history
Summary:
This patch removes dependence of RegisterContextPOSIX_arm64 on register number enums defined in lldb-arm64-register-enums.h.
RegisterContextPOSIX_arm64 makes use of helper functions to access register numbers defined in RegisterInfos_arm64.h via RegisterInfosPOSIX_arm64.

Reviewers: labath

Reviewed By: labath

Subscribers: emaste, kristof.beyls, arphaman, danielkiss, lldb-commits

Differential Revision: https://reviews.llvm.org/D83753
  • Loading branch information
omjavaid committed Jul 20, 2020
1 parent 9b7c43d commit 4923dca
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 15 deletions.
Expand Up @@ -24,7 +24,10 @@ RegisterContextPOSIXProcessMonitor_arm64::
RegisterContextPOSIXProcessMonitor_arm64(
lldb_private::Thread &thread,
std::unique_ptr<RegisterInfoPOSIX_arm64> register_info)
: RegisterContextPOSIX_arm64(thread, std::move(register_info)) {}
: RegisterContextPOSIX_arm64(thread, std::move(register_info)) {
::memset(&m_fpr, 0, sizeof m_gpr_arm64);
::memset(&m_fpr, 0, sizeof m_fpr);
}

ProcessMonitor &RegisterContextPOSIXProcessMonitor_arm64::GetMonitor() {
lldb::ProcessSP base = CalculateProcess();
Expand Down Expand Up @@ -226,11 +229,11 @@ bool RegisterContextPOSIXProcessMonitor_arm64::UpdateAfterBreakpoint() {
unsigned RegisterContextPOSIXProcessMonitor_arm64::GetRegisterIndexFromOffset(
unsigned offset) {
unsigned reg;
for (reg = 0; reg < k_num_registers_arm64; reg++) {
for (reg = 0; reg < GetRegisterCount(); reg++) {
if (GetRegisterInfo()[reg].byte_offset == offset)
break;
}
assert(reg < k_num_registers_arm64 && "Invalid register offset.");
assert(reg < GetRegisterCount() && "Invalid register offset.");
return reg;
}

Expand Down
Expand Up @@ -71,6 +71,11 @@ class RegisterContextPOSIXProcessMonitor_arm64
uint32_t NumSupportedHardwareWatchpoints();

private:
RegisterInfoPOSIX_arm64::GPR m_gpr_arm64; // 64-bit general purpose registers.

RegisterInfoPOSIX_arm64::FPU
m_fpr; // floating-point registers including extended register sets.

ProcessMonitor &GetMonitor();
};

Expand Down
Expand Up @@ -43,10 +43,7 @@ RegisterContextPOSIX_arm64::RegisterContextPOSIX_arm64(
lldb_private::Thread &thread,
std::unique_ptr<RegisterInfoPOSIX_arm64> register_info)
: lldb_private::RegisterContext(thread, 0),
m_register_info_up(std::move(register_info)) {

::memset(&m_fpr, 0, sizeof m_fpr);
}
m_register_info_up(std::move(register_info)) {}

RegisterContextPOSIX_arm64::~RegisterContextPOSIX_arm64() {}

Expand Down
Expand Up @@ -11,7 +11,6 @@

#include "RegisterInfoInterface.h"
#include "RegisterInfoPOSIX_arm64.h"
#include "lldb-arm64-register-enums.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Utility/Log.h"

Expand Down Expand Up @@ -46,13 +45,6 @@ class RegisterContextPOSIX_arm64 : public lldb_private::RegisterContext {
const char *GetRegisterName(unsigned reg);

protected:
uint64_t m_gpr_arm64[lldb_private::k_num_gpr_registers_arm64]; // 64-bit
// general
// purpose
// registers.

struct RegisterInfoPOSIX_arm64::FPU
m_fpr; // floating-point registers including extended register sets.
std::unique_ptr<RegisterInfoPOSIX_arm64> m_register_info_up;

virtual const lldb_private::RegisterInfo *GetRegisterInfo();
Expand Down

0 comments on commit 4923dca

Please sign in to comment.