From 155be962b77e8cdbaff674073b24c87a7beab85e Mon Sep 17 00:00:00 2001 From: bQUARKz Date: Fri, 20 Feb 2026 04:47:50 +0000 Subject: [PATCH] pr5.4 --- .../prometeu-vm/tests/verifier_golden.rs | 44 +++++++++++++++++++ files/TODOs.md | 44 ------------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/crates/console/prometeu-vm/tests/verifier_golden.rs b/crates/console/prometeu-vm/tests/verifier_golden.rs index 976229c1..766e88f8 100644 --- a/crates/console/prometeu-vm/tests/verifier_golden.rs +++ b/crates/console/prometeu-vm/tests/verifier_golden.rs @@ -225,6 +225,50 @@ fn golden_err_invalid_syscall_id() { assert_eq!(res, Err(VerifierError::InvalidSyscallId { pc: 0, id: 0xDEADBEEF })); } +#[test] +fn golden_err_syscall_too_few_args() { + // Choose a syscall that requires 2 arg slots and returns 0: LogWrite (0x5001) + // Program: SYSCALL 0x5001; RET + // No arguments are pushed before the syscall, so verifier must catch underflow at the syscall. + let mut code = Vec::new(); + code.extend_from_slice(&enc_op(OpCode::Syscall)); + code.extend_from_slice(&0x5001u32.to_le_bytes()); + code.extend_from_slice(&enc_op(OpCode::Ret)); + + let functions = func(FunctionMeta { code_offset: 0, code_len: code.len() as u32, return_slots: 0, ..Default::default() }); + let res = Verifier::verify(&code, &functions); + assert_eq!(res, Err(VerifierError::StackUnderflow { pc: 0, opcode: OpCode::Syscall })); +} + +#[test] +fn golden_ok_syscall_args_and_returns() { + // Case A: Syscall with 2 args, 0 returns (LogWrite): push 2; syscall; ret (ret_slots = 0) + let mut code_a = Vec::new(); + code_a.extend_from_slice(&enc_op(OpCode::PushI32)); + code_a.extend_from_slice(&1i32.to_le_bytes()); + code_a.extend_from_slice(&enc_op(OpCode::PushI32)); + code_a.extend_from_slice(&2i32.to_le_bytes()); + code_a.extend_from_slice(&enc_op(OpCode::Syscall)); + code_a.extend_from_slice(&0x5001u32.to_le_bytes()); // LogWrite: 2 args, 0 returns + code_a.extend_from_slice(&enc_op(OpCode::Ret)); + + let functions_a = func(FunctionMeta { code_offset: 0, code_len: code_a.len() as u32, return_slots: 0, ..Default::default() }); + let res_a = Verifier::verify(&code_a, &functions_a).unwrap(); + // Max stack height reaches 2 after two pushes + assert!(res_a[0] >= 2); + + // Case B: Syscall with 0 args, 1 return (TouchGetX: 0x2101): syscall; ret (ret_slots = 1) + let mut code_b = Vec::new(); + code_b.extend_from_slice(&enc_op(OpCode::Syscall)); + code_b.extend_from_slice(&0x2101u32.to_le_bytes()); // TouchGetX: 0 args, 1 return + code_b.extend_from_slice(&enc_op(OpCode::Ret)); + + let functions_b = func(FunctionMeta { code_offset: 0, code_len: code_b.len() as u32, return_slots: 1, ..Default::default() }); + let res_b = Verifier::verify(&code_b, &functions_b).unwrap(); + // Max stack height should be at least 1 due to the return value + assert!(res_b[0] >= 1); +} + #[test] fn golden_err_invalid_func_id() { // Encode a Call with invalid function id (beyond functions.len()) diff --git a/files/TODOs.md b/files/TODOs.md index 66c3bdc4..f2960f5c 100644 --- a/files/TODOs.md +++ b/files/TODOs.md @@ -1,47 +1,3 @@ -# PR-5.5 — Remove Legacy Syscall Entry Paths - -### Briefing - -Any old or experimental syscall entry paths must be removed so that the slot-based ABI is the only supported mechanism. - -### Target - -* Ensure only the new unified syscall dispatch path exists. - -### Work items - -* Search for legacy or alternate syscall invocation logic. -* Remove or refactor them to use the canonical dispatch. -* Update modules and exports accordingly. - -### Acceptance checklist - -* [ ] Only one syscall dispatch path remains. -* [ ] No legacy syscall logic is present. -* [ ] `cargo test` passes. - -### Tests - -* Existing tests only. - -### Junie instructions - -**You MAY:** - -* Remove legacy syscall code paths. -* Refactor callers to use the unified dispatch. - -**You MUST NOT:** - -* Introduce new syscall semantics. -* Keep compatibility shims. - -**If unclear:** - -* Ask before deleting anything that looks externally visible. - ---- - # PR-5.6 — Syscall Multi-Return Tests ### Briefing