diff --git a/crates/runtime/src/debug_builtins.rs b/crates/runtime/src/debug_builtins.rs index 187b6f918d..411300008b 100644 --- a/crates/runtime/src/debug_builtins.rs +++ b/crates/runtime/src/debug_builtins.rs @@ -6,6 +6,18 @@ use wasmtime_environ::{EntityRef, MemoryIndex}; static mut VMCTX_AND_MEMORY: (*mut VMContext, usize) = (std::ptr::null_mut(), 0); +#[no_mangle] +pub unsafe extern "C" fn resolve_vmctx_memory(ptr: usize) -> *const u8 { + let handle = InstanceHandle::from_vmctx(VMCTX_AND_MEMORY.0); + assert!( + VMCTX_AND_MEMORY.1 < handle.module().memory_plans.len(), + "memory index for debugger is out of bounds" + ); + let index = MemoryIndex::new(VMCTX_AND_MEMORY.1); + let mem = handle.instance().get_memory(index); + mem.base.add(ptr) +} + #[no_mangle] pub unsafe extern "C" fn resolve_vmctx_memory_ptr(p: *const u32) -> *const u8 { let ptr = std::ptr::read(p); @@ -36,5 +48,6 @@ pub fn ensure_exported() { unsafe { std::ptr::read_volatile(resolve_vmctx_memory_ptr as *const u8); std::ptr::read_volatile(set_vmctx_memory as *const u8); + std::ptr::read_volatile(resolve_vmctx_memory as *const u8); } }