aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/cgo
AgeCommit message (Collapse)Author
2014-09-08build: move package sources from src/pkg to srcRuss Cox
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.
2014-09-06runtime/cgo: use just #include "textflag.h"Russ Cox
This will withstand the src/pkg/ to src/ move. LGTM=r R=iant, r CC=golang-codereviews https://golang.org/cl/134530044
2014-09-05runtime: convert panic/recover to GoKeith Randall
created panic1.go just so diffs were available. After this CL is in, I'd like to move panic.go -> defer.go and panic1.go -> panic.go. LGTM=rsc R=rsc, khr CC=golang-codereviews https://golang.org/cl/133530045
2014-08-30runtime: translate env*.c to GoRuss Cox
In an earlier CL I wrote a separate Go-only version, but that broke Plan 9, because the Go-only version assumed a non-Plan 9 system. Translate the real ones instead. LGTM=r R=golang-codereviews, r CC=0intro, golang-codereviews, iant, khr https://golang.org/cl/140050044
2014-08-07runtime: remove mal/malloc/FlagNoGC/FlagNoInvokeGCDmitriy Vyukov
FlagNoGC is unused now. FlagNoInvokeGC is unneeded as we don't invoke GC on g0 and when holding locks anyway. mal/malloc have very few uses and you never remember the exact set of flags they use and the difference between them. Moreover, eventually we need to give exact types to all allocations, something what mal/malloc do not support. LGTM=khr R=golang-codereviews, khr CC=golang-codereviews, rsc https://golang.org/cl/117580043
2014-07-03runtime/cgo: replace fprintf(stderr, ...) with fatalf(...) for linux/androidDavid Crawshaw
Both stdout and stderr are sent to /dev/null in android apps. Introducing fatalf allows android to implement its own copy that sends fatal errors to __android_log_print. LGTM=minux, dave R=minux, dave CC=golang-codereviews https://golang.org/cl/108400045
2014-07-03runtime/cgo: revert use of undefined logging functionDavid Crawshaw
It snuck into cl/106380043. Too many active clients. LGTM=ruiu R=golang-codereviews, ruiu CC=golang-codereviews https://golang.org/cl/110830045
2014-07-03cmd/go, cmd/ld, runtime, os/user: TLS emulation for androidDavid Crawshaw
Based on cl/69170045 by Elias Naur. There are currently several schemes for acquiring a TLS slot to save the g register. None of them appear to work for android. The closest are linux and darwin. Linux uses a linker TLS relocation. This is not supported by the android linker. Darwin uses a fixed offset, and calls pthread_key_create until it gets the slot it wants. As the runtime loads late in the android process lifecycle, after an arbitrary number of other libraries, we cannot rely on any particular slot being available. So we call pthread_key_create, take the first slot we are given, and put it in runtime.tlsg, which we turn into a regular variable in cmd/ld. Makes android/arm cgo binaries work. LGTM=minux R=elias.naur, minux, dave, josharian CC=golang-codereviews https://golang.org/cl/106380043
2014-06-30runtime: update arm comments now register m is goneDavid Crawshaw
LGTM=minux R=golang-codereviews, minux CC=golang-codereviews https://golang.org/cl/109220046
2014-06-26all: remove 'extern register M *m' from runtimeRuss Cox
The runtime has historically held two dedicated values g (current goroutine) and m (current thread) in 'extern register' slots (TLS on x86, real registers backed by TLS on ARM). This CL removes the extern register m; code now uses g->m. On ARM, this frees up the register that formerly held m (R9). This is important for NaCl, because NaCl ARM code cannot use R9 at all. The Go 1 macrobenchmarks (those with per-op times >= 10 µs) are unaffected: BenchmarkBinaryTree17 5491374955 5471024381 -0.37% BenchmarkFannkuch11 4357101311 4275174828 -1.88% BenchmarkGobDecode 11029957 11364184 +3.03% BenchmarkGobEncode 6852205 6784822 -0.98% BenchmarkGzip 650795967 650152275 -0.10% BenchmarkGunzip 140962363 141041670 +0.06% BenchmarkHTTPClientServer 71581 73081 +2.10% BenchmarkJSONEncode 31928079 31913356 -0.05% BenchmarkJSONDecode 117470065 113689916 -3.22% BenchmarkMandelbrot200 6008923 5998712 -0.17% BenchmarkGoParse 6310917 6327487 +0.26% BenchmarkRegexpMatchMedium_1K 114568 114763 +0.17% BenchmarkRegexpMatchHard_1K 168977 169244 +0.16% BenchmarkRevcomp 935294971 914060918 -2.27% BenchmarkTemplate 145917123 148186096 +1.55% Minux previous reported larger variations, but these were caused by run-to-run noise, not repeatable slowdowns. Actual code changes by Minux. I only did the docs and the benchmarking. LGTM=dvyukov, iant, minux R=minux, josharian, iant, dave, bradfitz, dvyukov CC=golang-codereviews https://golang.org/cl/109050043
2014-02-25all: nacl import round 2Russ Cox
These previously reviewed CLs are present in this CL. --- changeset: 18445:436bb084caed user: Russ Cox <rsc@golang.org> date: Mon Nov 11 09:50:34 2013 -0500 description: runtime: assembly and system calls for Native Client x86-64 See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡adg https://golang.org/cl/15760044 --- changeset: 18448:90bd871b5994 user: Russ Cox <rsc@golang.org> date: Mon Nov 11 09:51:36 2013 -0500 description: runtime: amd64p32 and Native Client assembly bootstrap See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡khr https://golang.org/cl/15820043 --- changeset: 18449:b011c3dc687e user: Russ Cox <rsc@golang.org> date: Mon Nov 11 09:51:58 2013 -0500 description: math: amd64p32 assembly routines These routines only manipulate float64 values, so the amd64 and amd64p32 can share assembly. The large number of files is symptomatic of a problem with package path: it is a Go package structured like a C library. But that will need to wait for another day. See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡bradfitz https://golang.org/cl/15870043 --- changeset: 18450:43234f082eec user: Russ Cox <rsc@golang.org> date: Mon Nov 11 10:03:19 2013 -0500 description: syscall: networking for Native Client See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡rsc https://golang.org/cl/15780043 --- changeset: 18451:9c8d1d890aaa user: Russ Cox <rsc@golang.org> date: Mon Nov 11 10:03:34 2013 -0500 description: runtime: assembly and system calls for Native Client x86-32 See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡rsc https://golang.org/cl/15800043 --- changeset: 18452:f90b1dd9228f user: Russ Cox <rsc@golang.org> date: Mon Nov 11 11:04:09 2013 -0500 description: runtime: fix frame size for linux/amd64 runtime.raise R≡rsc https://golang.org/cl/24480043 --- changeset: 18445:436bb084caed user: Russ Cox <rsc@golang.org> date: Mon Nov 11 09:50:34 2013 -0500 description: runtime: assembly and system calls for Native Client x86-64 See golang.org/s/go13nacl for design overview. This CL is publicly visible but not CC'ed to golang-dev, to avoid distracting from the preparation of the Go 1.2 release. This CL and the others will be checked into my rsc-go13nacl clone repo for now, and I will send CLs against the main repo early in the Go 1.3 development. R≡adg https://golang.org/cl/15760044 --- changeset: 18455:53b06799a938 user: Russ Cox <rsc@golang.org> date: Mon Nov 11 23:29:52 2013 -0500 description: cmd/gc: add -nolocalimports flag R≡dsymonds https://golang.org/cl/24990043 --- changeset: 18456:24f64e1eaa8a user: Russ Cox <rsc@golang.org> date: Tue Nov 12 22:06:29 2013 -0500 description: runtime: add comments for playback write R≡adg https://golang.org/cl/25190043 --- changeset: 18457:d1f615bbb6e4 user: Russ Cox <rsc@golang.org> date: Wed Nov 13 17:03:52 2013 -0500 description: runtime: write only to NaCl stdout, never to NaCl stderr NaCl writes some other messages on standard error that we would like to be able to squelch. R≡adg https://golang.org/cl/26240044 --- changeset: 18458:1f01be1a1dc2 tag: tip user: Russ Cox <rsc@golang.org> date: Wed Nov 13 19:45:16 2013 -0500 description: runtime: remove apparent debugging dreg Setting timens to 0 turns off fake time. TBR≡adg https://golang.org/cl/26400043 LGTM=bradfitz R=dave, bradfitz CC=golang-codereviews https://golang.org/cl/68730043
2014-02-07runtime/cgo: fix build on freebsd/armMikio Hara
This CL is in preparation to make cgo work on freebsd/arm. LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/60500044
2014-01-22runtime: fix and improve CPU profilingDmitriy Vyukov
- do not lose profiling signals when we have no mcache (possible for syscalls/cgo) - do not lose any profiling signals on windows - fix profiling of cgo programs on windows (they had no m->thread setup) - properly setup tls in cgo programs on windows - check _beginthread return value Fixes #6417. Fixes #6986. R=alex.brainman, rsc CC=golang-codereviews https://golang.org/cl/44820047
2013-12-24runtime/cgo: include <signal.h> to fix buildIan Lance Taylor
R=golang-codereviews TBR=dfc CC=golang-codereviews https://golang.org/cl/43120044
2013-12-24runtime/cgo: always set signal mask before calling pthread_createIan Lance Taylor
This was done correctly for most targets but was missing from FreeBSD/ARM and Linux/ARM. R=golang-codereviews, dave CC=golang-codereviews https://golang.org/cl/45180043
2013-12-22cgo/runtime: replace sigprocmask with pthread_sigmask.S.Çağlar Onur
sigprocmask use in a multithreaded environment is undefined so replace it with pthread_sigmask. Fixes #6811. R=jsing, iant CC=golang-codereviews, golang-dev https://golang.org/cl/30460043
2013-10-09runtime/cgo: mark callback functions as NOSPLITIan Lance Taylor
R=golang-dev, minux.ma CC=golang-dev https://golang.org/cl/14448044
2013-10-08cmd/go, runtime: express armv5t architecture constraint differentlyCarl Shapiro
Instead of adding an -march=armv5t flag to the gcc command line, the same effect is obtained with an ".arch armv5t" pseudo op in the assembly file that uses armv5t instructions. R=golang-dev, iant, dave CC=golang-dev https://golang.org/cl/14511044
2013-09-16cmd/cgo: allow C.malloc(0) alwaysRuss Cox
Because we can, and because it otherwise might crash the program if we think we're out of memory. Fixes #6390. R=golang-dev, iant, minux.ma CC=golang-dev https://golang.org/cl/13345048
2013-09-04cgo: enable cgo on dragonflyAulus Egnatius Varialus
Enable cgo for dragonfly/386 and dragonfly/amd64. R=golang-dev, jsing, iant, bradfitz CC=golang-dev https://golang.org/cl/13247046
2013-08-14cmd/go, runtime/cgo: explicitly target ARMv5TCarl Shapiro
The baseline architecture had been left to the GCC configured default which can be more accomodating than the rest of the Go toolchain. This prevented instructions used by the 5g compiler, like BLX, from being used in GCC compiled assembler code. R=golang-dev, dave, rsc, elias.naur, cshapiro CC=golang-dev https://golang.org/cl/12954043
2013-08-14runtime/cgo: use old-style indirect call on armRuss Cox
TBR=elias.naur CC=golang-dev https://golang.org/cl/12943043
2013-08-14runtime: Fix build on older ARMElias Naur
The ARM external linking CL used BLX instructions in gcc assembler. Replace with BL to retain support on older ARM processors. R=rsc CC=golang-dev https://golang.org/cl/12938043
2013-08-14runtime.cmd/ld: Add ARM external linking and implement -shared in terms of ↵Elias Naur
external linking This CL is an aggregate of 10271047, 10499043, 9733044. Descriptions of each follow: 10499043 runtime,cmd/ld: Merge TLS symbols and teach 5l about ARM TLS This CL prepares for external linking support to ARM. The pseudo-symbols runtime.g and runtime.m are merged into a single runtime.tlsgm symbol. When external linking, the offset of a thread local variable is stored at a memory location instead of being embedded into a offset of a ldr instruction. With a single runtime.tlsgm symbol for both g and m, only one such offset is needed. The larger part of this CL moves TLS code from gcc compiled to internally compiled. The TLS code now uses the modern MRC instruction, and 5l is taught about TLS fallbacks in case the instruction is not available or appropriate. 10271047 This CL adds support for -linkmode external to 5l. For 5l itself, use addrel to allow for D_CALL relocations to be handled by the host linker. Of the cases listed in rsc's comment in issue 4069, only case 5 and 63 needed an update. One of the TODO: addrel cases was since replaced, and the rest of the cases are either covered by indirection through addpool (cases with LTO or LFROM flags) or stubs (case 74). The addpool cases are covered because addpool emits AWORD instructions, which in turn are handled by case 11. In the runtime, change the argv argument in the rt0* functions slightly to be a pointer to the argv list, instead of relying on a particular location of argv. 9733044 The -shared flag to 6l outputs a shared library, implemented in Go and callable from non-Go programs such as C. The main part of this CL change the thread local storage model. Go uses the fastest and least general mode, local exec. TLS data in shared libraries normally requires at least the local dynamic mode, however, this CL instead opts for using the initial exec mode. Initial exec mode is faster than local dynamic mode and can be used in linux since the linker has reserved a limited amount of TLS space for performance sensitive TLS code. Initial exec mode requires an extra load from the GOT table to determine the TLS offset. This penalty will not be paid if ld is not in -shared mode, since TLS accesses will be reduced to local exec. The elf sections .init_array and .rela.init_array are added to register the Go runtime entry with cgo at library load time. The "hidden" attribute is added to Cgo functions called from Go, since Go does not generate call through the GOT table, and adding non-GOT relocations for a global function is not supported by gcc. Cgo symbols don't need to be global and avoiding the GOT table is also faster. The changes to 8l are only removes code relevant to the old -shared mode where internal linking was used. This CL only address the low level linker work. It can be submitted by itself, but to be useful, the runtime changes in CL 9738047 is also needed. Design discussion at https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/zmjXkGrEx6Q Fixes #5590. R=rsc CC=golang-dev https://golang.org/cl/12871044
2013-08-12all: change textflags from numbers to symbols.Keith Randall
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/12774043
2013-05-30cmd/5a, cmd/dist, runtime: support m/g in the assembler, drop support for R9/R10Shenghou Ma
to avoid unintentionally clobber R9/R10. Thanks Lucio for the suggestion. PS: yes, this could be considered a big change (but not an API change), but as it turns out even temporarily changes R9/R10 in user code is unsafe and leads to very hard to diagnose problems later, better to disable using R9/R10 when the user first uses it. See CL 6300043 and CL 6305100 for two problems caused by misusing R9/R10. R=golang-dev, khr, rsc CC=golang-dev https://golang.org/cl/9840043
2013-05-22runtime: detect deadlocks in programs using cgoDmitriy Vyukov
When cgo is used, runtime creates an additional M to handle callbacks on threads not created by Go. This effectively disabled deadlock detection, which is a right thing, because Go program can be blocked and only serve callbacks on external threads. This also disables deadlock detection under race detector, because it happens to use cgo. With this change the additional M is created lazily on first cgo call. So deadlock detector works for programs that import "C", "net" or "net/http/pprof" but do not use them in fact. Also fixes deadlock detector under race detector. It should be fine to create the M later, because C code can not call into Go before first cgo call, because C code does not know when Go initialization has completed. So a Go program need to call into C first either to create an external thread, or notify a thread created in global ctor that Go initialization has completed. Fixes #4973. Fixes #5475. R=golang-dev, minux.ma, iant CC=golang-dev https://golang.org/cl/9303046
2013-05-03runtime/cgo: fix build for ARMShenghou Ma
TBR=iant CC=golang-dev https://golang.org/cl/9048048
2013-05-03cmd/ld: add .note.GNU-stack section for external linkingShenghou Ma
Fixes #5392. R=iant, r CC=golang-dev https://golang.org/cl/9119043
2013-05-01runtime/cgo: export symbols in both internal and external link modeIan Lance Taylor
R=rsc, r CC=golang-dev https://golang.org/cl/9060045
2013-03-25runtime: pass setmg function to cgo_initRuss Cox
This keeps the logic about how to set the thread-local variables m and g in code compiled and linked by the gc toolchain, an important property for upcoming cgo changes. It's also just a nice cleanup: one less place to update when these details change. R=golang-dev, r CC=golang-dev https://golang.org/cl/7560048
2013-03-23runtime/cgo, go/build: re-enable cgo for FreeBSD/ARM.Shenghou Ma
R=dave, rsc CC=golang-dev https://golang.org/cl/7970043
2013-03-11cmd/ld, runtime/cgo: allow a symbol to be both cgo_export and cgo_import.Shenghou Ma
Fixes #4878. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/7420052
2013-03-07cmd/ld: host linking support for linux/amd64Russ Cox
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
2013-03-01runtime/cgo: fix arm build, re-enable testRuss Cox
Fixes #4961. R=golang-dev, r, minux.ma CC=golang-dev https://golang.org/cl/7443048
2013-03-01runtime/cgo: fix crosscall2 on armRuss Cox
This time for sure. R=golang-dev CC=golang-dev https://golang.org/cl/7449045
2013-02-28runtime/cgo: make crosscall2 5a/6a/8a-assembledRuss Cox
There is a #pragma dynexport crosscall2, to help SWIG, and 6l cannot export the symbol if it doesn't get to see it. R=golang-dev, iant CC=golang-dev https://golang.org/cl/7448044
2013-03-01runtime/cgo: fix arm buildRuss Cox
During my global search and replace I forgot to open *.S (capital). R=golang-dev TBR=golang-dev CC=golang-dev https://golang.org/cl/7415047
2013-02-28runtime/cgo: move common symbol overrides into 6c-compiled codeRuss Cox
There are some function pointers declared by 6c in package runtime without initialization and then also declared in package runtime/cgo with initialization, so that if runtime/cgo is linked in, the function pointers are non-nil, and otherwise they are nil. We depend on this property for implementing non-essential cgo hooks in package runtime. The declarations in package runtime are 6c-compiled and end up in .6 files. The declarations in package runtime/cgo are gcc-compiled and end up in .o files. Since 6l links the .6 and .o files together, this all works. However, when we switch to "external linking" mode, 6l will not see the .o files, and it would be up to the host linker to resolve the two into a single initialized symbol. Not all host linkers will do this (in particular OS X gcc will not). To fix this, move the cgo declarations into 6c-compiled code, so that they end up in .6 files, so that 6l gets them no matter what. R=golang-dev CC=golang-dev https://golang.org/cl/7440045
2013-02-28runtime/cgo: make symbol naming consistentRuss Cox
The naming in this package is a disaster. Make it all consistent. Remove some 'static' from functions that will be referred to from other files soon. This CL is purely renames using global search and replace. Submitting separately so that real changes will not be drowned out by these renames in future CLs. TBR=iant CC=golang-dev https://golang.org/cl/7416046
2013-02-26all: clean up C function prototypesAnthony Martin
R=minux.ma, rsc, akumar, bradfitz CC=golang-dev https://golang.org/cl/7313070
2013-02-25runtime/cgo: fix deadlock involving signals on darwinDmitriy Vyukov
sigprocmask() is process-wide on darwin, so two concurrent libcgo_sys_thread_start() can result in all signals permanently blocked, which in particular blocks handling of nil derefs. Fixes #4833. R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/7324058
2013-02-13go/build, runtime/cgo: cgo support for NetBSD/ARMShenghou Ma
R=golang-dev, rsc, dave CC=golang-dev https://golang.org/cl/7229082
2012-12-21cgo: enable cgo on openbsdJoel Sing
Enable cgo on OpenBSD. The OpenBSD ld.so(1) does not currently support PT_TLS sections. Work around this by fixing up the TCB that has been provided by librthread and reallocating a TCB with additional space for TLS. Also provide a wrapper for pthread_create, allowing zeroed TLS to be allocated for threads created externally to Go. Joint work with Shenghou Ma (minux). Requires change 6846064. Fixes #3205. R=golang-dev, minux.ma, iant, rsc, iant CC=golang-dev https://golang.org/cl/6853059
2012-11-18runtime/cgo: enable warnings and treat as errorsDave Cheney
Enable warnings as errors during the cgo portion of runtime/cgo. iant requested that the list of flags match cmd/dist/build.c, but I would like to avoid the set of disabled warnings if possible. ref: https://groups.google.com/d/topic/golang-nuts/TrCoVzIIG4M/discussion requires: 6843061 R=minux.ma, iant CC=golang-dev https://golang.org/cl/6852055
2012-11-18runtime/cgo: fix compilation on Windows with CFLAGS -Wall -WerrorShenghou Ma
also fix one out-of-date comment in cmd/ld/pe.c as well. R=golang-dev, alex.brainman CC=golang-dev https://golang.org/cl/6843061
2012-11-14runtime/cgo: include <string.h> as needed so that strerror is declaredIan Lance Taylor
R=golang-dev, dave, jsing CC=golang-dev https://golang.org/cl/6847051
2012-11-10runtime, runtime/cgo: track memory allocated by non-Go codeIan Lance Taylor
Otherwise a poorly timed GC can collect the memory before it is returned to the Go program. R=golang-dev, dave, dvyukov, minux.ma CC=golang-dev https://golang.org/cl/6819119
2012-11-03runtime/cgo, go/build: cgo support for FreeBSD/ARMShenghou Ma
This is the last CL for FreeBSD/ARM support. Also update cmd/ld/doc.go for 5l support of -Hfreebsd. R=rsc CC=golang-dev https://golang.org/cl/6650051
2012-07-29runtime/cgo: fix netbsd buildBenny Siegert
Copy over freebsd.c to netbsd.c. Fixes #3823. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/6398045