1257752Semaste//===-- RegisterContextFreeBSD_i386.cpp ------------------------*- C++ -*-===// 2257752Semaste// 3257752Semaste// The LLVM Compiler Infrastructure 4257752Semaste// 5257752Semaste// This file is distributed under the University of Illinois Open Source 6257752Semaste// License. See LICENSE.TXT for details. 7257752Semaste// 8257752Semaste//===---------------------------------------------------------------------===// 9257752Semaste 10257752Semaste#include "RegisterContextPOSIX_x86.h" 11257752Semaste#include "RegisterContextFreeBSD_i386.h" 12257752Semaste 13257752Semasteusing namespace lldb_private; 14257752Semasteusing namespace lldb; 15257752Semaste 16257752Semaste// http://svnweb.freebsd.org/base/head/sys/x86/include/reg.h 17257752Semastestruct GPR 18257752Semaste{ 19257752Semaste uint32_t fs; 20257752Semaste uint32_t es; 21257752Semaste uint32_t ds; 22257752Semaste uint32_t edi; 23257752Semaste uint32_t esi; 24257752Semaste uint32_t ebp; 25257752Semaste uint32_t isp; 26257752Semaste uint32_t ebx; 27257752Semaste uint32_t edx; 28257752Semaste uint32_t ecx; 29257752Semaste uint32_t eax; 30257752Semaste uint32_t trapno; 31257752Semaste uint32_t err; 32257752Semaste uint32_t eip; 33257752Semaste uint32_t cs; 34257752Semaste uint32_t eflags; 35257752Semaste uint32_t esp; 36257752Semaste uint32_t ss; 37257752Semaste uint32_t gs; 38257752Semaste}; 39257752Semaste 40269024Semastestruct dbreg { 41269024Semaste uint32_t dr[8]; /* debug registers */ 42269024Semaste /* Index 0-3: debug address registers */ 43269024Semaste /* Index 4-5: reserved */ 44269024Semaste /* Index 6: debug status */ 45269024Semaste /* Index 7: debug control */ 46269024Semaste}; 47257752Semaste 48269024Semaste 49269024Semaste#define DR_SIZE sizeof(uint32_t) 50269024Semaste#define DR_OFFSET(reg_index) \ 51269024Semaste (LLVM_EXTENSION offsetof(dbreg, dr[reg_index])) 52269024Semaste 53257752Semaste//--------------------------------------------------------------------------- 54257752Semaste// Include RegisterInfos_i386 to declare our g_register_infos_i386 structure. 55257752Semaste//--------------------------------------------------------------------------- 56257752Semaste#define DECLARE_REGISTER_INFOS_I386_STRUCT 57257752Semaste#include "RegisterInfos_i386.h" 58257752Semaste#undef DECLARE_REGISTER_INFOS_I386_STRUCT 59257752Semaste 60257752SemasteRegisterContextFreeBSD_i386::RegisterContextFreeBSD_i386(const ArchSpec &target_arch) : 61257752Semaste RegisterInfoInterface(target_arch) 62257752Semaste{ 63257752Semaste} 64257752Semaste 65257752SemasteRegisterContextFreeBSD_i386::~RegisterContextFreeBSD_i386() 66257752Semaste{ 67257752Semaste} 68257752Semaste 69257752Semastesize_t 70257752SemasteRegisterContextFreeBSD_i386::GetGPRSize() 71257752Semaste{ 72257752Semaste return sizeof(GPR); 73257752Semaste} 74257752Semaste 75257752Semasteconst RegisterInfo * 76257752SemasteRegisterContextFreeBSD_i386::GetRegisterInfo() 77257752Semaste{ 78257752Semaste switch (m_target_arch.GetCore()) 79257752Semaste { 80257752Semaste case ArchSpec::eCore_x86_32_i386: 81257752Semaste case ArchSpec::eCore_x86_32_i486: 82257752Semaste case ArchSpec::eCore_x86_32_i486sx: 83257752Semaste return g_register_infos_i386; 84257752Semaste default: 85257752Semaste assert(false && "Unhandled target architecture."); 86257752Semaste return NULL; 87257752Semaste } 88257752Semaste} 89