aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/sys_linux_arm.s
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-04runtime: use new #include "textflag.h"Russ Cox
I did this just to clean things up, but it will be important when we drop the pkg directory later. LGTM=bradfitz R=r, bradfitz CC=golang-codereviews https://golang.org/cl/132600043
2014-09-04runtime: convert netpoll to GoDmitriy Vyukov
The common code is converted, epoll and kqueue are converted. Windows and solaris are still C. LGTM=rsc R=golang-codereviews, rsc, dave CC=golang-codereviews, iant, khr, rsc https://golang.org/cl/132910043
2014-08-27cmd/cc, runtime: convert C compilers to use Go calling conventionRuss Cox
To date, the C compilers and Go compilers differed only in how values were returned from functions. This made it difficult to call Go from C or C from Go if return values were involved. It also made assembly called from Go and assembly called from C different. This CL changes the C compiler to use the Go conventions, passing results on the stack, after the arguments. [Exception: this does not apply to C ... functions, because you can't know where on the stack the arguments end.] By doing this, the CL makes it possible to rewrite C functions into Go one at a time, without worrying about which languages call that function or which languages it calls. This CL also updates all the assembly files in package runtime to use the new conventions. Argument references of the form 40(SP) have been rewritten to the form name+10(FP) instead, and there are now Go func prototypes for every assembly function called from C or Go. This means that 'go vet runtime' checks effectively every assembly function, and go vet's output was used to automate the bulk of the conversion. Some functions, like seek and nsec on Plan 9, needed to be rewritten. Many assembly routines called from C were reading arguments incorrectly, using MOVL instead of MOVQ or vice versa, especially on the less used systems like openbsd. These were found by go vet and have been corrected too. If we're lucky, this may reduce flakiness on those systems. Tested on: darwin/386 darwin/amd64 linux/arm linux/386 linux/amd64 If this breaks another system, the bug is almost certainly in the sys_$GOOS_$GOARCH.s file, since the rest of the CL is tested by the combination of the above systems. LGTM=dvyukov, iant R=golang-codereviews, 0intro, dave, alex.brainman, dvyukov, iant CC=golang-codereviews, josharian, r https://golang.org/cl/135830043
2014-08-06runtime: get rid of SA_RESTORER on ARM.Shenghou Ma
The manpages says SA_RESTORER is obsolete, and indeed, not every architecture support it. However, sadly it's required on x86_64, see http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/kernel/signal.c?id=26bcd8b72563b4c54892c4c2a409f6656fb8ae8b#n430, so only use it on x86. LGTM=rsc R=rsc, iant CC=golang-codereviews https://golang.org/cl/115450043
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-25runtime: use monotonic clock for timers on linux/armMikio Hara
Update #6007 LGTM=dvyukov R=golang-codereviews, dvyukov CC=golang-codereviews https://golang.org/cl/67730048
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-12runtime: fix ARM assembly formattingDmitriy Vyukov
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/12702048
2013-08-07runtime: convert .s textflags from numbers to symbolic constants.Keith Randall
Remove NOPROF/DUPOK from everything. Edits done with a script, except pclinetest.asm which depended on the DUPOK flag on main(). R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/12613044
2013-07-12runtime: correctly handle signals received on foreign threadsShenghou Ma
Fixes #3250. R=rsc CC=golang-dev https://golang.org/cl/10757044
2013-05-28runtime: use m and g, instead of R9 and R10, in ARM assembly filesShenghou Ma
also don't clobber R9 if it is about to crash. In response to https://golang.org/cl/9251043/#msg2. R=golang-dev, khr, khr, dave CC=golang-dev https://golang.org/cl/9778046
2013-05-27runtime: make arm signal handler call runtime.badsignalShenghou Ma
In preparation for CL 9249043 (already submitted). Fixes #5553. R=golang-dev, iant, capnm9, dave CC=golang-dev https://golang.org/cl/9251043
2013-03-16net, runtime: enable runtime-integrated pollster on Linux/ARM.Shenghou Ma
Results from linux/arm on a Samsung Chromebook (from dfc): localhost(~/go/src/pkg/net) % ~/go/misc/benchcmp {old,new}.txt benchmark old ns/op new ns/op delta BenchmarkTCP4OneShot 568840 350526 -38.38% BenchmarkTCP4OneShot-2 359054 206708 -42.43% BenchmarkTCP4OneShotTimeout 637464 363550 -42.97% BenchmarkTCP4OneShotTimeout-2 374255 216695 -42.10% BenchmarkTCP4Persistent 184974 64984 -64.87% BenchmarkTCP4Persistent-2 109902 47195 -57.06% BenchmarkTCP4PersistentTimeout 210039 64789 -69.15% BenchmarkTCP4PersistentTimeout-2 124284 43374 -65.10% BenchmarkTCP6OneShot 672278 362116 -46.14% BenchmarkTCP6OneShot-2 383631 216400 -43.59% BenchmarkTCP6OneShotTimeout 680740 378306 -44.43% BenchmarkTCP6OneShotTimeout-2 397524 230152 -42.10% BenchmarkTCP6Persistent 172346 65292 -62.12% BenchmarkTCP6Persistent-2 106229 42096 -60.37% BenchmarkTCP6PersistentTimeout 161149 65138 -59.58% BenchmarkTCP6PersistentTimeout-2 152276 44548 -70.75% R=golang-dev, dave, bradfitz, dvyukov, rsc CC=golang-dev https://golang.org/cl/7820045
2013-03-15runtime: accept GOTRACEBACK=crash to mean 'crash after panic'Russ Cox
This provides a way to generate core dumps when people need them. The settings are: GOTRACEBACK=0 no traceback on panic, just exit GOTRACEBACK=1 default - traceback on panic, then exit GOTRACEBACK=2 traceback including runtime frames on panic, then exit GOTRACEBACK=crash traceback including runtime frames on panic, then crash Fixes #3257. R=golang-dev, devon.odell, r, daniel.morsing, ality CC=golang-dev https://golang.org/cl/7666044
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-22runtime: delete old closure codeRuss Cox
Step 4 of http://golang.org/s/go11func. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7393049
2012-12-22runtime: ignore failure from madviseRuss Cox
When we release memory to the OS, if the OS doesn't want us to release it (for example, because the program executed mlockall(MCL_FUTURE)), madvise will fail. Ignore the failure instead of crashing. Fixes #3435. R=ken2 CC=golang-dev https://golang.org/cl/6998052
2012-12-19runtime: use "mp" and "gp" instead of "m" and "g" for local variable name to ↵Jingcheng Zhang
avoid confusion with the global "m" and "g". R=golang-dev, minux.ma, rsc CC=bradfitz, golang-dev https://golang.org/cl/6939064
2012-12-18runtime: use clock_gettime to get ns resolution for time.now & runtime.nanotimeShenghou Ma
For Linux/{386,arm}, FreeBSD/{386,amd64,arm}, NetBSD/{386,amd64}, OpenBSD/{386,amd64}. Note: our Darwin implementation already has ns resolution. Linux/386 (Core i7-2600 @ 3.40GHz, kernel 3.5.2-gentoo) benchmark old ns/op new ns/op delta BenchmarkNow 110 118 +7.27% Linux/ARM (ARM Cortex-A8 @ 800MHz, kernel 2.6.32.28 android) benchmark old ns/op new ns/op delta BenchmarkNow 625 542 -13.28% Linux/ARM (ARM Cortex-A9 @ 1GHz, Pandaboard) benchmark old ns/op new ns/op delta BenchmarkNow 992 909 -8.37% FreeBSD 9-REL-p1/amd64 (Dell R610 Server with Xeon X5650 @ 2.67GHz) benchmark old ns/op new ns/op delta BenchmarkNow 699 695 -0.57% FreeBSD 9-REL-p1/amd64 (Atom D525 @ 1.80GHz) benchmark old ns/op new ns/op delta BenchmarkNow 1553 1658 +6.76% OpenBSD/amd64 (Dell E6410 with i5 CPU M 540 @ 2.53GHz) benchmark old ns/op new ns/op delta BenchmarkNow 1262 1236 -2.06% OpenBSD/i386 (Asus eeePC 701 with Intel Celeron M 900MHz - locked to 631MHz) benchmark old ns/op new ns/op delta BenchmarkNow 5089 5043 -0.90% NetBSD/i386 (VMware VM with Core i5 CPU @ 2.7GHz) benchmark old ns/op new ns/op delta BenchmarkNow 277 278 +0.36% NetBSD/amd64 (VMware VM with Core i5 CPU @ 2.7Ghz) benchmark old ns/op new ns/op delta BenchmarkNow 103 105 +1.94% Thanks Maxim Khitrov, Joel Sing, and Dave Cheney for providing benchmark data. R=jsing, dave, rsc CC=golang-dev https://golang.org/cl/6820120
2012-09-04runtime: discard SIGPROF delivered to non-Go threads.Alan Donovan
Signal handlers are global resources but many language environments (Go, C++ at Google, etc) assume they have sole ownership of a particular handler. Signal handlers in mixed-language applications must therefore be robust against unexpected delivery of certain signals, such as SIGPROF. The default Go signal handler runtime·sigtramp assumes that it will never be called on a non-Go thread, but this assumption is violated by when linking in C++ code that spawns threads. Specifically, the handler asserts the thread has an associated "m" (Go scheduler). This CL is a very simple workaround: discard SIGPROF delivered to non-Go threads. runtime.badsignal(int32) now receives the signal number; if it returns without panicking (e.g. sig==SIGPROF) the signal is discarded. I don't think there is any really satisfactory solution to the problem of signal-based profiling in a mixed-language application. It's not only the issue of handler clobbering, but also that a C++ SIGPROF handler called in a Go thread can't unwind the Go stack (and vice versa). The best we can hope for is not crashing. Note: - I've ported this to all POSIX platforms, except ARM-linux which already ignores unexpected signals on m-less threads. - I've avoided tail-calling runtime.badsignal because AFAICT the 6a/6l don't support it. - I've avoided hoisting 'push sig' (common to both function calls) because it makes the code harder to read. - Fixed an (apparently incorrect?) docstring. R=iant, rsc, minux.ma CC=golang-dev https://golang.org/cl/6498057
2012-08-10runtime: use sched_getaffinity for runtime.NumCPU() on LinuxShenghou Ma
Fixes #3921. R=iant CC=golang-dev https://golang.org/cl/6448132
2012-05-04runtime: cgo support for Linux/ARMShenghou Ma
Part 2 of CL 5601044 (cgo: Linux/ARM support) R=dave, rsc CC=golang-dev https://golang.org/cl/5989057
2012-03-08runtime: inline calls to notokRuss Cox
When a very low-level system call that should never fail does fail, we call notok, which crashes the program. Often, we are then left with only the program counter as information about the crash, and it is in notok. Instead, inline calls to notok (it is just one instruction on most systems) so that the program counter will tell us which system call is unhappy. R=golang-dev, gri, minux.ma, bradfitz CC=golang-dev https://golang.org/cl/5792048
2012-02-24runtime: size arena to fit in virtual address space limitRuss Cox
For Brad. Now FreeBSD/386 binaries run on nearlyfreespeech.net. Fixes #2302. R=golang-dev, r CC=golang-dev https://golang.org/cl/5700060
2012-02-23runtime: check for ARM syscall failuresShenghou Ma
While we are at it, also update some comments. Tested on Linux/ARM builder. R=rsc, golang-dev CC=golang-dev https://golang.org/cl/5696047
2012-02-23runtime: linux signal maskingRuss Cox
Fixes #3101 (Linux). R=golang-dev, bradfitz, minux.ma CC=golang-dev https://golang.org/cl/5696043
2012-02-13os/signal: selective signal handlingRuss Cox
Restore package os/signal, with new API: Notify replaces Incoming, allowing clients to ask for certain signals only. Also, signals go to everyone who asks, not just one client. This could plausibly move into package os now that there are no magic side effects as a result of the import. Update runtime for new API: move common Unix signal handling code into signal_unix.c. (It's so easy to do this now that we don't have to edit Makefiles!) Tested on darwin,linux 386,amd64. Fixes #1266. R=r, dsymonds, bradfitz, iant, borman CC=golang-dev https://golang.org/cl/3749041
2012-01-10runtime: runtime.usleep() bugfix on darwin/amd64 and linux/armShenghou Ma
pkg/runtime/sys_darwin_amd64.s: fixes syscall select nr pkg/runtime/sys_linux_arm.s: uses newselect instead of the now unimplemented (old) select, also fixes the wrong div/mod statements in runtime.usleep. Fixes #2633 R=golang-dev, dave, rsc CC=golang-dev https://golang.org/cl/5504096
2011-12-19runtime: separate out auto-generated files, take 2Russ Cox
This is like the ill-fated CL 5493063 except that I have written a shell script (autogen.sh) instead of thinking I could possibly write a correct Makefile. R=golang-dev, r CC=golang-dev https://golang.org/cl/5496075
2011-12-16runtime: hg revert -r 6ec0a5c12d75Russ Cox
That was the last build that was close to working. I will try that change again next week. Make is being very subtle today. At the reverted-to CL, the ARM traceback appears to be broken. I'll look into that next week too. R=golang-dev, r CC=golang-dev https://golang.org/cl/5492063
2011-12-16runtime: separate out auto-generated filesRuss Cox
R=golang-dev, r, r CC=golang-dev https://golang.org/cl/5493063
2011-12-16runtime: make more build-friendlyRuss Cox
Collapse the arch,os-specific directories into the main directory by renaming xxx/foo.c to foo_xxx.c, and so on. There are no substantial edits here, except to the Makefile. The assumption is that the Go tool will #define GOOS_darwin and GOARCH_amd64 and will make any file named something like signals_darwin.h available as signals_GOOS.h during the build. This replaces what used to be done with -I$(GOOS). There is still work to be done to make runtime build with standard tools, but this is a big step. After this we will have to write a script to generate all the generated files so they can be checked in (instead of generated during the build). R=r, iant, r, lucio.dere CC=golang-dev https://golang.org/cl/5490053