diff options
| author | Joel Sing <joel@sing.id.au> | 2023-08-11 22:46:32 +1000 |
|---|---|---|
| committer | Joel Sing <joel@sing.id.au> | 2023-08-15 03:55:51 +0000 |
| commit | 0ab0d4e33ff6982880e6140ec560729412192080 (patch) | |
| tree | 81660881021ad58901fbfa0e5d69180d830c027f /src/runtime/cgo | |
| parent | 23e4a4b6e5ef46f2ea3fa3a95efda46df1084cf7 (diff) | |
| download | go-0ab0d4e33ff6982880e6140ec560729412192080.tar.xz | |
runtime/cgo: consolidate netbsd cgo code
All netbsd architectures now use the same code, deduplicate accordingly.
Change-Id: Ieb179fd76885b7af6d388d7f2aee0f9fac6f1264
Reviewed-on: https://go-review.googlesource.com/c/go/+/518621
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Joel Sing <joel@sing.id.au>
Diffstat (limited to 'src/runtime/cgo')
| -rw-r--r-- | src/runtime/cgo/gcc_netbsd.c (renamed from src/runtime/cgo/gcc_netbsd_386.c) | 2 | ||||
| -rw-r--r-- | src/runtime/cgo/gcc_netbsd_amd64.c | 72 | ||||
| -rw-r--r-- | src/runtime/cgo/gcc_netbsd_arm.c | 72 | ||||
| -rw-r--r-- | src/runtime/cgo/gcc_netbsd_arm64.c | 73 |
4 files changed, 2 insertions, 217 deletions
diff --git a/src/runtime/cgo/gcc_netbsd_386.c b/src/runtime/cgo/gcc_netbsd.c index 97191f2847..16819ce8b4 100644 --- a/src/runtime/cgo/gcc_netbsd_386.c +++ b/src/runtime/cgo/gcc_netbsd.c @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build netbsd && (386 || amd64 || arm || arm64) + #include <sys/types.h> #include <pthread.h> #include <signal.h> diff --git a/src/runtime/cgo/gcc_netbsd_amd64.c b/src/runtime/cgo/gcc_netbsd_amd64.c deleted file mode 100644 index 02b5d0e430..0000000000 --- a/src/runtime/cgo/gcc_netbsd_amd64.c +++ /dev/null @@ -1,72 +0,0 @@ -// 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/types.h> -#include <pthread.h> -#include <signal.h> -#include <string.h> -#include "libcgo.h" -#include "libcgo_unix.h" - -static void* threadentry(void*); -static void (*setg_gcc)(void*); - -void -x_cgo_init(G *g, void (*setg)(void*)) -{ - setg_gcc = setg; - _cgo_set_stacklo(g, NULL); -} - - -void -_cgo_sys_thread_start(ThreadStart *ts) -{ - pthread_attr_t attr; - sigset_t ign, oset; - pthread_t p; - size_t size; - int err; - - sigfillset(&ign); - 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. - ts->g->stackhi = size; - err = _cgo_try_pthread_create(&p, &attr, threadentry, ts); - - pthread_sigmask(SIG_SETMASK, &oset, nil); - - if (err != 0) { - fatalf("pthread_create failed: %s", strerror(err)); - } -} - -extern void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g); -static void* -threadentry(void *v) -{ - ThreadStart ts; - stack_t ss; - - ts = *(ThreadStart*)v; - free(v); - - // On NetBSD, a new thread inherits the signal stack of the - // creating thread. That confuses minit, so we remove that - // signal stack here before calling the regular mstart. It's - // a bit baroque to remove a signal stack here only to add one - // in minit, but it's a simple change that keeps NetBSD - // working like other OS's. At this point all signals are - // blocked, so there is no race. - memset(&ss, 0, sizeof ss); - ss.ss_flags = SS_DISABLE; - sigaltstack(&ss, nil); - - crosscall1(ts.fn, setg_gcc, (void*)ts.g); - return nil; -} diff --git a/src/runtime/cgo/gcc_netbsd_arm.c b/src/runtime/cgo/gcc_netbsd_arm.c deleted file mode 100644 index 5f4e1fae4e..0000000000 --- a/src/runtime/cgo/gcc_netbsd_arm.c +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2013 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/types.h> -#include <pthread.h> -#include <signal.h> -#include <string.h> -#include "libcgo.h" -#include "libcgo_unix.h" - -static void *threadentry(void*); - -static void (*setg_gcc)(void*); - -void -x_cgo_init(G *g, void (*setg)(void*)) -{ - setg_gcc = setg; - _cgo_set_stacklo(g, NULL); -} - - -void -_cgo_sys_thread_start(ThreadStart *ts) -{ - pthread_attr_t attr; - sigset_t ign, oset; - pthread_t p; - size_t size; - int err; - - sigfillset(&ign); - 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. - ts->g->stackhi = size; - err = _cgo_try_pthread_create(&p, &attr, threadentry, ts); - - pthread_sigmask(SIG_SETMASK, &oset, nil); - - if (err != 0) { - fatalf("pthread_create failed: %s", strerror(err)); - } -} - -extern void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g); -static void* -threadentry(void *v) -{ - ThreadStart ts; - stack_t ss; - - ts = *(ThreadStart*)v; - free(v); - - // On NetBSD, a new thread inherits the signal stack of the - // creating thread. That confuses minit, so we remove that - // signal stack here before calling the regular mstart. It's - // a bit baroque to remove a signal stack here only to add one - // in minit, but it's a simple change that keeps NetBSD - // working like other OS's. At this point all signals are - // blocked, so there is no race. - memset(&ss, 0, sizeof ss); - ss.ss_flags = SS_DISABLE; - sigaltstack(&ss, nil); - - crosscall1(ts.fn, setg_gcc, (void*)ts.g); - return nil; -} diff --git a/src/runtime/cgo/gcc_netbsd_arm64.c b/src/runtime/cgo/gcc_netbsd_arm64.c deleted file mode 100644 index b3fd268cf9..0000000000 --- a/src/runtime/cgo/gcc_netbsd_arm64.c +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2019 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/types.h> -#include <pthread.h> -#include <signal.h> -#include <string.h> -#include "libcgo.h" -#include "libcgo_unix.h" - -static void *threadentry(void*); - -static void (*setg_gcc)(void*); - -void -x_cgo_init(G *g, void (*setg)(void*)) -{ - setg_gcc = setg; - _cgo_set_stacklo(g, NULL); -} - - -void -_cgo_sys_thread_start(ThreadStart *ts) -{ - pthread_attr_t attr; - sigset_t ign, oset; - pthread_t p; - size_t size; - int err; - - sigfillset(&ign); - 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. - ts->g->stackhi = size; - err = _cgo_try_pthread_create(&p, &attr, threadentry, ts); - - pthread_sigmask(SIG_SETMASK, &oset, nil); - - if (err != 0) { - fatalf("pthread_create failed: %s", strerror(err)); - } -} - -extern void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g); - -static void* -threadentry(void *v) -{ - ThreadStart ts; - stack_t ss; - - ts = *(ThreadStart*)v; - free(v); - - // On NetBSD, a new thread inherits the signal stack of the - // creating thread. That confuses minit, so we remove that - // signal stack here before calling the regular mstart. It's - // a bit baroque to remove a signal stack here only to add one - // in minit, but it's a simple change that keeps NetBSD - // working like other OS's. At this point all signals are - // blocked, so there is no race. - memset(&ss, 0, sizeof ss); - ss.ss_flags = SS_DISABLE; - sigaltstack(&ss, nil); - - crosscall1(ts.fn, setg_gcc, (void*)ts.g); - return nil; -} |
