99 lines · cpp
1//===-- RegisterContextPOSIX_arm.cpp --------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include <cerrno>10#include <cstdint>11#include <cstring>12 13#include "lldb/Target/Process.h"14#include "lldb/Target/Target.h"15#include "lldb/Target/Thread.h"16#include "lldb/Utility/DataBufferHeap.h"17#include "lldb/Utility/DataExtractor.h"18#include "lldb/Utility/Endian.h"19#include "lldb/Utility/RegisterValue.h"20#include "lldb/Utility/Scalar.h"21#include "llvm/Support/Compiler.h"22 23#include "RegisterContextPOSIX_arm.h"24 25using namespace lldb;26using namespace lldb_private;27 28bool RegisterContextPOSIX_arm::IsGPR(unsigned reg) {29 if (m_register_info_up->GetRegisterSetFromRegisterIndex(reg) ==30 RegisterInfoPOSIX_arm::GPRegSet)31 return true;32 return false;33}34 35bool RegisterContextPOSIX_arm::IsFPR(unsigned reg) {36 if (m_register_info_up->GetRegisterSetFromRegisterIndex(reg) ==37 RegisterInfoPOSIX_arm::FPRegSet)38 return true;39 return false;40}41 42RegisterContextPOSIX_arm::RegisterContextPOSIX_arm(43 lldb_private::Thread &thread,44 std::unique_ptr<RegisterInfoPOSIX_arm> register_info)45 : lldb_private::RegisterContext(thread, 0),46 m_register_info_up(std::move(register_info)) {}47 48RegisterContextPOSIX_arm::~RegisterContextPOSIX_arm() = default;49 50void RegisterContextPOSIX_arm::Invalidate() {}51 52void RegisterContextPOSIX_arm::InvalidateAllRegisters() {}53 54unsigned RegisterContextPOSIX_arm::GetRegisterOffset(unsigned reg) {55 return m_register_info_up->GetRegisterInfo()[reg].byte_offset;56}57 58unsigned RegisterContextPOSIX_arm::GetRegisterSize(unsigned reg) {59 return m_register_info_up->GetRegisterInfo()[reg].byte_size;60}61 62size_t RegisterContextPOSIX_arm::GetRegisterCount() {63 return m_register_info_up->GetRegisterCount();64}65 66size_t RegisterContextPOSIX_arm::GetGPRSize() {67 return m_register_info_up->GetGPRSize();68}69 70const lldb_private::RegisterInfo *RegisterContextPOSIX_arm::GetRegisterInfo() {71 // Commonly, this method is overridden and g_register_infos is copied and72 // specialized. So, use GetRegisterInfo() rather than g_register_infos in73 // this scope.74 return m_register_info_up->GetRegisterInfo();75}76 77const lldb_private::RegisterInfo *78RegisterContextPOSIX_arm::GetRegisterInfoAtIndex(size_t reg) {79 if (reg < GetRegisterCount())80 return &GetRegisterInfo()[reg];81 82 return nullptr;83}84 85size_t RegisterContextPOSIX_arm::GetRegisterSetCount() {86 return m_register_info_up->GetRegisterSetCount();87}88 89const lldb_private::RegisterSet *90RegisterContextPOSIX_arm::GetRegisterSet(size_t set) {91 return m_register_info_up->GetRegisterSet(set);92}93 94const char *RegisterContextPOSIX_arm::GetRegisterName(unsigned reg) {95 if (reg < GetRegisterCount())96 return GetRegisterInfo()[reg].name;97 return nullptr;98}99