aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/arm
AgeCommit message (Collapse)Author
2011-06-095l: fix softfloat nitsRuss Cox
Need to load math.a so that sqrtGoC is available. Also was missing prototype. R=ken2 CC=golang-dev https://golang.org/cl/4517148
2011-06-09math: add sqrt_arm.s and sqrtGoC.go as fallback to soft fp emulationFan Hongjian
5a: add SQRTF and SQRTD 5l: add ASQRTF and ASQRTD Use ARMv7 VFP VSQRT instruction to speed up math.Sqrt R=rsc, dave, m CC=golang-dev https://golang.org/cl/4551082
2011-05-30pkg: spelling tweaks, I-ZRobert Hencke
also, a few miscellaneous fixes to files outside pkg R=golang-dev, dsymonds, mikioh.mikioh, r CC=golang-dev https://golang.org/cl/4517116
2011-05-22runtime: fix function args not checked warning on armDave Cheney
This tiny nit was driving me nuts R=rsc, ken, r CC=golang-dev https://golang.org/cl/4550069
2011-04-27runtime: stack split + garbage collection bugRuss Cox
The g->sched.sp saved stack pointer and the g->stackbase and g->stackguard stack bounds can change even while "the world is stopped", because a goroutine has to call functions (and therefore might split its stack) when exiting a system call to check whether the world is stopped (and if so, wait until the world continues). That means the garbage collector cannot access those values safely (without a race) for goroutines executing system calls. Instead, save a consistent triple in g->gcsp, g->gcstack, g->gcguard during entersyscall and have the garbage collector refer to those. The old code was occasionally seeing (because of the race) an sp and stk that did not correspond to each other, so that stk - sp was not the number of stack bytes following sp. In that case, if sp < stk then the call scanblock(sp, stk - sp) scanned too many bytes (anything between the two pointers, which pointed into different allocation blocks). If sp > stk then stk - sp wrapped around. On 32-bit, stk - sp is a uintptr (uint32) converted to int64 in the call to scanblock, so a large (~4G) but positive number. Scanblock would try to scan that many bytes and eventually fault accessing unmapped memory. On 64-bit, stk - sp is a uintptr (uint64) promoted to int64 in the call to scanblock, so a negative number. Scanblock would not scan anything, possibly causing in-use blocks to be freed. In short, 32-bit platforms would have seen either ineffective garbage collection or crashes during garbage collection, while 64-bit platforms would have seen either ineffective or incorrect garbage collection. You can see the invalid arguments to scanblock in the stack traces in issue 1620. Fixes #1620. Fixes #1746. R=iant, r CC=golang-dev https://golang.org/cl/4437075
2011-04-17runtime: fix arm5 softfloatRuss Cox
R=dfc, ken2, rsc CC=golang-dev https://golang.org/cl/4446043
2011-03-25runtime: fix arm buildRuss Cox
R=adg, dfc, r CC=golang-dev https://golang.org/cl/4296042
2011-03-23runtime: cpu profiling supportRuss Cox
R=r CC=golang-dev https://golang.org/cl/4306043
2011-03-07runtime: scheduler, cgo reorganizationRuss Cox
* Change use of m->g0 stack (aka scheduler stack). * Provide runtime.mcall(f) to invoke f() on m->g0 stack. * Replace scheduler loop entry with runtime.mcall(schedule). Runtime.mcall eliminates the need for fake scheduler states that exist just to run a bit of code on the m->g0 stack (Grecovery, Gstackalloc). The elimination of the scheduler as a loop that stops and starts using gosave and gogo fixes a bad interaction with the way cgo uses the m->g0 stack. Cgo runs external (gcc-compiled) C functions on that stack, and then when calling back into Go, it sets m->g0->sched.sp below the added call frames, so that other uses of m->g0's stack will not interfere with those frames. Unfortunately, gogo (longjmp) back to the scheduler loop at this point would end up running scheduler with the lower sp, which no longer points at a valid stack frame for a call to scheduler. If scheduler then wrote any function call arguments or local variables to where it expected the stack frame to be, it would overwrite other data on the stack. I realized this possibility while debugging a problem with calling complex Go code in a Go -> C -> Go cgo callback. This wasn't the bug I was looking for, it turns out, but I believe it is a real bug nonetheless. Switching to runtime.mcall, which only adds new frames to the stack and never jumps into functions running in existing ones, fixes this bug. * Move cgo-related code out of proc.c into cgocall.c. * Add very large comment describing cgo call sequences. * Simpilify, regularize cgo function implementations and names. * Add test suite as misc/cgo/test. Now the Go -> C path calls cgocall, which calls asmcgocall, and the C -> Go path calls cgocallback, which calls cgocallbackg. The shuffling, which affects mainly the callback case, moves most of the callback implementation to cgocallback running on the m->curg stack (not the m->g0 scheduler stack) and only while accounted for with $GOMAXPROCS (between calls to exitsyscall and entersyscall). The previous callback code did not block in startcgocallback's approximation to exitsyscall, so if, say, the garbage collector were running, it would still barge in and start doing things like call malloc. Similarly endcgocallback's approximation of entersyscall did not call matchmg to kick off new OS threads when necessary, which caused the bug in issue 1560. Fixes #1560. R=iant CC=golang-dev https://golang.org/cl/4253054
2011-03-02runtime: record goroutine creation pc and display in tracebackRuss Cox
package main func main() { go func() { *(*int)(nil) = 0 }() select{} } panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x0 pc=0x1c96] runtime.panic+0xac /Users/rsc/g/go/src/pkg/runtime/proc.c:1083 runtime.panic(0x11bf0, 0xf8400011f0) runtime.panicstring+0xa3 /Users/rsc/g/go/src/pkg/runtime/runtime.c:116 runtime.panicstring(0x29a57, 0x0) runtime.sigpanic+0x144 /Users/rsc/g/go/src/pkg/runtime/darwin/thread.c:470 runtime.sigpanic() main._func_001+0x16 /Users/rsc/g/go/src/pkg/runtime/x.go:188 main._func_001() runtime.goexit /Users/rsc/g/go/src/pkg/runtime/proc.c:150 runtime.goexit() ----- goroutine created by ----- main.main+0x3d /Users/rsc/g/go/src/pkg/runtime/x.go:4 goroutine 1 [4]: runtime.gosched+0x77 /Users/rsc/g/go/src/pkg/runtime/proc.c:598 runtime.gosched() runtime.block+0x27 /Users/rsc/g/go/src/pkg/runtime/chan.c:680 runtime.block() main.main+0x44 /Users/rsc/g/go/src/pkg/runtime/x.go:5 main.main() runtime.mainstart+0xf /Users/rsc/g/go/src/pkg/runtime/amd64/asm.s:77 runtime.mainstart() runtime.goexit /Users/rsc/g/go/src/pkg/runtime/proc.c:150 runtime.goexit() ----- goroutine created by ----- _rt0_amd64+0x8e /Users/rsc/g/go/src/pkg/runtime/amd64/asm.s:64 Fixes #1563. R=r CC=golang-dev https://golang.org/cl/4243046
2011-02-25runtime: use kernel-supplied cas on linux/armRuss Cox
Using the kernel-supplied compare-and-swap code on linux/arm means that runtime doesn't have to care whether this is GOARM=5 or GOARM=6 anymore. Fixes #1494. R=r, r2 CC=golang-dev https://golang.org/cl/4245043
2011-02-23runtime: traceback through active lessstackRuss Cox
With this change, a panic trace due to a signal arriving while running on the scheduler stack during a lessstack (a stack unsplit) will trace through the lessstack to show the state of the goroutine that was unsplitting its stack. R=r CC=golang-dev https://golang.org/cl/4206042
2011-02-22ld: detect stack overflow due to NOSPLITRuss Cox
Fix problems found. On amd64, various library routines had bigger stack frames than expected, because large function calls had been added. runtime.assertI2T: nosplit stack overflow 120 assumed on entry to runtime.assertI2T 8 after runtime.assertI2T uses 112 0 on entry to runtime.newTypeAssertionError -8 on entry to runtime.morestack01 runtime.assertE2E: nosplit stack overflow 120 assumed on entry to runtime.assertE2E 16 after runtime.assertE2E uses 104 8 on entry to runtime.panic 0 on entry to runtime.morestack16 -8 after runtime.morestack16 uses 8 runtime.assertE2T: nosplit stack overflow 120 assumed on entry to runtime.assertE2T 16 after runtime.assertE2T uses 104 8 on entry to runtime.panic 0 on entry to runtime.morestack16 -8 after runtime.morestack16 uses 8 runtime.newselect: nosplit stack overflow 120 assumed on entry to runtime.newselect 56 after runtime.newselect uses 64 48 on entry to runtime.printf 8 after runtime.printf uses 40 0 on entry to vprintf -8 on entry to runtime.morestack16 runtime.selectdefault: nosplit stack overflow 120 assumed on entry to runtime.selectdefault 56 after runtime.selectdefault uses 64 48 on entry to runtime.printf 8 after runtime.printf uses 40 0 on entry to vprintf -8 on entry to runtime.morestack16 runtime.selectgo: nosplit stack overflow 120 assumed on entry to runtime.selectgo 0 after runtime.selectgo uses 120 -8 on entry to runtime.gosched On arm, 5c was tagging functions NOSPLIT that should not have been, like the recursive function printpanics: printpanics: nosplit stack overflow 124 assumed on entry to printpanics 112 after printpanics uses 12 108 on entry to printpanics 96 after printpanics uses 12 92 on entry to printpanics 80 after printpanics uses 12 76 on entry to printpanics 64 after printpanics uses 12 60 on entry to printpanics 48 after printpanics uses 12 44 on entry to printpanics 32 after printpanics uses 12 28 on entry to printpanics 16 after printpanics uses 12 12 on entry to printpanics 0 after printpanics uses 12 -4 on entry to printpanics R=r, r2 CC=golang-dev https://golang.org/cl/4188061
2011-02-18runtime: handle non-standard call sequences in arm tracebackRuss Cox
R=r CC=golang-dev https://golang.org/cl/4191048
2011-02-16arm runtime: attempt to fix build by adding casp (same as cas)Rob Pike
untested. Fixes #1523. R=rsc CC=golang-dev https://golang.org/cl/4171057
2011-02-02runtime: more detailed panic traces, line number workRuss Cox
Follow morestack, so that crashes during a stack split give complete traces. Also mark stack segment boundaries as an aid to debugging. Correct various line number bugs with yet another attempt at interpreting the pc/ln table. This one has a chance at being correct, because I based it on reading src/cmd/ld/lib.c instead of on reading the documentation. Fixes #1138. Fixes #1430. Fixes #1461. throw: runtime: split stack overflow runtime.throw+0x3e /home/rsc/g/go2/src/pkg/runtime/runtime.c:78 runtime.throw(0x81880af, 0xf75c8b18) runtime.newstack+0xad /home/rsc/g/go2/src/pkg/runtime/proc.c:728 runtime.newstack() runtime.morestack+0x4f /home/rsc/g/go2/src/pkg/runtime/386/asm.s:184 runtime.morestack() ----- morestack called from stack: ----- runtime.new+0x1a /home/rsc/g/go2/src/pkg/runtime/malloc.c:288 runtime.new(0x1, 0x0, 0x0) gongo.makeBoard+0x33 /tmp/Gongo/gongo_robot_test.go:344 gongo.makeBoard(0x809d238, 0x1, 0xf76092c8, 0x1) ----- stack segment boundary ----- gongo.checkEasyScore+0xcc /tmp/Gongo/gongo_robot_test.go:287 gongo.checkEasyScore(0xf764b710, 0x0, 0x809d238, 0x1) gongo.TestEasyScore+0x8c /tmp/Gongo/gongo_robot_test.go:255 gongo.TestEasyScore(0xf764b710, 0x818a990) testing.tRunner+0x2f /home/rsc/g/go2/src/pkg/testing/testing.go:132 testing.tRunner(0xf764b710, 0xf763b5dc, 0x0) runtime.goexit /home/rsc/g/go2/src/pkg/runtime/proc.c:149 runtime.goexit() R=ken2, r CC=golang-dev https://golang.org/cl/4000053
2011-01-14runtime: fix arm reflect.call boundary caseRuss Cox
The fault was lucky: when it wasn't faulting it was silently copying a word from some other block and later putting that same word back. If some other goroutine had changed that word of memory in the interim, too bad. The ARM code was inconsistent about whether the "argument frame" included the saved LR. Including it made some things more regular but mostly just caused confusion in the places where the regularity broke. Now the rule reflects reality: argp is always a pointer to arguments, never a saved link register. Renamed struct fields to make meaning clearer. Running ARM in QEMU, package time's gotest: * before: 27/58 failed * after: 0/50 R=r, r2 CC=golang-dev https://golang.org/cl/3993041
2010-12-09arm floating point simulationKen Thompson
R=rsc CC=golang-dev https://golang.org/cl/3565041
2010-11-11last of the arm conversionsKen Thompson
R=rsc CC=golang-dev https://golang.org/cl/3053041
2010-11-10runtime: omit runtime· prefix from static functions (in ARM code).Ian Lance Taylor
R=r CC=golang-dev https://golang.org/cl/3026041
2010-11-10runtime: Add some missing runtime· prefixes to ARM asm code.Ian Lance Taylor
R=r, r2 CC=golang-dev https://golang.org/cl/3024041
2010-11-04runtime: ,s/[a-zA-Z0-9_]+/runtime·&/g, almostRuss Cox
Prefix all external symbols in runtime by runtime·, to avoid conflicts with possible symbols of the same name in linked-in C libraries. The obvious conflicts are printf, malloc, and free, but hide everything to avoid future pain. The symbols left alone are: ** known to cgo ** _cgo_free _cgo_malloc libcgo_thread_start initcgo ncgocall ** known to linker ** _rt0_$GOARCH _rt0_$GOARCH_$GOOS text etext data end pclntab epclntab symtab esymtab ** known to C compiler ** _divv _modv _div64by32 etc (arch specific) Tested on darwin/386, darwin/amd64, linux/386, linux/amd64. Built (but not tested) for freebsd/386, freebsd/amd64, linux/arm, windows/386. R=r, PeterGo CC=golang-dev https://golang.org/cl/2899041
2010-10-25arm: enable all testsRuss Cox
ARM functionality is now completely working. (Or if it's not, we'll fix it.) R=ken2 CC=golang-dev https://golang.org/cl/2738041
2010-10-25arm: precise float64 software floating pointRuss Cox
Adds softfloat64 to generic runtime (will be discarded by linker when unused) and adds test for it. I used the test to check the software code against amd64 hardware and then check the software code against the arm and its simulation of hardware. The latter should have been a no-op (testing against itself) but turned up a bug in 5c causing the vlrt.c routines to miscompile. These changes make the cmath, math, and strconv tests pass without any special accommodations for arm. R=ken2 CC=golang-dev https://golang.org/cl/2713042
2010-10-21fix arm buildRuss Cox
R=ken2 CC=golang-dev https://golang.org/cl/2649041
2010-10-21arm: prop up software floating pointRuss Cox
Just enough to make mov instructions work, which in turn is enough to make strconv work when it avoids any floating point calculations. That makes a bunch of other packages pass their tests. Should suffice until hardware floating point is available. Enable package tests that now pass (some due to earlier fixes). Looks like there is a new integer math bug exposed in the fmt and json tests. R=ken2 CC=golang-dev https://golang.org/cl/2638041
2010-10-20arm: fix typo in softfloatRuss Cox
R=kaib CC=golang-dev https://golang.org/cl/2608041
2010-10-18runtime: fix arm softfloat again for R12Russ Cox
Missed a case, so now generalized. R=ken2 CC=golang-dev https://golang.org/cl/2540042
2010-10-18runtime: update arm softfloat - no more R12Russ Cox
R=ken2 CC=golang-dev https://golang.org/cl/2555041
2010-10-175l: stop using R12 as SBRuss Cox
Because the SB is only good for 8k and Go programs tend to have much more data than that, SB doesn't save very much. A fmt.Printf-based hello world program has 360 kB text segment. Removing SB makes the text 500 bytes (0.14%) longer. R=ken2, r2, ken3 CC=golang-dev https://golang.org/cl/2487042
2010-10-13fix arm bug in reflect.callKen Thompson
R=rsc CC=golang-dev https://golang.org/cl/2475042
2010-10-08bug in stack size in arm.Ken Thompson
stack is off by one if calling through reflect.Call R=rsc CC=golang-dev https://golang.org/cl/2400041
2010-08-06arm: bugfixes and syscallKai Backman
- integer divide by zero raises panic - float comparisons involving NaNs work - syscall interface actually handles return values and errno correctly. R=rsc, bradfitzpatrick CC=golang-dev https://golang.org/cl/1847047
2010-07-28arm: minor bugfixes.Kai Backman
R=rsc CC=golang-dev https://golang.org/cl/1692057
2010-07-20more soft float support. passes several basic testsKai Backman
but with less precision than hardware counterparts. fixed a number of tests to output BUG when they failed. changed the runner to distinghuish between output and output containing ^BUG R=rsc CC=dho, golang-dev https://golang.org/cl/1778041
2010-05-21runtime: correct tracebacks for nascent goroutines, even closuresRuss Cox
Fixes #780. R=r CC=golang-dev https://golang.org/cl/1221042
2010-05-03runtime/arm: fix buildRuss Cox
Import _mulv from Inferno again, change R9 to R2. Not sure what the other differences were for, but they weren't working. TBR=kaib CC=golang-dev https://golang.org/cl/1079041
2010-04-15support for printing floats:Kai Backman
fmt.Printf("float32 %f\n", float32(1234.56789)) fmt.Printf("float64 %f\n", float64(1234.56789)) -> float32 1234.567871 float64 1234.567890 this is a snapshot. extended instruction support, corner cases and fixes coming in subseuent cls. R=rsc CC=dpx, golang-dev https://golang.org/cl/876045
2010-04-05runtime: various arm fixesRuss Cox
* correct symbol table size * do not reorder functions in output * traceback * signal handling * use same code for go + defer * handle leaf functions in symbol table R=kaib, dpx CC=golang-dev https://golang.org/cl/884041
2010-03-31runtime: make type assertion a runtime.Error, the first of manyRuss Cox
R=r CC=golang-dev https://golang.org/cl/805043
2010-03-30runtime: fix arm build, slightly.Russ Cox
R=r CC=golang-dev https://golang.org/cl/842042
2010-03-30gc: add panic and recover (still unimplemented in runtime)Russ Cox
main semantic change is to enforce single argument to panic. runtime: change to 1-argument panic. use String method on argument if it has one. R=ken2, r CC=golang-dev https://golang.org/cl/812043
2010-03-29runtime: run deferred calls at GoexitRuss Cox
baby step toward panic+recover. Fixes #349. R=r CC=golang-dev https://golang.org/cl/825043
2010-03-23runtime: add CallersRuss Cox
cut copies of traceback from 6 to 1. R=r CC=golang-dev https://golang.org/cl/703041
2010-01-25in C and asm, replace pkg·name with ·nameRuss Cox
(eliminate assumption of package global name space, make code easier to move between packages). R=r CC=golang-dev https://golang.org/cl/194072
2009-12-17 first stub for softfloats, intercepts float instructions and skipsKai Backman
them in the stream. R=rsc https://golang.org/cl/174052
2009-12-10fix calling convention and make memmove restore the g and mKai Backman
registers. R=rsc https://golang.org/cl/166049
2009-11-18bugs in memmove:Rob Pike
- has arguments (no stack split) - MOVL does not set condition R=ken2, rsc https://golang.org/cl/156086
2009-11-18Remove unnecessary execute bits.William Josephson
R=rsc https://golang.org/cl/156077
2009-11-17runtime: add ARM memmoveRuss Cox
R=ken2 https://golang.org/cl/156063