brintos

brintos / llvm-project-archived public Read only

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