Skip to content

Commit 36863d6

Browse files
committed
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>
1 parent 0c14000 commit 36863d6

File tree

3 files changed

+102
-188
lines changed

3 files changed

+102
-188
lines changed

src/runtime/asm_riscv64.s

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,104 @@
66
#include "funcdata.h"
77
#include "textflag.h"
88

9+
10+
// When building with -buildmode=c-shared, this symbol is called when the shared
11+
// library is loaded.
12+
TEXT _rt0_riscv64_lib(SB),NOSPLIT,$224
13+
// Preserve callee-save registers, along with X1 (LR).
14+
MOV X1, (8*3)(X2)
15+
MOV X8, (8*4)(X2)
16+
MOV X9, (8*5)(X2)
17+
MOV X18, (8*6)(X2)
18+
MOV X19, (8*7)(X2)
19+
MOV X20, (8*8)(X2)
20+
MOV X21, (8*9)(X2)
21+
MOV X22, (8*10)(X2)
22+
MOV X23, (8*11)(X2)
23+
MOV X24, (8*12)(X2)
24+
MOV X25, (8*13)(X2)
25+
MOV X26, (8*14)(X2)
26+
MOV g, (8*15)(X2)
27+
MOVD F8, (8*16)(X2)
28+
MOVD F9, (8*17)(X2)
29+
MOVD F18, (8*18)(X2)
30+
MOVD F19, (8*19)(X2)
31+
MOVD F20, (8*20)(X2)
32+
MOVD F21, (8*21)(X2)
33+
MOVD F22, (8*22)(X2)
34+
MOVD F23, (8*23)(X2)
35+
MOVD F24, (8*24)(X2)
36+
MOVD F25, (8*25)(X2)
37+
MOVD F26, (8*26)(X2)
38+
MOVD F27, (8*27)(X2)
39+
40+
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
41+
MOV X0, g
42+
43+
MOV A0, _rt0_riscv64_lib_argc<>(SB)
44+
MOV A1, _rt0_riscv64_lib_argv<>(SB)
45+
46+
// Synchronous initialization.
47+
MOV $runtime·libpreinit(SB), T0
48+
JALR RA, T0
49+
50+
// Create a new thread to do the runtime initialization and return.
51+
MOV _cgo_sys_thread_create(SB), T0
52+
BEQZ T0, nocgo
53+
MOV $_rt0_riscv64_lib_go(SB), A0
54+
MOV $0, A1
55+
JALR RA, T0
56+
JMP restore
57+
58+
nocgo:
59+
MOV $0x800000, A0 // stacksize = 8192KB
60+
MOV $_rt0_riscv64_lib_go(SB), A1
61+
MOV A0, 8(X2)
62+
MOV A1, 16(X2)
63+
MOV $runtime·newosproc0(SB), T0
64+
JALR RA, T0
65+
66+
restore:
67+
// Restore callee-save registers, along with X1 (LR).
68+
MOV (8*3)(X2), X1
69+
MOV (8*4)(X2), X8
70+
MOV (8*5)(X2), X9
71+
MOV (8*6)(X2), X18
72+
MOV (8*7)(X2), X19
73+
MOV (8*8)(X2), X20
74+
MOV (8*9)(X2), X21
75+
MOV (8*10)(X2), X22
76+
MOV (8*11)(X2), X23
77+
MOV (8*12)(X2), X24
78+
MOV (8*13)(X2), X25
79+
MOV (8*14)(X2), X26
80+
MOV (8*15)(X2), g
81+
MOVD (8*16)(X2), F8
82+
MOVD (8*17)(X2), F9
83+
MOVD (8*18)(X2), F18
84+
MOVD (8*19)(X2), F19
85+
MOVD (8*20)(X2), F20
86+
MOVD (8*21)(X2), F21
87+
MOVD (8*22)(X2), F22
88+
MOVD (8*23)(X2), F23
89+
MOVD (8*24)(X2), F24
90+
MOVD (8*25)(X2), F25
91+
MOVD (8*26)(X2), F26
92+
MOVD (8*27)(X2), F27
93+
94+
RET
95+
96+
TEXT _rt0_riscv64_lib_go(SB),NOSPLIT,$0
97+
MOV _rt0_riscv64_lib_argc<>(SB), A0
98+
MOV _rt0_riscv64_lib_argv<>(SB), A1
99+
MOV $runtime·rt0_go(SB), T0
100+
JALR ZERO, T0
101+
102+
DATA _rt0_riscv64_lib_argc<>(SB)/8, $0
103+
GLOBL _rt0_riscv64_lib_argc<>(SB),NOPTR, $8
104+
DATA _rt0_riscv64_lib_argv<>(SB)/8, $0
105+
GLOBL _rt0_riscv64_lib_argv<>(SB),NOPTR, $8
106+
9107
// func rt0_go()
10108
TEXT runtime·rt0_go(SB),NOSPLIT|TOPFRAME,$0
11109
// X2 = stack; A0 = argc; A1 = argv

src/runtime/rt0_freebsd_riscv64.s

Lines changed: 2 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -12,100 +12,8 @@ TEXT _rt0_riscv64_freebsd(SB),NOSPLIT|NOFRAME,$0
1212

1313
// When building with -buildmode=c-shared, this symbol is called when the shared
1414
// library is loaded.
15-
TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$224
16-
// Preserve callee-save registers, along with X1 (LR).
17-
MOV X1, (8*3)(X2)
18-
MOV X8, (8*4)(X2)
19-
MOV X9, (8*5)(X2)
20-
MOV X18, (8*6)(X2)
21-
MOV X19, (8*7)(X2)
22-
MOV X20, (8*8)(X2)
23-
MOV X21, (8*9)(X2)
24-
MOV X22, (8*10)(X2)
25-
MOV X23, (8*11)(X2)
26-
MOV X24, (8*12)(X2)
27-
MOV X25, (8*13)(X2)
28-
MOV X26, (8*14)(X2)
29-
MOV g, (8*15)(X2)
30-
MOVD F8, (8*16)(X2)
31-
MOVD F9, (8*17)(X2)
32-
MOVD F18, (8*18)(X2)
33-
MOVD F19, (8*19)(X2)
34-
MOVD F20, (8*20)(X2)
35-
MOVD F21, (8*21)(X2)
36-
MOVD F22, (8*22)(X2)
37-
MOVD F23, (8*23)(X2)
38-
MOVD F24, (8*24)(X2)
39-
MOVD F25, (8*25)(X2)
40-
MOVD F26, (8*26)(X2)
41-
MOVD F27, (8*27)(X2)
42-
43-
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
44-
MOV X0, g
45-
46-
MOV A0, _rt0_riscv64_freebsd_lib_argc<>(SB)
47-
MOV A1, _rt0_riscv64_freebsd_lib_argv<>(SB)
48-
49-
// Synchronous initialization.
50-
MOV $runtime·libpreinit(SB), T0
51-
JALR RA, T0
52-
53-
// Create a new thread to do the runtime initialization and return.
54-
MOV _cgo_sys_thread_create(SB), T0
55-
BEQZ T0, nocgo
56-
MOV $_rt0_riscv64_freebsd_lib_go(SB), A0
57-
MOV $0, A1
58-
JALR RA, T0
59-
JMP restore
60-
61-
nocgo:
62-
MOV $0x800000, A0 // stacksize = 8192KB
63-
MOV $_rt0_riscv64_freebsd_lib_go(SB), A1
64-
MOV A0, 8(X2)
65-
MOV A1, 16(X2)
66-
MOV $runtime·newosproc0(SB), T0
67-
JALR RA, T0
68-
69-
restore:
70-
// Restore callee-save registers, along with X1 (LR).
71-
MOV (8*3)(X2), X1
72-
MOV (8*4)(X2), X8
73-
MOV (8*5)(X2), X9
74-
MOV (8*6)(X2), X18
75-
MOV (8*7)(X2), X19
76-
MOV (8*8)(X2), X20
77-
MOV (8*9)(X2), X21
78-
MOV (8*10)(X2), X22
79-
MOV (8*11)(X2), X23
80-
MOV (8*12)(X2), X24
81-
MOV (8*13)(X2), X25
82-
MOV (8*14)(X2), X26
83-
MOV (8*15)(X2), g
84-
MOVD (8*16)(X2), F8
85-
MOVD (8*17)(X2), F9
86-
MOVD (8*18)(X2), F18
87-
MOVD (8*19)(X2), F19
88-
MOVD (8*20)(X2), F20
89-
MOVD (8*21)(X2), F21
90-
MOVD (8*22)(X2), F22
91-
MOVD (8*23)(X2), F23
92-
MOVD (8*24)(X2), F24
93-
MOVD (8*25)(X2), F25
94-
MOVD (8*26)(X2), F26
95-
MOVD (8*27)(X2), F27
96-
97-
RET
98-
99-
TEXT _rt0_riscv64_freebsd_lib_go(SB),NOSPLIT,$0
100-
MOV _rt0_riscv64_freebsd_lib_argc<>(SB), A0
101-
MOV _rt0_riscv64_freebsd_lib_argv<>(SB), A1
102-
MOV $runtime·rt0_go(SB), T0
103-
JALR ZERO, T0
104-
105-
DATA _rt0_riscv64_freebsd_lib_argc<>(SB)/8, $0
106-
GLOBL _rt0_riscv64_freebsd_lib_argc<>(SB),NOPTR, $8
107-
DATA _rt0_riscv64_freebsd_lib_argv<>(SB)/8, $0
108-
GLOBL _rt0_riscv64_freebsd_lib_argv<>(SB),NOPTR, $8
15+
TEXT _rt0_riscv64_freebsd_lib(SB),NOSPLIT,$0
16+
JMP _rt0_riscv64_lib(SB)
10917

11018
TEXT main(SB),NOSPLIT|NOFRAME,$0
11119
MOV $runtime·rt0_go(SB), T0

src/runtime/rt0_linux_riscv64.s

Lines changed: 2 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -11,100 +11,8 @@ TEXT _rt0_riscv64_linux(SB),NOSPLIT|NOFRAME,$0
1111

1212
// When building with -buildmode=c-shared, this symbol is called when the shared
1313
// library is loaded.
14-
TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$224
15-
// Preserve callee-save registers, along with X1 (LR).
16-
MOV X1, (8*3)(X2)
17-
MOV X8, (8*4)(X2)
18-
MOV X9, (8*5)(X2)
19-
MOV X18, (8*6)(X2)
20-
MOV X19, (8*7)(X2)
21-
MOV X20, (8*8)(X2)
22-
MOV X21, (8*9)(X2)
23-
MOV X22, (8*10)(X2)
24-
MOV X23, (8*11)(X2)
25-
MOV X24, (8*12)(X2)
26-
MOV X25, (8*13)(X2)
27-
MOV X26, (8*14)(X2)
28-
MOV g, (8*15)(X2)
29-
MOVD F8, (8*16)(X2)
30-
MOVD F9, (8*17)(X2)
31-
MOVD F18, (8*18)(X2)
32-
MOVD F19, (8*19)(X2)
33-
MOVD F20, (8*20)(X2)
34-
MOVD F21, (8*21)(X2)
35-
MOVD F22, (8*22)(X2)
36-
MOVD F23, (8*23)(X2)
37-
MOVD F24, (8*24)(X2)
38-
MOVD F25, (8*25)(X2)
39-
MOVD F26, (8*26)(X2)
40-
MOVD F27, (8*27)(X2)
41-
42-
// Initialize g as nil in case of using g later e.g. sigaction in cgo_sigaction.go
43-
MOV X0, g
44-
45-
MOV A0, _rt0_riscv64_linux_lib_argc<>(SB)
46-
MOV A1, _rt0_riscv64_linux_lib_argv<>(SB)
47-
48-
// Synchronous initialization.
49-
MOV $runtime·libpreinit(SB), T0
50-
JALR RA, T0
51-
52-
// Create a new thread to do the runtime initialization and return.
53-
MOV _cgo_sys_thread_create(SB), T0
54-
BEQZ T0, nocgo
55-
MOV $_rt0_riscv64_linux_lib_go(SB), A0
56-
MOV $0, A1
57-
JALR RA, T0
58-
JMP restore
59-
60-
nocgo:
61-
MOV $0x800000, A0 // stacksize = 8192KB
62-
MOV $_rt0_riscv64_linux_lib_go(SB), A1
63-
MOV A0, 8(X2)
64-
MOV A1, 16(X2)
65-
MOV $runtime·newosproc0(SB), T0
66-
JALR RA, T0
67-
68-
restore:
69-
// Restore callee-save registers, along with X1 (LR).
70-
MOV (8*3)(X2), X1
71-
MOV (8*4)(X2), X8
72-
MOV (8*5)(X2), X9
73-
MOV (8*6)(X2), X18
74-
MOV (8*7)(X2), X19
75-
MOV (8*8)(X2), X20
76-
MOV (8*9)(X2), X21
77-
MOV (8*10)(X2), X22
78-
MOV (8*11)(X2), X23
79-
MOV (8*12)(X2), X24
80-
MOV (8*13)(X2), X25
81-
MOV (8*14)(X2), X26
82-
MOV (8*15)(X2), g
83-
MOVD (8*16)(X2), F8
84-
MOVD (8*17)(X2), F9
85-
MOVD (8*18)(X2), F18
86-
MOVD (8*19)(X2), F19
87-
MOVD (8*20)(X2), F20
88-
MOVD (8*21)(X2), F21
89-
MOVD (8*22)(X2), F22
90-
MOVD (8*23)(X2), F23
91-
MOVD (8*24)(X2), F24
92-
MOVD (8*25)(X2), F25
93-
MOVD (8*26)(X2), F26
94-
MOVD (8*27)(X2), F27
95-
96-
RET
97-
98-
TEXT _rt0_riscv64_linux_lib_go(SB),NOSPLIT,$0
99-
MOV _rt0_riscv64_linux_lib_argc<>(SB), A0
100-
MOV _rt0_riscv64_linux_lib_argv<>(SB), A1
101-
MOV $runtime·rt0_go(SB), T0
102-
JALR ZERO, T0
103-
104-
DATA _rt0_riscv64_linux_lib_argc<>(SB)/8, $0
105-
GLOBL _rt0_riscv64_linux_lib_argc<>(SB),NOPTR, $8
106-
DATA _rt0_riscv64_linux_lib_argv<>(SB)/8, $0
107-
GLOBL _rt0_riscv64_linux_lib_argv<>(SB),NOPTR, $8
14+
TEXT _rt0_riscv64_linux_lib(SB),NOSPLIT,$0
15+
JMP _rt0_riscv64_lib(SB)
10816

10917

11018
TEXT main(SB),NOSPLIT|NOFRAME,$0

0 commit comments

Comments
 (0)