aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-03-07 09:19:02 -0500
committerRuss Cox <rsc@golang.org>2013-03-07 09:19:02 -0500
commit60f783d92bc07fa7ca78e8efccbbc841d9f9cbcb (patch)
tree8677601561fbb007429777514911480aa4c871fd /src/pkg/runtime
parent8aafb44b0bbba85535feb67e7ae0f4f254524c0f (diff)
downloadgo-60f783d92bc07fa7ca78e8efccbbc841d9f9cbcb.tar.xz
cmd/ld: host linking support for linux/amd64
Still to do: non-linux and non-amd64. It may work on other ELF-based amd64 systems too, but untested. "go test -ldflags -hostobj $GOROOT/misc/cgo/test" passes. Much may yet change, but this seems a reasonable checkpoint. R=iant CC=golang-dev https://golang.org/cl/7369057
Diffstat (limited to 'src/pkg/runtime')
-rw-r--r--src/pkg/runtime/cgo/callbacks.c6
-rw-r--r--src/pkg/runtime/cgocall.c6
2 files changed, 10 insertions, 2 deletions
diff --git a/src/pkg/runtime/cgo/callbacks.c b/src/pkg/runtime/cgo/callbacks.c
index 51bd529ecb..19f6115a66 100644
--- a/src/pkg/runtime/cgo/callbacks.c
+++ b/src/pkg/runtime/cgo/callbacks.c
@@ -12,8 +12,10 @@
// 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
+// callbacks from shared libraries. This applies regardless of
+// linking mode.
+#pragma cgo_export_static crosscall2
+#pragma cgo_export_dynamic crosscall2
// Allocate memory. This allocates the requested number of bytes in
// memory controlled by the Go runtime. The allocated memory will be
diff --git a/src/pkg/runtime/cgocall.c b/src/pkg/runtime/cgocall.c
index 590bf9b672..3ed1243aac 100644
--- a/src/pkg/runtime/cgocall.c
+++ b/src/pkg/runtime/cgocall.c
@@ -280,3 +280,9 @@ runtime·cgounimpl(void) // called from (incomplete) assembly
{
runtime·throw("runtime: cgo not implemented");
}
+
+// For cgo-using programs with external linking,
+// export "main" (defined in assembly) so that libc can handle basic
+// C runtime startup and call the Go program as if it were
+// the C main function.
+#pragma cgo_export_static main