aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hudson-Doyle <michael.hudson@canonical.com>2015-05-12 11:59:14 +1200
committerIan Lance Taylor <iant@golang.org>2015-05-12 00:50:32 +0000
commitbe0cb9224b68d5be4e03fd35396d2c2f0755adad (patch)
tree10dbcf186a5e156e05deafda390185b935c86150
parent64b1aa12b3c9a524179a583da13fa82dd4812559 (diff)
downloadgo-be0cb9224b68d5be4e03fd35396d2c2f0755adad.tar.xz
runtime: fix addmoduledata to follow the platform ABI
addmoduledata is called from a .init_array function and need to follow the platform ABI. It contains accesses to global data which are rewritten to use R15 by the assembler, and as R15 is callee-save we need to save it. Change-Id: I03893efb1576aed4f102f2465421f256f3bb0f30 Reviewed-on: https://go-review.googlesource.com/9941 Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rwxr-xr-xmisc/cgo/testshared/test.bash1
-rw-r--r--src/runtime/asm_amd64.s4
2 files changed, 4 insertions, 1 deletions
diff --git a/misc/cgo/testshared/test.bash b/misc/cgo/testshared/test.bash
index 21004adaf8..0b0d0411f7 100755
--- a/misc/cgo/testshared/test.bash
+++ b/misc/cgo/testshared/test.bash
@@ -78,6 +78,7 @@ ensure_ldd $rootdir/libdep.so $std_install_dir/$soname
# And exe that links against both
go install -installsuffix="$mysuffix" -linkshared exe
+./bin/exe || die "./bin/exe failed with code $?"
ensure_ldd ./bin/exe $rootdir/libdep.so
ensure_ldd ./bin/exe $std_install_dir/$soname
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s
index 36353d108f..0f9aeb8f37 100644
--- a/src/runtime/asm_amd64.s
+++ b/src/runtime/asm_amd64.s
@@ -1693,8 +1693,10 @@ TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
RET
// This is called from .init_array and follows the platform, not Go, ABI.
-TEXT runtime·addmoduledata(SB),NOSPLIT,$0-8
+TEXT runtime·addmoduledata(SB),NOSPLIT,$0-0
+ PUSHQ R15 // The access to global variables below implicitly uses R15, which is callee-save
MOVQ runtime·lastmoduledatap(SB), AX
MOVQ DI, moduledata_next(AX)
MOVQ DI, runtime·lastmoduledatap(SB)
+ POPQ R15
RET