github.com/wencode/hack@v0.2.9/proc/trampoline_unix.s (about) 1 // +build linux darwin 2 3 #include "textflag.h" 4 5 // func trampoline(a *tramargs) 6 TEXT ·trampoline(SB),NOSPLIT,$8-8 7 MOVQ BX, 0(SP) 8 MOVQ DI, BX 9 MOVQ 0(BX), AX 10 11 // calling conventions, 12 // see: https://en.wikipedia.org/wiki/X86_calling_conventions 13 MOVQ 8(BX), DI 14 MOVQ 16(BX), SI 15 MOVQ 24(BX), DX 16 MOVQ 32(BX), CX 17 MOVQ 40(BX), R8 18 MOVQ 48(BX), R9 19 20 CALL AX 21 22 LEAQ 56(BX), CX 23 MOVQ AX, (CX) 24 MOVQ 0(SP), BX 25 26 RET 27 28 TEXT ·trampoline_addr(SB),NOSPLIT,$0-8 29 LEAQ ·trampoline(SB), AX 30 MOVQ AX, addr+0(FP) 31 32 RET 33 34 // func realcall(a *tramargs) 35 TEXT ·realcall(SB),NOSPLIT,$0-8 36 MOVQ a+0(FP), BX 37 MOVQ 0(BX), AX 38 // calling conventions, 39 // see: https://en.wikipedia.org/wiki/X86_calling_conventions 40 MOVQ 8(BX), DI 41 MOVQ 16(BX), SI 42 MOVQ 24(BX), DX 43 MOVQ 32(BX), CX 44 MOVQ 40(BX), R8 45 MOVQ 48(BX), R9 46 47 CALL AX 48 49 LEAQ 56(BX), CX 50 MOVQ AX, (CX) 51 52 RET