aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/cgo.go
diff options
context:
space:
mode:
authorSrdjan Petrovic <spetrovic@google.com>2015-03-25 17:50:35 -0700
committerIan Lance Taylor <iant@golang.org>2015-04-03 01:24:51 +0000
commite8694c8196e39328d6d61b1f32228d21112008d7 (patch)
tree3942b490997e3f0800484c4666fdd787e925bf43 /src/runtime/cgo.go
parent167562f65200bc01c9ecdcf393dfa2f16de3d9c2 (diff)
downloadgo-e8694c8196e39328d6d61b1f32228d21112008d7.tar.gz
go-e8694c8196e39328d6d61b1f32228d21112008d7.zip
runtime: initialize shared library at library-load time
This is Part 2 of the change, see Part 1 here: in https://go-review.googlesource.com/#/c/7692/ Suggested by iant@, we use the library initialization entry point to: - create a new OS thread and run the "regular" runtime init stack on that thread - return immediately from the main (i.e., loader) thread - at the first CGO invocation, we wait for the runtime initialization to complete. The above mechanism is implemented only on linux_amd64. Next step is to support it on linux_arm. Other platforms don't yet support shared library compiling/linking, but we intend to use the same strategy there as well. Change-Id: Ib2c81b1b83bee837134084b75a3beecfb8de6bf4 Reviewed-on: https://go-review.googlesource.com/8094 Run-TryBot: Srdjan Petrovic <spetrovic@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/runtime/cgo.go')
-rw-r--r--src/runtime/cgo.go12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/runtime/cgo.go b/src/runtime/cgo.go
index 5dc83c0be1..d8ae6ec94b 100644
--- a/src/runtime/cgo.go
+++ b/src/runtime/cgo.go
@@ -14,12 +14,16 @@ import "unsafe"
//go:linkname _cgo_malloc _cgo_malloc
//go:linkname _cgo_free _cgo_free
//go:linkname _cgo_thread_start _cgo_thread_start
+//go:linkname _cgo_sys_thread_create _cgo_sys_thread_create
+//go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done
var (
- _cgo_init unsafe.Pointer
- _cgo_malloc unsafe.Pointer
- _cgo_free unsafe.Pointer
- _cgo_thread_start unsafe.Pointer
+ _cgo_init unsafe.Pointer
+ _cgo_malloc unsafe.Pointer
+ _cgo_free unsafe.Pointer
+ _cgo_thread_start unsafe.Pointer
+ _cgo_sys_thread_create unsafe.Pointer
+ _cgo_notify_runtime_init_done unsafe.Pointer
)
// iscgo is set to true by the runtime/cgo package