mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
64b1aa12b3
commit
be0cb9224b
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue