github.com/notti/nocgo@v0.0.0-20190619201224-fc443047424c/internal/fakecgo/libccall.go (about) 1 package fakecgo 2 3 import "unsafe" 4 5 // wrapper functions to provide go func definitions with arguments 6 7 func asmlibccall6(fn, n, args uintptr) uintptr 8 9 //go:nosplit 10 func libcCall0(fn *libcFunc) uintptr { 11 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 0, 0) 12 } 13 14 //go:nosplit 15 //go:noinline 16 func libcCall1(fn *libcFunc, a1 uintptr) uintptr { 17 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 1, uintptr(unsafe.Pointer(&a1))) 18 } 19 20 //go:nosplit 21 //go:noinline 22 func libcCall2(fn *libcFunc, a1 uintptr, a2 uintptr) uintptr { 23 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 2, uintptr(unsafe.Pointer(&a1))) 24 } 25 26 //go:nosplit 27 //go:noinline 28 func libcCall3(fn *libcFunc, a1 uintptr, a2 uintptr, a3 uintptr) uintptr { 29 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 3, uintptr(unsafe.Pointer(&a1))) 30 } 31 32 //go:nosplit 33 //go:noinline 34 func libcCall4(fn *libcFunc, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr) uintptr { 35 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 4, uintptr(unsafe.Pointer(&a1))) 36 } 37 38 //go:nosplit 39 //go:noinline 40 func libcCall5(fn *libcFunc, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) uintptr { 41 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 5, uintptr(unsafe.Pointer(&a1))) 42 } 43 44 //go:nosplit 45 //go:noinline 46 func libcCall6(fn *libcFunc, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr, a6 uintptr) uintptr { 47 return asmlibccall6(uintptr(unsafe.Pointer(fn)), 6, uintptr(unsafe.Pointer(&a1))) 48 }