]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: unify amd64 -buildmode=exe entry point code
authorIan Lance Taylor <iant@golang.org>
Mon, 9 Oct 2017 18:31:20 +0000 (11:31 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 11 Oct 2017 20:07:31 +0000 (20:07 +0000)
All of the amd64 entry point code is the same except for Plan 9.
Unify it all into asm_amd64.s.

Change-Id: Id47ce3a7bb2bb0fd48f326a2d88ed18b17dee456
Reviewed-on: https://go-review.googlesource.com/69292
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/asm_amd64.s
src/runtime/rt0_android_amd64.s
src/runtime/rt0_darwin_amd64.s
src/runtime/rt0_dragonfly_amd64.s
src/runtime/rt0_freebsd_amd64.s
src/runtime/rt0_linux_amd64.s
src/runtime/rt0_netbsd_amd64.s
src/runtime/rt0_openbsd_amd64.s
src/runtime/rt0_solaris_amd64.s
src/runtime/rt0_windows_amd64.s

index d87f454e03943b7774ba3cef1491257d85c53b28..838a1681da2a6189d29ee0172485c00fda09221a 100644 (file)
@@ -7,6 +7,21 @@
 #include "funcdata.h"
 #include "textflag.h"
 
+// _rt0_amd64 is common startup code for most amd64 systems when using
+// internal linking. This is the entry point for the program from the
+// kernel for an ordinary -buildmode=exe program. The stack holds the
+// number of arguments and the C-style argv.
+TEXT _rt0_amd64(SB),NOSPLIT,$-8
+       MOVQ    0(SP), DI       // argc
+       LEAQ    8(SP), SI       // argv
+       JMP     runtime·rt0_go(SB)
+
+// main is common startup code for most amd64 systems when using
+// external linking. The C startup code will call the symbol "main"
+// passing argc and argv in the usual C ABI registers DI and SI.
+TEXT main(SB),NOSPLIT,$-8
+       JMP     runtime·rt0_go(SB)
+
 TEXT runtime·rt0_go(SB),NOSPLIT,$0
        // copy arguments forward on an even stack
        MOVQ    DI, AX          // argc
index 6420c9f35d547e6c343a08e23975bdd5a294ffc1..3077cb18411a880afb54e5b91c80af3ec42f988f 100644 (file)
@@ -5,10 +5,7 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_android(SB),NOSPLIT,$-8
-       MOVQ    0(SP), DI // argc
-       LEAQ    8(SP), SI // argv
-       MOVQ    $main(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
 
 TEXT _rt0_amd64_android_lib(SB),NOSPLIT,$0
        MOVQ    $1, DI // argc
index 655e77a86bde7269ae3d0ba583e2e130bc5a57b2..2d11aa41552700ad0ab944217c8388674fed4e69 100644 (file)
@@ -5,10 +5,7 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_darwin(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
 
 // When linking with -shared, this symbol is called when the shared library
 // is loaded.
@@ -73,7 +70,3 @@ DATA _rt0_amd64_darwin_lib_argc<>(SB)/8, $0
 GLOBL _rt0_amd64_darwin_lib_argc<>(SB),NOPTR, $8
 DATA _rt0_amd64_darwin_lib_argv<>(SB)/8, $0
 GLOBL _rt0_amd64_darwin_lib_argv<>(SB),NOPTR, $8
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
index fb56618d8f180b331853e1b613a9fa04213c2b01..166d3fafda86b625496d161c98c32491f8204563 100644 (file)
@@ -5,11 +5,4 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_dragonfly(SB),NOSPLIT,$-8
-       LEAQ    8(DI), SI // argv
-       MOVQ    0(DI), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
index 7989f7c3e9118cf98dbff3122902ce294dbf3691..5be2cd13018a86f41453ab405340e1d32a93be4b 100644 (file)
@@ -4,12 +4,8 @@
 
 #include "textflag.h"
 
+// On FreeBSD argc/argv are passed in DI, not SP, so we can't use _rt0_amd64.
 TEXT _rt0_amd64_freebsd(SB),NOSPLIT,$-8
        LEAQ    8(DI), SI // argv
        MOVQ    0(DI), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
+       JMP     runtime·rt0_go(SB)
index ced471f5cb435afda22892d7f3f9d77492e45e56..4faa1f24d38e2f76179869c495fd04d67c1339d1 100644 (file)
@@ -5,10 +5,7 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_linux(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
 
 // When building with -buildmode=c-shared, this symbol is called when the shared
 // library is loaded.
@@ -68,7 +65,3 @@ DATA _rt0_amd64_linux_lib_argc<>(SB)/8, $0
 GLOBL _rt0_amd64_linux_lib_argc<>(SB),NOPTR, $8
 DATA _rt0_amd64_linux_lib_argv<>(SB)/8, $0
 GLOBL _rt0_amd64_linux_lib_argv<>(SB),NOPTR, $8
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
index fad56614e5e85e1e4523f69523f88e1f22b73c6f..7736c8d0aa3499d8d1f98eead6e38699a2313eca 100644 (file)
@@ -5,11 +5,4 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_netbsd(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
index 58fe6663911570e9c4816d3d3ceca6bf694b3d76..6830a81cc2e659c6dc2a4d01314f2eac5059575c 100644 (file)
@@ -5,11 +5,4 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_openbsd(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
index e2d1e71bb49cbf1d720d2586e3a7b43bfdc132cb..695b4a6c8e199a8fdf0cf8544a55d4d0d78114fd 100644 (file)
@@ -5,11 +5,4 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_solaris(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
index 2f73b37f3111016f2254659ee067f0387019b796..1604711cdb89085038b43b0384db11ddfe6be1e8 100644 (file)
@@ -7,10 +7,7 @@
 #include "textflag.h"
 
 TEXT _rt0_amd64_windows(SB),NOSPLIT,$-8
-       LEAQ    8(SP), SI // argv
-       MOVQ    0(SP), DI // argc
-       MOVQ    $main(SB), AX
-       JMP     AX
+       JMP     _rt0_amd64(SB)
 
 // When building with -buildmode=(c-shared or c-archive), this
 // symbol is called. For dynamic libraries it is called when the
@@ -42,7 +39,3 @@ TEXT _rt0_amd64_windows_lib_go(SB),NOSPLIT,$0
        MOVQ    $0, SI
        MOVQ    $runtime·rt0_go(SB), AX
        JMP     AX
-
-TEXT main(SB),NOSPLIT,$-8
-       MOVQ    $runtime·rt0_go(SB), AX
-       JMP     AX