mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo: for gccgo add #define to cgo_export.h for expected name
For gccgo we rename exported functions so that the compiler will make them visible. This CL adds a #define so that C functions that #include "cgo_export.h" can use the expected names of the function. The test for this is the existing issue6833 test in misc/cgo/test. Without this CL it fails when using -compiler=gccgo. LGTM=minux.ma, rsc R=golang-codereviews, gobot, rsc, minux.ma CC=golang-codereviews https://golang.org/cl/91830046
This commit is contained in:
parent
382cc8cb39
commit
fee51f45ab
1 changed files with 14 additions and 0 deletions
|
|
@ -880,10 +880,24 @@ func (p *Package) writeGccgoExports(fgo2, fc, fm *os.File) {
|
|||
fmt.Fprintf(cdeclBuf, ")")
|
||||
cParams := cdeclBuf.String()
|
||||
|
||||
// We need to use a name that will be exported by the
|
||||
// Go code; otherwise gccgo will make it static and we
|
||||
// will not be able to link against it from the C
|
||||
// code.
|
||||
goName := "Cgoexp_" + exp.ExpName
|
||||
fmt.Fprintf(fgcch, `extern %s %s %s __asm__("%s.%s");`, cRet, goName, cParams, gccgoSymbolPrefix, goName)
|
||||
fmt.Fprint(fgcch, "\n")
|
||||
|
||||
// Use a #define so that the C code that includes
|
||||
// cgo_export.h will be able to refer to the Go
|
||||
// function using the expected name.
|
||||
fmt.Fprintf(fgcch, "#define %s %s\n", exp.ExpName, goName)
|
||||
|
||||
// Use a #undef in _cgo_export.c so that we ignore the
|
||||
// #define from cgo_export.h, since here we are
|
||||
// defining the real function.
|
||||
fmt.Fprintf(fgcc, "#undef %s\n", exp.ExpName)
|
||||
|
||||
fmt.Fprint(fgcc, "\n")
|
||||
fmt.Fprintf(fgcc, "%s %s %s {\n", cRet, exp.ExpName, cParams)
|
||||
fmt.Fprint(fgcc, "\t")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue