1//===-- RegisterContextKDP_i386.cpp -----------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10 11// C Includes 12// C++ Includes 13// Other libraries and framework includes 14// Project includes 15#include "RegisterContextKDP_i386.h" 16#include "ProcessKDP.h" 17#include "ThreadKDP.h" 18 19using namespace lldb; 20using namespace lldb_private; 21 22 23RegisterContextKDP_i386::RegisterContextKDP_i386 (ThreadKDP &thread, uint32_t concrete_frame_idx) : 24 RegisterContextDarwin_i386 (thread, concrete_frame_idx), 25 m_kdp_thread (thread) 26{ 27} 28 29RegisterContextKDP_i386::~RegisterContextKDP_i386() 30{ 31} 32 33int 34RegisterContextKDP_i386::DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr) 35{ 36 ProcessSP process_sp (CalculateProcess()); 37 if (process_sp) 38 { 39 Error error; 40 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, GPRRegSet, &gpr, sizeof(gpr), error)) 41 { 42 if (error.Success()) 43 return 0; 44 } 45 } 46 return -1; 47} 48 49int 50RegisterContextKDP_i386::DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu) 51{ 52 ProcessSP process_sp (CalculateProcess()); 53 if (process_sp) 54 { 55 Error error; 56 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, FPURegSet, &fpu, sizeof(fpu), error)) 57 { 58 if (error.Success()) 59 return 0; 60 } 61 } 62 return -1; 63} 64 65int 66RegisterContextKDP_i386::DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc) 67{ 68 ProcessSP process_sp (CalculateProcess()); 69 if (process_sp) 70 { 71 Error error; 72 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestReadRegisters (tid, EXCRegSet, &exc, sizeof(exc), error)) 73 { 74 if (error.Success()) 75 return 0; 76 } 77 } 78 return -1; 79} 80 81int 82RegisterContextKDP_i386::DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr) 83{ 84 ProcessSP process_sp (CalculateProcess()); 85 if (process_sp) 86 { 87 Error error; 88 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, GPRRegSet, &gpr, sizeof(gpr), error)) 89 { 90 if (error.Success()) 91 return 0; 92 } 93 } 94 return -1; 95} 96 97int 98RegisterContextKDP_i386::DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu) 99{ 100 ProcessSP process_sp (CalculateProcess()); 101 if (process_sp) 102 { 103 Error error; 104 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, FPURegSet, &fpu, sizeof(fpu), error)) 105 { 106 if (error.Success()) 107 return 0; 108 } 109 } 110 return -1; 111} 112 113int 114RegisterContextKDP_i386::DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc) 115{ 116 ProcessSP process_sp (CalculateProcess()); 117 if (process_sp) 118 { 119 Error error; 120 if (static_cast<ProcessKDP *>(process_sp.get())->GetCommunication().SendRequestWriteRegisters (tid, EXCRegSet, &exc, sizeof(exc), error)) 121 { 122 if (error.Success()) 123 return 0; 124 } 125 } 126 return -1; 127} 128 129 130