Trait cretonne_codegen::binemit::CodeSink
[−]
[src]
pub trait CodeSink { fn offset(&self) -> CodeOffset; fn put1(&mut self, _: u8); fn put2(&mut self, _: u16); fn put4(&mut self, _: u32); fn put8(&mut self, _: u64); fn reloc_ebb(&mut self, _: Reloc, _: CodeOffset); fn reloc_external(&mut self, _: Reloc, _: &ExternalName, _: Addend); fn reloc_jt(&mut self, _: Reloc, _: JumpTable); fn trap(&mut self, _: TrapCode, _: SourceLoc); }
Abstract interface for adding bytes to the code segment.
A CodeSink
will receive all of the machine code for a function. It also accepts relocations
which are locations in the code section that need to be fixed up when linking.
Required Methods
fn offset(&self) -> CodeOffset
Get the current position.
fn put1(&mut self, _: u8)
Add 1 byte to the code section.
fn put2(&mut self, _: u16)
Add 2 bytes to the code section.
fn put4(&mut self, _: u32)
Add 4 bytes to the code section.
fn put8(&mut self, _: u64)
Add 8 bytes to the code section.
fn reloc_ebb(&mut self, _: Reloc, _: CodeOffset)
Add a relocation referencing an EBB at the current offset.
fn reloc_external(&mut self, _: Reloc, _: &ExternalName, _: Addend)
Add a relocation referencing an external symbol plus the addend at the current offset.
fn reloc_jt(&mut self, _: Reloc, _: JumpTable)
Add a relocation referencing a jump table.
fn trap(&mut self, _: TrapCode, _: SourceLoc)
Add trap information for the current offset.
Implementors
impl<'a> CodeSink for MemoryCodeSink<'a>