mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: unify riscv64 library entry point
Cq-Include-Trybots: luci.golang.try:gotip-linux-riscv64 Change-Id: I6470dfc5c9e03dfe5fc535605fdd7d861b9ba2f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/706415 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Joel Sing <joel@sing.id.au> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
0c14000f87
commit
36863d6194
3 changed files with 102 additions and 188 deletions
|
|
@ -6,6 +6,104 @@
|
||||||
#include "funcdata.h"
|
#include "funcdata.h"
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
|
|
||||||
|
|
||||||
|
// When building with -buildmode=c-shared, this symbol is called when the shared
|
||||||
|
// library is loaded.
|
||||||
|
TEXT _rt0_riscv64_lib(SB),NOSPLIT,$224
|
||||||
|
// Preserve callee-save registers, along with X1 (LR).
|
||||||
|
MOV X1, (8*3)(X2)
|
||||||
|
MOV X8, (8*4)(X2)
|
||||||
|
MOV X9, (8*5)(X2)
|
||||||
|
MOV X18, (8*6)(X2)
|
||||||
|
MOV X19, (8*7)(X2)
|
||||||
|
MOV X20, (8*8)(X2)
|
||||||
|
MOV X21, (8*9)(X2)
|
||||||
|
MOV X22, (8*10)(X2)
|
||||||
|
MOV X23, (8*11)(X2)
|
||||||
|
MOV X24, (8*12)(X2)
|
||||||
|
MOV X25, (8*13)(X2)
|
||||||
|
MOV X26, (8*14)(X2)
|
||||||
|
MOV g, (8*15)(X2)
|
||||||
|
MOVD F8, (8*16)(X2)
|
||||||
|
MOVD F9, (8*17)(X2)
|
||||||
|
MOVD F18, (8*18)(X2)
|
||||||
|
MOVD F19, (8*19)(X2)
|
||||||
|
MOVD F20, (8*20)(X2)
|
||||||
|
MOVD F21, (8*21)(X2)
|
||||||
|
MOVD F22, (8*22)(X2)
|
||||||
|
MOVD F23, (8*23)(X2)
|
||||||
|
MOVD F24, (8*24)(X2)
|
||||||
|
MOVD F25, (8*25)(X2)
|
||||||
|
MOVD F26, (8*26)(X2)
|
||||||
|
MOVD F27, (8*27)(X2)
|
||||||
|
|
||||||
|
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
|
||||||
|
MOV X0, g
|
||||||
|
|
||||||
|
MOV A0, _rt0_riscv64_lib_argc<>(SB)
|
||||||
|
MOV A1, _rt0_riscv64_lib_argv<>(SB)
|
||||||
|
|
||||||
|
// Synchronous initialization.
|
||||||
|
MOV $runtime·libpreinit(SB), T0
|
||||||
|
JALR RA, T0
|
||||||
|
|
||||||
|
// Create a new thread to do the runtime initialization and return.
|
||||||
|
MOV _cgo_sys_thread_create(SB), T0
|
||||||
|
BEQZ T0, nocgo
|
||||||
|
MOV $_rt0_riscv64_lib_go(SB), A0
|
||||||
|
MOV $0, A1
|
||||||
|
JALR RA, T0
|
||||||
|
JMP restore
|
||||||
|
|
||||||
|
nocgo:
|
||||||
|
MOV $0x800000, A0 // stacksize = 8192KB
|
||||||
|
MOV $_rt0_riscv64_lib_go(SB), A1
|
||||||
|
MOV A0, 8(X2)
|
||||||
|
MOV A1, 16(X2)
|
||||||
|
MOV $runtime·newosproc0(SB), T0
|
||||||
|
JALR RA, T0
|
||||||
|
|
||||||
|
restore:
|
||||||
|
// Restore callee-save registers, along with X1 (LR).
|
||||||
|
MOV (8*3)(X2), X1
|
||||||
|
MOV (8*4)(X2), X8
|
||||||
|
MOV (8*5)(X2), X9
|
||||||
|
MOV (8*6)(X2), X18
|
||||||
|
MOV (8*7)(X2), X19
|
||||||
|
MOV (8*8)(X2), X20
|
||||||
|
MOV (8*9)(X2), X21
|
||||||
|
MOV (8*10)(X2), X22
|
||||||
|
MOV (8*11)(X2), X23
|
||||||
|
MOV (8*12)(X2), X24
|
||||||
|
MOV (8*13)(X2), X25
|
||||||
|
MOV (8*14)(X2), X26
|
||||||
|
MOV (8*15)(X2), g
|
||||||
|
MOVD (8*16)(X2), F8
|
||||||
|
MOVD (8*17)(X2), F9
|
||||||
|
MOVD (8*18)(X2), F18
|
||||||
|
MOVD (8*19)(X2), F19
|
||||||
|
MOVD (8*20)(X2), F20
|
||||||
|
MOVD (8*21)(X2), F21
|
||||||
|
MOVD (8*22)(X2), F22
|
||||||
|
MOVD (8*23)(X2), F23
|
||||||
|
MOVD (8*24)(X2), F24
|
||||||
|
MOVD (8*25)(X2), F25
|
||||||
|
MOVD (8*26)(X2), F26
|
||||||
|
MOVD (8*27)(X2), F27
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
TEXT _rt0_riscv64_lib_go(SB),NOSPLIT,$0
|
||||||
|
MOV _rt0_riscv64_lib_argc<>(SB), A0
|
||||||
|
MOV _rt0_riscv64_lib_argv<>(SB), A1
|
||||||
|
MOV $runtime·rt0_go(SB), T0
|
||||||
|
JALR ZERO, T0
|
||||||
|
|
||||||
|
DATA _rt0_riscv64_lib_argc<>(SB)/8, $0
|
||||||
|
GLOBL _rt0_riscv64_lib_argc<>(SB),NOPTR, $8
|
||||||
|
DATA _rt0_riscv64_lib_argv<>(SB)/8, $0
|
||||||
|
GLOBL _rt0_riscv64_lib_argv<>(SB),NOPTR, $8
|
||||||
|
|
||||||
// func rt0_go()
|
// func rt0_go()
|
||||||
TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
|
TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
|
||||||
// X2 = stack; A0 = argc; A1 = argv
|
// X2 = stack; A0 = argc; A1 = argv
|
||||||
|
|
|
||||||
|
|
@ -12,100 +12,8 @@ TEXT _rt0_riscv64_freebsd(SB),NOSPLIT|NOFRAME,$0
|
||||||
|
|
||||||
// When building with -buildmode=c-shared, this symbol is called when the shared
|
// When building with -buildmode=c-shared, this symbol is called when the shared
|
||||||
// library is loaded.
|
// library is loaded.
|
||||||
TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$224
|
TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$0
|
||||||
// Preserve callee-save registers, along with X1 (LR).
|
JMP _rt0_riscv64_lib(SB)
|
||||||
MOV X1, (8*3)(X2)
|
|
||||||
MOV X8, (8*4)(X2)
|
|
||||||
MOV X9, (8*5)(X2)
|
|
||||||
MOV X18, (8*6)(X2)
|
|
||||||
MOV X19, (8*7)(X2)
|
|
||||||
MOV X20, (8*8)(X2)
|
|
||||||
MOV X21, (8*9)(X2)
|
|
||||||
MOV X22, (8*10)(X2)
|
|
||||||
MOV X23, (8*11)(X2)
|
|
||||||
MOV X24, (8*12)(X2)
|
|
||||||
MOV X25, (8*13)(X2)
|
|
||||||
MOV X26, (8*14)(X2)
|
|
||||||
MOV g, (8*15)(X2)
|
|
||||||
MOVD F8, (8*16)(X2)
|
|
||||||
MOVD F9, (8*17)(X2)
|
|
||||||
MOVD F18, (8*18)(X2)
|
|
||||||
MOVD F19, (8*19)(X2)
|
|
||||||
MOVD F20, (8*20)(X2)
|
|
||||||
MOVD F21, (8*21)(X2)
|
|
||||||
MOVD F22, (8*22)(X2)
|
|
||||||
MOVD F23, (8*23)(X2)
|
|
||||||
MOVD F24, (8*24)(X2)
|
|
||||||
MOVD F25, (8*25)(X2)
|
|
||||||
MOVD F26, (8*26)(X2)
|
|
||||||
MOVD F27, (8*27)(X2)
|
|
||||||
|
|
||||||
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
|
|
||||||
MOV X0, g
|
|
||||||
|
|
||||||
MOV A0, _rt0_riscv64_freebsd_lib_argc<>(SB)
|
|
||||||
MOV A1, _rt0_riscv64_freebsd_lib_argv<>(SB)
|
|
||||||
|
|
||||||
// Synchronous initialization.
|
|
||||||
MOV $runtime·libpreinit(SB), T0
|
|
||||||
JALR RA, T0
|
|
||||||
|
|
||||||
// Create a new thread to do the runtime initialization and return.
|
|
||||||
MOV _cgo_sys_thread_create(SB), T0
|
|
||||||
BEQZ T0, nocgo
|
|
||||||
MOV $_rt0_riscv64_freebsd_lib_go(SB), A0
|
|
||||||
MOV $0, A1
|
|
||||||
JALR RA, T0
|
|
||||||
JMP restore
|
|
||||||
|
|
||||||
nocgo:
|
|
||||||
MOV $0x800000, A0 // stacksize = 8192KB
|
|
||||||
MOV $_rt0_riscv64_freebsd_lib_go(SB), A1
|
|
||||||
MOV A0, 8(X2)
|
|
||||||
MOV A1, 16(X2)
|
|
||||||
MOV $runtime·newosproc0(SB), T0
|
|
||||||
JALR RA, T0
|
|
||||||
|
|
||||||
restore:
|
|
||||||
// Restore callee-save registers, along with X1 (LR).
|
|
||||||
MOV (8*3)(X2), X1
|
|
||||||
MOV (8*4)(X2), X8
|
|
||||||
MOV (8*5)(X2), X9
|
|
||||||
MOV (8*6)(X2), X18
|
|
||||||
MOV (8*7)(X2), X19
|
|
||||||
MOV (8*8)(X2), X20
|
|
||||||
MOV (8*9)(X2), X21
|
|
||||||
MOV (8*10)(X2), X22
|
|
||||||
MOV (8*11)(X2), X23
|
|
||||||
MOV (8*12)(X2), X24
|
|
||||||
MOV (8*13)(X2), X25
|
|
||||||
MOV (8*14)(X2), X26
|
|
||||||
MOV (8*15)(X2), g
|
|
||||||
MOVD (8*16)(X2), F8
|
|
||||||
MOVD (8*17)(X2), F9
|
|
||||||
MOVD (8*18)(X2), F18
|
|
||||||
MOVD (8*19)(X2), F19
|
|
||||||
MOVD (8*20)(X2), F20
|
|
||||||
MOVD (8*21)(X2), F21
|
|
||||||
MOVD (8*22)(X2), F22
|
|
||||||
MOVD (8*23)(X2), F23
|
|
||||||
MOVD (8*24)(X2), F24
|
|
||||||
MOVD (8*25)(X2), F25
|
|
||||||
MOVD (8*26)(X2), F26
|
|
||||||
MOVD (8*27)(X2), F27
|
|
||||||
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT _rt0_riscv64_freebsd_lib_go(SB),NOSPLIT,$0
|
|
||||||
MOV _rt0_riscv64_freebsd_lib_argc<>(SB), A0
|
|
||||||
MOV _rt0_riscv64_freebsd_lib_argv<>(SB), A1
|
|
||||||
MOV $runtime·rt0_go(SB), T0
|
|
||||||
JALR ZERO, T0
|
|
||||||
|
|
||||||
DATA _rt0_riscv64_freebsd_lib_argc<>(SB)/8, $0
|
|
||||||
GLOBL _rt0_riscv64_freebsd_lib_argc<>(SB),NOPTR, $8
|
|
||||||
DATA _rt0_riscv64_freebsd_lib_argv<>(SB)/8, $0
|
|
||||||
GLOBL _rt0_riscv64_freebsd_lib_argv<>(SB),NOPTR, $8
|
|
||||||
|
|
||||||
TEXT main(SB),NOSPLIT|NOFRAME,$0
|
TEXT main(SB),NOSPLIT|NOFRAME,$0
|
||||||
MOV $runtime·rt0_go(SB), T0
|
MOV $runtime·rt0_go(SB), T0
|
||||||
|
|
|
||||||
|
|
@ -11,100 +11,8 @@ TEXT _rt0_riscv64_linux(SB),NOSPLIT|NOFRAME,$0
|
||||||
|
|
||||||
// When building with -buildmode=c-shared, this symbol is called when the shared
|
// When building with -buildmode=c-shared, this symbol is called when the shared
|
||||||
// library is loaded.
|
// library is loaded.
|
||||||
TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$224
|
TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$0
|
||||||
// Preserve callee-save registers, along with X1 (LR).
|
JMP _rt0_riscv64_lib(SB)
|
||||||
MOV X1, (8*3)(X2)
|
|
||||||
MOV X8, (8*4)(X2)
|
|
||||||
MOV X9, (8*5)(X2)
|
|
||||||
MOV X18, (8*6)(X2)
|
|
||||||
MOV X19, (8*7)(X2)
|
|
||||||
MOV X20, (8*8)(X2)
|
|
||||||
MOV X21, (8*9)(X2)
|
|
||||||
MOV X22, (8*10)(X2)
|
|
||||||
MOV X23, (8*11)(X2)
|
|
||||||
MOV X24, (8*12)(X2)
|
|
||||||
MOV X25, (8*13)(X2)
|
|
||||||
MOV X26, (8*14)(X2)
|
|
||||||
MOV g, (8*15)(X2)
|
|
||||||
MOVD F8, (8*16)(X2)
|
|
||||||
MOVD F9, (8*17)(X2)
|
|
||||||
MOVD F18, (8*18)(X2)
|
|
||||||
MOVD F19, (8*19)(X2)
|
|
||||||
MOVD F20, (8*20)(X2)
|
|
||||||
MOVD F21, (8*21)(X2)
|
|
||||||
MOVD F22, (8*22)(X2)
|
|
||||||
MOVD F23, (8*23)(X2)
|
|
||||||
MOVD F24, (8*24)(X2)
|
|
||||||
MOVD F25, (8*25)(X2)
|
|
||||||
MOVD F26, (8*26)(X2)
|
|
||||||
MOVD F27, (8*27)(X2)
|
|
||||||
|
|
||||||
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
|
|
||||||
MOV X0, g
|
|
||||||
|
|
||||||
MOV A0, _rt0_riscv64_linux_lib_argc<>(SB)
|
|
||||||
MOV A1, _rt0_riscv64_linux_lib_argv<>(SB)
|
|
||||||
|
|
||||||
// Synchronous initialization.
|
|
||||||
MOV $runtime·libpreinit(SB), T0
|
|
||||||
JALR RA, T0
|
|
||||||
|
|
||||||
// Create a new thread to do the runtime initialization and return.
|
|
||||||
MOV _cgo_sys_thread_create(SB), T0
|
|
||||||
BEQZ T0, nocgo
|
|
||||||
MOV $_rt0_riscv64_linux_lib_go(SB), A0
|
|
||||||
MOV $0, A1
|
|
||||||
JALR RA, T0
|
|
||||||
JMP restore
|
|
||||||
|
|
||||||
nocgo:
|
|
||||||
MOV $0x800000, A0 // stacksize = 8192KB
|
|
||||||
MOV $_rt0_riscv64_linux_lib_go(SB), A1
|
|
||||||
MOV A0, 8(X2)
|
|
||||||
MOV A1, 16(X2)
|
|
||||||
MOV $runtime·newosproc0(SB), T0
|
|
||||||
JALR RA, T0
|
|
||||||
|
|
||||||
restore:
|
|
||||||
// Restore callee-save registers, along with X1 (LR).
|
|
||||||
MOV (8*3)(X2), X1
|
|
||||||
MOV (8*4)(X2), X8
|
|
||||||
MOV (8*5)(X2), X9
|
|
||||||
MOV (8*6)(X2), X18
|
|
||||||
MOV (8*7)(X2), X19
|
|
||||||
MOV (8*8)(X2), X20
|
|
||||||
MOV (8*9)(X2), X21
|
|
||||||
MOV (8*10)(X2), X22
|
|
||||||
MOV (8*11)(X2), X23
|
|
||||||
MOV (8*12)(X2), X24
|
|
||||||
MOV (8*13)(X2), X25
|
|
||||||
MOV (8*14)(X2), X26
|
|
||||||
MOV (8*15)(X2), g
|
|
||||||
MOVD (8*16)(X2), F8
|
|
||||||
MOVD (8*17)(X2), F9
|
|
||||||
MOVD (8*18)(X2), F18
|
|
||||||
MOVD (8*19)(X2), F19
|
|
||||||
MOVD (8*20)(X2), F20
|
|
||||||
MOVD (8*21)(X2), F21
|
|
||||||
MOVD (8*22)(X2), F22
|
|
||||||
MOVD (8*23)(X2), F23
|
|
||||||
MOVD (8*24)(X2), F24
|
|
||||||
MOVD (8*25)(X2), F25
|
|
||||||
MOVD (8*26)(X2), F26
|
|
||||||
MOVD (8*27)(X2), F27
|
|
||||||
|
|
||||||
RET
|
|
||||||
|
|
||||||
TEXT _rt0_riscv64_linux_lib_go(SB),NOSPLIT,$0
|
|
||||||
MOV _rt0_riscv64_linux_lib_argc<>(SB), A0
|
|
||||||
MOV _rt0_riscv64_linux_lib_argv<>(SB), A1
|
|
||||||
MOV $runtime·rt0_go(SB), T0
|
|
||||||
JALR ZERO, T0
|
|
||||||
|
|
||||||
DATA _rt0_riscv64_linux_lib_argc<>(SB)/8, $0
|
|
||||||
GLOBL _rt0_riscv64_linux_lib_argc<>(SB),NOPTR, $8
|
|
||||||
DATA _rt0_riscv64_linux_lib_argv<>(SB)/8, $0
|
|
||||||
GLOBL _rt0_riscv64_linux_lib_argv<>(SB),NOPTR, $8
|
|
||||||
|
|
||||||
|
|
||||||
TEXT main(SB),NOSPLIT|NOFRAME,$0
|
TEXT main(SB),NOSPLIT|NOFRAME,$0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue