wasmer_compiler/types/
address_map.rs

1/*
2 * ! Remove me once rkyv generates doc-comments for fields or generates an #[allow(missing_docs)]
3 * on their own.
4 */
5#![allow(missing_docs)]
6
7//! Data structures to provide transformation of the source
8// addresses of a WebAssembly module into the native code.
9
10use crate::lib::std::vec::Vec;
11use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
12#[cfg(feature = "enable-serde")]
13use serde::{Deserialize, Serialize};
14use wasmer_types::SourceLoc;
15
16/// Single source location to generated address mapping.
17#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
18#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
19#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, Copy, PartialEq, Eq)]
20#[rkyv(derive(Debug))]
21pub struct InstructionAddressMap {
22    /// Original source location.
23    pub srcloc: SourceLoc,
24
25    /// Generated instructions offset.
26    pub code_offset: usize,
27
28    /// Generated instructions length.
29    pub code_len: usize,
30}
31
32/// Function and its instructions addresses mappings.
33#[cfg_attr(feature = "artifact-size", derive(loupe::MemoryUsage))]
34#[cfg_attr(feature = "enable-serde", derive(Serialize, Deserialize))]
35#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, PartialEq, Eq, Default)]
36#[rkyv(derive(Debug))]
37pub struct FunctionAddressMap {
38    /// Instructions maps.
39    /// The array is sorted by the InstructionAddressMap::code_offset field.
40    pub instructions: Vec<InstructionAddressMap>,
41
42    /// Function start source location (normally declaration).
43    pub start_srcloc: SourceLoc,
44
45    /// Function end source location.
46    pub end_srcloc: SourceLoc,
47
48    /// Generated function body offset if applicable, otherwise 0.
49    pub body_offset: usize,
50
51    /// Generated function body length.
52    pub body_len: usize,
53}