package asmc import ( "git.urbach.dev/cli/q/src/asm" "git.urbach.dev/cli/q/src/config" "git.urbach.dev/cli/q/src/dll" ) // Finalize generates the final machine code. func Finalize(a asm.Assembler, dlls dll.List) ([]byte, []byte) { data, dataLabels := a.Data.Finalize() if config.TargetOS == config.Windows && len(data) == 0 { data = []byte{0} } c := compiler{ code: make([]byte, 0, len(a.Instructions)*8), codeLabels: make(map[string]Address, 32), codePointers: make([]*pointer, 0, len(a.Instructions)*8), codeStart: codeOffset(), data: data, dataLabels: dataLabels, dlls: dlls, } for _, x := range a.Instructions { c.compile(x) } c.resolvePointers() return c.code, c.data }