Skip to content

Commit 6e06828

Browse files
committed
Add transfer debug operation
1 parent 5056a43 commit 6e06828

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/Debug/debugger.cpp

Lines changed: 30 additions & 0 deletions
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);
@@ -1105,6 +1110,31 @@ void Debugger::freeState(Module *m, uint8_t *interruptData) {
11051110
debug("done with first msg\n");
11061111
}
11071112

1113+
void load(uint8_t *bytes, Module* m) {
1114+
auto start = read_B32(&bytes);
1115+
auto limit = read_B32(&bytes);
1116+
auto total_bytes = limit - start + 1;
1117+
memcpy(m->memory.bytes + start, bytes, total_bytes);
1118+
}
1119+
1120+
void Debugger::transfer(Module *m, uint8_t *interruptData) {
1121+
uint8_t *cursor = nullptr;
1122+
uint8_t *end = nullptr;
1123+
cursor = interruptData + 1; // skip interruptLoadSnapshot
1124+
uint32_t len = read_B32(&cursor);
1125+
end = cursor + len;
1126+
1127+
while (cursor < end) {
1128+
switch (*cursor++) {
1129+
case memoryState:
1130+
load(cursor, m);
1131+
default: {
1132+
debug("do nothing\n");
1133+
}
1134+
}
1135+
}
1136+
}
1137+
11081138
bool Debugger::saveState(Module *m, uint8_t *interruptData) {
11091139
uint8_t *program_state = nullptr;
11101140
uint8_t *end_state = nullptr;

src/Debug/debugger.h

Lines changed: 5 additions & 0 deletions
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)