diff --git a/vpsdk/dynlib.vp b/vpsdk/dynlib.vp index 2cb6a04..dc84f1f 100644 --- a/vpsdk/dynlib.vp +++ b/vpsdk/dynlib.vp @@ -4,5 +4,8 @@ from . import syscall as syscall def load_so(path: const str) -> uint64: return syscall._syscall1(uint64(syscall.LOAD_SO), uint64(path)) -def so_call1(sym_name: const str, arg1: t.CPtr) -> int: +def so_call1(sym_name: const str, arg1: rawptr) -> int: + # arg1 只是原样交给系统调用的裸地址,故用 rawptr(未定/通配指针)而非 t.CPtr: + # 后者是具体类型的一级指针,调用方传字符串字面量(二级指针)会被判成级数不符 + # (CastError: pointer level differs, source level 2 -> target level 1)。 return int(syscall._syscall2(uint64(syscall.SO_CALL1), uint64(sym_name), uint64(arg1)))