Skip to content

Commit ae65615

Browse files
committed
runtime: add arg maps for sync/atomic functions in ARM64 race mode
In race mode, these functions are defined and declared in different packages, which therefore don't have implicit arg maps. When they are defer'd, and the stack needs to move, the runtime fails with missing stack maps. This CL adds arg maps (FUNCDATA) to them. Updates #28848 Change-Id: I0271563b7e78e7797ce2990c303dced957efaa86 Reviewed-on: https://go-review.googlesource.com/c/150457 Run-TryBot: Cherry Zhang <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent a0edb0c commit ae65615

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/runtime/race_arm64.s

+26
Original file line numberDiff line numberDiff line change
@@ -192,69 +192,86 @@ TEXT runtime·racefuncexit(SB), NOSPLIT, $0-0
192192

193193
// Load
194194
TEXT sync∕atomic·LoadInt32(SB), NOSPLIT, $0
195+
GO_ARGS
195196
MOVD $__tsan_go_atomic32_load(SB), R9
196197
BL racecallatomic<>(SB)
197198
RET
198199

199200
TEXT sync∕atomic·LoadInt64(SB), NOSPLIT, $0
201+
GO_ARGS
200202
MOVD $__tsan_go_atomic64_load(SB), R9
201203
BL racecallatomic<>(SB)
202204
RET
203205

204206
TEXT sync∕atomic·LoadUint32(SB), NOSPLIT, $0
207+
GO_ARGS
205208
JMP sync∕atomic·LoadInt32(SB)
206209

207210
TEXT sync∕atomic·LoadUint64(SB), NOSPLIT, $0
211+
GO_ARGS
208212
JMP sync∕atomic·LoadInt64(SB)
209213

210214
TEXT sync∕atomic·LoadUintptr(SB), NOSPLIT, $0
215+
GO_ARGS
211216
JMP sync∕atomic·LoadInt64(SB)
212217

213218
TEXT sync∕atomic·LoadPointer(SB), NOSPLIT, $0
219+
GO_ARGS
214220
JMP sync∕atomic·LoadInt64(SB)
215221

216222
// Store
217223
TEXT sync∕atomic·StoreInt32(SB), NOSPLIT, $0
224+
GO_ARGS
218225
MOVD $__tsan_go_atomic32_store(SB), R9
219226
BL racecallatomic<>(SB)
220227
RET
221228

222229
TEXT sync∕atomic·StoreInt64(SB), NOSPLIT, $0
230+
GO_ARGS
223231
MOVD $__tsan_go_atomic64_store(SB), R9
224232
BL racecallatomic<>(SB)
225233
RET
226234

227235
TEXT sync∕atomic·StoreUint32(SB), NOSPLIT, $0
236+
GO_ARGS
228237
JMP sync∕atomic·StoreInt32(SB)
229238

230239
TEXT sync∕atomic·StoreUint64(SB), NOSPLIT, $0
240+
GO_ARGS
231241
JMP sync∕atomic·StoreInt64(SB)
232242

233243
TEXT sync∕atomic·StoreUintptr(SB), NOSPLIT, $0
244+
GO_ARGS
234245
JMP sync∕atomic·StoreInt64(SB)
235246

236247
// Swap
237248
TEXT sync∕atomic·SwapInt32(SB), NOSPLIT, $0
249+
GO_ARGS
238250
MOVD $__tsan_go_atomic32_exchange(SB), R9
239251
BL racecallatomic<>(SB)
240252
RET
241253

242254
TEXT sync∕atomic·SwapInt64(SB), NOSPLIT, $0
255+
GO_ARGS
243256
MOVD $__tsan_go_atomic64_exchange(SB), R9
244257
BL racecallatomic<>(SB)
245258
RET
246259

247260
TEXT sync∕atomic·SwapUint32(SB), NOSPLIT, $0
261+
GO_ARGS
248262
JMP sync∕atomic·SwapInt32(SB)
249263

250264
TEXT sync∕atomic·SwapUint64(SB), NOSPLIT, $0
265+
GO_ARGS
251266
JMP sync∕atomic·SwapInt64(SB)
252267

253268
TEXT sync∕atomic·SwapUintptr(SB), NOSPLIT, $0
269+
GO_ARGS
254270
JMP sync∕atomic·SwapInt64(SB)
255271

256272
// Add
257273
TEXT sync∕atomic·AddInt32(SB), NOSPLIT, $0
274+
GO_ARGS
258275
MOVD $__tsan_go_atomic32_fetch_add(SB), R9
259276
BL racecallatomic<>(SB)
260277
MOVW add+8(FP), R0 // convert fetch_add to add_fetch
@@ -264,6 +281,7 @@ TEXT sync∕atomic·AddInt32(SB), NOSPLIT, $0
264281
RET
265282

266283
TEXT sync∕atomic·AddInt64(SB), NOSPLIT, $0
284+
GO_ARGS
267285
MOVD $__tsan_go_atomic64_fetch_add(SB), R9
268286
BL racecallatomic<>(SB)
269287
MOVD add+8(FP), R0 // convert fetch_add to add_fetch
@@ -273,32 +291,40 @@ TEXT sync∕atomic·AddInt64(SB), NOSPLIT, $0
273291
RET
274292

275293
TEXT sync∕atomic·AddUint32(SB), NOSPLIT, $0
294+
GO_ARGS
276295
JMP sync∕atomic·AddInt32(SB)
277296

278297
TEXT sync∕atomic·AddUint64(SB), NOSPLIT, $0
298+
GO_ARGS
279299
JMP sync∕atomic·AddInt64(SB)
280300

281301
TEXT sync∕atomic·AddUintptr(SB), NOSPLIT, $0
302+
GO_ARGS
282303
JMP sync∕atomic·AddInt64(SB)
283304

284305
// CompareAndSwap
285306
TEXT sync∕atomic·CompareAndSwapInt32(SB), NOSPLIT, $0
307+
GO_ARGS
286308
MOVD $__tsan_go_atomic32_compare_exchange(SB), R9
287309
BL racecallatomic<>(SB)
288310
RET
289311

290312
TEXT sync∕atomic·CompareAndSwapInt64(SB), NOSPLIT, $0
313+
GO_ARGS
291314
MOVD $__tsan_go_atomic64_compare_exchange(SB), R9
292315
BL racecallatomic<>(SB)
293316
RET
294317

295318
TEXT sync∕atomic·CompareAndSwapUint32(SB), NOSPLIT, $0
319+
GO_ARGS
296320
JMP sync∕atomic·CompareAndSwapInt32(SB)
297321

298322
TEXT sync∕atomic·CompareAndSwapUint64(SB), NOSPLIT, $0
323+
GO_ARGS
299324
JMP sync∕atomic·CompareAndSwapInt64(SB)
300325

301326
TEXT sync∕atomic·CompareAndSwapUintptr(SB), NOSPLIT, $0
327+
GO_ARGS
302328
JMP sync∕atomic·CompareAndSwapInt64(SB)
303329

304330
// Generic atomic operation implementation.

0 commit comments

Comments
 (0)