brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 9c47c22 Raw
118 lines · cpp
1//===-- RegisterContextKDP_x86_64.cpp -------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "RegisterContextKDP_x86_64.h"10#include "ProcessKDP.h"11#include "ThreadKDP.h"12 13using namespace lldb;14using namespace lldb_private;15 16RegisterContextKDP_x86_64::RegisterContextKDP_x86_64(17    ThreadKDP &thread, uint32_t concrete_frame_idx)18    : RegisterContextDarwin_x86_64(thread, concrete_frame_idx),19      m_kdp_thread(thread) {}20 21RegisterContextKDP_x86_64::~RegisterContextKDP_x86_64() = default;22 23int RegisterContextKDP_x86_64::DoReadGPR(lldb::tid_t tid, int flavor,24                                         GPR &gpr) {25  ProcessSP process_sp(CalculateProcess());26  if (process_sp) {27    Status error;28    if (static_cast<ProcessKDP *>(process_sp.get())29            ->GetCommunication()30            .SendRequestReadRegisters(tid, GPRRegSet, &gpr, sizeof(gpr),31                                      error)) {32      if (error.Success())33        return 0;34    }35  }36  return -1;37}38 39int RegisterContextKDP_x86_64::DoReadFPU(lldb::tid_t tid, int flavor,40                                         FPU &fpu) {41  ProcessSP process_sp(CalculateProcess());42  if (process_sp) {43    Status error;44    if (static_cast<ProcessKDP *>(process_sp.get())45            ->GetCommunication()46            .SendRequestReadRegisters(tid, FPURegSet, &fpu, sizeof(fpu),47                                      error)) {48      if (error.Success())49        return 0;50    }51  }52  return -1;53}54 55int RegisterContextKDP_x86_64::DoReadEXC(lldb::tid_t tid, int flavor,56                                         EXC &exc) {57  ProcessSP process_sp(CalculateProcess());58  if (process_sp) {59    Status error;60    if (static_cast<ProcessKDP *>(process_sp.get())61            ->GetCommunication()62            .SendRequestReadRegisters(tid, EXCRegSet, &exc, sizeof(exc),63                                      error)) {64      if (error.Success())65        return 0;66    }67  }68  return -1;69}70 71int RegisterContextKDP_x86_64::DoWriteGPR(lldb::tid_t tid, int flavor,72                                          const GPR &gpr) {73  ProcessSP process_sp(CalculateProcess());74  if (process_sp) {75    Status error;76    if (static_cast<ProcessKDP *>(process_sp.get())77            ->GetCommunication()78            .SendRequestWriteRegisters(tid, GPRRegSet, &gpr, sizeof(gpr),79                                       error)) {80      if (error.Success())81        return 0;82    }83  }84  return -1;85}86 87int RegisterContextKDP_x86_64::DoWriteFPU(lldb::tid_t tid, int flavor,88                                          const FPU &fpu) {89  ProcessSP process_sp(CalculateProcess());90  if (process_sp) {91    Status error;92    if (static_cast<ProcessKDP *>(process_sp.get())93            ->GetCommunication()94            .SendRequestWriteRegisters(tid, FPURegSet, &fpu, sizeof(fpu),95                                       error)) {96      if (error.Success())97        return 0;98    }99  }100  return -1;101}102 103int RegisterContextKDP_x86_64::DoWriteEXC(lldb::tid_t tid, int flavor,104                                          const EXC &exc) {105  ProcessSP process_sp(CalculateProcess());106  if (process_sp) {107    Status error;108    if (static_cast<ProcessKDP *>(process_sp.get())109            ->GetCommunication()110            .SendRequestWriteRegisters(tid, EXCRegSet, &exc, sizeof(exc),111                                       error)) {112      if (error.Success())113        return 0;114    }115  }116  return -1;117}118