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