• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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//go:build gc
6
7#include "textflag.h"
8
9TEXT cas<>(SB),NOSPLIT,$0
10	MOVW	$0xffff0fc0, R15 // R15 is PC
11
12TEXT ·RewindAndSetgid(SB),NOSPLIT|NOFRAME,$0-0
13	// Save link register
14	MOVW	R14, R4
15
16	// Rewind stack pointer so anything that happens on the stack
17	// will clobber the test pattern created by the caller
18	ADD	$(1024 * 8), R13
19
20	// Ask signaller to setgid
21	MOVWBaton(SB), R2
22storeloop:
23	MOVW	0(R2), R0
24	MOVW	$1, R1
25	BL	cas<>(SB)
26	BCC	storeloop
27
28	// Wait for setgid completion
29loop:
30	MOVW	$0, R0
31	MOVW	$0, R1
32	BL	cas<>(SB)
33	BCC	loop
34
35	// Restore stack
36	SUB	$(1024 * 8), R13
37
38	MOVW	R4, R14
39	RET
40