stage0 支持类gdb的调试vm手段
This commit is contained in:
@@ -39,6 +39,8 @@ void spl_prog_drop(spl_prog_t *prog) {
|
||||
vec_for(prog->strtab, i) { free((void *)vec_at(prog->strtab, i)); }
|
||||
vec_free(prog->strtab);
|
||||
map_free(prog->symtab);
|
||||
free(prog->debug);
|
||||
prog->debug = NULL;
|
||||
}
|
||||
|
||||
/* ---- LE read/write helpers ---- */
|
||||
@@ -201,6 +203,23 @@ int spl_prog_load_from_file(const char *fname, spl_prog_t *prog) {
|
||||
vec_push(prog->gdata, entry);
|
||||
}
|
||||
|
||||
/* ---- debug 段(splc0 -g 追加在文件尾部) ---- */
|
||||
prog->debug = NULL;
|
||||
prog->debug_size = 0;
|
||||
{
|
||||
ptrdiff_t used = p - data;
|
||||
if (used >= 0 && (usize)used < (usize)len) {
|
||||
size_t dlen = (size_t)len - (size_t)used;
|
||||
char *dbg = (char *)malloc(dlen + 1);
|
||||
if (dbg) {
|
||||
memcpy(dbg, data + used, dlen);
|
||||
dbg[dlen] = 0;
|
||||
prog->debug = dbg;
|
||||
prog->debug_size = dlen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user