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