From 92a10d1ace70fe75c3e2c646ea613168fc417851 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 11 Oct 2021 09:08:14 +0100 Subject: [PATCH] Added resolve_vmctx_memory function to enable debuggers to resolve sandbox pointers - required because sandbox 'this' pointer cannot be resolved by lldb any other way as lldb expects "this" and "self" to be standard pointers, not sandbox handles. --- crates/runtime/src/debug_builtins.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/runtime/src/debug_builtins.rs b/crates/runtime/src/debug_builtins.rs index 187b6f918d..39778fae7c 100644 --- a/crates/runtime/src/debug_builtins.rs +++ b/crates/runtime/src/debug_builtins.rs @@ -6,6 +6,19 @@ 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 +49,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); } }