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