mirror of
https://github.com/mii443/wasmer.git
synced 2025-12-10 06:38:22 +00:00
Merge branch 'master' into feature/reference-types
This commit is contained in:
@@ -21,6 +21,7 @@ serde = { version = "1.0", features = ["derive"], optional = true }
|
||||
thiserror = "1.0"
|
||||
serde_bytes = { version = "0.11", optional = true }
|
||||
smallvec = "1.6"
|
||||
loupe = "0.1"
|
||||
|
||||
[features]
|
||||
default = ["std", "enable-serde"]
|
||||
|
||||
@@ -3,12 +3,13 @@
|
||||
|
||||
use crate::lib::std::vec::Vec;
|
||||
use crate::sourceloc::SourceLoc;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// Single source location to generated address mapping.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct InstructionAddressMap {
|
||||
/// Original source location.
|
||||
pub srcloc: SourceLoc,
|
||||
@@ -22,7 +23,7 @@ pub struct InstructionAddressMap {
|
||||
|
||||
/// Function and its instructions addresses mappings.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default, MemoryUsage)]
|
||||
pub struct FunctionAddressMap {
|
||||
/// Instructions maps.
|
||||
/// The array is sorted by the InstructionAddressMap::code_offset field.
|
||||
|
||||
@@ -11,6 +11,7 @@ use crate::translator::ModuleMiddleware;
|
||||
use crate::FunctionBodyData;
|
||||
use crate::ModuleTranslationState;
|
||||
use crate::SectionIndex;
|
||||
use loupe::MemoryUsage;
|
||||
use wasmer_types::entity::PrimaryMap;
|
||||
use wasmer_types::{Features, FunctionIndex, LocalFunctionIndex, SignatureIndex};
|
||||
use wasmparser::{Validator, WasmFeatures};
|
||||
@@ -58,7 +59,7 @@ where
|
||||
}
|
||||
|
||||
/// An implementation of a Compiler from parsed WebAssembly module to Compiled native code.
|
||||
pub trait Compiler: Send {
|
||||
pub trait Compiler: Send + MemoryUsage {
|
||||
/// Validates a module.
|
||||
///
|
||||
/// It returns the a succesful Result in case is valid, `CompileError` in case is not.
|
||||
|
||||
@@ -12,6 +12,7 @@ use crate::lib::std::vec::Vec;
|
||||
use crate::section::{CustomSection, SectionIndex};
|
||||
use crate::trap::TrapInformation;
|
||||
use crate::{CompiledFunctionUnwindInfo, FunctionAddressMap, JumpTableOffsets, Relocation};
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_types::entity::PrimaryMap;
|
||||
@@ -22,7 +23,7 @@ use wasmer_types::{FunctionIndex, LocalFunctionIndex, SignatureIndex};
|
||||
/// This structure is only used for reconstructing
|
||||
/// the frame information after a `Trap`.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default, MemoryUsage)]
|
||||
pub struct CompiledFunctionFrameInfo {
|
||||
/// The traps (in the function body).
|
||||
///
|
||||
@@ -35,7 +36,7 @@ pub struct CompiledFunctionFrameInfo {
|
||||
|
||||
/// The function body.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct FunctionBody {
|
||||
/// The function body bytes.
|
||||
#[cfg_attr(feature = "enable-serde", serde(with = "serde_bytes"))]
|
||||
@@ -79,7 +80,7 @@ pub type CustomSections = PrimaryMap<SectionIndex, CustomSection>;
|
||||
/// In the future this structure may also hold other information useful
|
||||
/// for debugging.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
#[derive(Debug, PartialEq, Eq, Clone, MemoryUsage)]
|
||||
pub struct Dwarf {
|
||||
/// The section index in the [`Compilation`] that corresponds to the exception frames.
|
||||
/// [Learn
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
//! [Learn more](https://en.wikipedia.org/wiki/Branch_table).
|
||||
|
||||
use super::CodeOffset;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_types::entity::{entity_impl, SecondaryMap};
|
||||
@@ -14,7 +15,7 @@ use wasmer_types::entity::{entity_impl, SecondaryMap};
|
||||
/// `JumpTable`s are used for indirect branching and are specialized for dense,
|
||||
/// 0-based jump offsets.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, MemoryUsage)]
|
||||
pub struct JumpTable(u32);
|
||||
|
||||
entity_impl!(JumpTable, "jt");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use crate::lib::std::sync::Arc;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_types::entity::PrimaryMap;
|
||||
@@ -10,7 +11,7 @@ use wasmer_vm::{MemoryStyle, ModuleInfo, TableStyle};
|
||||
/// This differs from [`ModuleInfo`] because it have extra info only
|
||||
/// possible after translation (such as the features used for compiling,
|
||||
/// or the `MemoryStyle` and `TableStyle`).
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, MemoryUsage)]
|
||||
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
|
||||
pub struct CompileModuleInfo {
|
||||
/// The features used for compiling the module
|
||||
|
||||
@@ -13,6 +13,7 @@ use crate::lib::std::fmt;
|
||||
use crate::lib::std::vec::Vec;
|
||||
use crate::section::SectionIndex;
|
||||
use crate::{Addend, CodeOffset, JumpTable};
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_types::entity::PrimaryMap;
|
||||
@@ -21,7 +22,7 @@ use wasmer_vm::libcalls::LibCall;
|
||||
|
||||
/// Relocation kinds for every ISA.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, MemoryUsage)]
|
||||
pub enum RelocationKind {
|
||||
/// absolute 4-byte
|
||||
Abs4,
|
||||
@@ -79,7 +80,7 @@ impl fmt::Display for RelocationKind {
|
||||
|
||||
/// A record of a relocation to perform.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct Relocation {
|
||||
/// The relocation kind.
|
||||
pub kind: RelocationKind,
|
||||
@@ -93,7 +94,7 @@ pub struct Relocation {
|
||||
|
||||
/// Destination function. Can be either user function or some special one, like `memory.grow`.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub enum RelocationTarget {
|
||||
/// A relocation to a function defined locally in the wasm (not an imported one).
|
||||
LocalFunc(LocalFunctionIndex),
|
||||
|
||||
@@ -7,13 +7,14 @@
|
||||
|
||||
use crate::lib::std::vec::Vec;
|
||||
use crate::Relocation;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_types::entity::entity_impl;
|
||||
|
||||
/// Index type of a Section defined inside a WebAssembly `Compilation`.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Debug, MemoryUsage)]
|
||||
pub struct SectionIndex(u32);
|
||||
|
||||
entity_impl!(SectionIndex);
|
||||
@@ -22,7 +23,7 @@ entity_impl!(SectionIndex);
|
||||
///
|
||||
/// Determines how a custom section may be used.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub enum CustomSectionProtection {
|
||||
/// A custom section with read permission.
|
||||
Read,
|
||||
@@ -36,7 +37,7 @@ pub enum CustomSectionProtection {
|
||||
/// This is used so compilers can store arbitrary information
|
||||
/// in the emitted module.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct CustomSection {
|
||||
/// Memory protection that applies to this section.
|
||||
pub protection: CustomSectionProtection,
|
||||
@@ -55,7 +56,7 @@ pub struct CustomSection {
|
||||
|
||||
/// The bytes in the section.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default, MemoryUsage)]
|
||||
pub struct SectionBody(#[cfg_attr(feature = "enable-serde", serde(with = "serde_bytes"))] Vec<u8>);
|
||||
|
||||
impl SectionBody {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//! and tracing errors.
|
||||
|
||||
use crate::lib::std::fmt;
|
||||
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -22,7 +22,7 @@ use serde::{Deserialize, Serialize};
|
||||
serde(transparent)
|
||||
)]
|
||||
#[repr(transparent)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct SourceLoc(u32);
|
||||
|
||||
impl SourceLoc {
|
||||
|
||||
@@ -3,6 +3,7 @@ use crate::error::ParseCpuFeatureError;
|
||||
use crate::lib::std::str::FromStr;
|
||||
use crate::lib::std::string::{String, ToString};
|
||||
use enumset::{EnumSet, EnumSetType};
|
||||
use loupe::MemoryUsage;
|
||||
pub use target_lexicon::{
|
||||
Architecture, BinaryFormat, CallingConvention, Endianness, OperatingSystem, PointerWidth,
|
||||
Triple,
|
||||
@@ -160,9 +161,11 @@ impl ToString for CpuFeature {
|
||||
|
||||
/// This is the target that we will use for compiling
|
||||
/// the WebAssembly ModuleInfo, and then run it.
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, MemoryUsage)]
|
||||
pub struct Target {
|
||||
#[loupe(skip)]
|
||||
triple: Triple,
|
||||
#[loupe(skip)]
|
||||
cpu_features: EnumSet<CpuFeature>,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//! The middleware parses the function binary bytecodes and transform them
|
||||
//! with the chosen functions.
|
||||
|
||||
use loupe::MemoryUsage;
|
||||
use smallvec::SmallVec;
|
||||
use std::collections::VecDeque;
|
||||
use std::fmt::Debug;
|
||||
@@ -12,7 +13,7 @@ use wasmparser::{BinaryReader, Operator, Type};
|
||||
use crate::error::{MiddlewareError, WasmResult};
|
||||
|
||||
/// A shared builder for function middlewares.
|
||||
pub trait ModuleMiddleware: Debug + Send + Sync {
|
||||
pub trait ModuleMiddleware: Debug + Send + Sync + MemoryUsage {
|
||||
/// Generates a `FunctionMiddleware` for a given function.
|
||||
///
|
||||
/// Here we generate a separate object for each function instead of executing directly on per-function operators,
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
use crate::CodeOffset;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use wasmer_vm::TrapCode;
|
||||
|
||||
/// Information about trap.
|
||||
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, MemoryUsage)]
|
||||
pub struct TrapInformation {
|
||||
/// The offset of the trapping instruction in native code. It is relative to the beginning of the function.
|
||||
pub code_offset: CodeOffset,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
//!
|
||||
//! [Learn more](https://en.wikipedia.org/wiki/Call_stack).
|
||||
use crate::lib::std::vec::Vec;
|
||||
use loupe::MemoryUsage;
|
||||
#[cfg(feature = "enable-serde")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -17,7 +18,7 @@ use serde::{Deserialize, Serialize};
|
||||
///
|
||||
/// [unwind info]: https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64?view=vs-2019
|
||||
#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, MemoryUsage)]
|
||||
pub enum CompiledFunctionUnwindInfo {
|
||||
/// Windows UNWIND_INFO.
|
||||
WindowsX64(Vec<u8>),
|
||||
|
||||
Reference in New Issue
Block a user