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