Commit Graph
18 Commits
Author SHA1 Message Date
TermiNexus 0886252a08 feat(vpsdk): window/syscall/process/stdio/fs/dynlib 适配 + apps 同步调整 2026-10-16 16:40:41 +08:00
TermiNexus f8b37564da refactor(vpui): 引入 tkinter 式类层次 Misc/Wm/BaseWidget/Widget,新增容器控件 Frame
层次:Misc(mixin:master/tk + winfo_master/toplevel + bind/unbind) ├─ Tk(Wm, Misc) └─ BaseWidget(Misc) └─ Widget(BaseWidget) ← Label/Button/Entry/Scrollbar/FBCanvas/Text/Frame 全部继承 Widget。约束按 Test/MultiInheritTest 的布局模型:父类字段展平进子类、非首基类必须无字段(故 Wm 无字段)、基类方法内不做 self.<虚拟> 自我分派(多继承非最左基类的虚表索引会整体后移)。控件 master 由 Widget* 改为 Misc*(Tk* 成为合法上转型),原先 8 处 Tk*(self.master) 裸转改为 self.tk;事件派发统一走 BaseWidget.dispatch_event(先跑 bind 回调再 handle_event)。中文。
2026-10-16 16:29:04 +08:00
TermiNexus 7b58758603 fix(vpsdk): 修正 malloc 块头越界写(ptr-hdr_size → ptr),修复全部 app 启动即 #PF
块头原写在 mmap 映射区起点之前 8 字节;第一次 malloc 时 mmap 返回用户堆起点 0x20000000,写 0x1ffffff8 落在映射区外 ⇒ #PF(err=0x7 用户态写、cr2=0x1ffffff8),四个 app 启动瞬间全部崩在同一个 stdlib.malloc 上。改为把块头写在映射区起始处 ptr,返回 ptr+hdr_size 不变,free/calloc/realloc 的 ptr-hdr_size 反查仍然正确。
2026-10-16 16:29:04 +08:00
TermiNexus 6e78a08797 fix(vpsdk/vpui): 回调按闭包 ABI 调用(rdi=env, call [closure]) - 修点击 Submit 跳到堆上执行致用户态缺页 2026-10-15 17:17:42 +08:00
TermiNexus 152c4c5683 feat(vkernel/vpsdk): 用户线程生命周期 - THREAD_EXIT 显式退出;异常终止时回收用户栈并释放槽位;返回哨兵可辨识 2026-10-15 16:50:58 +08:00
TermiNexus 29e1bc6e34 chore(debug): 移除定位用的 MMAP/get_winbuf/redraw 临时探针(线程模型修复后 PF 与卡死均已消失) 2026-10-15 16:48:19 +08:00
TermiNexus 89a319e1be chore(debug): 加临时探针定位 MMAP 返回高半污染与 Tk.buf 野指针 - MMAP/get_winbuf/redraw 2026-10-15 16:20:14 +08:00
TermiNexus 11ad0de988 fix(vpsdk): WINBUF_MAX_BYTES 改单字面量 4194304,避免最小宽度算术回绕成 0(三重故障诱因)
- `1024 * 1024 * 4` 按最小宽度(i16)做算术:1024×1024 先回绕成 0 ⇒ 缓冲只剩几字节 ⇒ flush 时内核 memcpy(dst, src, 240KB) 从 app 的几字节缓冲后狂读 ⇒ 内核越界读 → 异常路径再出事即三重故障

- 改成单字面量 4194304(不依赖任何算术)。与 V3_POOL 同属“最小宽度算术”坑:静态求值侧已在 61f23d9 按结果值加宽,这处是表达式侧,先按单字面量规避
2026-10-14 19:35:37 +08:00
TermiNexus c977caec91 fix(vkernel/vpsdk): 窗口缓冲改走“用户缓冲 + WIN_FLUSH 拷贝”,修 app 写内核页 #PF(err=0x7)
- 现场:四个 app 一画就用户态 #PF,cr2 全在内核堆区(~0xb7c1000/0x9f81000/0xb851000/0xb881000),err=0x7(present + 用户写),RAX 正是各自颜色常量(0x1E1E32/0xC0C0C/0xF0F19)

- 根因:GET_WINBUF 把 desktop 的**内核**窗口后备缓冲地址直接交给 app(该页 U=0),app 当用户指针写 → 必然 #PF,四个 app 全中(tid=5 那条 cr2=0xffffffff52209000 是同一指针继续走坏)

- 内核:WIN_FLUSH 增加源指针 `WIN_FLUSH(win_id, src)`:先 desktop.get_fb 取窗口缓冲、再 desktop.get_fb_bytes 取字节数(配对取,避免 resize 重建导致尺寸/指针不一致),memcpy 后 desktop.flush;syscall_handler 的 WIN_FLUSH 分支透传 arg2;desktop 新增 get_fb_bytes

- app(vpsdk/window.vp):get_winbuf 改为按窗口分配**用户态**缓冲(stdlib.malloc → MMAP,落在 0x20000000 用户堆)并缓存;flush(win_id) 改为 WIN_FLUSH(win_id, 用户缓冲)
2026-10-14 19:30:29 +08:00
TermiNexus b5f51415ca fix(vpsdk): so_call1 的 arg1 改为 rawptr(裸地址用通配指针,避免级数不符误报)
dynlib.so_call1 的 arg1 只是原样交给系统调用的裸地址;原先声明为 t.CPtr(具体类型的
一级指针),调用方传字符串字面量(二级指针)会命中 CastError:
  implicit pointer-to-pointer conversion is forbidden: pointer level differs
  (source level 2 -> target level 1)
改用 rawptr(未定/通配指针,符合既有规则“任一侧 void*/未定(rawptr)允许”)。
2026-10-14 15:57:38 +08:00
TermiNexus 5b4bab59cc chore(ViperOS): 合并落库内核侧在途改动并移除 vpsdk wiki 拷贝
VKernel / vpsdk / Apps / Libs 共 30 个源文件:内核与 SDK 侧的新语法适配及编译修正(含 bootinfo.vp / main.vp 位宽改 uint64、gfx.vp 前向引用改指针、devfs.vp 指针解引用赋值、elf.vp 跨模块函数取值等)。删除 vpsdk/wiki/*.md(14 文件,约 -8100 行):与仓库根 wiki 重复的拷贝,统一以根 wiki 为唯一来源。
2026-10-07 19:04:33 +08:00
TermiNexus fc1a397c14 docs(vpsdk): 删除 wiki 拷贝里的 t.Anonymous 章节
与主 wiki(TransPyC/wiki,09fadf3)保持一致:`t.Anonymous` 已废弃且不再维护,
删除 02-type-system.md / 05-classes.md / all.md 中的「匿名结构体成员」章节。
2026-10-02 00:50:23 +08:00
TermiNexus 2a54e2bafb 清理了 t.CVoid 2026-09-16 16:07:04 +08:00
TermiNexus a518f75b24 chore(vkernel): 重置基线 — 纳入 TPV codegen 修复配合的内核侧调整与既有工作区内容
- devfs.vp: string.split 传 PATH_BUFFER_SIZE(配合 split 新增容量参数)

- fat32_types.vp: lfn_extract 越界钳制(base+i > MAX_LFN 返回 -1)

- sheet.vp: gfx.Renderer 实参修正为 (fb, zb, w, h)(原单参导致 w/h=0 渲染空操作)

- 同批包含 VKernel 其余既有移植改动与 vpsdk/Apps/Libs 工作区内容
2026-09-11 14:27:01 +08:00
TermiNexus cd1cc915c5 修正了build.py,重置基线 2026-09-11 10:34:34 +08:00
TermiNexus b887d3d9c2 更新,部分功能可用 2026-08-27 09:47:47 +08:00
TermiNexus 20e7289c61 将 .py 和 .pyi 后缀名改为了 .vp 和 .vpi 后缀名 2026-07-30 16:34:26 +08:00
Viper 6813947181 Initial import of ViperOS 2026-07-19 12:38:20 +08:00