VKernel / vpsdk / Apps / Libs 共 30 个源文件:内核与 SDK 侧的新语法适配及编译修正(含 bootinfo.vp / main.vp 位宽改 uint64、gfx.vp 前向引用改指针、devfs.vp 指针解引用赋值、elf.vp 跨模块函数取值等)。删除 vpsdk/wiki/*.md(14 文件,约 -8100 行):与仓库根 wiki 重复的拷贝,统一以根 wiki 为唯一来源。
60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
import vpsdk.syscall as _sc
|
|
import string
|
|
import t, c
|
|
|
|
define HEAP_BLOCK_MAGIC = 0x48454150
|
|
|
|
@t.Object
|
|
class _heap_hdr:
|
|
magic: uint32
|
|
size: uint32
|
|
|
|
_heap_inited: int = 0
|
|
|
|
def _heap_init():
|
|
global _heap_inited
|
|
_heap_inited = 1
|
|
|
|
def malloc(size: sizet) -> t.CPtr | t.CExport:
|
|
global _heap_inited
|
|
if size == 0: return None
|
|
if _heap_inited == 0:
|
|
_heap_init()
|
|
hdr_size: sizet = _heap_hdr.__sizeof__()
|
|
total: sizet = hdr_size + size
|
|
ptr: uint64 = _sc._syscall1(uint64(_sc.SYSCALL_MMAP), uint64(total))
|
|
if ptr == 0: return None
|
|
hdr: _heap_hdr* = t.CPtr(ptr)
|
|
hdr.magic = HEAP_BLOCK_MAGIC
|
|
hdr.size = uint32(size)
|
|
return t.CPtr(ptr + hdr_size)
|
|
|
|
def free(ptr: t.CPtr) -> t.CExport:
|
|
if ptr is None: return
|
|
hdr_size: sizet = _heap_hdr.__sizeof__()
|
|
hdr: _heap_hdr* = t.CPtr(uint64(ptr) - hdr_size)
|
|
if hdr.magic != HEAP_BLOCK_MAGIC: return
|
|
|
|
def calloc(nmemb: sizet, size: sizet) -> t.CPtr | t.CExport:
|
|
total: sizet = nmemb * size
|
|
p: t.CPtr = malloc(total)
|
|
if p:
|
|
string.memset(p, 0, total)
|
|
return p
|
|
|
|
def realloc(ptr: t.CPtr, size: sizet) -> t.CPtr | t.CExport:
|
|
if ptr is None: return malloc(size)
|
|
if size == 0:
|
|
free(ptr)
|
|
return None
|
|
hdr_size: sizet = _heap_hdr.__sizeof__()
|
|
hdr: _heap_hdr* = t.CPtr(uint64(ptr) - hdr_size)
|
|
if hdr.magic != HEAP_BLOCK_MAGIC: return None
|
|
old_size: sizet = hdr.size
|
|
new_ptr: t.CPtr = malloc(size)
|
|
if new_ptr is None: return None
|
|
copy_size: sizet = old_size if old_size < size else size
|
|
string.memcpy(new_ptr, ptr, copy_size)
|
|
free(ptr)
|
|
return new_ptr
|