ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
GDBSystemWrapper.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
14#include <stdlib.h>
15
17
18using namespace etiss::plugin::gdb;
19
26
28
30{
31 auto gdbsys = (ETISS_GDBSystem *)handle;
32 etiss_int32 exc = gdbsys->sys_->iread(gdbsys->sys_->handle, cpu, addr, length);
33 return gdbsys->server_->postMemAccessCallback(exc);
34}
35static etiss_int32 gdb_system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
37{
38 auto gdbsys = (ETISS_GDBSystem *)handle;
39 etiss_int32 exc = gdbsys->sys_->iwrite(gdbsys->sys_->handle, cpu, addr, buffer, length);
40 return gdbsys->server_->postMemAccessCallback(exc);
41}
42
43static etiss_int32 gdb_system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
45{
46 auto gdbsys = (ETISS_GDBSystem *)handle;
47 gdbsys->server_->preDReadCallback(addr);
48 etiss_int32 exc = gdbsys->sys_->dread(gdbsys->sys_->handle, cpu, addr, buffer, length);
49 return gdbsys->server_->postMemAccessCallback(exc);
50}
51static etiss_int32 gdb_system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
53{
54 auto gdbsys = (ETISS_GDBSystem *)handle;
55 gdbsys->server_->preDWriteCallback(addr);
56 etiss_int32 exc = gdbsys->sys_->dwrite(gdbsys->sys_->handle, cpu, addr, buffer, length);
57 return gdbsys->server_->postMemAccessCallback(exc);
58}
59
61{
62 ETISS_GDBSystem *gdbsys = (ETISS_GDBSystem *)handle;
63 return gdbsys->sys_->dbg_read(gdbsys->sys_->handle, addr, buffer, length);
64}
65
67{
68 ETISS_GDBSystem *gdbsys = (ETISS_GDBSystem *)handle;
69 return gdbsys->sys_->dbg_write(gdbsys->sys_->handle, addr, buffer, length);
70}
71
72static void gdb_system_call_syncTime(void *handle, ETISS_CPU *cpu)
73{
74 ETISS_GDBSystem *gdbsys = (ETISS_GDBSystem *)handle;
75 gdbsys->sys_->syncTime(gdbsys->sys_->handle, cpu);
76}
77
79{
80 if (sys == 0)
81 return 0;
82
84
85 ETISS_System *retsys = (ETISS_System *)ret;
86
89
92
95
97
98 retsys->handle = (void *)ret;
99
100 ret->server_ = this;
101
102 ret->sys_ = sys;
103 unwrappedSys_ = sys;
104
105 return (ETISS_System *)ret;
106}
107
109{
110 ETISS_GDBSystem *ret = (ETISS_GDBSystem *)system;
111 system = ret->sys_;
112 delete ret;
113 return system;
114}
static etiss_int32 gdb_system_call_dbg_write(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 gdb_system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 gdb_system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 gdb_system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 gdb_system_call_dbg_read(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static void gdb_system_call_syncTime(void *handle, ETISS_CPU *cpu)
static etiss_int32 gdb_system_call_iread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint32 length)
uint64_t etiss_uint64
Definition types.h:58
uint32_t etiss_uint32
Definition types.h:55
uint8_t etiss_uint8
Definition types.h:49
int32_t etiss_int32
Definition types.h:54
gdb server implementation that is used as a plugin in etiss
Definition GDBServer.h:85
ETISS_System * unwrap(ETISS_CPU *cpu, ETISS_System *system) override
undo wrap function call this function will be called AFTER etiss::Plugin::cleanup
ETISS_System * wrap(ETISS_CPU *cpu, ETISS_System *system) override
SystemWrapper,.
ETISS_System * unwrappedSys_
Definition GDBServer.h:121
float __ovld __cnfn length(float p)
Return the length of vector p, i.e., sqrt(p.x2 + p.y 2 + ...)
basic cpu state structure needed for execution of any cpu architecture.
Definition CPU.h:51
ETISS_System * sys_
etiss::plugin::gdb::Server * server_
struct ETISS_System system
memory access and time synchronization functions.
Definition System.h:40
etiss_int32(* dwrite)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
write data
Definition System.h:59
etiss_int32(* iread)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint32 length)
used to simulate an instruction fetch.
Definition System.h:46
void * handle
custom handle that will be passed to the functions of this structure
Definition System.h:78
etiss_int32(* dbg_write)(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
direct debug write
Definition System.h:70
etiss_int32(* dbg_read)(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
direct debug read
Definition System.h:66
etiss_int32(* dread)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
read data
Definition System.h:55
void(* syncTime)(void *handle, ETISS_CPU *cpu)
called after a block to synchronize the time
Definition System.h:76
etiss_int32(* iwrite)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
write instruction data over instruction bus
Definition System.h:50