Skip to content

Commit 60f6763

Browse files
committed
runtime: fix vet complaints for solaris/amd64, illumos/amd64
Working toward making the tree vet-safe instead of having so many exceptions in cmd/vet/all/whitelist. This CL makes "go vet -unsafeptr=false runtime" happy for these GOOS/GOARCHes, while keeping "GO_BUILDER_NAME=misc-vetall go tool dist test" happy too. For #31916. Change-Id: Ic64f7f4034695dd4c32c9b7f258960faf3742a83 Reviewed-on: https://go-review.googlesource.com/c/go/+/176103 Run-TryBot: Russ Cox <[email protected]> Reviewed-by: Austin Clements <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent 49f62af commit 60f6763

File tree

6 files changed

+44
-47
lines changed

6 files changed

+44
-47
lines changed

src/cmd/vet/all/whitelist/illumos_amd64.txt

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/cmd/vet/all/whitelist/solaris_amd64.txt

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/runtime/os3_solaris.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ func semacreate(mp *m) {
294294
_g_.m.scratch = mscratch{}
295295
_g_.m.scratch.v[0] = unsafe.Sizeof(*sem)
296296
_g_.m.libcall.args = uintptr(unsafe.Pointer(&_g_.m.scratch))
297-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&_g_.m.libcall))
297+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&_g_.m.libcall))
298298
sem = (*semt)(unsafe.Pointer(_g_.m.libcall.r1))
299299
if sem_init(sem, 0, 0) != 0 {
300300
throw("sem_init")
@@ -315,7 +315,7 @@ func semasleep(ns int64) int32 {
315315
_m_.scratch.v[0] = _m_.waitsema
316316
_m_.scratch.v[1] = uintptr(unsafe.Pointer(&_m_.ts))
317317
_m_.libcall.args = uintptr(unsafe.Pointer(&_m_.scratch))
318-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&_m_.libcall))
318+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&_m_.libcall))
319319
if *_m_.perrno != 0 {
320320
if *_m_.perrno == _ETIMEDOUT || *_m_.perrno == _EAGAIN || *_m_.perrno == _EINTR {
321321
return -1
@@ -330,7 +330,7 @@ func semasleep(ns int64) int32 {
330330
_m_.scratch = mscratch{}
331331
_m_.scratch.v[0] = _m_.waitsema
332332
_m_.libcall.args = uintptr(unsafe.Pointer(&_m_.scratch))
333-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&_m_.libcall))
333+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&_m_.libcall))
334334
if _m_.libcall.r1 == 0 {
335335
break
336336
}
@@ -384,7 +384,7 @@ func doMmap(addr, n, prot, flags, fd, off uintptr) (uintptr, uintptr) {
384384
libcall.fn = uintptr(unsafe.Pointer(&libc_mmap))
385385
libcall.n = 6
386386
libcall.args = uintptr(noescape(unsafe.Pointer(&addr)))
387-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
387+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
388388
return libcall.r1, libcall.err
389389
}
390390

src/runtime/os_solaris.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ type mOS struct {
2727

2828
type libcFunc uintptr
2929

30-
var asmsysvicall6 libcFunc
30+
//go:linkname asmsysvicall6x runtime.asmsysvicall6
31+
var asmsysvicall6x libcFunc // name to take addr of asmsysvicall6
32+
33+
func asmsysvicall6() // declared for vet; do NOT call
3134

3235
//go:nosplit
3336
func sysvicall0(fn *libcFunc) uintptr {
@@ -51,7 +54,7 @@ func sysvicall0(fn *libcFunc) uintptr {
5154
libcall.fn = uintptr(unsafe.Pointer(fn))
5255
libcall.n = 0
5356
libcall.args = uintptr(unsafe.Pointer(fn)) // it's unused but must be non-nil, otherwise crashes
54-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
57+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
5558
if mp != nil {
5659
mp.libcallsp = 0
5760
}
@@ -81,7 +84,7 @@ func sysvicall1(fn *libcFunc, a1 uintptr) uintptr {
8184
libcall.n = 1
8285
// TODO(rsc): Why is noescape necessary here and below?
8386
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
84-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
87+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
8588
if mp != nil {
8689
mp.libcallsp = 0
8790
}
@@ -110,7 +113,7 @@ func sysvicall2(fn *libcFunc, a1, a2 uintptr) uintptr {
110113
libcall.fn = uintptr(unsafe.Pointer(fn))
111114
libcall.n = 2
112115
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
113-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
116+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
114117
if mp != nil {
115118
mp.libcallsp = 0
116119
}
@@ -139,7 +142,7 @@ func sysvicall3(fn *libcFunc, a1, a2, a3 uintptr) uintptr {
139142
libcall.fn = uintptr(unsafe.Pointer(fn))
140143
libcall.n = 3
141144
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
142-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
145+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
143146
if mp != nil {
144147
mp.libcallsp = 0
145148
}
@@ -168,7 +171,7 @@ func sysvicall4(fn *libcFunc, a1, a2, a3, a4 uintptr) uintptr {
168171
libcall.fn = uintptr(unsafe.Pointer(fn))
169172
libcall.n = 4
170173
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
171-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
174+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
172175
if mp != nil {
173176
mp.libcallsp = 0
174177
}
@@ -197,7 +200,7 @@ func sysvicall5(fn *libcFunc, a1, a2, a3, a4, a5 uintptr) uintptr {
197200
libcall.fn = uintptr(unsafe.Pointer(fn))
198201
libcall.n = 5
199202
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
200-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
203+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
201204
if mp != nil {
202205
mp.libcallsp = 0
203206
}
@@ -226,7 +229,7 @@ func sysvicall6(fn *libcFunc, a1, a2, a3, a4, a5, a6 uintptr) uintptr {
226229
libcall.fn = uintptr(unsafe.Pointer(fn))
227230
libcall.n = 6
228231
libcall.args = uintptr(noescape(unsafe.Pointer(&a1)))
229-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&libcall))
232+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&libcall))
230233
if mp != nil {
231234
mp.libcallsp = 0
232235
}

src/runtime/sys_solaris_amd64.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
291291
// can also be called in cgo callback path without a g->m.
292292
TEXT runtime·usleep1(SB),NOSPLIT,$0
293293
MOVL usec+0(FP), DI
294-
MOVQ $runtime·usleep2(SB), AX // to hide from 6l
294+
MOVQ $usleep2<>(SB), AX // to hide from 6l
295295

296296
// Execute call on m->g0.
297297
get_tls(R15)
@@ -328,7 +328,7 @@ noswitch:
328328
RET
329329

330330
// Runs on OS stack. duration (in µs units) is in DI.
331-
TEXT runtime·usleep2(SB),NOSPLIT,$0
331+
TEXT usleep2<>(SB),NOSPLIT,$0
332332
LEAQ libc_usleep(SB), AX
333333
CALL AX
334334
RET

src/runtime/syscall_solaris.go

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,14 @@ var (
2323
libc_setuid,
2424
libc_setpgid,
2525
libc_syscall,
26-
libc_wait4,
27-
pipe1 libcFunc
26+
libc_wait4 libcFunc
2827
)
2928

29+
//go:linkname pipe1x runtime.pipe1
30+
var pipe1x libcFunc // name to take addr of pipe1
31+
32+
func pipe1() // declared for vet; do NOT call
33+
3034
//go:nosplit
3135
func syscall_sysvicall6(fn, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
3236
call := libcall{
@@ -35,7 +39,7 @@ func syscall_sysvicall6(fn, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err
3539
args: uintptr(unsafe.Pointer(&a1)),
3640
}
3741
entersyscallblock()
38-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
42+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
3943
exitsyscall()
4044
return call.r1, call.r2, call.err
4145
}
@@ -47,7 +51,7 @@ func syscall_rawsysvicall6(fn, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, e
4751
n: nargs,
4852
args: uintptr(unsafe.Pointer(&a1)),
4953
}
50-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
54+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
5155
return call.r1, call.r2, call.err
5256
}
5357

@@ -62,7 +66,7 @@ func syscall_chdir(path uintptr) (err uintptr) {
6266
n: 1,
6367
args: uintptr(unsafe.Pointer(&path)),
6468
}
65-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
69+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
6670
return call.err
6771
}
6872

@@ -73,7 +77,7 @@ func syscall_chroot(path uintptr) (err uintptr) {
7377
n: 1,
7478
args: uintptr(unsafe.Pointer(&path)),
7579
}
76-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
80+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
7781
return call.err
7882
}
7983

@@ -97,7 +101,7 @@ func syscall_execve(path, argv, envp uintptr) (err uintptr) {
97101
n: 3,
98102
args: uintptr(unsafe.Pointer(&path)),
99103
}
100-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
104+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
101105
return call.err
102106
}
103107

@@ -114,7 +118,7 @@ func syscall_fcntl(fd, cmd, arg uintptr) (val, err uintptr) {
114118
n: 3,
115119
args: uintptr(unsafe.Pointer(&fd)),
116120
}
117-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
121+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
118122
return call.r1, call.err
119123
}
120124

@@ -125,7 +129,7 @@ func syscall_forkx(flags uintptr) (pid uintptr, err uintptr) {
125129
n: 1,
126130
args: uintptr(unsafe.Pointer(&flags)),
127131
}
128-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
132+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
129133
return call.r1, call.err
130134
}
131135

@@ -138,7 +142,7 @@ func syscall_gethostname() (name string, err uintptr) {
138142
args: uintptr(unsafe.Pointer(&args[0])),
139143
}
140144
entersyscallblock()
141-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
145+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
142146
exitsyscall()
143147
if call.r1 != 0 {
144148
return "", call.err
@@ -154,7 +158,7 @@ func syscall_getpid() (pid, err uintptr) {
154158
n: 0,
155159
args: uintptr(unsafe.Pointer(&libc_getpid)), // it's unused but must be non-nil, otherwise crashes
156160
}
157-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
161+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
158162
return call.r1, call.err
159163
}
160164

@@ -165,18 +169,18 @@ func syscall_ioctl(fd, req, arg uintptr) (err uintptr) {
165169
n: 3,
166170
args: uintptr(unsafe.Pointer(&fd)),
167171
}
168-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
172+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
169173
return call.err
170174
}
171175

172176
func syscall_pipe() (r, w, err uintptr) {
173177
call := libcall{
174-
fn: uintptr(unsafe.Pointer(&pipe1)),
178+
fn: uintptr(unsafe.Pointer(&pipe1x)),
175179
n: 0,
176-
args: uintptr(unsafe.Pointer(&pipe1)), // it's unused but must be non-nil, otherwise crashes
180+
args: uintptr(unsafe.Pointer(&pipe1x)), // it's unused but must be non-nil, otherwise crashes
177181
}
178182
entersyscallblock()
179-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
183+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
180184
exitsyscall()
181185
return call.r1, call.r2, call.err
182186
}
@@ -200,7 +204,7 @@ func syscall_setgid(gid uintptr) (err uintptr) {
200204
n: 1,
201205
args: uintptr(unsafe.Pointer(&gid)),
202206
}
203-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
207+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
204208
return call.err
205209
}
206210

@@ -211,7 +215,7 @@ func syscall_setgroups(ngid, gid uintptr) (err uintptr) {
211215
n: 2,
212216
args: uintptr(unsafe.Pointer(&ngid)),
213217
}
214-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
218+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
215219
return call.err
216220
}
217221

@@ -222,7 +226,7 @@ func syscall_setsid() (pid, err uintptr) {
222226
n: 0,
223227
args: uintptr(unsafe.Pointer(&libc_setsid)), // it's unused but must be non-nil, otherwise crashes
224228
}
225-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
229+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
226230
return call.r1, call.err
227231
}
228232

@@ -233,7 +237,7 @@ func syscall_setuid(uid uintptr) (err uintptr) {
233237
n: 1,
234238
args: uintptr(unsafe.Pointer(&uid)),
235239
}
236-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
240+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
237241
return call.err
238242
}
239243

@@ -244,7 +248,7 @@ func syscall_setpgid(pid, pgid uintptr) (err uintptr) {
244248
n: 2,
245249
args: uintptr(unsafe.Pointer(&pid)),
246250
}
247-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
251+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
248252
return call.err
249253
}
250254

@@ -255,7 +259,7 @@ func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
255259
args: uintptr(unsafe.Pointer(&trap)),
256260
}
257261
entersyscallblock()
258-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
262+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
259263
exitsyscall()
260264
return call.r1, call.r2, call.err
261265
}
@@ -267,7 +271,7 @@ func syscall_wait4(pid uintptr, wstatus *uint32, options uintptr, rusage unsafe.
267271
args: uintptr(unsafe.Pointer(&pid)),
268272
}
269273
entersyscallblock()
270-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
274+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
271275
exitsyscall()
272276
return int(call.r1), call.err
273277
}
@@ -279,6 +283,6 @@ func syscall_write(fd, buf, nbyte uintptr) (n, err uintptr) {
279283
n: 3,
280284
args: uintptr(unsafe.Pointer(&fd)),
281285
}
282-
asmcgocall(unsafe.Pointer(&asmsysvicall6), unsafe.Pointer(&call))
286+
asmcgocall(unsafe.Pointer(&asmsysvicall6x), unsafe.Pointer(&call))
283287
return call.r1, call.err
284288
}

0 commit comments

Comments
 (0)