stage0 重构vm使其依赖自己的地址空间不再共用宿主机 修改vm的ABI 修正相关nob构建问题

This commit is contained in:
zzy committed 2026-09-22 23:12:15 +08:00
1 parent fae017b52d
commit c0a86ea552
14 files changed
+2149 -1572

No files matched your search

+98
View File
@@ -0,0 +1,98 @@
#ifndef __SPL_RT_H__
#define __SPL_RT_H__
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define SPL_FN static inline
#elif defined(__GNUC__) || defined(__clang__)
#define SPL_FN static __inline__
#else
#define SPL_FN static
#endif
#include <stdint.h>
typedef uint8_t u8;
typedef int8_t i8;
typedef uint16_t u16;
typedef int16_t i16;
typedef uint32_t u32;
typedef int32_t i32;
typedef uint64_t u64;
typedef int64_t i64;
#ifndef SPL_USIZE_TYPEDEF
#define SPL_USIZE_TYPEDEF
typedef u64 usize;
#endif
#ifndef SPL_ISIZE_TYPEDEF
#define SPL_ISIZE_TYPEDEF
typedef i64 isize;
#endif
SPL_FN void spl_panic(const char *msg) {
fprintf(stderr, "%s\n", msg ? msg : "panic");
exit(1);
}
SPL_FN void spl_trap(void) { abort(); }
#include "spl_rt_core.h"
SPL_FN void *vm_fopen(void *path, void *mode) {
return (void *)fopen((const char *)path, (const char *)mode);
}
SPL_FN i32 vm_fclose(void *f) { return f ? fclose((FILE *)f) : 0; }
SPL_FN u64 vm_fread(void *buf, u64 sz, u64 n, void *f) {
return f ? (u64)fread(buf, (size_t)sz, (size_t)n, (FILE *)f) : 0;
}
SPL_FN u64 vm_fwrite(void *buf, u64 sz, u64 n, void *f) {
return f ? (u64)fwrite(buf, (size_t)sz, (size_t)n, (FILE *)f) : 0;
}
SPL_FN u64 vm_fsize(void *f) {
long cur, end;
if (!f)
return 0;
cur = ftell((FILE *)f);
if (cur < 0)
return 0;
if (fseek((FILE *)f, 0, SEEK_END) != 0)
return 0;
end = ftell((FILE *)f);
fseek((FILE *)f, cur, SEEK_SET);
return end < 0 ? 0 : (u64)end;
}
SPL_FN void *vm_stdin(void) { return (void *)stdin; }
SPL_FN void *vm_stdout(void) { return (void *)stdout; }
SPL_FN void *vm_stderr(void) { return (void *)stderr; }
SPL_FN i32 vm_putchar(i32 c) { return fputc(c, stdout); }
SPL_FN i32 vm_getchar(void) { return fgetc(stdin); }
SPL_FN void vm_exit(i32 code) { exit(code); }
SPL_FN u64 vm_timestamp(u64 kind) {
time_t sec = time(NULL);
if (kind == 1)
return (u64)sec;
if (kind == 2)
return 0;
if (kind == 4)
return (u64)sec * 1000000000ull;
return 0;
}
#define SPL_VM_EMBED_IMPLIMENTATION
#include "spl_vm_embed.h"
/* 配置层外部函数处理器(native 端)。VM 模式的实现见 spl_syscall.c。
* native 的 foreign 分发尚未接入(后续),这里先提供可链接入口。 */
SPL_FN void vm_set_foreign(void *vm, unsigned long long handler, void *ctx) {
(void)vm;
(void)handler;
(void)ctx;
}
#endif /* __SPL_RT_H__ */