mirror of
https://github.com/mii443/wasmer.git
synced 2025-09-04 08:29:16 +00:00
Moved FrameInfo into wasmer types
This commit is contained in:
@ -1,8 +1,9 @@
|
||||
use super::frame_info::{FrameInfo, GlobalFrameInfo, FRAME_INFO};
|
||||
use super::frame_info::{GlobalFrameInfo, FRAME_INFO};
|
||||
use backtrace::Backtrace;
|
||||
use std::error::Error;
|
||||
use std::fmt;
|
||||
use std::sync::Arc;
|
||||
use wasmer_types::FrameInfo;
|
||||
use wasmer_vm::{Trap, TrapCode};
|
||||
|
||||
/// A struct representing an aborted instruction execution, with a message
|
||||
@ -44,8 +45,6 @@ struct RuntimeErrorInner {
|
||||
source: RuntimeErrorSource,
|
||||
/// The reconstructed Wasm trace (from the native trace and the `GlobalFrameInfo`).
|
||||
wasm_trace: Vec<FrameInfo>,
|
||||
/// The native backtrace
|
||||
native_trace: Option<Backtrace>,
|
||||
}
|
||||
|
||||
fn _assert_trap_is_sync_and_send(t: &Trap) -> (&dyn Sync, &dyn Send) {
|
||||
@ -191,7 +190,6 @@ impl RuntimeError {
|
||||
inner: Arc::new(RuntimeErrorInner {
|
||||
source,
|
||||
wasm_trace,
|
||||
native_trace: Some(native_trace),
|
||||
}),
|
||||
}
|
||||
}
|
||||
@ -257,7 +255,6 @@ impl fmt::Debug for RuntimeError {
|
||||
f.debug_struct("RuntimeError")
|
||||
.field("source", &self.inner.source)
|
||||
.field("wasm_trace", &self.inner.wasm_trace)
|
||||
.field("native_trace", &self.inner.native_trace)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,9 @@ use std::cmp;
|
||||
use std::collections::BTreeMap;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use wasmer_types::entity::{BoxedSlice, EntityRef, PrimaryMap};
|
||||
use wasmer_types::{CompiledFunctionFrameInfo, SourceLoc, TrapInformation};
|
||||
use wasmer_types::{LocalFunctionIndex, ModuleInfo};
|
||||
use wasmer_types::{
|
||||
CompiledFunctionFrameInfo, FrameInfo, LocalFunctionIndex, ModuleInfo, TrapInformation,
|
||||
};
|
||||
use wasmer_vm::FunctionBodyPtr;
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
@ -240,97 +241,3 @@ pub fn register(
|
||||
assert!(prev.is_none());
|
||||
Some(GlobalFrameInfoRegistration { key: max })
|
||||
}
|
||||
|
||||
/// Description of a frame in a backtrace for a [`RuntimeError::trace`](crate::RuntimeError::trace).
|
||||
///
|
||||
/// Whenever a WebAssembly trap occurs an instance of [`RuntimeError`]
|
||||
/// is created. Each [`RuntimeError`] has a backtrace of the
|
||||
/// WebAssembly frames that led to the trap, and each frame is
|
||||
/// described by this structure.
|
||||
///
|
||||
/// [`RuntimeError`]: crate::RuntimeError
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct FrameInfo {
|
||||
module_name: String,
|
||||
func_index: u32,
|
||||
function_name: Option<String>,
|
||||
func_start: SourceLoc,
|
||||
instr: SourceLoc,
|
||||
}
|
||||
|
||||
impl FrameInfo {
|
||||
/// Creates a new [FrameInfo], useful for testing.
|
||||
pub fn new(
|
||||
module_name: String,
|
||||
func_index: u32,
|
||||
function_name: Option<String>,
|
||||
func_start: SourceLoc,
|
||||
instr: SourceLoc,
|
||||
) -> Self {
|
||||
Self {
|
||||
module_name,
|
||||
func_index,
|
||||
function_name,
|
||||
func_start,
|
||||
instr,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the WebAssembly function index for this frame.
|
||||
///
|
||||
/// This function index is the index in the function index space of the
|
||||
/// WebAssembly module that this frame comes from.
|
||||
pub fn func_index(&self) -> u32 {
|
||||
self.func_index
|
||||
}
|
||||
|
||||
/// Returns the identifer of the module that this frame is for.
|
||||
///
|
||||
/// ModuleInfo identifiers are present in the `name` section of a WebAssembly
|
||||
/// binary, but this may not return the exact item in the `name` section.
|
||||
/// ModuleInfo names can be overwritten at construction time or perhaps inferred
|
||||
/// from file names. The primary purpose of this function is to assist in
|
||||
/// debugging and therefore may be tweaked over time.
|
||||
///
|
||||
/// This function returns `None` when no name can be found or inferred.
|
||||
pub fn module_name(&self) -> &str {
|
||||
&self.module_name
|
||||
}
|
||||
|
||||
/// Returns a descriptive name of the function for this frame, if one is
|
||||
/// available.
|
||||
///
|
||||
/// The name of this function may come from the `name` section of the
|
||||
/// WebAssembly binary, or wasmer may try to infer a better name for it if
|
||||
/// not available, for example the name of the export if it's exported.
|
||||
///
|
||||
/// This return value is primarily used for debugging and human-readable
|
||||
/// purposes for things like traps. Note that the exact return value may be
|
||||
/// tweaked over time here and isn't guaranteed to be something in
|
||||
/// particular about a wasm module due to its primary purpose of assisting
|
||||
/// in debugging.
|
||||
///
|
||||
/// This function returns `None` when no name could be inferred.
|
||||
pub fn function_name(&self) -> Option<&str> {
|
||||
self.function_name.as_deref()
|
||||
}
|
||||
|
||||
/// Returns the offset within the original wasm module this frame's program
|
||||
/// counter was at.
|
||||
///
|
||||
/// The offset here is the offset from the beginning of the original wasm
|
||||
/// module to the instruction that this frame points to.
|
||||
pub fn module_offset(&self) -> usize {
|
||||
self.instr.bits() as usize
|
||||
}
|
||||
|
||||
/// Returns the offset from the original wasm module's function to this
|
||||
/// frame's program counter.
|
||||
///
|
||||
/// The offset here is the offset from the beginning of the defining
|
||||
/// function of this frame (within the wasm module) to the instruction this
|
||||
/// frame points to.
|
||||
pub fn func_offset(&self) -> usize {
|
||||
(self.instr.bits() - self.func_start.bits()) as usize
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,5 @@ mod error;
|
||||
mod frame_info;
|
||||
pub use error::RuntimeError;
|
||||
pub use frame_info::{
|
||||
register as register_frame_info, FrameInfo, FunctionExtent, GlobalFrameInfoRegistration,
|
||||
FRAME_INFO,
|
||||
register as register_frame_info, FunctionExtent, GlobalFrameInfoRegistration, FRAME_INFO,
|
||||
};
|
||||
|
Reference in New Issue
Block a user