From: Joel Sing Date: Fri, 11 Aug 2023 12:53:30 +0000 (+1000) Subject: runtime/cgo: consolidate freebsd cgo code X-Git-Tag: go1.22rc1~1297 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=60506f4d7f912bff9af886ea1befb8aa9583d535;p=gostls13.git runtime/cgo: consolidate freebsd cgo code Most freebsd architectures now use the same code, deduplicate accordingly. The arm code differs slightly in that it has a compile time check for ARM_TP_ADDRESS, however this is written in a way that it can be included for all architectures. Change-Id: I7f6032b63521d24d0c3b5e0e08d57e32b4f9ddc4 Reviewed-on: https://go-review.googlesource.com/c/go/+/518619 Reviewed-by: Ian Lance Taylor TryBot-Result: Gopher Robot Run-TryBot: Joel Sing Reviewed-by: Dmitri Shuralyov --- diff --git a/src/runtime/cgo/gcc_freebsd_arm.c b/src/runtime/cgo/gcc_freebsd.c similarity index 88% rename from src/runtime/cgo/gcc_freebsd_arm.c rename to src/runtime/cgo/gcc_freebsd.c index 344531007c..a94121138d 100644 --- a/src/runtime/cgo/gcc_freebsd_arm.c +++ b/src/runtime/cgo/gcc_freebsd.c @@ -1,10 +1,12 @@ -// Copyright 2012 The Go Authors. All rights reserved. +// 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. +//go:build freebsd && (386 || arm || arm64 || riscv64) + #include -#include #include +#include #include #include #include @@ -20,8 +22,7 @@ #endif #endif -static void *threadentry(void*); - +static void* threadentry(void*); static void (*setg_gcc)(void*); void @@ -65,6 +66,6 @@ threadentry(void *v) ts = *(ThreadStart*)v; free(v); - crosscall1(ts.fn, setg_gcc, (void*)ts.g); + crosscall1(ts.fn, setg_gcc, ts.g); return nil; } diff --git a/src/runtime/cgo/gcc_freebsd_386.c b/src/runtime/cgo/gcc_freebsd_386.c deleted file mode 100644 index ed98808cce..0000000000 --- a/src/runtime/cgo/gcc_freebsd_386.c +++ /dev/null @@ -1,60 +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 -#include -#include -#include -#include -#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; - - ts = *(ThreadStart*)v; - free(v); - - crosscall1(ts.fn, setg_gcc, ts.g); - return nil; -} diff --git a/src/runtime/cgo/gcc_freebsd_arm64.c b/src/runtime/cgo/gcc_freebsd_arm64.c deleted file mode 100644 index b896fb721b..0000000000 --- a/src/runtime/cgo/gcc_freebsd_arm64.c +++ /dev/null @@ -1,61 +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 -#include -#include -#include -#include -#include -#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; - - ts = *(ThreadStart*)v; - free(v); - - crosscall1(ts.fn, setg_gcc, (void*)ts.g); - return nil; -} diff --git a/src/runtime/cgo/gcc_freebsd_riscv64.c b/src/runtime/cgo/gcc_freebsd_riscv64.c deleted file mode 100644 index ba0489fe0c..0000000000 --- a/src/runtime/cgo/gcc_freebsd_riscv64.c +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2022 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 -#include -#include -#include -#include -#include -#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; - - ts = *(ThreadStart*)v; - free(v); - - crosscall1(ts.fn, setg_gcc, (void*)ts.g); - return nil; -}