Skip to content

Commit e87be98

Browse files
pmurcherrymui
authored andcommitted
[release-branch.go1.22] runtime: on AIX, fix call to _cgo_sys_thread_create in _rt0_ppc64_aix_lib
The AIX ABI requires allocating parameter save space when calling a function, even if the arguments are passed via registers. gcc sometimes uses this space. In the case of the cgo c-archive tests, it clobbered the storage space of argc/argv which prevented the test program from running the expected test. Fixes #68972 Change-Id: I8a267b463b1abb2b37ac85231f6c328f406b7515 Reviewed-on: https://go-review.googlesource.com/c/go/+/606895 Reviewed-by: Ian Lance Taylor <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Run-TryBot: Paul Murphy <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-on: https://go-review.googlesource.com/c/go/+/607175 Reviewed-by: Dmitri Shuralyov <[email protected]>
1 parent 676d610 commit e87be98

File tree

1 file changed

+77
-75
lines changed

1 file changed

+77
-75
lines changed

src/runtime/rt0_aix_ppc64.s

Lines changed: 77 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ TEXT _main(SB),NOSPLIT,$-8
4141
MOVD R12, CTR
4242
BR (CTR)
4343

44+
// Paramater save space required to cross-call into _cgo_sys_thread_create
45+
#define PARAM_SPACE 16
4446

4547
TEXT _rt0_ppc64_aix_lib(SB),NOSPLIT,$-8
4648
// Start with standard C stack frame layout and linkage.
@@ -49,45 +51,45 @@ TEXT _rt0_ppc64_aix_lib(SB),NOSPLIT,$-8
4951
MOVW CR, R0 // Save CR in caller's frame
5052
MOVD R0, 8(R1)
5153

52-
MOVDU R1, -344(R1) // Allocate frame.
54+
MOVDU R1, -344-PARAM_SPACE(R1) // Allocate frame.
5355

5456
// Preserve callee-save registers.
55-
MOVD R14, 48(R1)
56-
MOVD R15, 56(R1)
57-
MOVD R16, 64(R1)
58-
MOVD R17, 72(R1)
59-
MOVD R18, 80(R1)
60-
MOVD R19, 88(R1)
61-
MOVD R20, 96(R1)
62-
MOVD R21,104(R1)
63-
MOVD R22, 112(R1)
64-
MOVD R23, 120(R1)
65-
MOVD R24, 128(R1)
66-
MOVD R25, 136(R1)
67-
MOVD R26, 144(R1)
68-
MOVD R27, 152(R1)
69-
MOVD R28, 160(R1)
70-
MOVD R29, 168(R1)
71-
MOVD g, 176(R1) // R30
72-
MOVD R31, 184(R1)
73-
FMOVD F14, 192(R1)
74-
FMOVD F15, 200(R1)
75-
FMOVD F16, 208(R1)
76-
FMOVD F17, 216(R1)
77-
FMOVD F18, 224(R1)
78-
FMOVD F19, 232(R1)
79-
FMOVD F20, 240(R1)
80-
FMOVD F21, 248(R1)
81-
FMOVD F22, 256(R1)
82-
FMOVD F23, 264(R1)
83-
FMOVD F24, 272(R1)
84-
FMOVD F25, 280(R1)
85-
FMOVD F26, 288(R1)
86-
FMOVD F27, 296(R1)
87-
FMOVD F28, 304(R1)
88-
FMOVD F29, 312(R1)
89-
FMOVD F30, 320(R1)
90-
FMOVD F31, 328(R1)
57+
MOVD R14, 48+PARAM_SPACE(R1)
58+
MOVD R15, 56+PARAM_SPACE(R1)
59+
MOVD R16, 64+PARAM_SPACE(R1)
60+
MOVD R17, 72+PARAM_SPACE(R1)
61+
MOVD R18, 80+PARAM_SPACE(R1)
62+
MOVD R19, 88+PARAM_SPACE(R1)
63+
MOVD R20, 96+PARAM_SPACE(R1)
64+
MOVD R21,104+PARAM_SPACE(R1)
65+
MOVD R22, 112+PARAM_SPACE(R1)
66+
MOVD R23, 120+PARAM_SPACE(R1)
67+
MOVD R24, 128+PARAM_SPACE(R1)
68+
MOVD R25, 136+PARAM_SPACE(R1)
69+
MOVD R26, 144+PARAM_SPACE(R1)
70+
MOVD R27, 152+PARAM_SPACE(R1)
71+
MOVD R28, 160+PARAM_SPACE(R1)
72+
MOVD R29, 168+PARAM_SPACE(R1)
73+
MOVD g, 176+PARAM_SPACE(R1) // R30
74+
MOVD R31, 184+PARAM_SPACE(R1)
75+
FMOVD F14, 192+PARAM_SPACE(R1)
76+
FMOVD F15, 200+PARAM_SPACE(R1)
77+
FMOVD F16, 208+PARAM_SPACE(R1)
78+
FMOVD F17, 216+PARAM_SPACE(R1)
79+
FMOVD F18, 224+PARAM_SPACE(R1)
80+
FMOVD F19, 232+PARAM_SPACE(R1)
81+
FMOVD F20, 240+PARAM_SPACE(R1)
82+
FMOVD F21, 248+PARAM_SPACE(R1)
83+
FMOVD F22, 256+PARAM_SPACE(R1)
84+
FMOVD F23, 264+PARAM_SPACE(R1)
85+
FMOVD F24, 272+PARAM_SPACE(R1)
86+
FMOVD F25, 280+PARAM_SPACE(R1)
87+
FMOVD F26, 288+PARAM_SPACE(R1)
88+
FMOVD F27, 296+PARAM_SPACE(R1)
89+
FMOVD F28, 304+PARAM_SPACE(R1)
90+
FMOVD F29, 312+PARAM_SPACE(R1)
91+
FMOVD F30, 320+PARAM_SPACE(R1)
92+
FMOVD F31, 328+PARAM_SPACE(R1)
9193

9294
// Synchronous initialization.
9395
MOVD $runtime·reginit(SB), R12
@@ -130,44 +132,44 @@ nocgo:
130132

131133
done:
132134
// Restore saved registers.
133-
MOVD 48(R1), R14
134-
MOVD 56(R1), R15
135-
MOVD 64(R1), R16
136-
MOVD 72(R1), R17
137-
MOVD 80(R1), R18
138-
MOVD 88(R1), R19
139-
MOVD 96(R1), R20
140-
MOVD 104(R1), R21
141-
MOVD 112(R1), R22
142-
MOVD 120(R1), R23
143-
MOVD 128(R1), R24
144-
MOVD 136(R1), R25
145-
MOVD 144(R1), R26
146-
MOVD 152(R1), R27
147-
MOVD 160(R1), R28
148-
MOVD 168(R1), R29
149-
MOVD 176(R1), g // R30
150-
MOVD 184(R1), R31
151-
FMOVD 196(R1), F14
152-
FMOVD 200(R1), F15
153-
FMOVD 208(R1), F16
154-
FMOVD 216(R1), F17
155-
FMOVD 224(R1), F18
156-
FMOVD 232(R1), F19
157-
FMOVD 240(R1), F20
158-
FMOVD 248(R1), F21
159-
FMOVD 256(R1), F22
160-
FMOVD 264(R1), F23
161-
FMOVD 272(R1), F24
162-
FMOVD 280(R1), F25
163-
FMOVD 288(R1), F26
164-
FMOVD 296(R1), F27
165-
FMOVD 304(R1), F28
166-
FMOVD 312(R1), F29
167-
FMOVD 320(R1), F30
168-
FMOVD 328(R1), F31
169-
170-
ADD $344, R1
135+
MOVD 48+PARAM_SPACE(R1), R14
136+
MOVD 56+PARAM_SPACE(R1), R15
137+
MOVD 64+PARAM_SPACE(R1), R16
138+
MOVD 72+PARAM_SPACE(R1), R17
139+
MOVD 80+PARAM_SPACE(R1), R18
140+
MOVD 88+PARAM_SPACE(R1), R19
141+
MOVD 96+PARAM_SPACE(R1), R20
142+
MOVD 104+PARAM_SPACE(R1), R21
143+
MOVD 112+PARAM_SPACE(R1), R22
144+
MOVD 120+PARAM_SPACE(R1), R23
145+
MOVD 128+PARAM_SPACE(R1), R24
146+
MOVD 136+PARAM_SPACE(R1), R25
147+
MOVD 144+PARAM_SPACE(R1), R26
148+
MOVD 152+PARAM_SPACE(R1), R27
149+
MOVD 160+PARAM_SPACE(R1), R28
150+
MOVD 168+PARAM_SPACE(R1), R29
151+
MOVD 176+PARAM_SPACE(R1), g // R30
152+
MOVD 184+PARAM_SPACE(R1), R31
153+
FMOVD 196+PARAM_SPACE(R1), F14
154+
FMOVD 200+PARAM_SPACE(R1), F15
155+
FMOVD 208+PARAM_SPACE(R1), F16
156+
FMOVD 216+PARAM_SPACE(R1), F17
157+
FMOVD 224+PARAM_SPACE(R1), F18
158+
FMOVD 232+PARAM_SPACE(R1), F19
159+
FMOVD 240+PARAM_SPACE(R1), F20
160+
FMOVD 248+PARAM_SPACE(R1), F21
161+
FMOVD 256+PARAM_SPACE(R1), F22
162+
FMOVD 264+PARAM_SPACE(R1), F23
163+
FMOVD 272+PARAM_SPACE(R1), F24
164+
FMOVD 280+PARAM_SPACE(R1), F25
165+
FMOVD 288+PARAM_SPACE(R1), F26
166+
FMOVD 296+PARAM_SPACE(R1), F27
167+
FMOVD 304+PARAM_SPACE(R1), F28
168+
FMOVD 312+PARAM_SPACE(R1), F29
169+
FMOVD 320+PARAM_SPACE(R1), F30
170+
FMOVD 328+PARAM_SPACE(R1), F31
171+
172+
ADD $344+PARAM_SPACE, R1
171173

172174
MOVD 8(R1), R0
173175
MOVFL R0, $0xff

0 commit comments

Comments
 (0)