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