pub struct MachBufferFinalized<T: CompilePhase> {
pub unwind_info: SmallVec<[(CodeOffset, UnwindInst); 8]>,
pub alignment: u32,
pub nop_units: Vec<Vec<u8>>,
/* private fields */
}Expand description
A MachBuffer once emission is completed: holds generated code and records,
without fixups. This allows the type to be independent of the backend.
Fields§
§unwind_info: SmallVec<[(CodeOffset, UnwindInst); 8]>Any unwind info at a given location.
alignment: u32The required alignment of this buffer.
nop_units: Vec<Vec<u8>>The means by which to NOP out patchable call sites.
This allows a consumer of a MachBufferFinalized to disable
patchable call sites (which are enabled by default) without
specific knowledge of the target ISA.
Each entry is one form of nop, and these are required to be sorted in ascending-size order.
Implementations§
Source§impl MachBufferFinalized<Stencil>
impl MachBufferFinalized<Stencil>
Sourcepub fn apply_base_srcloc(
self,
base_srcloc: SourceLoc,
) -> MachBufferFinalized<Final>
pub fn apply_base_srcloc( self, base_srcloc: SourceLoc, ) -> MachBufferFinalized<Final>
Get a finalized machine buffer by applying the function’s base source location.
Source§impl<T: CompilePhase> MachBufferFinalized<T>
impl<T: CompilePhase> MachBufferFinalized<T>
Sourcepub fn get_srclocs_sorted(&self) -> &[T::MachSrcLocType]
pub fn get_srclocs_sorted(&self) -> &[T::MachSrcLocType]
Get a list of source location mapping tuples in sorted-by-start-offset order.
Get all debug tags, sorted by associated offset.
Sourcepub fn total_size(&self) -> CodeOffset
pub fn total_size(&self) -> CodeOffset
Get the total required size for the code.
Sourcepub fn stringify_code_bytes(&self) -> String
pub fn stringify_code_bytes(&self) -> String
Return the code in this mach buffer as a hex string for testing purposes.
Sourcepub fn data_mut(&mut self) -> &mut [u8] ⓘ
pub fn data_mut(&mut self) -> &mut [u8] ⓘ
Get a mutable slice of the code bytes, allowing patching post-passes.
Sourcepub fn relocs(&self) -> &[FinalizedMachReloc] ⓘ
pub fn relocs(&self) -> &[FinalizedMachReloc] ⓘ
Get the list of external relocations for this code.
Sourcepub fn user_stack_maps(&self) -> &[(CodeOffset, u32, UserStackMap)]
pub fn user_stack_maps(&self) -> &[(CodeOffset, u32, UserStackMap)]
Get the user stack map metadata for this code.
Sourcepub fn take_user_stack_maps(
&mut self,
) -> SmallVec<[(CodeOffset, u32, UserStackMap); 8]>
pub fn take_user_stack_maps( &mut self, ) -> SmallVec<[(CodeOffset, u32, UserStackMap); 8]>
Take this buffer’s user strack map metadata.
Sourcepub fn call_sites(&self) -> impl Iterator<Item = FinalizedMachCallSite<'_>> + '_
pub fn call_sites(&self) -> impl Iterator<Item = FinalizedMachCallSite<'_>> + '_
Get the list of call sites for this code, along with associated exception handlers.
Each item yielded by the returned iterator is a struct with:
- The call site metadata record, with a
ret_addrfield directly accessible and denoting the offset of the return address into this buffer’s code. - The slice of pairs of exception tags and code offsets denoting exception-handler entry points associated with this call site.
Sourcepub fn frame_layout(&self) -> Option<&MachBufferFrameLayout>
pub fn frame_layout(&self) -> Option<&MachBufferFrameLayout>
Get the frame layout, if known.
Sourcepub fn patchable_call_sites(
&self,
) -> impl Iterator<Item = &MachPatchableCallSite> + '_
pub fn patchable_call_sites( &self, ) -> impl Iterator<Item = &MachPatchableCallSite> + '_
Get the list of patchable call sites for this code.
Each location in the buffer contains the bytes for a call
instruction to the specified target. If the call is to be
patched out, the bytes in the region should be replaced with
those given in the MachBufferFinalized::nop array, repeated
as many times as necessary. (The length of the patchable
region is guaranteed to be an integer multiple of that NOP
unit size.)
Trait Implementations§
Source§impl<T: Clone + CompilePhase> Clone for MachBufferFinalized<T>where
T::MachSrcLocType: Clone,
impl<T: Clone + CompilePhase> Clone for MachBufferFinalized<T>where
T::MachSrcLocType: Clone,
Source§fn clone(&self) -> MachBufferFinalized<T>
fn clone(&self) -> MachBufferFinalized<T>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Debug + CompilePhase> Debug for MachBufferFinalized<T>where
T::MachSrcLocType: Debug,
impl<T: Debug + CompilePhase> Debug for MachBufferFinalized<T>where
T::MachSrcLocType: Debug,
Source§impl<'de, T: CompilePhase> Deserialize<'de> for MachBufferFinalized<T>
impl<'de, T: CompilePhase> Deserialize<'de> for MachBufferFinalized<T>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<T: PartialEq + CompilePhase> PartialEq for MachBufferFinalized<T>where
T::MachSrcLocType: PartialEq,
impl<T: PartialEq + CompilePhase> PartialEq for MachBufferFinalized<T>where
T::MachSrcLocType: PartialEq,
Source§impl<T: CompilePhase> Serialize for MachBufferFinalized<T>
impl<T: CompilePhase> Serialize for MachBufferFinalized<T>
impl<T: CompilePhase> StructuralPartialEq for MachBufferFinalized<T>
Auto Trait Implementations§
impl<T> Freeze for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: Freeze,
impl<T> RefUnwindSafe for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: RefUnwindSafe,
impl<T> Send for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: Send,
impl<T> Sync for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: Sync,
impl<T> Unpin for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: Unpin,
impl<T> UnwindSafe for MachBufferFinalized<T>where
<T as CompilePhase>::MachSrcLocType: RefUnwindSafe + UnwindSafe,
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)