- 03 Feb, 2015 17 commits
-
-
Russ Cox authored
Use AXXX instead of AGOK (neither is a valid instruction but AXXX is zero) for the initial setting of Prog.as, and now there are no non-zero default field settings. Remove the arch-specific zprog/zprg in favor of a single global zprog. Remove the arch-specific prg constructor in favor of emallocz(sizeof(Prog)). Change-Id: Ia73078726768333d7cdba296f548170c1bea9498 Reviewed-on: https://go-review.googlesource.com/3575Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Austin Clements <austin@google.com>
-
Russ Cox authored
Originally, when this code was part of 6l/8l, every new Prog was constructed starting with zprg, which set back=2, and then this code walked over the list setting back=1 for backward branches, back=0 otherwise. The initial back=2 setting was used to identify forward branches (the branched-to instruction had back == 2 since it hadn't yet been set to 0 or 1). When the code was extracted into liblink and linked directly with 6a/6g/8a/8g, those programs created the Prog struct and did not set back=2, breaking this backward branch detection. No one noticed, because the next loop recomputes the information. The only requirement for the next loop is that p->back == 0 or 1 for each of the Progs in the list. The initialization of the zprg with back=2 would cause problems in this second loop, for the few liblink-internally-generated instructions that are created by copying zprg, except that the first loop was making sure that back == 0 or 1. The first loop's manipulation of p->back can thus be deleted, provided we also delete the zprg.back = 2 initializations. This is awful and my fault. I apologize. While we're here, remove the .scale = 1 from the zprg init too. Anything that sets up a scaled index should set the scale itself. (And mostly those come from outside liblink anyway.) Tested by checking that all generated code is bit-for-bit identical to before this CL. Change-Id: I7f6e0b33ce9ccd5b7dc25e0f00429fedd0957c8c Reviewed-on: https://go-review.googlesource.com/3574Reviewed-by: Austin Clements <austin@google.com>
-
Russ Cox authored
A step toward making the zero Prog useful. Change-Id: I427b98b1ce9bd8f093da825aa4bb83244fc01903 Reviewed-on: https://go-review.googlesource.com/3573Reviewed-by: Dave Cheney <dave@cheney.net> Reviewed-by: Austin Clements <austin@google.com>
-
Russ Cox authored
Before, amd64 and 386 stored the flags in p->from.scale and arm and ppc64 stored the flags in p->reg. Both caused special cases in printing and in handling of the addresses. To avoid possible conflicts with the real meaning of p->from and to avoid storing a non-register value in a reg field, use from3 to hold a TYPE_CONST value giving the flags. There is still a special case for printing, because the flags are specified without a $, and normally a TYPE_CONST prints with a $. But that's much less special than what came before. This allows us to remove the textflag and settextflag methods from LinkArch. They are no longer architecture-specific. Change-Id: I931da8e1ecd92e127cd9aa44ef5a73c42e730110 Reviewed-on: https://go-review.googlesource.com/3572Reviewed-by: Austin Clements <austin@google.com>
-
Russ Cox authored
Change-Id: I3417a8c5ddd7f405939edc9fdef086e4741495a1 Reviewed-on: https://go-review.googlesource.com/3571Reviewed-by: Austin Clements <austin@google.com>
-
Russ Cox authored
Because it was lumped in with the TEXT instruction, the high 32 bits of the 64-bit constant holding the size were always set to 0x80000000 (ArgsSizeUnknown). This only worked because cmd/9l was reading the 64-bit value into an int32. While we're here, fix 5a. It wasn't as much of a problem there because the two values were being stored in two different fields. But it was still wrong. Change-Id: I69a2214c7be939530d499e29cfdc3b26720ac05a Reviewed-on: https://go-review.googlesource.com/3570Reviewed-by: Austin Clements <austin@google.com>
-
Dmitry Vyukov authored
Kindly detected by race builders by failing TestRaceRange. ORANGE typecheck does not increment decldepth around body. Change-Id: I0df5f310cb3370a904c94d9647a9cf0f15729075 Reviewed-on: https://go-review.googlesource.com/3507Reviewed-by: Russ Cox <rsc@golang.org>
-
Dmitry Vyukov authored
Type switch variables was not typechecked. Previously it lead only to a minor consequence: switch unsafe.Sizeof = x.(type) { generated an inconsistent error message. But capturing by value functionality now requries typechecking of all ONAMEs. Fixes #9731 Change-Id: If037883cba53d85028fb97b1328696091b3b7ddd Reviewed-on: https://go-review.googlesource.com/3600Reviewed-by: Russ Cox <rsc@golang.org>
-
Dmitry Vyukov authored
The overflow happens only with -gcflags="-N -l" and can be reproduced with: $ go test -gcflags="-N -l" -a -run=none net runtime.cgocall: nosplit stack overflow 504 assumed on entry to runtime.cgocall 480 after runtime.cgocall uses 24 472 on entry to runtime.cgocall_errno 408 after runtime.cgocall_errno uses 64 400 on entry to runtime.exitsyscall 288 after runtime.exitsyscall uses 112 280 on entry to runtime.exitsyscallfast 152 after runtime.exitsyscallfast uses 128 144 on entry to runtime.writebarrierptr 88 after runtime.writebarrierptr uses 56 80 on entry to runtime.writebarrierptr_nostore1 24 after runtime.writebarrierptr_nostore1 uses 56 16 on entry to runtime.acquirem -24 after runtime.acquirem uses 40 Move closure creation into separate function so that frames of writebarrierptr_shadow and writebarrierptr_nostore1 are overlapped. Fixes #9721 Change-Id: I40851f0786763ee964af34814edbc3e3d73cf4e7 Reviewed-on: https://go-review.googlesource.com/3418Reviewed-by: Russ Cox <rsc@golang.org>
-
Dmitry Vyukov authored
Currently race detector produces the following reports on pprof tests: WARNING: DATA RACE Read by goroutine 4: runtime/pprof_test.TestTraceStartStop() src/runtime/pprof/trace_test.go:38 +0x1da testing.tRunner() src/testing/testing.go:448 +0x13a Previous write by goroutine 5: bytes.(*Buffer).grow() src/bytes/buffer.go:102 +0x190 bytes.(*Buffer).Write() src/bytes/buffer.go:127 +0x75 runtime/pprof.func·002() src/runtime/pprof/pprof.go:633 +0xae Trace writer goroutine synchronizes with StopTrace using trace.shutdownSema runtime semaphore. But race detector does not see that synchronization and so produces false reports. Teach race detector about the synchronization. Change-Id: I1219817325d4e16b423f29a0cbee94c929793881 Reviewed-on: https://go-review.googlesource.com/3746Reviewed-by: Russ Cox <rsc@golang.org>
-
Austin Clements authored
The test for the framepointer experiment flag is cheaper and more branch-predictable than the other parts of this conditional, so move it first. This is also more readable. (Originally, the flag check required parsing the experiments string, which is why it was done last. Now that flag is cached.) Change-Id: I84e00fa7e939e9064f0fa0a4a6fe00576dd61457 Reviewed-on: https://go-review.googlesource.com/3782Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Austin Clements authored
Previously, we checked for a saved frame pointer by looking for a 2*ptrSize gap between the argument pointer and the locals pointer. The intent of this check was to look for a two stack slot gap (caller IP and saved frame pointer), but stack slots are regSize, not ptrSize. Correct this by checking instead for a 2*regSize gap. On most platforms, this made no difference because ptrSize==regSize. However, on amd64p32 (nacl), the saved frame pointer check incorrectly fired when there was no saved frame pointer because the one stack slot for the caller IP left an 8 byte gap, which is 2*ptrSize (but not 2*regSize) on amd64p32. Fixes #9760. Change-Id: I6eedcf681fe5bf2bf924dde8a8f2d9860a4d758e Reviewed-on: https://go-review.googlesource.com/3781Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Austin Clements authored
Change-Id: Ife7d30f4191e6a8aaf3a442340d277989f7a062d Reviewed-on: https://go-review.googlesource.com/3780Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Mikio Hara authored
This change adds support for case insensitivity of DNS labels to built-in DNS stub resolver as described in RFC 4343. Fixes #9215. Change-Id: Ia752fe71866a3bfa3ea08371985b799d419ddea3 Reviewed-on: https://go-review.googlesource.com/3685Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Erik Aigner authored
We already checked for the prefix with strings.HasPrefix Change-Id: I33852fd19ffa92aa33b75b94b4bb505f4043a54a Reviewed-on: https://go-review.googlesource.com/3691Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Dave Cheney authored
Fourth time's the charm. Actually this doesn't fix the build, there is a crash after go_bootstrap is compiled which looks like it is related to auxv parsing. Change-Id: Id00e2dfbe7bae42856f996065d3fb90b820e29a8 Reviewed-on: https://go-review.googlesource.com/3610Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Lynn Boger authored
Add memprofrate as a value recognized in GODEBUG. The value provided is used as the new setting for runtime.MemProfileRate, allowing the user to adjust memory profiling. Change-Id: If129a247683263b11e2dd42473cf9b31280543d5 Reviewed-on: https://go-review.googlesource.com/3450Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
- 02 Feb, 2015 10 commits
-
-
Austin Clements authored
This adds a "framepointer" GOEXPERIMENT that that makes the amd64 toolchain maintain base pointer chains in the same way that gcc -fno-omit-frame-pointer does. Go doesn't use these saved base pointers, but this does enable external tools like Linux perf and VTune to unwind Go stacks when collecting system-wide profiles. This requires support in the compilers to not clobber BP, support in liblink for generating the BP-saving function prologue and unwinding epilogue, and support in the runtime to save BPs across preemption, to skip saved BPs during stack unwinding and, and to adjust saved BPs during stack moving. As with other GOEXPERIMENTs, everything from the toolchain to the runtime must be compiled with this experiment enabled. To do this, run make.bash (or all.bash) with GOEXPERIMENT=framepointer. Change-Id: I4024853beefb9539949e5ca381adfdd9cfada544 Reviewed-on: https://go-review.googlesource.com/2992Reviewed-by: Russ Cox <rsc@golang.org>
-
Austin Clements authored
Any place that clobbers BP in the runtime can potentially interfere with frame pointer unwinding with GOEXPERIMENT=framepointer. This change eliminates uses of BP in the runtime to address this problem. We have spare registers everywhere this occurs, so there's no downside to eliminating BP. Where possible, this uses the same new register as the amd64p32 runtime, which doesn't use BP due to restrictions placed on it by NaCL. One nice side effect of this is that it will let perf/VTune unwind the call stack even through a call to systemstack, which will let us get really good call graphs from the garbage collector. Change-Id: I0ffa14cb4dd2b613a7049b8ec59df37c52286212 Reviewed-on: https://go-review.googlesource.com/3390Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
-
Austin Clements authored
m.gcing has become overloaded to mean "don't preempt this g" in general. Once the garbage collector is preemptible, the one thing it *won't* mean is that we're in the garbage collector. So, rename gcing to "preemptoff" and make it a string giving a reason that preemption is disabled. gcing was never set to anything but 0 or 1, so we don't have to worry about there being a stack of reasons. Change-Id: I4337c29e8e942e7aa4f106fc29597e1b5de4ef46 Reviewed-on: https://go-review.googlesource.com/3660Reviewed-by: Russ Cox <rsc@golang.org>
-
Austin Clements authored
Commit 656be317 replaced onM with systemstack, but missed updating a few comments that still referred to onM. Update these. Change-Id: I0efb017e9a66ea0adebb6e1da6e518ee11263f69 Reviewed-on: https://go-review.googlesource.com/3664Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
-
Austin Clements authored
9g generates needlessly complex code for small copies. There are a few other things that need to be improved about the copy code, so for now just note the problem. Change-Id: I0f1de4b2f9197a2635e27cc4b91ecf7a6c11f457 Reviewed-on: https://go-review.googlesource.com/3665Reviewed-by: Russ Cox <rsc@golang.org>
-
Robert Griesemer authored
Change-Id: I278ce47b38ec5732d981aec06b71f9ee5747c3bb Reviewed-on: https://go-review.googlesource.com/3730Reviewed-by: Alan Donovan <adonovan@google.com>
-
Dmitri Shuralyov authored
In stripCommonPrefix, the prefix was correctly calculated in all cases, except one. That unhandled case is when there are more than 2 lines, but all lines are blank (other than the first and last lines, which contain /* and */ respectively). This change detects that case and correctly sets the prefix calculated from the last line. This is consistent with the (correct) behavior that happens when there's at least one non-blank line. That fixes issue #9751 that occurs for problematic input, where cmd/gofmt and go/source would insert extra indentation on every format operation. It also allows go/printer itself to print such parsed files in an expected way. Fixes #9751. Change-Id: Id3dfb945beb59ffad3705085a3c285fca30a5f87 Reviewed-on: https://go-review.googlesource.com/3684Reviewed-by: Robert Griesemer <gri@golang.org>
-
David du Colombier authored
Since CL 3676, the TestMkdirAllAtSlash test depends on syscall.EROFS, which isn't defined on Plan 9. This change works around this issue by defining a system dependent isReadonlyError function. Change-Id: If972fd2fe4828ee3bcb8537ea7f4ba29f7a87619 Reviewed-on: https://go-review.googlesource.com/3696Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
Shenghou Ma authored
Fixes #9738. Change-Id: Iab75de2d78335d4e31c3dce6a0e1826d8cddf5f3 Reviewed-on: https://go-review.googlesource.com/3690Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
-
David Crawshaw authored
Change-Id: Iea4221186325783db2029b07af1409015ddeda99 Reviewed-on: https://go-review.googlesource.com/3695Reviewed-by: Dave Cheney <dave@cheney.net>
-
- 31 Jan, 2015 1 commit
-
-
Dave Cheney authored
This is a followup to CL 3676. Rather than silently returning from the test, a pass, use the Skip facility to mark the test as skipped. Change-Id: I90d237e770150bf8d69f14fb09874e70894a7f86 Reviewed-on: https://go-review.googlesource.com/3682Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-
- 30 Jan, 2015 12 commits
-
-
Rahul Chaudhry authored
On some systems (e.g. ChromeOS), / is mounted read-only. This results in error code syscall.EROFS, which I guess is just as valid as syscall.EACCES for this test. Change-Id: I9188d5437a1b5ac1daa9c68b95b8dcb447666ca3 Reviewed-on: https://go-review.googlesource.com/3676Reviewed-by: Ian Lance Taylor <iant@golang.org>
-
Robert Griesemer authored
No other functional changes. Change-Id: I7e0bb7452c6a265535297ec7ce6a629f1aff695c Reviewed-on: https://go-review.googlesource.com/3674Reviewed-by: Alan Donovan <adonovan@google.com>
-
Robert Griesemer authored
No other functional changes. Change-Id: I8be1fc488caa4f3d4c00afcb8c00475bfcd10709 Reviewed-on: https://go-review.googlesource.com/3673Reviewed-by: Alan Donovan <adonovan@google.com>
-
Robert Griesemer authored
No other functional changes. Change-Id: If0d9e6208d53478e70d991b6926ea196b2cccf2e Reviewed-on: https://go-review.googlesource.com/3672Reviewed-by: Alan Donovan <adonovan@google.com>
-
Robert Griesemer authored
No functional changes. Change-Id: Ibbb705b167603d30467f3ebb83a3bb39845306a5 Reviewed-on: https://go-review.googlesource.com/3671Reviewed-by: Alan Donovan <adonovan@google.com>
-
Robert Griesemer authored
Change-Id: I1eaebf956a69e0958201cc5e0a9beefa062c71e1 Reviewed-on: https://go-review.googlesource.com/3454Reviewed-by: Alan Donovan <adonovan@google.com>
-
Andrew Gerrand authored
Change-Id: I257211f10b334eb4828be96cd434d588bfb1a378 Reviewed-on: https://go-review.googlesource.com/3605Reviewed-by: Rob Pike <r@golang.org>
-
Andrew Gerrand authored
Fixes #9629 Change-Id: I66091003b97742ca6d857fe51d609833ab727216 Reviewed-on: https://go-review.googlesource.com/3023Reviewed-by: Rob Pike <r@golang.org>
-
Brad Fitzpatrick authored
Fixes #9656 Change-Id: I1158636683492ef12eeafb12e257d205026adc3f Reviewed-on: https://go-review.googlesource.com/3175Reviewed-by: Minux Ma <minux@golang.org>
-
Andrew Gerrand authored
These are no longer used by anything. Change-Id: I50c971418b07cafc983242833a196ba2028a2723 Reviewed-on: https://go-review.googlesource.com/3603Reviewed-by: Rob Pike <r@golang.org>
-
Dave Cheney authored
Another attempt to fix the arm build by moving the include of signal.h to cmd/lex.c, unless we are building on plan9. Obviously if we had a plan9/arm builder this would probably not work, but this is only a temporary measure until the c2go transition is complete. Change-Id: I7f8ae27349b2e7a09c55db03e02a01939159a268 Reviewed-on: https://go-review.googlesource.com/3566Reviewed-by: Russ Cox <rsc@golang.org>
-
Dmitry Vyukov authored
The following line in sysFree: n += (n + memRound) &^ memRound doubles value of n (n += n). Which is wrong and can lead to memory corruption. Fixes #9712 Change-Id: I3c141b71da11e38837c09408cf4f1d22e8f7f36e Reviewed-on: https://go-review.googlesource.com/3602Reviewed-by: David du Colombier <0intro@gmail.com>
-