rsc.io/go@v0.0.0-20150416155037-e040fd465409/src/runtime/os_solaris.go (about)

     1  // Copyright 2014 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package runtime
     6  
     7  import "unsafe"
     8  
     9  type libcFunc uintptr
    10  
    11  var asmsysvicall6 libcFunc
    12  
    13  //go:nosplit
    14  func sysvicall0(fn libcFunc) uintptr {
    15  	libcall := &getg().m.libcall
    16  	libcall.fn = uintptr(fn)
    17  	libcall.n = 0
    18  	libcall.args = uintptr(fn) // it's unused but must be non-nil, otherwise crashes
    19  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    20  	return libcall.r1
    21  }
    22  
    23  //go:nosplit
    24  func sysvicall1(fn libcFunc, a1 uintptr) uintptr {
    25  	libcall := &getg().m.libcall
    26  	libcall.fn = uintptr(fn)
    27  	libcall.n = 1
    28  	// TODO(rsc): Why is noescape necessary here and below?
    29  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    30  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    31  	return libcall.r1
    32  }
    33  
    34  //go:nosplit
    35  func sysvicall2(fn libcFunc, a1, a2 uintptr) uintptr {
    36  	libcall := &getg().m.libcall
    37  	libcall.fn = uintptr(fn)
    38  	libcall.n = 2
    39  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    40  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    41  	return libcall.r1
    42  }
    43  
    44  //go:nosplit
    45  func sysvicall3(fn libcFunc, a1, a2, a3 uintptr) uintptr {
    46  	libcall := &getg().m.libcall
    47  	libcall.fn = uintptr(fn)
    48  	libcall.n = 3
    49  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    50  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    51  	return libcall.r1
    52  }
    53  
    54  //go:nosplit
    55  func sysvicall4(fn libcFunc, a1, a2, a3, a4 uintptr) uintptr {
    56  	libcall := &getg().m.libcall
    57  	libcall.fn = uintptr(fn)
    58  	libcall.n = 4
    59  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    60  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    61  	return libcall.r1
    62  }
    63  
    64  //go:nosplit
    65  func sysvicall5(fn libcFunc, a1, a2, a3, a4, a5 uintptr) uintptr {
    66  	libcall := &getg().m.libcall
    67  	libcall.fn = uintptr(fn)
    68  	libcall.n = 5
    69  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    70  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    71  	return libcall.r1
    72  }
    73  
    74  //go:nosplit
    75  func sysvicall6(fn libcFunc, a1, a2, a3, a4, a5, a6 uintptr) uintptr {
    76  	libcall := &getg().m.libcall
    77  	libcall.fn = uintptr(fn)
    78  	libcall.n = 6
    79  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    80  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    81  	return libcall.r1
    82  }