@@ -41,7 +41,7 @@ TEXT runtime·read_trampoline(SB),NOSPLIT,$0
41
41
MOVD 8 (R0) , R1 // arg 2 buf
42
42
MOVW 16 (R0) , R2 // arg 3 count
43
43
MOVW 0 (R0) , R0 // arg 1 fd
44
- BL libc_read(SB)
44
+ BL libc_read(SB)
45
45
RET
46
46
47
47
TEXT runtime·exit_trampoline(SB) , NOSPLIT|NOFRAME , $ 0
@@ -72,7 +72,7 @@ TEXT runtime·mmap_trampoline(SB),NOSPLIT,$0
72
72
MOVD $ - 1 , R2
73
73
CMP R0 , R2
74
74
BNE ok
75
- BL libc_error(SB)
75
+ BL libc_error(SB)
76
76
MOVW (R0) , R1
77
77
MOVD $ 0 , R0
78
78
ok:
@@ -84,8 +84,8 @@ TEXT runtime·munmap_trampoline(SB),NOSPLIT,$0
84
84
MOVD 8 (R0) , R1 // arg 2 len
85
85
MOVD 0 (R0) , R0 // arg 1 addr
86
86
BL libc_munmap(SB)
87
- CMP $ 0 , R0
88
- BEQ 2 (PC)
87
+ CMP $ 0 , R0
88
+ BEQ 2 (PC)
89
89
BL notok<>(SB)
90
90
RET
91
91
@@ -145,22 +145,28 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
145
145
BL ( R11 )
146
146
RET
147
147
148
- TEXT runtime·sigtramp(SB) , NOSPLIT , $ 0
149
- // Reserve space for callee - save registers and arguments.
150
- SUB $( 8 * 16 ) , RSP
151
-
152
- // Save callee - save registers.
153
- MOVD R19 , ( 8 * 4 )( RSP )
154
- MOVD R20 , ( 8 * 5 )( RSP )
155
- MOVD R21 , ( 8 * 6 )( RSP )
156
- MOVD R22 , ( 8 * 7 )( RSP )
157
- MOVD R23 , ( 8 * 8 )( RSP )
158
- MOVD R24 , ( 8 * 9 )( RSP )
159
- MOVD R25 , ( 8 * 10 )( RSP )
160
- MOVD R26 , ( 8 * 11 )( RSP )
161
- MOVD R27 , ( 8 * 12 )( RSP )
162
- MOVD g , ( 8 * 13 )( RSP )
163
- MOVD R29 , ( 8 * 14 )( RSP )
148
+ TEXT runtime·sigtramp(SB) , NOSPLIT , $ 192
149
+ // Save callee - save registers in the case of signal forwarding.
150
+ // Please refer to https://golang.org/issue/ 31827 .
151
+ MOVD R19 , 8 * 4 ( RSP )
152
+ MOVD R20 , 8 * 5 ( RSP )
153
+ MOVD R21 , 8 * 6 ( RSP )
154
+ MOVD R22 , 8 * 7 ( RSP )
155
+ MOVD R23 , 8 * 8 ( RSP )
156
+ MOVD R24 , 8 * 9 ( RSP )
157
+ MOVD R25 , 8 * 10 ( RSP )
158
+ MOVD R26 , 8 * 11 ( RSP )
159
+ MOVD R27 , 8 * 12 ( RSP )
160
+ MOVD g , 8 * 13 ( RSP )
161
+ MOVD R29 , 8 * 14 ( RSP )
162
+ FMOVD F8 , 8 * 15 ( RSP )
163
+ FMOVD F9 , 8 * 16 ( RSP )
164
+ FMOVD F10 , 8 * 17 ( RSP )
165
+ FMOVD F11 , 8 * 18 ( RSP )
166
+ FMOVD F12 , 8 * 19 ( RSP )
167
+ FMOVD F13 , 8 * 20 ( RSP )
168
+ FMOVD F14 , 8 * 21 ( RSP )
169
+ FMOVD F15 , 8 * 22 ( RSP )
164
170
165
171
// Save arguments.
166
172
MOVW R0 , ( 8 * 1 )( RSP ) // sig
@@ -174,9 +180,9 @@ TEXT runtime·sigtramp(SB),NOSPLIT,$0
174
180
BEQ 2 (PC)
175
181
BL runtime·load_g(SB)
176
182
177
- MOVD RSP , R6
178
- CMP $ 0 , g
179
- BEQ nog
183
+ MOVD RSP , R6
184
+ CMP $ 0 , g
185
+ BEQ nog
180
186
// iOS always use the main stack to run the signal handler.
181
187
// We need to switch to gsignal ourselves.
182
188
MOVD g_m(g) , R11
@@ -221,8 +227,14 @@ nog:
221
227
MOVD ( 8 * 12 )( RSP ) , R27
222
228
MOVD ( 8 * 13 )( RSP ) , g
223
229
MOVD ( 8 * 14 )( RSP ) , R29
224
-
225
- ADD $( 8 * 16 ) , RSP
230
+ FMOVD ( 8 * 15 )( RSP ) , F8
231
+ FMOVD ( 8 * 16 )( RSP ) , F9
232
+ FMOVD ( 8 * 17 )( RSP ) , F10
233
+ FMOVD ( 8 * 18 )( RSP ) , F11
234
+ FMOVD ( 8 * 19 )( RSP ) , F12
235
+ FMOVD ( 8 * 20 )( RSP ) , F13
236
+ FMOVD ( 8 * 21 )( RSP ) , F14
237
+ FMOVD ( 8 * 22 )( RSP ) , F15
226
238
227
239
RET
228
240
@@ -234,7 +246,7 @@ TEXT runtime·sigprocmask_trampoline(SB),NOSPLIT,$0
234
246
MOVD 16 (R0) , R2 // arg 3 old
235
247
MOVW 0 (R0) , R0 // arg 1 how
236
248
BL libc_pthread_sigmask(SB)
237
- CMP $ 0 , R0
249
+ CMP $ 0 , R0
238
250
BEQ 2 (PC)
239
251
BL notok<>(SB)
240
252
RET
@@ -279,7 +291,7 @@ TEXT runtime·kevent_trampoline(SB),NOSPLIT,$0
279
291
MOVD $ - 1 , R2
280
292
CMP R0 , R2
281
293
BNE ok
282
- BL libc_error(SB)
294
+ BL libc_error(SB)
283
295
MOVW (R0) , R0 // errno
284
296
NEG R0 , R0 // caller wants it as a negative error code
285
297
ok:
@@ -308,60 +320,60 @@ TEXT runtime·sigaltstack_trampoline(SB),NOSPLIT,$0
308
320
// mstart_stub is the first function executed on a new thread started by pthread_create.
309
321
// It just does some low - level setup and then calls mstart.
310
322
// Note: called with the C calling convention.
311
- TEXT runtime·mstart_stub(SB) , NOSPLIT , $ 0
323
+ TEXT runtime·mstart_stub(SB) , NOSPLIT , $ 160
312
324
// R0 points to the m.
313
325
// We are already on m's g0 stack.
314
326
315
327
// Save callee - save registers.
316
- SUB $ 144 , RSP
317
- MOVD R19 , 0 ( RSP )
318
- MOVD R20 , 8 ( RSP )
319
- MOVD R21 , 16 ( RSP )
320
- MOVD R22 , 24 ( RSP )
321
- MOVD R23 , 32 ( RSP )
322
- MOVD R24 , 40 ( RSP )
323
- MOVD R25 , 48 ( RSP )
324
- MOVD R26 , 56 ( RSP )
325
- MOVD R27 , 64 ( RSP )
326
- MOVD g , 72 ( RSP )
327
- FMOVD F8 , 80 ( RSP )
328
- FMOVD F9 , 88 ( RSP )
329
- FMOVD F10 , 96 ( RSP )
330
- FMOVD F11 , 104 ( RSP )
331
- FMOVD F12 , 112 ( RSP )
332
- FMOVD F13 , 120 ( RSP )
333
- FMOVD F14 , 128 ( RSP )
334
- FMOVD F15 , 136 ( RSP )
328
+ MOVD R19 , 8 ( RSP )
329
+ MOVD R20 , 16 ( RSP )
330
+ MOVD R21 , 24 ( RSP )
331
+ MOVD R22 , 32 ( RSP )
332
+ MOVD R23 , 40 ( RSP )
333
+ MOVD R24 , 48 ( RSP )
334
+ MOVD R25 , 56 ( RSP )
335
+ MOVD R26 , 64 ( RSP )
336
+ MOVD R27 , 72 ( RSP )
337
+ MOVD g , 80 ( RSP )
338
+ MOVD R29 , 88 ( RSP )
339
+ FMOVD F8 , 96 ( RSP )
340
+ FMOVD F9 , 104 ( RSP )
341
+ FMOVD F10 , 112 ( RSP )
342
+ FMOVD F11 , 120 ( RSP )
343
+ FMOVD F12 , 128 ( RSP )
344
+ FMOVD F13 , 136 ( RSP )
345
+ FMOVD F14 , 144 ( RSP )
346
+ FMOVD F15 , 152 ( RSP )
335
347
336
348
MOVD m_g0(R0) , g
337
349
338
- BL runtime·mstart(SB)
350
+ BL runtime·mstart(SB)
339
351
340
352
// Restore callee - save registers.
341
- MOVD 0 ( RSP ) , R19
342
- MOVD 8 ( RSP ) , R20
343
- MOVD 16 ( RSP ) , R21
344
- MOVD 24 ( RSP ) , R22
345
- MOVD 32 ( RSP ) , R23
346
- MOVD 40 ( RSP ) , R24
347
- MOVD 48 ( RSP ) , R25
348
- MOVD 56 ( RSP ) , R26
349
- MOVD 64 ( RSP ) , R27
350
- MOVD 72 ( RSP ) , g
351
- FMOVD 80 ( RSP ) , F8
352
- FMOVD 88 ( RSP ) , F9
353
- FMOVD 96 ( RSP ) , F10
354
- FMOVD 104 ( RSP ) , F11
355
- FMOVD 112 ( RSP ) , F12
356
- FMOVD 120 ( RSP ) , F13
357
- FMOVD 128 ( RSP ) , F14
358
- FMOVD 136 ( RSP ) , F15
359
- ADD $ 144 , RSP
353
+ MOVD 8 ( RSP ) , R19
354
+ MOVD 16 ( RSP ) , R20
355
+ MOVD 24 ( RSP ) , R21
356
+ MOVD 32 ( RSP ) , R22
357
+ MOVD 40 ( RSP ) , R23
358
+ MOVD 48 ( RSP ) , R24
359
+ MOVD 56 ( RSP ) , R25
360
+ MOVD 64 ( RSP ) , R26
361
+ MOVD 72 ( RSP ) , R27
362
+ MOVD 80 ( RSP ) , g
363
+ MOVD 88 ( RSP ) , R29
364
+ FMOVD 96 ( RSP ) , F8
365
+ FMOVD 104 ( RSP ) , F9
366
+ FMOVD 112 ( RSP ) , F10
367
+ FMOVD 120 ( RSP ) , F11
368
+ FMOVD 128 ( RSP ) , F12
369
+ FMOVD 136 ( RSP ) , F13
370
+ FMOVD 144 ( RSP ) , F14
371
+ FMOVD 152 ( RSP ) , F15
360
372
361
373
// Go is all done with this OS thread.
362
374
// Tell pthread everything is ok (we never join with this thread , so
363
375
// the value here doesn't really matter).
364
- MOVD $ 0 , R0
376
+ MOVD $ 0 , R0
365
377
366
378
RET
367
379
0 commit comments