Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/minidump/RegisterContextMinidump_ARM64.h
96386 views
//===-- RegisterContextMinidump_ARM64.h -------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_REGISTERCONTEXTMINIDUMP_ARM64_H9#define LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_REGISTERCONTEXTMINIDUMP_ARM64_H1011#include "MinidumpTypes.h"1213#include "Plugins/Process/Utility/RegisterInfoInterface.h"14#include "lldb/Target/RegisterContext.h"1516#include "llvm/ADT/ArrayRef.h"17#include "llvm/ADT/BitmaskEnum.h"1819// C includes20// C++ includes2122namespace lldb_private {2324namespace minidump {2526LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();2728class RegisterContextMinidump_ARM64 : public lldb_private::RegisterContext {29public:30RegisterContextMinidump_ARM64(lldb_private::Thread &thread,31const DataExtractor &data);3233~RegisterContextMinidump_ARM64() override = default;3435void InvalidateAllRegisters() override {36// Do nothing... registers are always valid...37}3839size_t GetRegisterCount() override;4041const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override;4243size_t GetRegisterSetCount() override;4445const lldb_private::RegisterSet *GetRegisterSet(size_t set) override;4647const char *GetRegisterName(unsigned reg);4849bool ReadRegister(const RegisterInfo *reg_info,50RegisterValue ®_value) override;5152bool WriteRegister(const RegisterInfo *reg_info,53const RegisterValue ®_value) override;5455uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind,56uint32_t num) override;5758// Reference: see breakpad/crashpad source59struct Context {60uint64_t context_flags;61uint64_t x[32];62uint64_t pc;63uint32_t cpsr;64uint32_t fpsr;65uint32_t fpcr;66uint8_t v[32 * 16]; // 32 128-bit floating point registers67};6869enum class Flags : uint32_t {70ARM64_Flag = 0x80000000,71Integer = ARM64_Flag | 0x00000002,72FloatingPoint = ARM64_Flag | 0x00000004,73LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ FloatingPoint)74};7576protected:77Context m_regs;78};7980} // end namespace minidump81} // end namespace lldb_private82#endif // LLDB_SOURCE_PLUGINS_PROCESS_MINIDUMP_REGISTERCONTEXTMINIDUMP_ARM64_H838485