diff options
author | Srdjan Petrovic <spetrovic@google.com> | 2015-03-25 17:50:35 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2015-04-03 01:24:51 +0000 |
commit | e8694c8196e39328d6d61b1f32228d21112008d7 (patch) | |
tree | 3942b490997e3f0800484c4666fdd787e925bf43 /src/runtime/cgo.go | |
parent | 167562f65200bc01c9ecdcf393dfa2f16de3d9c2 (diff) | |
download | go-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.go | 12 |
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 |