brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · ddf6cc5 Raw
78 lines · cpp
1//===-- RegisterContextOpenBSD_i386.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_i386.h"10#include "RegisterContextPOSIX_x86.h"11 12using namespace lldb_private;13using namespace lldb;14 15// /usr/include/machine/reg.h16struct GPR {17  uint32_t eax;18  uint32_t ecx;19  uint32_t edx;20  uint32_t ebx;21  uint32_t esp;22  uint32_t ebp;23  uint32_t esi;24  uint32_t edi;25  uint32_t eip;26  uint32_t eflags;27  uint32_t cs;28  uint32_t ss;29  uint32_t ds;30  uint32_t es;31  uint32_t fs;32  uint32_t gs;33};34 35struct dbreg {36  uint32_t dr[8]; /* debug registers */37                  /* Index 0-3: debug address registers */38                  /* Index 4-5: reserved */39                  /* Index 6: debug status */40                  /* Index 7: debug control */41};42 43using FPR_i386 = FXSAVE;44 45struct UserArea {46  GPR gpr;47  FPR_i386 i387;48};49 50#define DR_SIZE sizeof(uint32_t)51#define DR_OFFSET(reg_index) (LLVM_EXTENSION offsetof(dbreg, dr[reg_index]))52 53// Include RegisterInfos_i386 to declare our g_register_infos_i386 structure.54#define DECLARE_REGISTER_INFOS_I386_STRUCT55#include "RegisterInfos_i386.h"56#undef DECLARE_REGISTER_INFOS_I386_STRUCT57 58RegisterContextOpenBSD_i386::RegisterContextOpenBSD_i386(59    const ArchSpec &target_arch)60    : RegisterInfoInterface(target_arch) {}61 62size_t RegisterContextOpenBSD_i386::GetGPRSize() const { return sizeof(GPR); }63 64const RegisterInfo *RegisterContextOpenBSD_i386::GetRegisterInfo() const {65  switch (GetTargetArchitecture().GetMachine()) {66  case llvm::Triple::x86:67    return g_register_infos_i386;68  default:69    assert(false && "Unhandled target architecture.");70    return nullptr;71  }72}73 74uint32_t RegisterContextOpenBSD_i386::GetRegisterCount() const {75  return static_cast<uint32_t>(sizeof(g_register_infos_i386) /76                               sizeof(g_register_infos_i386[0]));77}78