Skip to content

Commit 12e65db

Browse files
committed
runtime: cleanup ppc64le/linux library startup code
Fix the argument passing to runtime.newosproc0, the ABI0 argument storing must account for the fixed frame size. Cleanup the _rt0_ppc64le_linux_lib definition, the assembler should not generate a stack frame. And convert it to use the new ABI wrappers. Change-Id: Ibc0be8b37f6522900781a19980fa018dd89ba7b3 Reviewed-on: https://go-review.googlesource.com/c/go/+/479796 Reviewed-by: Than McIntosh <[email protected]> Run-TryBot: Paul Murphy <[email protected]> Reviewed-by: David Chase <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Lynn Boger <[email protected]>
1 parent 38531c6 commit 12e65db

File tree

1 file changed

+10
-93
lines changed

1 file changed

+10
-93
lines changed

src/runtime/rt0_linux_ppc64le.s

Lines changed: 10 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -4,64 +4,22 @@
44

55
#include "go_asm.h"
66
#include "textflag.h"
7+
#include "asm_ppc64x.h"
8+
#include "cgo/abi_ppc64x.h"
79

810
TEXT _rt0_ppc64le_linux(SB),NOSPLIT,$0
911
XOR R0, R0 // Make sure R0 is zero before _main
1012
BR _main<>(SB)
1113

12-
TEXT _rt0_ppc64le_linux_lib(SB),NOSPLIT,$-8
13-
// Start with standard C stack frame layout and linkage.
14-
MOVD LR, R0
15-
MOVD R0, 16(R1) // Save LR in caller's frame.
16-
MOVW CR, R0 // Save CR in caller's frame
17-
MOVD R0, 8(R1)
18-
MOVDU R1, -320(R1) // Allocate frame.
19-
20-
// Preserve callee-save registers.
21-
MOVD R14, 24(R1)
22-
MOVD R15, 32(R1)
23-
MOVD R16, 40(R1)
24-
MOVD R17, 48(R1)
25-
MOVD R18, 56(R1)
26-
MOVD R19, 64(R1)
27-
MOVD R20, 72(R1)
28-
MOVD R21, 80(R1)
29-
MOVD R22, 88(R1)
30-
MOVD R23, 96(R1)
31-
MOVD R24, 104(R1)
32-
MOVD R25, 112(R1)
33-
MOVD R26, 120(R1)
34-
MOVD R27, 128(R1)
35-
MOVD R28, 136(R1)
36-
MOVD R29, 144(R1)
37-
MOVD g, 152(R1) // R30
38-
MOVD R31, 160(R1)
39-
FMOVD F14, 168(R1)
40-
FMOVD F15, 176(R1)
41-
FMOVD F16, 184(R1)
42-
FMOVD F17, 192(R1)
43-
FMOVD F18, 200(R1)
44-
FMOVD F19, 208(R1)
45-
FMOVD F20, 216(R1)
46-
FMOVD F21, 224(R1)
47-
FMOVD F22, 232(R1)
48-
FMOVD F23, 240(R1)
49-
FMOVD F24, 248(R1)
50-
FMOVD F25, 256(R1)
51-
FMOVD F26, 264(R1)
52-
FMOVD F27, 272(R1)
53-
FMOVD F28, 280(R1)
54-
FMOVD F29, 288(R1)
55-
FMOVD F30, 296(R1)
56-
FMOVD F31, 304(R1)
14+
TEXT _rt0_ppc64le_linux_lib(SB),NOSPLIT|NOFRAME,$0
15+
// This is called with ELFv2 calling conventions. Convert to Go.
16+
// Allocate argument storage for call to newosproc0.
17+
STACK_AND_SAVE_HOST_TO_GO_ABI(16)
5718

5819
MOVD R3, _rt0_ppc64le_linux_lib_argc<>(SB)
5920
MOVD R4, _rt0_ppc64le_linux_lib_argv<>(SB)
6021

6122
// Synchronous initialization.
62-
MOVD $runtime·reginit(SB), R12
63-
MOVD R12, CTR
64-
BL (CTR)
6523
MOVD $runtime·libpreinit(SB), R12
6624
MOVD R12, CTR
6725
BL (CTR)
@@ -78,57 +36,16 @@ TEXT _rt0_ppc64le_linux_lib(SB),NOSPLIT,$-8
7836

7937
nocgo:
8038
MOVD $0x800000, R12 // stacksize = 8192KB
81-
MOVD R12, 8(R1)
39+
MOVD R12, 8+FIXED_FRAME(R1)
8240
MOVD $_rt0_ppc64le_linux_lib_go(SB), R12
83-
MOVD R12, 16(R1)
41+
MOVD R12, 16+FIXED_FRAME(R1)
8442
MOVD $runtime·newosproc0(SB),R12
8543
MOVD R12, CTR
8644
BL (CTR)
8745

8846
done:
89-
// Restore saved registers.
90-
MOVD 24(R1), R14
91-
MOVD 32(R1), R15
92-
MOVD 40(R1), R16
93-
MOVD 48(R1), R17
94-
MOVD 56(R1), R18
95-
MOVD 64(R1), R19
96-
MOVD 72(R1), R20
97-
MOVD 80(R1), R21
98-
MOVD 88(R1), R22
99-
MOVD 96(R1), R23
100-
MOVD 104(R1), R24
101-
MOVD 112(R1), R25
102-
MOVD 120(R1), R26
103-
MOVD 128(R1), R27
104-
MOVD 136(R1), R28
105-
MOVD 144(R1), R29
106-
MOVD 152(R1), g // R30
107-
MOVD 160(R1), R31
108-
FMOVD 168(R1), F14
109-
FMOVD 176(R1), F15
110-
FMOVD 184(R1), F16
111-
FMOVD 192(R1), F17
112-
FMOVD 200(R1), F18
113-
FMOVD 208(R1), F19
114-
FMOVD 216(R1), F20
115-
FMOVD 224(R1), F21
116-
FMOVD 232(R1), F22
117-
FMOVD 240(R1), F23
118-
FMOVD 248(R1), F24
119-
FMOVD 256(R1), F25
120-
FMOVD 264(R1), F26
121-
FMOVD 272(R1), F27
122-
FMOVD 280(R1), F28
123-
FMOVD 288(R1), F29
124-
FMOVD 296(R1), F30
125-
FMOVD 304(R1), F31
126-
127-
ADD $320, R1
128-
MOVD 8(R1), R0
129-
MOVFL R0, $0xff
130-
MOVD 16(R1), R0
131-
MOVD R0, LR
47+
// Restore and return to ELFv2 caller.
48+
UNSTACK_AND_RESTORE_GO_TO_HOST_ABI(16)
13249
RET
13350

13451
TEXT _rt0_ppc64le_linux_lib_go(SB),NOSPLIT,$0

0 commit comments

Comments
 (0)