brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · fde85c9 Raw
84 lines · cpp
1//===-- RegisterContextFreeBSDKernel_i386.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 "RegisterContextFreeBSDKernel_i386.h"10 11#include "lldb/Target/Process.h"12#include "lldb/Target/Thread.h"13#include "lldb/Utility/RegisterValue.h"14#include "llvm/Support/Endian.h"15 16using namespace lldb;17using namespace lldb_private;18 19RegisterContextFreeBSDKernel_i386::RegisterContextFreeBSDKernel_i386(20    Thread &thread, RegisterInfoInterface *register_info, lldb::addr_t pcb_addr)21    : RegisterContextPOSIX_x86(thread, 0, register_info), m_pcb_addr(pcb_addr) {22}23 24bool RegisterContextFreeBSDKernel_i386::ReadGPR() { return true; }25 26bool RegisterContextFreeBSDKernel_i386::ReadFPR() { return true; }27 28bool RegisterContextFreeBSDKernel_i386::WriteGPR() {29  assert(0);30  return false;31}32 33bool RegisterContextFreeBSDKernel_i386::WriteFPR() {34  assert(0);35  return false;36}37 38bool RegisterContextFreeBSDKernel_i386::ReadRegister(39    const RegisterInfo *reg_info, RegisterValue &value) {40  if (m_pcb_addr == LLDB_INVALID_ADDRESS)41    return false;42 43  struct {44    llvm::support::ulittle32_t edi;45    llvm::support::ulittle32_t esi;46    llvm::support::ulittle32_t ebp;47    llvm::support::ulittle32_t esp;48    llvm::support::ulittle32_t ebx;49    llvm::support::ulittle32_t eip;50  } pcb;51 52  Status error;53  size_t rd =54      m_thread.GetProcess()->ReadMemory(m_pcb_addr, &pcb, sizeof(pcb), error);55  if (rd != sizeof(pcb))56    return false;57 58  uint32_t reg = reg_info->kinds[lldb::eRegisterKindLLDB];59  switch (reg) {60#define REG(x)                                                                 \61  case lldb_##x##_i386:                                                      \62    value = pcb.x;                                                             \63    break;64 65    REG(edi);66    REG(esi);67    REG(ebp);68    REG(esp);69    REG(eip);70 71#undef REG72 73  default:74    return false;75  }76 77  return true;78}79 80bool RegisterContextFreeBSDKernel_i386::WriteRegister(81    const RegisterInfo *reg_info, const RegisterValue &value) {82  return false;83}84