Assemblers: SimpleAssembler, VecAssembler, Assembler (JIT). Mirrors runtime/src/lib.rs + components.rs (SimpleRelocation plus AArch64 arch-specific relocations).
Types
Assembler = object staging*: seq[byte] committed*: seq[byte] labels*: LabelRegistry staticTargets*: seq[tuple[loc: PatchLoc, label: StaticLabel]] dynamicTargets*: seq[tuple[loc: PatchLoc, id: DynamicLabel]] managed*: Table[int, PatchLoc] error*: ref DynasmError execBuf*: ExecutableBuffer arch*: ArchKind
PatchLoc = object location*: int ## absolute offset just past the patched field fieldOffset*: int ## bytes backwards to field start refOffset*: int ## bytes backwards to reference point (usually end) relocation*: SimpleRelocation targetOffset*: int
SimpleAssembler = object ops*: seq[byte]
VecAssembler = object ops*: seq[byte] baseAddr*: int labels*: LabelRegistry staticTargets*: seq[tuple[loc: PatchLoc, label: StaticLabel]] dynamicTargets*: seq[tuple[loc: PatchLoc, id: DynamicLabel]] error*: ref DynasmError
Procs
proc align(a: var Assembler; alignment: int; with: byte = 0x00000090) {. ...raises: [], tags: [], forbids: [].}
proc align(a: var SimpleAssembler; alignment: int; with: byte = 0x00000090) {. ...raises: [], tags: [], forbids: [].}
proc align(a: var VecAssembler; alignment: int; with: byte = 0x00000090) {. ...raises: [], tags: [], forbids: [].}
proc backwardReloc(a: var Assembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError, KeyError], tags: [], forbids: [].}
proc backwardReloc(a: var VecAssembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError, KeyError], tags: [], forbids: [].}
proc commit(a: var Assembler) {....raises: [DynasmError, KeyError, IOError], tags: [], forbids: [].}
proc commit(a: var VecAssembler) {....raises: [DynasmError, KeyError, DynasmError, DynasmError], tags: [], forbids: [].}
proc committedBytes(a: Assembler): seq[byte] {....raises: [], tags: [], forbids: [].}
proc dynamicLabel(a: var Assembler; id: DynamicLabel) {....raises: [], tags: [], forbids: [].}
proc dynamicLabel(a: var VecAssembler; id: DynamicLabel) {....raises: [], tags: [], forbids: [].}
proc dynamicReloc(a: var Assembler; id: DynamicLabel; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError], tags: [], forbids: [].}
proc dynamicReloc(a: var VecAssembler; id: DynamicLabel; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError], tags: [], forbids: [].}
proc encodeRelocs(a: var Assembler) {....raises: [DynasmError, KeyError, DynasmError, DynasmError], tags: [], forbids: [].}
proc ensureExecCapacity(a: var Assembler; need: int) {. ...raises: [IOError, DynasmError], tags: [], forbids: [].}
proc extendBytes(a: var Assembler; data: openArray[byte]) {....raises: [], tags: [], forbids: [].}
proc extendBytes(a: var SimpleAssembler; data: openArray[byte]) {....raises: [], tags: [], forbids: [].}
proc extendBytes(a: var VecAssembler; data: openArray[byte]) {....raises: [], tags: [], forbids: [].}
proc fieldStart(loc: PatchLoc; bufOffset: int): int {....raises: [], tags: [], forbids: [].}
proc finalize(a: SimpleAssembler): seq[byte] {....raises: [], tags: [], forbids: [].}
proc finalize(a: var Assembler): ExecutableBuffer {. ...raises: [DynasmError, KeyError, IOError], tags: [], forbids: [].}
proc finalize(a: var VecAssembler): seq[byte] {....raises: [DynasmError, KeyError], tags: [], forbids: [].}
proc forwardReloc(a: var Assembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError, KeyError], tags: [], forbids: [].}
proc forwardReloc(a: var VecAssembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError, KeyError], tags: [], forbids: [].}
proc globalLabel(a: var Assembler; name: string) {....raises: [], tags: [], forbids: [].}
proc globalLabel(a: var VecAssembler; name: string) {....raises: [], tags: [], forbids: [].}
proc globalReloc(a: var Assembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError], tags: [], forbids: [].}
proc globalReloc(a: var VecAssembler; name: string; targetOffset: int; fieldOffset, refOffset: int; enc: uint8) {. ...raises: [ValueError], tags: [], forbids: [].}
proc initAssembler(arch: ArchKind = akX64; initialSize: int = DefaultPageSize): Assembler {. ...raises: [IOError], tags: [], forbids: [].}
proc initSimpleAssembler(): SimpleAssembler {....raises: [], tags: [], forbids: [].}
proc initVecAssembler(baseAddr: int = 0): VecAssembler {....raises: [], tags: [], forbids: [].}
proc localLabel(a: var Assembler; name: string) {....raises: [KeyError], tags: [], forbids: [].}
proc localLabel(a: var VecAssembler; name: string) {....raises: [KeyError], tags: [], forbids: [].}
proc needsAdjustment(loc: PatchLoc): bool {....raises: [], tags: [], forbids: [].}
proc newAssembler(arch: ArchKind = akX64): Assembler {....raises: [IOError], tags: [], forbids: [].}
proc newDynamicLabel(a: var Assembler): DynamicLabel {....raises: [], tags: [], forbids: [].}
proc newDynamicLabel(a: var VecAssembler): DynamicLabel {....raises: [], tags: [], forbids: [].}
proc newPatchLoc(location, targetOffset, fieldOffset, refOffset: int; r: SimpleRelocation): PatchLoc {....raises: [], tags: [], forbids: [].}
proc offset(a: Assembler): AssemblyOffset {....raises: [], tags: [], forbids: [].}
proc offset(a: SimpleAssembler): AssemblyOffset {....raises: [], tags: [], forbids: [].}
proc offset(a: VecAssembler): AssemblyOffset {....raises: [], tags: [], forbids: [].}
proc patchRange(loc: PatchLoc; bufOffset: int): tuple[start, len: int] {. ...raises: [], tags: [], forbids: [].}
proc push(a: var SimpleAssembler; b: byte) {....raises: [], tags: [], forbids: [].}
proc push(a: var VecAssembler; b: byte) {....raises: [], tags: [], forbids: [].}
proc pushI8(a: var SimpleAssembler; v: int8) {....raises: [], tags: [], forbids: [].}
proc pushI8(a: var VecAssembler; v: int8) {....raises: [], tags: [], forbids: [].}
proc pushI16(a: var SimpleAssembler; v: int16) {....raises: [], tags: [], forbids: [].}
proc pushI16(a: var VecAssembler; v: int16) {....raises: [], tags: [], forbids: [].}
proc pushI32(a: var SimpleAssembler; v: int32) {....raises: [], tags: [], forbids: [].}
proc pushI32(a: var VecAssembler; v: int32) {....raises: [], tags: [], forbids: [].}
proc pushI64(a: var SimpleAssembler; v: int64) {....raises: [], tags: [], forbids: [].}
proc pushI64(a: var VecAssembler; v: int64) {....raises: [], tags: [], forbids: [].}
proc pushU16(a: var SimpleAssembler; v: uint16) {....raises: [], tags: [], forbids: [].}
proc pushU16(a: var VecAssembler; v: uint16) {....raises: [], tags: [], forbids: [].}
proc pushU32(a: var SimpleAssembler; v: uint32) {....raises: [], tags: [], forbids: [].}
proc pushU32(a: var VecAssembler; v: uint32) {....raises: [], tags: [], forbids: [].}
proc pushU64(a: var SimpleAssembler; v: uint64) {....raises: [], tags: [], forbids: [].}
proc pushU64(a: var VecAssembler; v: uint64) {....raises: [], tags: [], forbids: [].}
proc readerPtr(a: Assembler; off: AssemblyOffset): pointer {....raises: [], tags: [], forbids: [].}
proc relocValue(loc: PatchLoc; target, bufAddr: int): int64 {....raises: [], tags: [], forbids: [].}
proc valueReloc(a: var Assembler; value: int; fieldOffset, refOffset: int; enc: uint8) {....raises: [ValueError], tags: [], forbids: [].}
proc valueReloc(a: var VecAssembler; value: int; fieldOffset, refOffset: int; enc: uint8) {....raises: [ValueError], tags: [], forbids: [].}