linux.go RawHistoryFolder
1// Copyright 2016 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//go:build !cgo && linux
6
7package fakecgo
8
9import (
10 "structs"
11 "unsafe"
12)
13
14// argset matches runtime/cgocall.go:argset, which in turn matches
15// runtime/cgo/linux_syscall.c:argset_t.
16type argset struct {
17 _ structs.HostLayout
18 args *uintptr
19 retval uintptr
20}
21
22//go:nosplit
23//go:norace
24func (a *argset) arg(i int) unsafe.Pointer {
25 return *(*unsafe.Pointer)(unsafe.Add(unsafe.Pointer(a.args), uintptr(i)*unsafe.Sizeof(uintptr(0))))
26}
27
28//go:linkname _cgo_libc_setegid syscall.cgo_libc_setegid
29//go:linkname _cgo_libc_seteuid syscall.cgo_libc_seteuid
30//go:linkname _cgo_libc_setgid syscall.cgo_libc_setgid
31//go:linkname _cgo_libc_setregid syscall.cgo_libc_setregid
32//go:linkname _cgo_libc_setresgid syscall.cgo_libc_setresgid
33//go:linkname _cgo_libc_setresuid syscall.cgo_libc_setresuid
34//go:linkname _cgo_libc_setreuid syscall.cgo_libc_setreuid
35//go:linkname _cgo_libc_setuid syscall.cgo_libc_setuid
36//go:linkname _cgo_libc_setgroups syscall.cgo_libc_setgroups
37
38var _cgo_libc_setegid = &_cgo_purego_setegid_trampoline
39var _cgo_libc_seteuid = &_cgo_purego_seteuid_trampoline
40var _cgo_libc_setgid = &_cgo_purego_setgid_trampoline
41var _cgo_libc_setregid = &_cgo_purego_setregid_trampoline
42var _cgo_libc_setresgid = &_cgo_purego_setresgid_trampoline
43var _cgo_libc_setresuid = &_cgo_purego_setresuid_trampoline
44var _cgo_libc_setreuid = &_cgo_purego_setreuid_trampoline
45var _cgo_libc_setuid = &_cgo_purego_setuid_trampoline
46var _cgo_libc_setgroups = &_cgo_purego_setgroups_trampoline
47
48//go:nosplit
49//go:norace
50func errno() int32 {
51 // this indirection is to avoid go vet complaining about possible misuse of unsafe.Pointer
52 loc := __errno_location()
53 return **(**int32)(unsafe.Pointer(&loc))
54}
55
56//go:linkname _cgo_purego_setegid_trampoline _cgo_purego_setegid_trampoline
57var _cgo_purego_setegid_trampoline byte
58var x_cgo_purego_setegid_call = x_cgo_purego_setegid
59
60//go:nosplit
61//go:norace
62func x_cgo_purego_setegid(c *argset) {
63 ret := setegid(uint32(uintptr(c.arg(0))))
64 if ret == -1 {
65 c.retval = uintptr(errno())
66 } else {
67 c.retval = uintptr(ret)
68 }
69}
70
71//go:linkname _cgo_purego_seteuid_trampoline _cgo_purego_seteuid_trampoline
72var _cgo_purego_seteuid_trampoline byte
73var x_cgo_purego_seteuid_call = x_cgo_purego_seteuid
74
75//go:nosplit
76//go:norace
77func x_cgo_purego_seteuid(c *argset) {
78 ret := seteuid(uint32(uintptr(c.arg(0))))
79 if ret == -1 {
80 c.retval = uintptr(errno())
81 } else {
82 c.retval = uintptr(ret)
83 }
84}
85
86//go:linkname _cgo_purego_setgid_trampoline _cgo_purego_setgid_trampoline
87var _cgo_purego_setgid_trampoline byte
88var x_cgo_purego_setgid_call = x_cgo_purego_setgid
89
90//go:nosplit
91//go:norace
92func x_cgo_purego_setgid(c *argset) {
93 ret := setgid(uint32(uintptr(c.arg(0))))
94 if ret == -1 {
95 c.retval = uintptr(errno())
96 } else {
97 c.retval = uintptr(ret)
98 }
99}
100
101//go:linkname _cgo_purego_setregid_trampoline _cgo_purego_setregid_trampoline
102var _cgo_purego_setregid_trampoline byte
103var x_cgo_purego_setregid_call = x_cgo_purego_setregid
104
105//go:nosplit
106//go:norace
107func x_cgo_purego_setregid(c *argset) {
108 ret := setregid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))))
109 if ret == -1 {
110 c.retval = uintptr(errno())
111 } else {
112 c.retval = uintptr(ret)
113 }
114}
115
116//go:linkname _cgo_purego_setresgid_trampoline _cgo_purego_setresgid_trampoline
117var _cgo_purego_setresgid_trampoline byte
118var x_cgo_purego_setresgid_call = x_cgo_purego_setresgid
119
120//go:nosplit
121//go:norace
122func x_cgo_purego_setresgid(c *argset) {
123 ret := setresgid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))), uint32(uintptr(c.arg(2))))
124 if ret == -1 {
125 c.retval = uintptr(errno())
126 } else {
127 c.retval = uintptr(ret)
128 }
129}
130
131//go:linkname _cgo_purego_setresuid_trampoline _cgo_purego_setresuid_trampoline
132var _cgo_purego_setresuid_trampoline byte
133var x_cgo_purego_setresuid_call = x_cgo_purego_setresuid
134
135//go:nosplit
136//go:norace
137func x_cgo_purego_setresuid(c *argset) {
138 ret := setresuid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))), uint32(uintptr(c.arg(2))))
139 if ret == -1 {
140 c.retval = uintptr(errno())
141 } else {
142 c.retval = uintptr(ret)
143 }
144}
145
146//go:linkname _cgo_purego_setreuid_trampoline _cgo_purego_setreuid_trampoline
147var _cgo_purego_setreuid_trampoline byte
148var x_cgo_purego_setreuid_call = x_cgo_purego_setreuid
149
150//go:nosplit
151//go:norace
152func x_cgo_purego_setreuid(c *argset) {
153 ret := setreuid(uint32(uintptr(c.arg(0))), uint32(uintptr(c.arg(1))))
154 if ret == -1 {
155 c.retval = uintptr(errno())
156 } else {
157 c.retval = uintptr(ret)
158 }
159}
160
161//go:linkname _cgo_purego_setuid_trampoline _cgo_purego_setuid_trampoline
162var _cgo_purego_setuid_trampoline byte
163var x_cgo_purego_setuid_call = x_cgo_purego_setuid
164
165//go:nosplit
166//go:norace
167func x_cgo_purego_setuid(c *argset) {
168 ret := setuid(uint32(uintptr(c.arg(0))))
169 if ret == -1 {
170 c.retval = uintptr(errno())
171 } else {
172 c.retval = uintptr(ret)
173 }
174}
175
176//go:linkname _cgo_purego_setgroups_trampoline _cgo_purego_setgroups_trampoline
177var _cgo_purego_setgroups_trampoline byte
178var x_cgo_purego_setgroups_call = x_cgo_purego_setgroups
179
180//go:nosplit
181//go:norace
182func x_cgo_purego_setgroups(c *argset) {
183 ret := setgroups(uint32(uintptr(c.arg(0))), (*uint32)(c.arg(1)))
184 if ret == -1 {
185 c.retval = uintptr(errno())
186 } else {
187 c.retval = uintptr(ret)
188 }
189}