Skip to content

Commit 972197e

Browse files
committed
Add transfer debug operation
1 parent b2309c3 commit 972197e

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/Debug/debugger.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,11 @@ bool Debugger::checkDebugMessages(Module *m, RunningState *program_state) {
312312
this->channel->write("%s!\n", receivingData ? "ack" : "done");
313313
}
314314
break;
315+
case interruptTransfer:
316+
this->transfer(m, interruptData);
317+
free(interruptData);
318+
this->channel->write("Transferred!\n");
319+
break;
315320
case interruptProxyCall: {
316321
this->handleProxyCall(m, program_state, interruptData + 1);
317322
free(interruptData);
@@ -1120,6 +1125,31 @@ void Debugger::freeState(Module *m, uint8_t *interruptData) {
11201125
debug("done with first msg\n");
11211126
}
11221127

1128+
void load(uint8_t *bytes, Module* m) {
1129+
auto start = read_B32(&bytes);
1130+
auto limit = read_B32(&bytes);
1131+
auto total_bytes = limit - start + 1;
1132+
memcpy(m->memory.bytes + start, bytes, total_bytes);
1133+
}
1134+
1135+
void Debugger::transfer(Module *m, uint8_t *interruptData) {
1136+
uint8_t *cursor = nullptr;
1137+
uint8_t *end = nullptr;
1138+
cursor = interruptData + 1; // skip interruptLoadSnapshot
1139+
uint32_t len = read_B32(&cursor);
1140+
end = cursor + len;
1141+
1142+
while (cursor < end) {
1143+
switch (*cursor++) {
1144+
case memoryState:
1145+
load(cursor, m);
1146+
default: {
1147+
debug("do nothing\n");
1148+
}
1149+
}
1150+
}
1151+
}
1152+
11231153
bool Debugger::saveState(Module *m, uint8_t *interruptData) {
11241154
uint8_t *program_state = nullptr;
11251155
uint8_t *end_state = nullptr;

src/Debug/debugger.h

+5
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ enum InterruptTypes {
7676
// Remote REPL
7777
interruptINVOKE = 0x40,
7878

79+
// Stateful out-of-place
80+
interruptTransfer = 0x52,
81+
7982
// Pull Debugging
8083
interruptSnapshot = 0x60,
8184
interruptSetSnapshotPolicy = 0x61,
@@ -208,6 +211,8 @@ class Debugger {
208211

209212
bool saveState(Module *m, uint8_t *interruptData);
210213

214+
void transfer(Module *m, uint8_t *interruptData);
215+
211216
static uintptr_t readPointer(uint8_t **data);
212217

213218
static void updateCallbackmapping(Module *m, const char *interruptData);

0 commit comments

Comments
 (0)