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 (mips64 || mips64le) && gc
6
7 #include "textflag.h"
8
9 #define SYNC WORD $0xf
10
11 TEXT ·RewindAndSetgid(SB),NOSPLIT|NOFRAME,$0-0
12 // Rewind stack pointer so anything that happens on the stack
13 // will clobber the test pattern created by the caller
14 ADDV $(1024*8), R29
15
16 // Ask signaller to setgid
17 MOVW $1, R1
18 SYNC
19 MOVW R1, ·Baton(SB)
20 SYNC
21
22 // Wait for setgid completion
23 loop:
24 SYNC
25 MOVW ·Baton(SB), R1
26 OR R2, R2, R2 // hint that we're in a spin loop
27 BNE R1, loop
28 SYNC
29
30 // Restore stack
31 ADDV $(-1024*8), R29
32 RET
33
View as plain text