github.com/razvanm/vanadium-go-1.3@v0.0.0-20160721203343-4a65068e5915/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  func setitimer(mode int32, new, old unsafe.Pointer)
    10  func sigaction(sig int32, new, old unsafe.Pointer)
    11  func sigaltstack(new, old unsafe.Pointer)
    12  func sigprocmask(mode int32, new, old unsafe.Pointer)
    13  func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, ndst uintptr) int32
    14  func getrlimit(kind int32, limit unsafe.Pointer)
    15  func miniterrno(fn unsafe.Pointer)
    16  func raise(sig int32)
    17  func getcontext(ctxt unsafe.Pointer)
    18  func tstart_sysvicall(mm unsafe.Pointer) uint32
    19  func nanotime1() int64
    20  func usleep1(usec uint32)
    21  func osyield1()
    22  func netpollinit()
    23  func netpollopen(fd uintptr, pd *pollDesc) int32
    24  func netpollclose(fd uintptr) int32
    25  func netpollarm(pd *pollDesc, mode int)
    26  
    27  type libcFunc byte
    28  
    29  var asmsysvicall6 libcFunc
    30  
    31  //go:nosplit
    32  func sysvicall0(fn *libcFunc) uintptr {
    33  	libcall := &getg().m.libcall
    34  	libcall.fn = uintptr(unsafe.Pointer(fn))
    35  	libcall.n = 0
    36  	// TODO(rsc): Why is noescape necessary here and below?
    37  	libcall.args = uintptr(noescape(unsafe.Pointer(&fn))) // it's unused but must be non-nil, otherwise crashes
    38  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    39  	return libcall.r1
    40  }
    41  
    42  //go:nosplit
    43  func sysvicall1(fn *libcFunc, a1 uintptr) uintptr {
    44  	libcall := &getg().m.libcall
    45  	libcall.fn = uintptr(unsafe.Pointer(fn))
    46  	libcall.n = 1
    47  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    48  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    49  	return libcall.r1
    50  }
    51  
    52  //go:nosplit
    53  func sysvicall2(fn *libcFunc, a1, a2 uintptr) uintptr {
    54  	libcall := &getg().m.libcall
    55  	libcall.fn = uintptr(unsafe.Pointer(fn))
    56  	libcall.n = 2
    57  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    58  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    59  	return libcall.r1
    60  }
    61  
    62  //go:nosplit
    63  func sysvicall3(fn *libcFunc, a1, a2, a3 uintptr) uintptr {
    64  	libcall := &getg().m.libcall
    65  	libcall.fn = uintptr(unsafe.Pointer(fn))
    66  	libcall.n = 3
    67  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    68  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    69  	return libcall.r1
    70  }
    71  
    72  //go:nosplit
    73  func sysvicall4(fn *libcFunc, a1, a2, a3, a4 uintptr) uintptr {
    74  	libcall := &getg().m.libcall
    75  	libcall.fn = uintptr(unsafe.Pointer(fn))
    76  	libcall.n = 4
    77  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    78  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    79  	return libcall.r1
    80  }
    81  
    82  //go:nosplit
    83  func sysvicall5(fn *libcFunc, a1, a2, a3, a4, a5 uintptr) uintptr {
    84  	libcall := &getg().m.libcall
    85  	libcall.fn = uintptr(unsafe.Pointer(fn))
    86  	libcall.n = 5
    87  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    88  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    89  	return libcall.r1
    90  }
    91  
    92  //go:nosplit
    93  func sysvicall6(fn *libcFunc, a1, a2, a3, a4, a5, a6 uintptr) uintptr {
    94  	libcall := &getg().m.libcall
    95  	libcall.fn = uintptr(unsafe.Pointer(fn))
    96  	libcall.n = 6
    97  	libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
    98  	asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(libcall))
    99  	return libcall.r1
   100  }