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);
    fn begin_rodata(&mut self);
}
Expand description

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§

Get the current position.

Add 1 byte to the code section.

Add 2 bytes to the code section.

Add 4 bytes to the code section.

Add 8 bytes to the code section.

Add a relocation referencing an EBB at the current offset.

Add a relocation referencing an external symbol plus the addend at the current offset.

Add a relocation referencing a jump table.

Add trap information for the current offset.

Code output is complete, read-only data may follow.

Implementors§