Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
17d50d86
Commit
17d50d86
authored
Jan 11, 2011
by
Ian Lance Taylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
runtime/cgo: Add callbacks to support SWIG.
R=rsc, iant2, r CC=golang-dev
https://golang.org/cl/3886041
parent
5b8bcf23
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
0 deletions
+81
-0
src/pkg/runtime/cgo/Makefile
src/pkg/runtime/cgo/Makefile
+1
-0
src/pkg/runtime/cgo/callbacks.c
src/pkg/runtime/cgo/callbacks.c
+73
-0
src/pkg/runtime/cgo/cgo.go
src/pkg/runtime/cgo/cgo.go
+7
-0
No files found.
src/pkg/runtime/cgo/Makefile
View file @
17d50d86
...
@@ -26,6 +26,7 @@ CGO_OFILES=\
...
@@ -26,6 +26,7 @@ CGO_OFILES=\
OFILES
=
\
OFILES
=
\
iscgo.
$O
\
iscgo.
$O
\
callbacks.
$O
\
_cgo_import.
$O
\
_cgo_import.
$O
\
$(CGO_OFILES)
\
$(CGO_OFILES)
\
...
...
src/pkg/runtime/cgo/callbacks.c
0 → 100644
View file @
17d50d86
// Copyright 2011 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 "../runtime.h"
#include "../cgocall.h"
// These utility functions are available to be called from code
// compiled with gcc via crosscall2.
// The declaration of crosscall2 is:
// void crosscall2(void (*fn)(void *, int), void *, int);
//
// We need to export the symbol crosscall2 in order to support
// callbacks from shared libraries.
#pragma dynexport crosscall2 crosscall2
// Allocate memory. This allocates the requested number of bytes in
// memory controlled by the Go runtime. The allocated memory will be
// zeroed. You are responsible for ensuring that the Go garbage
// collector can see a pointer to the allocated memory for as long as
// it is valid, e.g., by storing a pointer in a local variable in your
// C function, or in memory allocated by the Go runtime. If the only
// pointers are in a C global variable or in memory allocated via
// malloc, then the Go garbage collector may collect the memory.
// Call like this in code compiled with gcc:
// struct { size_t len; void *ret; } a;
// a.len = /* number of bytes to allocate */;
// crosscall2(_cgo_allocate, &a, sizeof a);
// /* Here a.ret is a pointer to the allocated memory. */
static
void
_cgo_allocate_internal
(
uintptr
len
,
byte
*
ret
)
{
ret
=
runtime
·
mal
(
len
);
FLUSH
(
&
ret
);
}
#pragma dynexport _cgo_allocate _cgo_allocate
void
_cgo_allocate
(
void
*
a
,
int32
n
)
{
runtime
·
cgocallback
((
void
(
*
)(
void
))
_cgo_allocate_internal
,
a
,
n
);
}
// Panic. The argument is converted into a Go string.
// Call like this in code compiled with gcc:
// struct { const char *p; } a;
// a.p = /* string to pass to panic */;
// crosscall2(_cgo_panic, &a, sizeof a);
// /* The function call will not return. */
extern
void
·
cgoStringToEface
(
String
,
Eface
*
);
static
void
_cgo_panic_internal
(
byte
*
p
)
{
String
s
;
Eface
err
;
s
=
runtime
·
gostring
(
p
);
·
cgoStringToEface
(
s
,
&
err
);
runtime
·
panic
(
err
);
}
#pragma dynexport _cgo_panic _cgo_panic
void
_cgo_panic
(
void
*
a
,
int32
n
)
{
runtime
·
cgocallback
((
void
(
*
)(
void
))
_cgo_panic_internal
,
a
,
n
);
}
src/pkg/runtime/cgo/cgo.go
View file @
17d50d86
...
@@ -8,3 +8,10 @@ by the cgo tool. See the documentation for the cgo command
...
@@ -8,3 +8,10 @@ by the cgo tool. See the documentation for the cgo command
for details on using cgo.
for details on using cgo.
*/
*/
package
cgo
package
cgo
// Supports _cgo_panic by converting a string constant to an empty
// interface.
func
cgoStringToEface
(
s
string
,
ret
*
interface
{})
{
*
ret
=
s
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment