brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 684176b Raw
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