stage0 修复部分问题
This commit is contained in:
1 parent
5073c2b3ea
commit
a1e684f6d4
3 files changed
+58
-44
No files matched your search
+6
-5
@@ -19,6 +19,7 @@ void spl_prog_init(spl_prog_t *prog) {
|
||||
vec_init(prog->natives);
|
||||
vec_init(prog->strtab);
|
||||
vec_init(prog->gdata);
|
||||
vec_push(prog->gdata, (spl_vm_gdata_t){0});
|
||||
map_init(prog->symtab, MAP_HASH_STR, MAP_CMP_STR);
|
||||
prog->debug = NULL;
|
||||
}
|
||||
@@ -296,7 +297,7 @@ int spl_prog_store_to_file(const char *fname, spl_prog_t *prog) {
|
||||
ninsns = vec_size(prog->insns);
|
||||
nnatives = vec_size(prog->natives);
|
||||
nstrs = vec_size(prog->strtab);
|
||||
ndata = vec_size(prog->gdata);
|
||||
ndata = vec_size(prog->gdata) - 1; /* jump 0 node */
|
||||
|
||||
/* Calculate total size */
|
||||
total = 8 /* magic */
|
||||
@@ -325,7 +326,7 @@ int spl_prog_store_to_file(const char *fname, spl_prog_t *prog) {
|
||||
}
|
||||
|
||||
/* gdata */
|
||||
for (i = 0; i < ndata; i++) {
|
||||
for (i = 1; i < vec_size(prog->gdata); i++) {
|
||||
usize dsize = vec_at(prog->gdata, i).size;
|
||||
total += 8 + ALIGN8(dsize); /* dsize + data(pad) */
|
||||
}
|
||||
@@ -398,7 +399,7 @@ int spl_prog_store_to_file(const char *fname, spl_prog_t *prog) {
|
||||
}
|
||||
|
||||
/* ---- global data ---- */
|
||||
for (i = 0; i < ndata; i++) {
|
||||
for (i = 1; i <= ndata; i++) {
|
||||
spl_vm_gdata_t *entry = &vec_at(prog->gdata, i);
|
||||
pad = ALIGN8(entry->size) - entry->size;
|
||||
wr64(&p, entry->size);
|
||||
@@ -452,7 +453,7 @@ int spl_prog_add_data(spl_prog_t *prog, void *ptr, usize size) {
|
||||
memcpy(entry.data, ptr, size);
|
||||
entry.size = size;
|
||||
vec_push(prog->gdata, entry);
|
||||
return vec_size(prog->gdata);
|
||||
return (int)(vec_size(prog->gdata) - 1);
|
||||
}
|
||||
|
||||
spl_vm_func_t *spl_prog_get_func(spl_prog_t *prog, const char *name) {
|
||||
@@ -528,4 +529,4 @@ void spl_vm_ins_dump(spl_vm_ins_t *ins, spl_vm_val_t addr) {
|
||||
printf(" %s", spl_vm_type_kind_name((spl_vm_kind_t)ins->type));
|
||||
printf(" %zd:%zx", ins->imm, ins->imm);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user