Commit graph

339 commits

Author SHA1 Message Date
Ian Lance Taylor
dd931d9b48 libgo: update to Go 1.11
Reviewed-on: https://go-review.googlesource.com/136435

gotools/:
	* Makefile.am (mostlyclean-local): Run chmod on check-go-dir to
	make sure it is writable.
	(check-go-tools): Likewise.
	(check-vet): Copy internal/objabi to check-vet-dir.
	* Makefile.in: Rebuild.

From-SVN: r264546
2018-09-24 21:46:21 +00:00
Ian Lance Taylor
cec07c4759 compiler, runtime: call gcWriteBarrier instead of writebarrierptr
In 1.11 writebarrierptr is going away, so change the compiler to call
    gcWriteBarrier instead.  We weren't using gcWriteBarrier before;
    adjust the implementation to use the putFast method.
    
    This revealed a problem in the kickoff function.  When using cgo,
    kickoff can be called on the g0 of an m allocated by newExtraM.  In
    that case the m will generally have a p, but systemstack may be called
    by wbBufFlush as part of flushing the write barrier buffer.  At that
    point the buffer is full, so we can not do a write barrier.  So adjust
    the existing code in kickoff so that in the case where we are g0,
    don't do any write barrier at all.
    
    Reviewed-on: https://go-review.googlesource.com/131395

From-SVN: r264295
2018-09-13 22:25:58 +00:00
Ian Lance Taylor
38fab7369d runtime: correct counters in sweep
In the sweep code we can sometimes see incorrect counts when
    conservative stack scanning causes us to grey an object that we
    earlier decided could be freed.  We already ignored this check, but
    adjust this case to maintain correct span counts when it happens.
    This gives us slightly more correct numbers in MemStats, and helps
    avoid a rare failure in TestReadMemStats.
    
    Also fix the free index, and cope with finding a full span when
    allocating a new one.
    
    Reviewed-on: https://go-review.googlesource.com/134216

From-SVN: r264294
2018-09-13 22:06:16 +00:00
Ian Lance Taylor
84cdf51de4 compiler, runtime: open code select
This is the gofrontend version of https://golang.org/cl/37933,
    https://golang.org/cl/37934, and https://golang.org/cl/37935.
    Open code the initialization of select cases.
    
    This is a step toward updating libgo to the 1.11 release.
    
    Reviewed-on: https://go-review.googlesource.com/135000

From-SVN: r264290
2018-09-13 21:32:24 +00:00
Ian Lance Taylor
f0d89c7759 runtime: avoid write barriers with traceback info
Unlike the gc runtime, libgo stores traceback information in location
    structs, which contain strings.  Therefore, copying location structs
    around appears to require write barriers, although in fact write
    barriers are never important because the strings are never allocated
    in Go memory.  They come from libbacktrace.
    
    Some of the generated write barriers come at times when write barriers
    are not permitted.  For example, exitsyscall, marked
    nowritebarrierrec, calls exitsyscallfast which calls traceGoSysExit
    which calls traceEvent which calls traceStackID which calls
    trace.stackTab.put which copies location values into memory allocated
    by tab.newStack.  This write barrier can be invoked when there is no
    p, causing a crash.
    
    This change fixes the problem by ensuring that location values are
    copied around in the tracing code with no write barriers.
    
    This was found by fixing the compiler to fully implement
    //go:nowritebarrierrec; CL to follow.
    
    Reviewed-on: https://go-review.googlesource.com/134226

From-SVN: r264282
2018-09-13 17:30:00 +00:00
Ian Lance Taylor
2919ad1ee3 libgo: build roots index to speed up bulkBarrierPreWrite
To reduce the amount of time spent in write barrier processing
    (specifically runtime.bulkBarrierPreWrite), add support for building a
    'GC roots index', basically a sorted list of all roots, so as to
    allow more efficient lookups of gcdata structures for globals. The
    previous implementation worked on the raw (unsorted) roots list
    itself, which did not scale well.
    
    Reviewed-on: https://go-review.googlesource.com/132595

From-SVN: r264276
2018-09-13 16:44:43 +00:00
Ian Lance Taylor
347462bfee compiler, runtime: remove hmap field from maptypes
This is the gofrontend version of https://golang.org/cl/91796.
    
    This is part of that CL, just the compiler change and required runtime
    changes, in preparation for updating libgo to 1.11.
    
    Relevant part of original CL description:
    
        The hmap field in the maptype is only used by the runtime to check the sizes of
        the hmap structure created by the compiler and runtime agree.
    
        Comments are already present about the hmap structure definitions in the
        compiler and runtime needing to be in sync.
    
    Reviewed-on: https://go-review.googlesource.com/130976

From-SVN: r263941
2018-08-29 00:20:25 +00:00
Ian Lance Taylor
1d29bb0408 runtime: remove the dummy arg of getcallersp
This is a port of https://golang.org/cl/109596 to the gofrontend, in
    preparation for updating libgo to 1.11.
    
    Original CL description:
    
        getcallersp is intrinsified, and so the dummy arg is no longer
        needed. Remove it, as well as a few dummy args that are solely
        to feed getcallersp.
    
    Reviewed-on: https://go-review.googlesource.com/131116

From-SVN: r263840
2018-08-24 18:15:04 +00:00
Ian Lance Taylor
b7d7c92f24 runtime: use poll rather than pollset for netpoll on AIX
Updates golang/go#26634
    
    Reviewed-on: https://go-review.googlesource.com/126857

From-SVN: r263364
2018-08-07 17:29:50 +00:00
Ian Lance Taylor
5ac2fd0d6e libgo: prune sighandler frames in runtime.sigprof
When writing stack frames to the pprof CPU profile machinery, it is
    very important to insure that the frames emitted do not contain any
    frames corresponding to artifacts of the profiling process itself
    (signal handlers, sigprof, etc). This patch changes runtime.sigprof to
    strip out those frames from the raw stack generated by
    "runtime.callers".
    
    Fixes golang/go#26595.
    
    Reviewed-on: https://go-review.googlesource.com/126175

From-SVN: r263035
2018-07-27 18:43:34 +00:00
Ian Lance Taylor
867b003fd7 runtime: skip zero-sized fields in structs when converting to FFI
The libffi library doesn't understand zero-sized objects.
    When we see a zero-sized field in a struct, just skip it when
    converting to the FFI data structures. There is no value to pass in
    any case, so not telling libffi about the field doesn't affect
    anything.
    
    The test case for this is https://golang.org/cl/123316.
    
    Fixes golang/go#26335
    
    Reviewed-on: https://go-review.googlesource.com/123335

From-SVN: r262651
2018-07-13 20:39:02 +00:00
Ian Lance Taylor
11309337c4 libgo: update to Go 1.10.2 release
Reviewed-on: https://go-review.googlesource.com/115196

From-SVN: r261041
2018-05-31 21:42:53 +00:00
Ian Lance Taylor
746d6ed4ad libgo: add support for the Nios II architecture
Reviewed-on: https://go-review.googlesource.com/90775

From-SVN: r259866
2018-05-02 22:28:46 +00:00
Ian Lance Taylor
e1aeb9bc9e runtime: remove unused stack.go
We're never going to use stack.go for gccgo.  Although a build tag
    keeps it from being built, even having it around can be confusing.
    Remove it.
    
    Reviewed-on: https://go-review.googlesource.com/40774

From-SVN: r259865
2018-05-02 22:01:22 +00:00
Ian Lance Taylor
a8ebf991f3 runtime: don't check for stale runtime
The gccgo runtime is never stale, and on a system with gc sources in
    ~/go the test may wind up checking whether the gc runtime is stale.
    
    Reviewed-on: https://go-review.googlesource.com/102282

From-SVN: r258865
2018-03-26 19:29:27 +00:00
Ian Lance Taylor
123ba0918c runtime: push arena on AIX higher due to clashes
Reviewed-on: https://go-review.googlesource.com/99117

From-SVN: r258337
2018-03-07 15:22:46 +00:00
Ian Lance Taylor
8cda97ab52 runtime: update AIX memory allocation for new versions
Reviewed-on: https://go-review.googlesource.com/97357

From-SVN: r258052
2018-02-28 01:39:03 +00:00
Andreas Schwab
b613cc2e91 re PR go/84484 (libgo configure tests fail to find -latomic)
PR go/84484
    libgo: add support for riscv64
    
    Patch by Andreas Schwab.
    
    Reviewed-on: https://go-review.googlesource.com/96377

	* go.test/go-test.exp (go-set-goarch): Recognize riscv64-*-*.

From-SVN: r257914
2018-02-22 19:49:04 +00:00
Ian Lance Taylor
911cef2e3b runtime: allow preemption in fast syscall return
Let a fast syscall return be a preemption point.  This helps with
    tight loops that make system calls, as in BenchmarkSyscallExcessWork.
    
    Reviewed-on: https://go-review.googlesource.com/94895

From-SVN: r257848
2018-02-20 15:30:31 +00:00
Ian Lance Taylor
c3ab26e8bb runtime: add some more preemption checks
In particular this lets BenchmarkPingPongHog in runtime/proc_test.go
    complete.
    
    Reviewed-on: https://go-review.googlesource.com/94735

From-SVN: r257743
2018-02-16 16:42:53 +00:00
Ian Lance Taylor
52eb4ab409 compiler: error on func declaration/definition
Long long long ago Go permitted writing
        func F()
    in one file and writing
        func F() {}
    in another file.  This was removed from the language, and that is now
    considered to be a multiple definition error.  Gccgo never caught up
    to that, and it has been permitting this invalid code for some time.
    
    Stop permitting it, so that we give correct errors.  Since we've
    supported it for a long time, the compiler uses it in a couple of
    cases: it predeclares the hash/equal methods if it decides to create
    them while compiling another function, and it predeclares main.main as
    a mechanism for getting the right warning if a program uses the wrong
    signature for main.  For simplicity, keep those existing uses.
    
    This required a few minor changes in libgo which were relying,
    unnecessarily, on the current behavior.
    
    Reviewed-on: https://go-review.googlesource.com/93083

From-SVN: r257600
2018-02-12 19:29:52 +00:00
Ian Lance Taylor
86ff185365 re PR go/84215 (Random results in go/libgo tests)
PR go/84215
    runtime, sync/atomic: use write barrier for atomic pointer functions
    
    This copies atomic_pointer.go from 1.10rc2.  It was omitted during the
    transition of the runtime from C to Go, and I forgot about it.
    
    This may help with https://gcc.gnu.org/PR84215.
    
    Reviewed-on: https://go-review.googlesource.com/93197

From-SVN: r257599
2018-02-12 18:50:16 +00:00
Ian Lance Taylor
74e6f14adb runtime: get missing function name from symbol table
If we trace back through code that has no debug info, as when calling
    through C code compiled with -g0, we won't have a function name.
    Try to fetch the function name using the symbol table.
    
    Adding the test case revealed that gotest failed to use the gccgo tag
    when matching files, so add that.
    
    Reviewed-on: https://go-review.googlesource.com/92756

From-SVN: r257495
2018-02-08 15:37:43 +00:00
Ian Lance Taylor
9adab5dd16 libgo: update to Go1.10rc2
Reviewed-on: https://go-review.googlesource.com/92736

From-SVN: r257493
2018-02-08 15:30:22 +00:00
Ian Lance Taylor
f1a2d8b1b5 runtime: don't call funcPC from a function
The escape analysis support is not yet good enough to avoid escaping
    the argument to funcPC.  This causes unnecessary and often harmful
    memory allocation.  E.g., (*cpuProfile).addExtra can be called from a
    signal handler, and it must not allocate memory.
    
    Move the calls to funcPC to use variables instead.  This was done in
    the original migration to using funcPC, but was not done for newer code.
    
    In one case, in signal handling code, use getSigtramp.
    
    Reviewed-on: https://go-review.googlesource.com/92735

From-SVN: r257463
2018-02-07 22:04:55 +00:00
Ian Lance Taylor
c88893a0da runtime: correct runtime structfield type to match reflect
The offset field in structfield has changed to offsetAnon, and now
    requires a shift to get the actual offset value.
    
    Fixes golang/go#23391
    
    Reviewed-on: https://go-review.googlesource.com/92275

From-SVN: r257413
2018-02-06 15:18:50 +00:00
Ian Lance Taylor
38f08ec0bd runtime: scan register backing store on ia64
On ia64, a separate stack is used for saving/restoring register frames,
    occupying the other end of the stack mapping. This must also be scanned
    for pointers into the heap.
    
    Reviewed-on: https://go-review.googlesource.com/85276

From-SVN: r257323
2018-02-02 00:16:43 +00:00
Ian Lance Taylor
f6acbd0805 libgo: update to Go1.10rc1
Reviewed-on: https://go-review.googlesource.com/90295

From-SVN: r257127
2018-01-27 23:45:46 +00:00
Ian Lance Taylor
d779dffc4b libgo: update to Go1.10rc1
Reviewed-on: https://go-review.googlesource.com/90295

From-SVN: r257126
2018-01-27 23:44:29 +00:00
Ian Lance Taylor
a14e122ae2 compiler: deref receiver types in mangled names
This was the original intent, as reflected in the long comment at the
    start of names.cc, but I forgot to implement it.
    
    Also, remove a leading ".0" from the final name.  That could occur for
    a method whose receiver type starts with 'u', as in that case we
    prepend a space to the mangled name, to avoid confusion with the
    Unicode mangling, and the space turns into ".0".
    
    Also, if the Unicode encoding would cause the final to start with
    "..u" or "..U", add a leading underscore.
    
    Patch gotest to not get fooled by some names.
    
    The result of these changes is that all symbols start with a letter or
    an underscore.
    
    Reviewed-on: https://go-review.googlesource.com/90015

From-SVN: r257068
2018-01-25 23:10:35 +00:00
Ian Lance Taylor
a88d1f8bb2 runtime: fix lfstackUnpack on ia64
The top three region number bits must be masked out before
    right-shifting the address bits into place, otherwise they will be
    copied down into the lower always-zero address bits.
    
    Reviewed-on: https://go-review.googlesource.com/84535

From-SVN: r257061
2018-01-25 17:44:19 +00:00
Ian Lance Taylor
4880b994d6 compiler: rationalize external symbol names
Encode all external symbol names using only ASCII alphanumeric
    characters, underscore, and dot.  Use a scheme that can be reliably
    demangled to a somewhat readable version as described in the long
    comment in names.cc.
    
    A minor cleanup discovered during this was that we were treating
    function types as different if one had a NULL parameters_ field and
    another has a non-NULL parameters_ field that has no parameters.  This
    worked because we mangled them slightly differently.  We now mangle
    them the same, so we treat them as equal, as we should anyhow.
    
    Reviewed-on: https://go-review.googlesource.com/89555

	* go.go-torture/execute/names-1.go: New test.

From-SVN: r257033
2018-01-24 23:50:09 +00:00
Ian Lance Taylor
674dddfe2d runtime: no escape for some functions on AIX
Reviewed-on: https://go-review.googlesource.com/88236

From-SVN: r256874
2018-01-19 04:48:51 +00:00
Ian Lance Taylor
549e4febc3 runtime: add go:noescape declaration for Solaris
Patch by Rainer Orth.
    
    Reviewed-on: https://go-review.googlesource.com/88376

From-SVN: r256872
2018-01-19 04:09:55 +00:00
Ian Lance Taylor
a9411cce01 re PR go/83787 (Many 32-bit Solaris/SPARC Go tests FAIL after Go1.10beta1 update)
PR go/83787
    compiler: pass int to makechan, call makechan64 when appropriate
    
    The update to 1.10beta1 changed makechan to take int instead of int64,
    and added a makechan64 call for large values.  Since the size is the
    last argument to makechan, the old compiler which always passed a
    64-bit int worked fine on 64-bit systems and little-endian 32-bit
    systems, but broke on big-endian 32-bit systems.  This CL fixes the
    compiler to use the appropriate types.
    
    This fixes GCC PR 83787.
    
    Reviewed-on: https://go-review.googlesource.com/88077

From-SVN: r256835
2018-01-18 04:24:48 +00:00
Ian Lance Taylor
c6d6367f84 libgo: update to Go1.10beta2 release
Reviewed-on: https://go-review.googlesource.com/87897

From-SVN: r256794
2018-01-17 14:20:29 +00:00
Ian Lance Taylor
fd0c1dd167 libgo: add platform support for SuperH
Reviewed-on: https://go-review.googlesource.com/84555

From-SVN: r256446
2018-01-10 19:19:02 +00:00
Ian Lance Taylor
692aefcd56 runtime: work around escaping closure in export_test.go
When compiling runtime, it is not allowed for local variables
    and closures to be heap allocated. In one test, there is a go
    statement with a closure. In the gc compiler, it distinguishes
    capturing variable by value vs. by address, and rewrites it to
    passing the captured values as arguments. Currently we don't
    have this, and the escape analysis decides to heap allocate the
    closure and also the captured variables, which is not allowed.
    Work around it by passing the variables explicitly.
    
    This is in preparation of turning on escape analysis for the
    runtime.
    
    Reviewed-on: https://go-review.googlesource.com/86245

From-SVN: r256419
2018-01-10 05:26:29 +00:00
Ian Lance Taylor
e4876be5f5 runtime: noescape some functions/variables
This is in preparation of turning on escape analysis for the
    runtime.
    
    - In gccgo, systemstack is implemented with mcall, which is not
      go:noescape. Wrap the closure in noescape so the escape analysis
      does not think it escapes.
    
    - Mark some C functions go:noescape. They do not leak arguments.
    
    - Use noescape function to make a few local variables' addresses
      not escape. The escape analysis cannot figure out because they
      are assigned to pointer indirections.
    
    Reviewed-on: https://go-review.googlesource.com/86244

From-SVN: r256418
2018-01-10 05:15:52 +00:00
Ian Lance Taylor
1a2f01efa6 libgo: update to Go1.10beta1
Update the Go library to the 1.10beta1 release.
    
    Requires a few changes to the compiler for modifications to the map
    runtime code, and to handle some nowritebarrier cases in the runtime.
    
    Reviewed-on: https://go-review.googlesource.com/86455

gotools/:
	* Makefile.am (go_cmd_vet_files): New variable.
	(go_cmd_buildid_files, go_cmd_test2json_files): New variables.
	(s-zdefaultcc): Change from constants to functions.
	(noinst_PROGRAMS): Add vet, buildid, and test2json.
	(cgo$(EXEEXT)): Link against $(LIBGOTOOL).
	(vet$(EXEEXT)): New target.
	(buildid$(EXEEXT)): New target.
	(test2json$(EXEEXT)): New target.
	(install-exec-local): Install all $(noinst_PROGRAMS).
	(uninstall-local): Uninstasll all $(noinst_PROGRAMS).
	(check-go-tool): Depend on $(noinst_PROGRAMS).  Copy down
	objabi.go.
	(check-runtime): Depend on $(noinst_PROGRAMS).
	(check-cgo-test, check-carchive-test): Likewise.
	(check-vet): New target.
	(check): Depend on check-vet.  Look at cmd_vet-testlog.
	(.PHONY): Add check-vet.
	* Makefile.in: Rebuild.

From-SVN: r256365
2018-01-09 01:23:08 +00:00
Ian Lance Taylor
79c9f76563 runtime: export cgoCheck functions
The functions cgoCheckPointer and cgoCheckResult are called by code
    generated by cgo. That means that we need to export them using
    go:linkname, as otherwise they are local symbols. The cgo code
    currently uses weak references to only call the symbols if they are
    defined, which is why it has been working--the cgo code has not been
    doing any checks.
    
    Reviewed-on: https://go-review.googlesource.com/80295

From-SVN: r255347
2017-12-02 00:46:00 +00:00
Ian Lance Taylor
5ac29058f0 sync/atomic, runtime/internal/atomic: don't assume reads from 0 fail
For a misaligned address force a panic rather than assuming that reading
    from the address 0 will cause one.
    
    Reviewed-on: https://go-review.googlesource.com/69850

From-SVN: r254610
2017-11-09 21:56:59 +00:00
Ian Lance Taylor
7ba0b15a7e internal,net,os,runtime,syscall: fixes for AIX following update to go1.9
Reviewed-on: https://go-review.googlesource.com/64551

From-SVN: r253016
2017-09-20 14:59:39 +00:00
Ian Lance Taylor
8fca13953b runtime: restore "goroutine in C code" message
In the 1.9 upgrade I took out the word "goroutine" from a traceback
    showing a goroutine running in C code, to let TestCgoNumGoroutine
    pass.  However, it turns out that some code is actually checking for
    that string; for example,
    https://github.com/grpc/grpc-go/blob/master/test/leakcheck/leakcheck.go#L44
    So keep the message the same, and change the test.
    
    Reviewed-on: https://go-review.googlesource.com/64850

From-SVN: r252991
2017-09-20 00:33:29 +00:00
Ian Lance Taylor
bc998d034f libgo: update to go1.9
Reviewed-on: https://go-review.googlesource.com/63753

From-SVN: r252767
2017-09-14 17:11:35 +00:00
Ian Lance Taylor
022aa0ce5e compiler, runtime: simplify select and channel operations
In preparation for upgrading libgo to the 1.9 release, this
    approximately incorporates https://golang.org/cl/37661 and
    https://golang.org/cl/38351.
    
    CL 37661 changed the gc compiler such that the select statement simply
    returns an integer which is then used as the argument for a switch.
    Since gccgo already worked that way, this just adjusts the switch code
    to look like the gc switch code by removing the explicit case index
    expression and calculating it from the order of calls to selectsend,
    selectrecv, and selectdefault.
    
    CL 38351 simplifies the channel code by not passing the unused channel
    type descriptor pointer.
    
    Reviewed-on: https://go-review.googlesource.com/62730

From-SVN: r252749
2017-09-14 03:57:18 +00:00
Ian Lance Taylor
a2aa807ef9 runtime: fix lfstack for 64-bit AIX
Reviewed-on: https://go-review.googlesource.com/57550

From-SVN: r251420
2017-08-29 18:59:04 +00:00
Ian Lance Taylor
098c217267 runtime: better implementation of netpoll for AIX
Reviewed-on: https://go-review.googlesource.com/54170

From-SVN: r251133
2017-08-16 20:58:26 +00:00
Ian Lance Taylor
048f0471d2 runtime: allocate more stack space in CgoCallbackGC test
Allocate enough stack space so that the test will work on a system
    that does not support split stacks.
    
    This test is actually not very meaningful for gccgo at present, but it
    doesn't hurt to keep running it.
    
    Updates golang/go#20931
    
    Reviewed-on: https://go-review.googlesource.com/50630

From-SVN: r250433
2017-07-21 17:50:14 +00:00
Ian Lance Taylor
9e45ca5f83 re PR go/81451 (missing futex check - libgo/runtime/thread-linux.c:12:0 futex.h:13:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘long’)
PR go/81451
    runtime: inline runtime_osinit
    
    We had two identical copies of runtime_osinit. They set runtime_ncpu,
    a variable that is no longer used. Removing that leaves us with two lines.
    Inline those two lines in the two places the function was called.
    
    This fixes GCC PR 81451.
    
    Reviewed-on: https://go-review.googlesource.com/48862

From-SVN: r250326
2017-07-18 23:14:29 +00:00