diff options
Diffstat (limited to 'gcc/go/doc/function-names.rst')
-rw-r--r-- | gcc/go/doc/function-names.rst | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/gcc/go/doc/function-names.rst b/gcc/go/doc/function-names.rst deleted file mode 100644 index 1ed5760..0000000 --- a/gcc/go/doc/function-names.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. - Copyright 1988-2022 Free Software Foundation, Inc. - This is part of the GCC manual. - For copying conditions, see the copyright.rst file. - -.. index:: extern, external names - -.. _function-names: - -Function Names -************** - -Go code can call C functions directly using the ``//extern`` or -``//go:linkname`` compiler directives. An ``//extern`` -directive must be at the beginning of the line and must start with -``//extern``. This must be followed by a space and then the -external name of the function. The function declaration must be on -the line immediately after the comment. For example, here is how the -C function ``open`` can be declared in Go: - -.. code-block:: c++ - - //extern open - func c_open(name *byte, mode int, perm int) int - -You can do the same thing using the ``//go:linkname`` compiler -directive. The ``//go:linkname`` directive must be at the start of -the line. It is followed by whitespace, the name of the Go function, -more whitespace, and the external name of the function. Unlike -``//extern``, ``//go:linkname`` does not need to appear -immediately adjacent to the function definition or declaration. - -.. code-block:: c++ - - //go:linkname c_open open - func c_open(name *byte, mode int, perm int) int - -The C function naturally expects a nul terminated string, which in Go -is equivalent to a pointer to an array (not a slice!) of ``byte`` -with a terminating zero byte. So a sample call from Go would look -like (after importing the ``os`` package): - -.. code-block:: c++ - - var name = [4]byte{'f', 'o', 'o', 0}; - i := c_open(&name[0], os.O_RDONLY, 0); - -Note that this serves as an example only. To open a file in Go please -use Go's ``os.Open`` function instead. - -The name of Go functions accessed from C is subject to change. At -present the name of a Go function that does not have a receiver is -``pkgpath.Functionname``. The :samp:`{pkgpath}` is set by the -:option:`-fgo-pkgpath` option used when the package is compiled; if the -option is not used, the default is ``go.packagename``. To -call the function from C you must set the name using the :command:`gcc` -``__asm__`` extension. - -.. code-block:: c++ - - extern int go_function(int) __asm__ ("mypkgpath.Function");
\ No newline at end of file |