mirror of
https://github.com/golang/go
synced 2024-11-26 08:17:59 -07:00
runtime: testprogcgo: don't call exported Go functions directly from Go
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>
This commit is contained in:
parent
9d46ee5ac4
commit
1ed0d129e9
4
src/runtime/testdata/testprogcgo/aprof.go
vendored
4
src/runtime/testdata/testprogcgo/aprof.go
vendored
@ -10,7 +10,7 @@ package main
|
|||||||
// The test fails when the function is the first C function.
|
// The test fails when the function is the first C function.
|
||||||
// The exported functions are the first C functions, so we use that.
|
// The exported functions are the first C functions, so we use that.
|
||||||
|
|
||||||
// extern void GoNop();
|
// extern void CallGoNop();
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -38,7 +38,7 @@ func CgoCCodeSIGPROF() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
C.GoNop()
|
C.CallGoNop()
|
||||||
}
|
}
|
||||||
c <- true
|
c <- true
|
||||||
}()
|
}()
|
||||||
|
9
src/runtime/testdata/testprogcgo/aprof_c.c
vendored
Normal file
9
src/runtime/testdata/testprogcgo/aprof_c.c
vendored
Normal file
@ -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();
|
||||||
|
}
|
12
src/runtime/testdata/testprogcgo/bigstack1_windows.c
vendored
Normal file
12
src/runtime/testdata/testprogcgo/bigstack1_windows.c
vendored
Normal file
@ -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);
|
||||||
|
}
|
@ -6,7 +6,7 @@ package main
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
typedef void callback(char*);
|
typedef void callback(char*);
|
||||||
extern void goBigStack1(char*);
|
extern void CallGoBigStack1(char*);
|
||||||
extern void bigStack(callback*);
|
extern void bigStack(callback*);
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
@ -18,7 +18,7 @@ func init() {
|
|||||||
func BigStack() {
|
func BigStack() {
|
||||||
// Create a large thread stack and call back into Go to test
|
// Create a large thread stack and call back into Go to test
|
||||||
// if Go correctly determines the stack bounds.
|
// if Go correctly determines the stack bounds.
|
||||||
C.bigStack((*C.callback)(C.goBigStack1))
|
C.bigStack((*C.callback)(C.CallGoBigStack1))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export goBigStack1
|
//export goBigStack1
|
||||||
|
Loading…
Reference in New Issue
Block a user