| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| |
| |
| | |
TBR=austin
CC=golang-codereviews
https://codereview.appspot.com/178700044
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The new semantics of split require the newline be present.
The test was stale.
LGTM=adg
R=golang-codereviews, adg
CC=golang-codereviews
https://codereview.appspot.com/182480043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Scanner can't handle stupid long lines and there are
reports of stupid long lines in production.
Note the issue isn't long "//go:generate" lines, but
any long line in any Go source file.
To be fair, if you're going to have a stupid long line
it's not a bad bet you'll want to run it through go
generate, because it's some embeddable asset that
has been machine generated. (One could ask why
that generation process didn't add a newline or two,
but we should cope anyway.)
Rewrite the file scanner in "go generate" so it can
handle arbitrarily long lines, and only stores in memory
those lines that start "//go:generate".
Also: Adjust the documentation to make clear that it
does not parse the file.
Fixes issue 9143.
Fixes issue 9196.
LGTM=rsc, dominik.honnef
R=rsc, cespare, minux, dominik.honnef
CC=golang-codereviews
https://codereview.appspot.com/182970043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
While we're at there, also add a message to prompt the user to install
Graphviz if "dot" command is not found.
Fixes issue 9178.
LGTM=adg, alex.brainman, cookieo9, rsc
R=rsc, adg, bradfitz, alex.brainman, cookieo9, smyrman
CC=golang-codereviews
https://codereview.appspot.com/180380043
Committer: Russ Cox <rsc@golang.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fixes issue 9189.
LGTM=dsymonds
R=golang-codereviews, dsymonds
CC=golang-codereviews
https://codereview.appspot.com/178660043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=r
R=gri, r
CC=golang-codereviews
https://codereview.appspot.com/185830043
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fixes issue 9199.
LGTM=iant
R=golang-codereviews, iant
CC=austin, golang-codereviews, minux
https://codereview.appspot.com/183080043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Move change from CL 170770043 to correct file and regenerate docs
for changes from CL 164120043.
LGTM=adg
R=golang-codereviews, adg, bradfitz
CC=golang-codereviews
https://codereview.appspot.com/183000043
Committer: Andrew Gerrand <adg@golang.org>
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/178600043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
During garbage collection, after scanning a stack, we think about
shrinking it to reclaim some memory. The shrinking code (called
while the world is stopped) checked that the status was Gwaiting
or Grunnable and then changed the state to Gcopystack, to essentially
lock the stack so that no other GC thread is scanning it.
The same locking happens for stack growth (and is more necessary there).
oldstatus = runtime?readgstatus(gp);
oldstatus &= ~Gscan;
if(oldstatus == Gwaiting || oldstatus == Grunnable)
runtime?casgstatus(gp, oldstatus, Gcopystack); // oldstatus is Gwaiting or Grunnable
else
runtime?throw("copystack: bad status, not Gwaiting or Grunnable");
Unfortunately, "stop the world" doesn't stop everything. It stops all
normal goroutine execution, but the network polling thread is still
blocked in epoll and may wake up. If it does, and it chooses a goroutine
to mark runnable, and that goroutine is the one whose stack is shrinking,
then it can happen that between readgstatus and casgstatus, the status
changes from Gwaiting to Grunnable.
casgstatus assumes that if the status is not what is expected, it is a
transient change (like from Gwaiting to Gscanwaiting and back, or like
from Gwaiting to Gcopystack and back), and it loops until the status
has been restored to the expected value. In this case, the status has
changed semi-permanently from Gwaiting to Grunnable - it won't
change again until the GC is done and the world can continue, but the
GC is waiting for the status to change back. This wedges the program.
To fix, call a special variant of casgstatus that accepts either Gwaiting
or Grunnable as valid statuses.
Without the fix bug with the extra check+throw in casgstatus, the
program below dies in a few seconds (2-10) with GOMAXPROCS=8
on a 2012 Retina MacBook Pro. With the fix, it runs for minutes
and minutes.
package main
import (
"io"
"log"
"net"
"runtime"
)
func main() {
const N = 100
for i := 0; i < N; i++ {
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
log.Fatal(err)
}
ch := make(chan net.Conn, 1)
go func() {
var err error
c1, err := net.Dial("tcp", l.Addr().String())
if err != nil {
log.Fatal(err)
}
ch <- c1
}()
c2, err := l.Accept()
if err != nil {
log.Fatal(err)
}
c1 := <-ch
l.Close()
go netguy(c1, c2)
go netguy(c2, c1)
c1.Write(make([]byte, 100))
}
for {
runtime.GC()
}
}
func netguy(r, w net.Conn) {
buf := make([]byte, 100)
for {
bigstack(1000)
_, err := io.ReadFull(r, buf)
if err != nil {
log.Fatal(err)
}
w.Write(buf)
}
}
var g int
func bigstack(n int) {
var buf [100]byte
if n > 0 {
bigstack(n - 1)
}
g = int(buf[0]) + int(buf[99])
}
Fixes issue 9186.
LGTM=rlh
R=austin, rlh
CC=dvyukov, golang-codereviews, iant, khr, r
https://codereview.appspot.com/179680043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
pointer, not one.
Fixes issue 9179
LGTM=iant, rsc
R=golang-codereviews, iant, rsc
CC=golang-codereviews
https://codereview.appspot.com/182160043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=r
R=r
CC=golang-codereviews
https://codereview.appspot.com/182750043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We decided to build $GOOS.go always
but forgot to test $GOOS_test.go.
Fixes issue 9159.
LGTM=r
R=r
CC=golang-codereviews
https://codereview.appspot.com/176290043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When liblink sees something like
JMP x
...
x: JMP y
it rewrites the first jump to jump directly to y. This is
fine if y is a resolved label. However, it *also* does this
if y is a function symbol, but fails to carry over the
relocation that would later patch in that symbol's value. As
a result, the original jump becomes either a self-jump (if
relative) or a jump to PC 0 (if absolute).
Fix this by disabling this optimization if the jump being
patched in is a jump to a symbol.
LGTM=minux
R=rsc, minux
CC=golang-codereviews
https://codereview.appspot.com/185890044
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
runtime/cgo
Frankly, I don't understand how the current code could possibly work except
when every android program is using cgo. Discovered this while working on
the iOS port.
LGTM=crawshaw, rsc
R=rsc, crawshaw
CC=golang-codereviews
https://codereview.appspot.com/177470043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
These accomplished the same thing, but R_CALLPOWER expected
the whole instruction to be in the addend (and completely
overwrote what was in the text section), while R_PPC64_REL24
overwrites only bits 6 through 24 of whatever was in the text
section. Make R_CALLPOWER work like R_PPC64_REL24 to ease the
implementation of dynamic linking.
LGTM=rsc
R=rsc
CC=golang-codereviews, minux
https://codereview.appspot.com/177430043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
warning: src/cmd/5g/reg.c:461 format mismatch d VLONG, arg 5
warning: src/cmd/6g/reg.c:396 format mismatch d VLONG, arg 5
warning: src/cmd/9g/reg.c:440 format mismatch d VLONG, arg 5
LGTM=minux
R=rsc, minux
CC=golang-codereviews
https://codereview.appspot.com/179300043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This was based on the 9c peephole optimizer, modified to work
with code generated by gc and use the proginfo infrastructure
in gc.
LGTM=rsc
R=rsc, bradfitz, minux
CC=golang-codereviews
https://codereview.appspot.com/179190043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This adds some utilities for converting between the CC, V, and
VCC variants of operations and uses these to derive the
ProgInfo entries for these variants (which are identical to
the ProgInfo for the base operations).
The 9g peephole optimizer will also use these conversion
utilities.
LGTM=minux, rsc
R=rsc, dave, minux
CC=golang-codereviews
https://codereview.appspot.com/180110044
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc, bradfitz
CC=golang-codereviews
https://codereview.appspot.com/178210043
|
|\ \
| |/
| |
| |
| |
| | |
TBR=austin
CC=golang-codereviews
https://codereview.appspot.com/177220044
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fixes issue 9127.
LGTM=r
R=bradfitz, r
CC=golang-codereviews, nigeltao
https://codereview.appspot.com/178120043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fixes issue 9149.
LGTM=alex.brainman, rsc
R=rsc, dave, alex.brainman
CC=golang-codereviews
https://codereview.appspot.com/176170043
Committer: Russ Cox <rsc@golang.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Only affects test code.
Fixes issue 9025.
Fixes issue 9130.
LGTM=r, adonovan
R=adonovan, r
CC=golang-codereviews
https://codereview.appspot.com/180920043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=minux
R=rsc, minux
CC=golang-codereviews
https://codereview.appspot.com/177170043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/169620043
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I tested building Go itself, but not any of go.mobile tests.
LGTM=crawshaw
R=crawshaw, rsc
CC=golang-codereviews
https://codereview.appspot.com/179110043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Otherwise both zgoos_linux.go and zgoos_android.go will be compiled
for GOOS=android.
LGTM=crawshaw, rsc
R=rsc, crawshaw
CC=golang-codereviews
https://codereview.appspot.com/178110043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://codereview.appspot.com/174530043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://codereview.appspot.com/176130044
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
warning: src/liblink/list6.c:94 set and not used: s
warning: src/liblink/list6.c:157 format mismatch ld VLONG, arg 3
warning: src/liblink/list6.c:157 format mismatch E UINT, arg 4
warning: src/liblink/list6.c:157 format mismatch d VLONG, arg 5
warning: src/liblink/list6.c:163 set and not used: s
warning: src/liblink/list9.c:105 set and not used: s
warning: src/liblink/list9.c:185 format mismatch ld VLONG, arg 3
warning: src/liblink/list9.c:185 format mismatch E UINT, arg 4
warning: src/liblink/list9.c:185 format mismatch d VLONG, arg 5
warning: src/liblink/list9.c:193 set and not used: s
LGTM=rsc
R=rsc
CC=austin, golang-codereviews, minux
https://codereview.appspot.com/176130043
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
warning: /usr/go/src/cmd/8g/reg.c:365 format mismatch d VLONG, arg 5
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/177160043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Thanks to Aram H?v?rneanu, Nick Owens
and Russ Cox for the early reviews.
LGTM=aram, rsc
R=rsc, lucio.dere, aram, ality
CC=golang-codereviews, mischief
https://codereview.appspot.com/175370043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=dave
R=minux, dave
CC=golang-codereviews
https://codereview.appspot.com/181030043
|
| |
| |
| |
| |
| |
| | |
TBR=brainman
CC=golang-codereviews
https://codereview.appspot.com/175490043
|
| |
| |
| |
| |
| |
| |
| | |
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/175480043
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
uint16 occupies 2 bytes, not 1
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/178100043
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
a->name and a->class are char, so Solaris doesn't like using
them as array indexes. (This same problem was fixed for amd64
in CL 169630043.)
LGTM=aram, minux
R=rsc, minux, aram
CC=golang-codereviews
https://codereview.appspot.com/175430043
|
|\ \
| |/
|/|
| |
| |
| | |
TBR=austin
CC=golang-codereviews
https://codereview.appspot.com/179040044
|
| |\
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This will be the last dev.power64 merge; we'll finish on dev.cc.
TBR=austin
CC=golang-codereviews
https://codereview.appspot.com/175420043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/177090043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
struct siginfo_t's si_addr field is part of a union.
Previously, we represented this union in Go using an opaque
byte array and accessed the si_addr field using unsafe (and
wrong on 386 and arm!) pointer arithmetic. Since si_addr is
the only field we use from this union, this replaces the
opaque byte array with an explicit declaration of the si_addr
field and accesses it directly.
LGTM=minux, rsc
R=rsc, minux
CC=golang-codereviews
https://codereview.appspot.com/179970044
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Previously, this used the top 8 bits of an instruction as a
sort-of opcode and ignored the top two bits of the relative
PC. This worked because these jumps are always negative and
never big enough for the top two bits of the relative PC (also
the bottom 2 bits of the sort-of opcode) to be anything other
than 0b11, but the code is confusing because it doesn't match
the actual structure of the instruction.
Instead, use the real 6 bit opcode and use all 24 bits of
relative PC.
LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://codereview.appspot.com/179960043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Previously, lfstack assumed Linux limited user space addresses
to 43 bits on Power64 based on a paper from 2001. It turns
out the limit is now 46 bits, so lfstack was truncating
pointers.
Raise the limit to 48 bits (for some future proofing and to
make it match amd64) and add a self-test that will fail in a
useful way if ever unpack(pack(x)) != x.
With this change, dev.cc passes all.bash on power64le.
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/174430043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
conversion
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/176970043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This is the power64 component of CL 174950043.
With this, dev.cc compiles on power64 and power64le and passes
most tests if GOGC=off (but crashes in go_bootstrap if GC is
on).
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/175290043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Fix a constant conversion error. Add set_{sec,nsec} for
timespec and set_usec for timeval. Fix type of
sigaltstackt.ss_size.
LGTM=rsc
R=rsc, bradfitz
CC=golang-codereviews
https://codereview.appspot.com/180840043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The power64 equivalent of CL 174860043
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/179890043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The power64 equivalent of CL 168510043
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/178940043
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The power64 equivalent of CL 168500044
LGTM=rsc
R=rsc
CC=golang-codereviews
https://codereview.appspot.com/175280043
|