brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 05c1f83 Raw
105 lines · cpp
1//===-- RegisterContextOpenBSD_x86_64.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 "RegisterContextOpenBSD_x86_64.h"10#include "RegisterContextPOSIX_x86.h"11#include <vector>12 13using namespace lldb_private;14using namespace lldb;15 16// /usr/include/machine/reg.h17typedef struct _GPR {18  uint64_t rdi;19  uint64_t rsi;20  uint64_t rdx;21  uint64_t rcx;22  uint64_t r8;23  uint64_t r9;24  uint64_t r10;25  uint64_t r11;26  uint64_t r12;27  uint64_t r13;28  uint64_t r14;29  uint64_t r15;30  uint64_t rbp;31  uint64_t rbx;32  uint64_t rax;33  uint64_t rsp;34  uint64_t rip;35  uint64_t rflags;36  uint64_t cs;37  uint64_t ss;38  uint64_t ds;39  uint64_t es;40  uint64_t fs;41  uint64_t gs;42} GPR;43 44struct DBG {45  uint64_t dr[16]; /* debug registers */46                   /* Index 0-3: debug address registers */47                   /* Index 4-5: reserved */48                   /* Index 6: debug status */49                   /* Index 7: debug control */50                   /* Index 8-15: reserved */51};52 53struct UserArea {54  GPR gpr;55  FPR fpr;56  DBG dbg;57};58 59#define DR_OFFSET(reg_index) (LLVM_EXTENSION offsetof(DBG, dr[reg_index]))60 61// Include RegisterInfos_x86_64 to declare our g_register_infos_x86_6462// structure.63#define DECLARE_REGISTER_INFOS_X86_64_STRUCT64#include "RegisterInfos_x86_64.h"65#undef DECLARE_REGISTER_INFOS_X86_64_STRUCT66 67static const RegisterInfo *68PrivateGetRegisterInfoPtr(const lldb_private::ArchSpec &target_arch) {69  switch (target_arch.GetMachine()) {70  case llvm::Triple::x86_64:71    return g_register_infos_x86_64;72  default:73    assert(false && "Unhandled target architecture.");74    return nullptr;75  }76}77 78static uint32_t79PrivateGetRegisterCount(const lldb_private::ArchSpec &target_arch) {80  switch (target_arch.GetMachine()) {81  case llvm::Triple::x86_64:82    return static_cast<uint32_t>(sizeof(g_register_infos_x86_64) /83                                 sizeof(g_register_infos_x86_64[0]));84  default:85    assert(false && "Unhandled target architecture.");86    return 0;87  }88}89 90RegisterContextOpenBSD_x86_64::RegisterContextOpenBSD_x86_64(91    const ArchSpec &target_arch)92    : lldb_private::RegisterInfoInterface(target_arch),93      m_register_info_p(PrivateGetRegisterInfoPtr(target_arch)),94      m_register_count(PrivateGetRegisterCount(target_arch)) {}95 96size_t RegisterContextOpenBSD_x86_64::GetGPRSize() const { return sizeof(GPR); }97 98const RegisterInfo *RegisterContextOpenBSD_x86_64::GetRegisterInfo() const {99  return m_register_info_p;100}101 102uint32_t RegisterContextOpenBSD_x86_64::GetRegisterCount() const {103  return m_register_count;104}105