]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: testprogcgo: don't call exported Go functions directly from Go
authorIan Lance Taylor <iant@golang.org>
Fri, 11 Jun 2021 18:50:42 +0000 (11:50 -0700)
committerIan Lance Taylor <iant@golang.org>
Sat, 12 Jun 2021 16:07:12 +0000 (16:07 +0000)
Instead route through a C function, to avoid declaration conflicts
between the declaration needed in the cgo comment and the declaration
generated by cgo in _cgo_export.h.

This is not something user code will ever do, so no need to make it
work in cgo.

Fixes #46502

Change-Id: I1bfffdc76ef8ea63e3829871298d0774157957a5
Reviewed-on: https://go-review.googlesource.com/c/go/+/327309
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/runtime/testdata/testprogcgo/aprof.go
src/runtime/testdata/testprogcgo/aprof_c.c [new file with mode: 0644]
src/runtime/testdata/testprogcgo/bigstack1_windows.c [new file with mode: 0644]
src/runtime/testdata/testprogcgo/bigstack_windows.go

index aabca9e1ebd978dfa4b4f2c8de789837da78e71c..44a15b08650377adb509b61118081d79a3d26c05 100644 (file)
@@ -10,7 +10,7 @@ package main
 // The test fails when the function is the first C function.
 // The exported functions are the first C functions, so we use that.
 
-// extern void GoNop();
+// extern void CallGoNop();
 import "C"
 
 import (
@@ -38,7 +38,7 @@ func CgoCCodeSIGPROF() {
                                        break
                                }
                        }
-                       C.GoNop()
+                       C.CallGoNop()
                }
                c <- true
        }()
diff --git a/src/runtime/testdata/testprogcgo/aprof_c.c b/src/runtime/testdata/testprogcgo/aprof_c.c
new file mode 100644 (file)
index 0000000..d588e13
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2021 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 "_cgo_export.h"
+
+void CallGoNop() {
+       GoNop();
+}
diff --git a/src/runtime/testdata/testprogcgo/bigstack1_windows.c b/src/runtime/testdata/testprogcgo/bigstack1_windows.c
new file mode 100644 (file)
index 0000000..551fb68
--- /dev/null
@@ -0,0 +1,12 @@
+// Copyright 2021 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.
+
+// This is not in bigstack_windows.c because it needs to be part of
+// testprogcgo but is not part of the DLL built from bigstack_windows.c.
+
+#include "_cgo_export.h"
+
+void CallGoBigStack1(char* p) {
+       goBigStack1(p);
+}
index f58fcf993f0217846369d3c745ceb037eaad16f4..135b5fcfe04e3502daff61c0e50d5cc9992c76fc 100644 (file)
@@ -6,7 +6,7 @@ package main
 
 /*
 typedef void callback(char*);
-extern void goBigStack1(char*);
+extern void CallGoBigStack1(char*);
 extern void bigStack(callback*);
 */
 import "C"
@@ -18,7 +18,7 @@ func init() {
 func BigStack() {
        // Create a large thread stack and call back into Go to test
        // if Go correctly determines the stack bounds.
-       C.bigStack((*C.callback)(C.goBigStack1))
+       C.bigStack((*C.callback)(C.CallGoBigStack1))
 }
 
 //export goBigStack1