pub struct Linker { /* private fields */ }Expand description
Links finalized sections and buffers into one in-memory image.
Sections are concatenated in insertion order, each starting at a multiple of
its alignment. Symbols exported with
CodeBuffer::bind_symbol are
resolved against the final layout: a relocation in any module that references
a defined ExternalName is rebound to the definition, so a symbol defined
in module A can be called from module B. Remaining undefined symbols stay
external and are resolved at load time with
CodeBufferFinalized::allocate_resolved.
This is deliberately not an ELF, COFF, or Mach-O linker: it emits no file
headers, section table, or loader metadata. Section names are diagnostic
only, and the linked result is one flat allocation; permissions are not
preserved per section. The result is a regular CodeBufferFinalized, so
the usual loading machinery (allocate, allocate_relocated,
allocate_resolved) applies.
Implementations§
Source§impl Linker
impl Linker
pub fn new() -> Self
Sourcepub fn add_section(&mut self, section: FinalizedSection)
pub fn add_section(&mut self, section: FinalizedSection)
Adds a finalized section to the link.
Sourcepub fn add_buffer(&mut self, code: CodeBufferFinalized)
pub fn add_buffer(&mut self, code: CodeBufferFinalized)
Adds a finalized buffer as a .text section aligned to the buffer’s
own alignment.
Sourcepub fn link(self) -> Result<CodeBufferFinalized, AsmError>
pub fn link(self) -> Result<CodeBufferFinalized, AsmError>
Links all added sections into one image.
Fails with AsmError::NoCodeGenerated when no sections were added or
AsmError::Link with the relevant section, symbol, or relocation.