diff options
| author | Michael Hudson-Doyle <michael.hudson@canonical.com> | 2015-05-12 11:59:14 +1200 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2015-05-12 00:50:32 +0000 |
| commit | be0cb9224b68d5be4e03fd35396d2c2f0755adad (patch) | |
| tree | 10dbcf186a5e156e05deafda390185b935c86150 /src/runtime/asm_amd64.s | |
| parent | 64b1aa12b3c9a524179a583da13fa82dd4812559 (diff) | |
| download | go-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>
Diffstat (limited to 'src/runtime/asm_amd64.s')
| -rw-r--r-- | src/runtime/asm_amd64.s | 4 |
1 files changed, 3 insertions, 1 deletions
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 |
