@@ -105,28 +105,38 @@ func syscallNoErr()
105
105
//go:nosplit
106
106
//go:cgo_unsafe_args
107
107
func pthread_attr_init (attr * pthreadattr ) int32 {
108
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_init_trampoline )), unsafe .Pointer (& attr ))
108
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_init_trampoline )), unsafe .Pointer (& attr ))
109
+ KeepAlive (attr )
110
+ return ret
109
111
}
110
112
func pthread_attr_init_trampoline ()
111
113
112
114
//go:nosplit
113
115
//go:cgo_unsafe_args
114
116
func pthread_attr_getstacksize (attr * pthreadattr , size * uintptr ) int32 {
115
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_getstacksize_trampoline )), unsafe .Pointer (& attr ))
117
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_getstacksize_trampoline )), unsafe .Pointer (& attr ))
118
+ KeepAlive (attr )
119
+ KeepAlive (size )
120
+ return ret
116
121
}
117
122
func pthread_attr_getstacksize_trampoline ()
118
123
119
124
//go:nosplit
120
125
//go:cgo_unsafe_args
121
126
func pthread_attr_setdetachstate (attr * pthreadattr , state int ) int32 {
122
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_setdetachstate_trampoline )), unsafe .Pointer (& attr ))
127
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_attr_setdetachstate_trampoline )), unsafe .Pointer (& attr ))
128
+ KeepAlive (attr )
129
+ return ret
123
130
}
124
131
func pthread_attr_setdetachstate_trampoline ()
125
132
126
133
//go:nosplit
127
134
//go:cgo_unsafe_args
128
135
func pthread_create (attr * pthreadattr , start uintptr , arg unsafe.Pointer ) int32 {
129
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_create_trampoline )), unsafe .Pointer (& attr ))
136
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_create_trampoline )), unsafe .Pointer (& attr ))
137
+ KeepAlive (attr )
138
+ KeepAlive (arg ) // Just for consistency. Arg of course needs to be kept alive for the start function.
139
+ return ret
130
140
}
131
141
func pthread_create_trampoline ()
132
142
@@ -175,27 +185,32 @@ func mmap_trampoline()
175
185
//go:cgo_unsafe_args
176
186
func munmap (addr unsafe.Pointer , n uintptr ) {
177
187
libcCall (unsafe .Pointer (abi .FuncPCABI0 (munmap_trampoline )), unsafe .Pointer (& addr ))
188
+ KeepAlive (addr ) // Just for consistency. Hopefully addr is not a Go address.
178
189
}
179
190
func munmap_trampoline ()
180
191
181
192
//go:nosplit
182
193
//go:cgo_unsafe_args
183
194
func madvise (addr unsafe.Pointer , n uintptr , flags int32 ) {
184
195
libcCall (unsafe .Pointer (abi .FuncPCABI0 (madvise_trampoline )), unsafe .Pointer (& addr ))
196
+ KeepAlive (addr ) // Just for consistency. Hopefully addr is not a Go address.
185
197
}
186
198
func madvise_trampoline ()
187
199
188
200
//go:nosplit
189
201
//go:cgo_unsafe_args
190
202
func mlock (addr unsafe.Pointer , n uintptr ) {
191
203
libcCall (unsafe .Pointer (abi .FuncPCABI0 (mlock_trampoline )), unsafe .Pointer (& addr ))
204
+ KeepAlive (addr ) // Just for consistency. Hopefully addr is not a Go address.
192
205
}
193
206
func mlock_trampoline ()
194
207
195
208
//go:nosplit
196
209
//go:cgo_unsafe_args
197
210
func read (fd int32 , p unsafe.Pointer , n int32 ) int32 {
198
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (read_trampoline )), unsafe .Pointer (& fd ))
211
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (read_trampoline )), unsafe .Pointer (& fd ))
212
+ KeepAlive (p )
213
+ return ret
199
214
}
200
215
func read_trampoline ()
201
216
@@ -239,14 +254,18 @@ func usleep_no_g(usec uint32) {
239
254
//go:nosplit
240
255
//go:cgo_unsafe_args
241
256
func write1 (fd uintptr , p unsafe.Pointer , n int32 ) int32 {
242
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (write_trampoline )), unsafe .Pointer (& fd ))
257
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (write_trampoline )), unsafe .Pointer (& fd ))
258
+ KeepAlive (p )
259
+ return ret
243
260
}
244
261
func write_trampoline ()
245
262
246
263
//go:nosplit
247
264
//go:cgo_unsafe_args
248
265
func open (name * byte , mode , perm int32 ) (ret int32 ) {
249
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (open_trampoline )), unsafe .Pointer (& name ))
266
+ ret = libcCall (unsafe .Pointer (abi .FuncPCABI0 (open_trampoline )), unsafe .Pointer (& name ))
267
+ KeepAlive (name )
268
+ return
250
269
}
251
270
func open_trampoline ()
252
271
@@ -285,13 +304,17 @@ func walltime_trampoline()
285
304
//go:cgo_unsafe_args
286
305
func sigaction (sig uint32 , new * usigactiont , old * usigactiont ) {
287
306
libcCall (unsafe .Pointer (abi .FuncPCABI0 (sigaction_trampoline )), unsafe .Pointer (& sig ))
307
+ KeepAlive (new )
308
+ KeepAlive (old )
288
309
}
289
310
func sigaction_trampoline ()
290
311
291
312
//go:nosplit
292
313
//go:cgo_unsafe_args
293
314
func sigprocmask (how uint32 , new * sigset , old * sigset ) {
294
315
libcCall (unsafe .Pointer (abi .FuncPCABI0 (sigprocmask_trampoline )), unsafe .Pointer (& how ))
316
+ KeepAlive (new )
317
+ KeepAlive (old )
295
318
}
296
319
func sigprocmask_trampoline ()
297
320
@@ -306,6 +329,8 @@ func sigaltstack(new *stackt, old *stackt) {
306
329
new .ss_size = 32768
307
330
}
308
331
libcCall (unsafe .Pointer (abi .FuncPCABI0 (sigaltstack_trampoline )), unsafe .Pointer (& new ))
332
+ KeepAlive (new )
333
+ KeepAlive (old )
309
334
}
310
335
func sigaltstack_trampoline ()
311
336
@@ -320,20 +345,32 @@ func raiseproc_trampoline()
320
345
//go:cgo_unsafe_args
321
346
func setitimer (mode int32 , new , old * itimerval ) {
322
347
libcCall (unsafe .Pointer (abi .FuncPCABI0 (setitimer_trampoline )), unsafe .Pointer (& mode ))
348
+ KeepAlive (new )
349
+ KeepAlive (old )
323
350
}
324
351
func setitimer_trampoline ()
325
352
326
353
//go:nosplit
327
354
//go:cgo_unsafe_args
328
355
func sysctl (mib * uint32 , miblen uint32 , oldp * byte , oldlenp * uintptr , newp * byte , newlen uintptr ) int32 {
329
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (sysctl_trampoline )), unsafe .Pointer (& mib ))
356
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (sysctl_trampoline )), unsafe .Pointer (& mib ))
357
+ KeepAlive (mib )
358
+ KeepAlive (oldp )
359
+ KeepAlive (oldlenp )
360
+ KeepAlive (newp )
361
+ return ret
330
362
}
331
363
func sysctl_trampoline ()
332
364
333
365
//go:nosplit
334
366
//go:cgo_unsafe_args
335
367
func sysctlbyname (name * byte , oldp * byte , oldlenp * uintptr , newp * byte , newlen uintptr ) int32 {
336
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (sysctlbyname_trampoline )), unsafe .Pointer (& name ))
368
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (sysctlbyname_trampoline )), unsafe .Pointer (& name ))
369
+ KeepAlive (name )
370
+ KeepAlive (oldp )
371
+ KeepAlive (oldlenp )
372
+ KeepAlive (newp )
373
+ return ret
337
374
}
338
375
func sysctlbyname_trampoline ()
339
376
@@ -355,56 +392,79 @@ func kqueue_trampoline()
355
392
//go:nosplit
356
393
//go:cgo_unsafe_args
357
394
func kevent (kq int32 , ch * keventt , nch int32 , ev * keventt , nev int32 , ts * timespec ) int32 {
358
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (kevent_trampoline )), unsafe .Pointer (& kq ))
395
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (kevent_trampoline )), unsafe .Pointer (& kq ))
396
+ KeepAlive (ch )
397
+ KeepAlive (ev )
398
+ KeepAlive (ts )
399
+ return ret
359
400
}
360
401
func kevent_trampoline ()
361
402
362
403
//go:nosplit
363
404
//go:cgo_unsafe_args
364
405
func pthread_mutex_init (m * pthreadmutex , attr * pthreadmutexattr ) int32 {
365
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_init_trampoline )), unsafe .Pointer (& m ))
406
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_init_trampoline )), unsafe .Pointer (& m ))
407
+ KeepAlive (m )
408
+ KeepAlive (attr )
409
+ return ret
366
410
}
367
411
func pthread_mutex_init_trampoline ()
368
412
369
413
//go:nosplit
370
414
//go:cgo_unsafe_args
371
415
func pthread_mutex_lock (m * pthreadmutex ) int32 {
372
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_lock_trampoline )), unsafe .Pointer (& m ))
416
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_lock_trampoline )), unsafe .Pointer (& m ))
417
+ KeepAlive (m )
418
+ return ret
373
419
}
374
420
func pthread_mutex_lock_trampoline ()
375
421
376
422
//go:nosplit
377
423
//go:cgo_unsafe_args
378
424
func pthread_mutex_unlock (m * pthreadmutex ) int32 {
379
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_unlock_trampoline )), unsafe .Pointer (& m ))
425
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_mutex_unlock_trampoline )), unsafe .Pointer (& m ))
426
+ KeepAlive (m )
427
+ return ret
380
428
}
381
429
func pthread_mutex_unlock_trampoline ()
382
430
383
431
//go:nosplit
384
432
//go:cgo_unsafe_args
385
433
func pthread_cond_init (c * pthreadcond , attr * pthreadcondattr ) int32 {
386
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_init_trampoline )), unsafe .Pointer (& c ))
434
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_init_trampoline )), unsafe .Pointer (& c ))
435
+ KeepAlive (c )
436
+ KeepAlive (attr )
437
+ return ret
387
438
}
388
439
func pthread_cond_init_trampoline ()
389
440
390
441
//go:nosplit
391
442
//go:cgo_unsafe_args
392
443
func pthread_cond_wait (c * pthreadcond , m * pthreadmutex ) int32 {
393
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_wait_trampoline )), unsafe .Pointer (& c ))
444
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_wait_trampoline )), unsafe .Pointer (& c ))
445
+ KeepAlive (c )
446
+ KeepAlive (m )
447
+ return ret
394
448
}
395
449
func pthread_cond_wait_trampoline ()
396
450
397
451
//go:nosplit
398
452
//go:cgo_unsafe_args
399
453
func pthread_cond_timedwait_relative_np (c * pthreadcond , m * pthreadmutex , t * timespec ) int32 {
400
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_timedwait_relative_np_trampoline )), unsafe .Pointer (& c ))
454
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_timedwait_relative_np_trampoline )), unsafe .Pointer (& c ))
455
+ KeepAlive (c )
456
+ KeepAlive (m )
457
+ KeepAlive (t )
458
+ return ret
401
459
}
402
460
func pthread_cond_timedwait_relative_np_trampoline ()
403
461
404
462
//go:nosplit
405
463
//go:cgo_unsafe_args
406
464
func pthread_cond_signal (c * pthreadcond ) int32 {
407
- return libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_signal_trampoline )), unsafe .Pointer (& c ))
465
+ ret := libcCall (unsafe .Pointer (abi .FuncPCABI0 (pthread_cond_signal_trampoline )), unsafe .Pointer (& c ))
466
+ KeepAlive (c )
467
+ return ret
408
468
}
409
469
func pthread_cond_signal_trampoline ()
410
470
0 commit comments