// Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build !gccgo #include "textflag.h" TEXT ·RewindAndSetgid(SB),NOSPLIT|NOFRAME,$0-0 // Save link register MOVD R30, R9 // Rewind stack pointer so anything that happens on the stack // will clobber the test pattern created by the caller ADD $(1024 * 8), RSP // Ask signaller to setgid MOVD $·Baton(SB), R0 MOVD $1, R1 storeloop: LDAXRW (R0), R2 STLXRW R1, (R0), R3 CBNZ R3, storeloop // Wait for setgid completion MOVW $0, R1 MOVW $0, R2 loop: LDAXRW (R0), R3 CMPW R1, R3 BNE loop STLXRW R2, (R0), R3 CBNZ R3, loop // Restore stack SUB $(1024 * 8), RSP MOVD R9, R30 RET