10fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//===-- RegisterContextDarwin_i386.h ----------------------------*- C++ -*-===//
20fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//
30fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//                     The LLVM Compiler Infrastructure
40fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//
50fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// This file is distributed under the University of Illinois Open Source
60fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// License. See LICENSE.TXT for details.
70fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//
80fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton//===----------------------------------------------------------------------===//
90fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
100fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton#ifndef liblldb_RegisterContextDarwin_i386_h_
110fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton#define liblldb_RegisterContextDarwin_i386_h_
120fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
130fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// C Includes
140fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// C++ Includes
150fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// Other libraries and framework includes
160fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton// Project includes
170fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton#include "lldb/lldb-private.h"
180fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton#include "lldb/Target/RegisterContext.h"
190fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
200fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Claytonclass RegisterContextDarwin_i386 : public lldb_private::RegisterContext
210fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton{
220fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Claytonpublic:
230fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
240fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    RegisterContextDarwin_i386(lldb_private::Thread &thread,
250fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                             uint32_t concrete_frame_idx);
260fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
270fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual
280fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ~RegisterContextDarwin_i386();
290fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
300fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual void
310fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    InvalidateAllRegisters ();
320fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
330fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual size_t
340fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetRegisterCount ();
350fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
360fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual const lldb_private::RegisterInfo *
3736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetRegisterInfoAtIndex (size_t reg);
380fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
390fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual size_t
400fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetRegisterSetCount ();
410fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
420fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual const lldb_private::RegisterSet *
4336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetRegisterSet (size_t set);
440fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
450fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual bool
460fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadRegister (const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value);
470fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
480fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual bool
490fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteRegister (const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value);
500fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
510fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual bool
520fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadAllRegisterValues (lldb::DataBufferSP &data_sp);
530fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
540fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual bool
550fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteAllRegisterValues (const lldb::DataBufferSP &data_sp);
560fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
570fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual uint32_t
580fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num);
590fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
600fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual bool
610fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    HardwareSingleStep (bool enable);
620fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
630fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    struct GPR
640fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
650fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t eax;
660fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t ebx;
670fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t ecx;
680fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t edx;
690fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t edi;
700fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t esi;
710fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t ebp;
720fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t esp;
730fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t ss;
740fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t eflags;
750fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t eip;
760fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t cs;
770fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t ds;
780fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t es;
790fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t fs;
800fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t gs;
810fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
820fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
830fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    struct MMSReg
840fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
850fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t bytes[10];
860fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t pad[6];
870fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
880fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
890fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    struct XMMReg
900fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
910fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t bytes[16];
920fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
930fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
940fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    struct FPU
950fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
960fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t    pad[2];
970fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    fcw;
980fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    fsw;
990fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t     ftw;
1000fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t     pad1;
1010fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    fop;
1020fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t    ip;
1030fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    cs;
1040fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    pad2;
1050fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t    dp;
1060fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    ds;
1070fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint16_t    pad3;
1080fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t    mxcsr;
1090fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t    mxcsrmask;
1100fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        MMSReg      stmm[8];
1110fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        XMMReg      xmm[8];
1120fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint8_t     pad4[14*16];
1130fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        int         pad5;
1140fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
1150fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1160fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    struct EXC
1170fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1180fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t trapno;
1190fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t err;
1200fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        uint32_t faultvaddr;
1210fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
1220fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1230fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Claytonprotected:
1240fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1250fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    enum
1260fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1270fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        GPRRegSet = 1,
1280fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        FPURegSet = 2,
1290fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        EXCRegSet = 3
1300fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
1310fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1320fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    enum
1330fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1340fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        GPRWordCount = sizeof(GPR)/sizeof(uint32_t),
1350fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        FPUWordCount = sizeof(FPU)/sizeof(uint32_t),
1360fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        EXCWordCount = sizeof(EXC)/sizeof(uint32_t)
1370fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
1380fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1390fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    enum
1400fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1410fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        Read = 0,
1420fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        Write = 1,
1430fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        kNumErrors = 2
1440fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    };
1450fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1460fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GPR gpr;
1470fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    FPU fpu;
1480fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    EXC exc;
1490fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int gpr_errs[2]; // Read/Write errors
1500fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int fpu_errs[2]; // Read/Write errors
1510fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int exc_errs[2]; // Read/Write errors
1520fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1530fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    void
1540fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    InvalidateAllRegisterStates()
1550fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1560fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        SetError (GPRRegSet, Read, -1);
1570fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        SetError (FPURegSet, Read, -1);
1580fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        SetError (EXCRegSet, Read, -1);
1590fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    }
1600fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1610fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
1620fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetError (int flavor, uint32_t err_idx) const
1630fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1640fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        if (err_idx < kNumErrors)
1650fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        {
1660fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            switch (flavor)
1670fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            {
1680fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            // When getting all errors, just OR all values together to see if
1690fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            // we got any kind of error.
1700fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case GPRRegSet:    return gpr_errs[err_idx];
1710fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case FPURegSet:    return fpu_errs[err_idx];
1720fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case EXCRegSet:    return exc_errs[err_idx];
1730fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            default: break;
1740fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            }
1750fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        }
1760fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        return -1;
1770fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    }
1780fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1790fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    bool
1800fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    SetError (int flavor, uint32_t err_idx, int err)
1810fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
1820fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        if (err_idx < kNumErrors)
1830fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        {
1840fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            switch (flavor)
1850fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            {
1860fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case GPRRegSet:
1870fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                gpr_errs[err_idx] = err;
1880fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                return true;
1890fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1900fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case FPURegSet:
1910fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                fpu_errs[err_idx] = err;
1920fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                return true;
1930fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1940fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            case EXCRegSet:
1950fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                exc_errs[err_idx] = err;
1960fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton                return true;
1970fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
1980fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            default: break;
1990fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton            }
2000fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        }
2010fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        return false;
2020fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    }
2030fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2040fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    bool
2050fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    RegisterSetIsCached (int set) const
2060fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    {
2070fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton        return GetError(set, Read) == 0;
2080fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    }
2090fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2100fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    void
2110fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    LogGPR (lldb_private::Log *log, const char *title);
2120fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2130fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2140fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadGPR (bool force);
2150fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2160fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2170fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadFPU (bool force);
2180fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2190fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2200fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadEXC (bool force);
2210fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2220fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2230fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteGPR ();
2240fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2250fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2260fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteFPU ();
2270fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2280fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2290fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteEXC ();
2300fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2310fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    // Subclasses override these to do the actual reading.
2320fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    virtual int
233b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr) = 0;
2340fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
235b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    virtual int
236b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu) = 0;
2370fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
238b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    virtual int
239b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc) = 0;
2400fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
241b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    virtual int
242b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr) = 0;
2430fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
244b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    virtual int
245b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu) = 0;
2460fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
247b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    virtual int
248b5431d08d0dfb961ea0833ec485f11b9aa3541d1Greg Clayton    DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc) = 0;
2490fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2500fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2510fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    ReadRegisterSet (uint32_t set, bool force);
2520fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2530fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    int
2540fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    WriteRegisterSet (uint32_t set);
2550fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2560fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    static uint32_t
2570fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetRegisterNumber (uint32_t reg_kind, uint32_t reg_num);
2580fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2590fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    static int
2600fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetSetForNativeRegNum (int reg_num);
2610fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2620fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    static size_t
2630fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetRegisterInfosCount ();
2640fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2650fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    static const lldb_private::RegisterInfo *
2660fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton    GetRegisterInfos ();
2670fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton};
2680fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton
2690fa512447e00da09d300fbabd18b5ce94f52fdaaGreg Clayton#endif  // liblldb_RegisterContextDarwin_i386_h_
270