| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| #include <sys/signalvar.h> |
| static void* threadentry(void*); |
| static void (*setg_gcc)(void*); |
| x_cgo_init(G *g, void (*setg)(void*)) |
| pthread_attr_init(&attr); |
| pthread_attr_getstacksize(&attr, &size); |
| g->stacklo = (uintptr)&attr - size + 4096; |
| pthread_attr_destroy(&attr); |
| _cgo_sys_thread_start(ThreadStart *ts) |
| pthread_sigmask(SIG_SETMASK, &ign, &oset); |
| pthread_attr_init(&attr); |
| pthread_attr_getstacksize(&attr, &size); |
| // Leave stacklo=0 and set stackhi=size; mstart will do the rest. |
| err = _cgo_try_pthread_create(&p, &attr, threadentry, ts); |
| pthread_sigmask(SIG_SETMASK, &oset, nil); |
| fprintf(stderr, "runtime/cgo: pthread_create failed: %s\n", strerror(err)); |