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