Path: blob/main/contrib/llvm-project/lldb/source/Plugins/Process/FreeBSDKernel/RegisterContextFreeBSDKernel_i386.cpp
96381 views
//===-- RegisterContextFreeBSDKernel_i386.cpp -----------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "RegisterContextFreeBSDKernel_i386.h"910#include "lldb/Target/Process.h"11#include "lldb/Target/Thread.h"12#include "lldb/Utility/RegisterValue.h"13#include "llvm/Support/Endian.h"1415using namespace lldb;16using namespace lldb_private;1718RegisterContextFreeBSDKernel_i386::RegisterContextFreeBSDKernel_i386(19Thread &thread, RegisterInfoInterface *register_info, lldb::addr_t pcb_addr)20: RegisterContextPOSIX_x86(thread, 0, register_info), m_pcb_addr(pcb_addr) {21}2223bool RegisterContextFreeBSDKernel_i386::ReadGPR() { return true; }2425bool RegisterContextFreeBSDKernel_i386::ReadFPR() { return true; }2627bool RegisterContextFreeBSDKernel_i386::WriteGPR() {28assert(0);29return false;30}3132bool RegisterContextFreeBSDKernel_i386::WriteFPR() {33assert(0);34return false;35}3637bool RegisterContextFreeBSDKernel_i386::ReadRegister(38const RegisterInfo *reg_info, RegisterValue &value) {39if (m_pcb_addr == LLDB_INVALID_ADDRESS)40return false;4142struct {43llvm::support::ulittle32_t edi;44llvm::support::ulittle32_t esi;45llvm::support::ulittle32_t ebp;46llvm::support::ulittle32_t esp;47llvm::support::ulittle32_t ebx;48llvm::support::ulittle32_t eip;49} pcb;5051Status error;52size_t rd =53m_thread.GetProcess()->ReadMemory(m_pcb_addr, &pcb, sizeof(pcb), error);54if (rd != sizeof(pcb))55return false;5657uint32_t reg = reg_info->kinds[lldb::eRegisterKindLLDB];58switch (reg) {59#define REG(x) \60case lldb_##x##_i386: \61value = pcb.x; \62break;6364REG(edi);65REG(esi);66REG(ebp);67REG(esp);68REG(eip);6970#undef REG7172default:73return false;74}7576return true;77}7879bool RegisterContextFreeBSDKernel_i386::WriteRegister(80const RegisterInfo *reg_info, const RegisterValue &value) {81return false;82}838485