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