Commit 6c4f8cd0 authored by Elias Naur's avatar Elias Naur

misc/cgo/test: fix issue9400 test on android/386

The test for #9400 relies on an assembler function that manipulates
the stack pointer. Meanwile, it uses a global variable for
synchronization. However, position independent code on 386 use a
function call to fetch the base address for global variables.
That function call in turn overwrites the Go stack.

Fix that by fetching the global variable address once before the
stack register manipulation.

Fixes the android/386 builder.

Change-Id: Ib77bd80affaa12f09d582d09d8b84a73bd021b60
Reviewed-on: https://go-review.googlesource.com/23683
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
parent 42c51deb
...@@ -7,17 +7,18 @@ ...@@ -7,17 +7,18 @@
#include "textflag.h" #include "textflag.h"
TEXT ·RewindAndSetgid(SB),NOSPLIT,$0-0 TEXT ·RewindAndSetgid(SB),NOSPLIT,$0-0
MOVL Baton(SB), BX
// Rewind stack pointer so anything that happens on the stack // Rewind stack pointer so anything that happens on the stack
// will clobber the test pattern created by the caller // will clobber the test pattern created by the caller
ADDL $(1024 * 8), SP ADDL $(1024 * 8), SP
// Ask signaller to setgid // Ask signaller to setgid
MOVL $1, ·Baton(SB) MOVL $1, (BX)
// Wait for setgid completion // Wait for setgid completion
loop: loop:
PAUSE PAUSE
MOVL ·Baton(SB), AX MOVL (BX), AX
CMPL AX, $0 CMPL AX, $0
JNE loop JNE loop
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment