aboutsummaryrefslogtreecommitdiff
path: root/libgo
AgeCommit message (Collapse)AuthorFilesLines
2016-10-28compiler, runtime: copy slice code from Go 1.7 runtimeIan Lance Taylor9-252/+254
Change the compiler handle append as the gc compiler does: call a function to grow the slice, but otherwise assign the new elements directly to the final slice. For the current gccgo memory allocator the slice code has to call runtime_newarray, not mallocgc directly, so that the allocator sets the TypeInfo_Array bit in the type pointer. Rename the static function cnew to runtime_docnew, so that the stack trace ignores it when ignoring runtime functions. This was needed to fix the runtime/pprof tests on 386. Reviewed-on: https://go-review.googlesource.com/32218 From-SVN: r241667
2016-10-28re PR go/78144 (FAIL: time on systems with tzdata2016g installed)Ian Lance Taylor1-2/+5
PR go/78144 libgo: incorporate fix for timezone test This brings over the test-only fix for issue 17276 into gccgo/libgo (with tzdata-2016g there is a new zone abbreviation). This is a copy of https://golang.org/cl/29995. Reviewed-on: https://go-review.googlesource.com/32182 From-SVN: r241661
2016-10-28re PR go/78143 (bootstrap broken in libgo on powerpc-linux-gnu)Ian Lance Taylor1-1/+1
PR go/78143 runtime: build lfstack_32bit.go on ppc Missed a build tag. This is GCC PR 78143. Reviewed-on: https://go-review.googlesource.com/32295 From-SVN: r241659
2016-10-28libgo: redirect grep output in mkrsysinfo.sh to /dev/nullIan Lance Taylor1-1/+1
I noticed a stray useless output line when building libgo. Reviewed-on: https://go-review.googlesource.com/32294 From-SVN: r241655
2016-10-21libgo: keep c0 and c1 out of runtime.incIan Lance Taylor2-2/+2
The constants named c0 and c1 turn up as macros in runtime.inc. This reportedly breaks building on Solaris 11, where there is a system struct that has a field named c1. The constants aren't needed by the runtime C code, so avoid the problem by grepping them out. Reviewed-on: https://go-review.googlesource.com/31730 From-SVN: r241432
2016-10-21libgo: leave Int64Align as 8 on 32-bit SPARCIan Lance Taylor2-2/+0
Verified by testing on SPARC Solaris. Reviewed-on: https://go-review.googlesource.com/31675 From-SVN: r241430
2016-10-21runtime: copy lfstack code from Go 1.7 runtimeIan Lance Taylor8-118/+87
Note that lfstack_64bit.go was modified for Solaris support in a different, and better, way than the superseded lfstack.goc code. Reviewed-on: https://go-review.googlesource.com/31673 From-SVN: r241427
2016-10-20runtime: rewrite interface code into GoIan Lance Taylor36-1085/+651
I started to copy the Go 1.7 interface code, but the gc and gccgo representations of interfaces are too different. So instead I rewrote the gccgo interface code from C to Go. The code is largely the same as it was, but the names are more like those used in the gc runtime. I also copied over the string comparison functions, and tweaked the compiler to use eqstring when comparing strings for equality. Reviewed-on: https://go-review.googlesource.com/31591 From-SVN: r241384
2016-10-19runtime, syscall: force EPOLLET to be positiveIan Lance Taylor3-1/+15
The C definition is 1U << 31. Reportedly on some systems GCC's -fgo-dump-spec can print this as -2147483648. Reviewed-on: https://go-review.googlesource.com/31448 From-SVN: r241347
2016-10-18runtime: copy netpoll code from Go 1.7 runtimeIan Lance Taylor23-1145/+1158
Reviewed-on: https://go-review.googlesource.com/31325 From-SVN: r241307
2016-10-18runtime: scan caller-saved registers for non-split-stackIan Lance Taylor1-1/+6
While testing a patch on Solaris, which does not support split-stack, I ran across a bug in the handling of caller-saved registers for the garbage collector. For non-split-stack systems, runtime_mcall is responsible for saving all caller-saved registers on the stack so that the GC stack scan will see them. It does this by calling __builtin_unwind_init and setting the g's gcnextsp field to point to the current stack. The garbage collector then scans the stack from gcnextsp to the top of stack. Unfortunately, the code was setting gcnextsp to point to runtime_mcall's argument, which meant that even though runtime_mcall was careful to store all caller-saved registers on the stack, the GC never saw them. This is, of course, only a problem if a value lives only in a caller-saved register, and not anywhere else on the stack or heap. And it is only a problem if that caller-saved register manages to make it all the way down to runtime_mcall without being saved by any function on the way. This is moderately unlikely but it turns out that the recent changes to keep values on the stack when compiling the runtime package caused it to happen for the local variable `s` in `notifyListWait` in runtime/sema.go. That function calls goparkunlock which is simple enough to not require all registers, and itself calls runtime_mcall. So it was possible for `s` to be released by the GC before the goroutine returned from goparkunlock, which eventually caused a dangling pointer to be passed to releaseSudog. This is not a problem on split-stack systems, which use __splitstack_get_context, which saves a stack pointer low enough on the stack to scan the registers saved by runtime_mcall. Reviewed-on: https://go-review.googlesource.com/31323 From-SVN: r241304
2016-10-17runtime: copy rdebug code from Go 1.7 runtimeIan Lance Taylor19-83/+138
While we're at it, update the runtime/debug package, and start running its testsuite by default. I'm not sure why runtime/debug was not previously updated to 1.7. Doing that led me to fix some minor aspects of runtime.Stack and the C function runtime/debug.readGCStats. Reviewed-on: https://go-review.googlesource.com/31251 From-SVN: r241261
2016-10-15runtime: copy runtime package time code from Go 1.7Ian Lance Taylor10-422/+337
Fix handling of function values for -fgo-c-header to generate FuncVal*, not simply FuncVal. While we're here change runtime.nanotime to use clock_gettime with CLOCK_MONOTONIC, rather than gettimeofday. This is what the gc library does. It provides nanosecond precision and a monotonic clock. Reviewed-on: https://go-review.googlesource.com/31232 From-SVN: r241197
2016-10-14runtime: copy mprof code from Go 1.7 runtimeIan Lance Taylor14-887/+951
Also create a gccgo version of some of the traceback code in traceback_gccgo.go, replacing some code currently in C. This required modifying the compiler so that when compiling the runtime package a slice expression does not cause a local array variable to escape to the heap. Reviewed-on: https://go-review.googlesource.com/31230 From-SVN: r241189
2016-10-14runtime: just do file/line lookup in C, move Func to GoIan Lance Taylor3-123/+42
In order to port stack backtraces to Go, we need the ability to look up file/line information for PC values without allocating memory. This patch moves the handling of Func from C code to Go code, and simplifies the C code to just look up function/file/line/entry information for a PC. Reviewed-on: https://go-review.googlesource.com/31150 From-SVN: r241172
2016-10-14debug/elf: add sparc64 relocationsIan Lance Taylor3-0/+66
This is a backport of https://go-review.googlesource.com/30870. Reviewed-on: https://go-review.googlesource.com/30916 From-SVN: r241171
2016-10-14runtime: copy cpuprof code from Go 1.7 runtimeIan Lance Taylor10-480/+509
This replaces runtime/cpuprof.goc with go/runtime/cpuprof.go and adjusts the supporting code in runtime/proc.c. This adds another case where the compiler needs to avoid heap allocation in the runtime package: when evaluating a method expression into a closure. Implementing this required moving the relevant code from do_get_backend to do_flatten, so that I could easily add a temporary variable. Doing that let me get rid of Bound_method_expression::do_lower. Reviewed-on: https://go-review.googlesource.com/31050 From-SVN: r241163
2016-10-13runtime: copy mstats code from Go 1.7 runtimeIan Lance Taylor16-349/+652
This replaces mem.go and the C runtime_ReadMemStats function with the Go 1.7 mstats.go. The GCStats code is commented out for now. The corresponding gccgo code is in runtime/mgc0.c. The variables memstats and worldsema are shared between the Go code and the C code, but are not exported. To make this work, add temporary accessor functions acquireWorldsema, releaseWorldsema, getMstats (the latter known as mstats in the C code). Check the preemptoff field of m when allocating and when considering whether to start a GC. This works with the new stopTheWorld and startTheWorld functions in Go, which are essentially the Go 1.7 versions. Change the compiler to stack allocate closures when compiling the runtime package. Within the runtime packages closures do not escape. This is similar to what the gc compiler does, except that the gc compiler, when compiling the runtime package, gives an error if escape analysis shows that a closure does escape. I added this here because the Go version of ReadMemStats calls systemstack with a closure, and having that allocate memory was causing some tests that measure memory allocations to fail. Reviewed-on: https://go-review.googlesource.com/30972 From-SVN: r241124
2016-10-13syscall: don't use pt_regs in clone_linux.cIan Lance Taylor1-3/+2
It's unnecessary and it reportedly breaks the build on arm64 GNU/Linux. Reviewed-on: https://go-review.googlesource.com/30978 From-SVN: r241084
2016-10-12compiler, runtime: copy string code from Go 1.7Ian Lance Taylor18-707/+705
Add compiler support for turning concatenating strings into a call to a runtime function that takes the appropriate number of arguments. Rename some local variables in mgc0.c to avoid macros that the new rune.go causes to appear in runtime.inc. Reviewed-on: https://go-review.googlesource.com/30827 From-SVN: r241074
2016-10-12syscall: mark rawClone as no_split_stackIan Lance Taylor1-1/+4
Reviewed-on: https://go-review.googlesource.com/30955 From-SVN: r241072
2016-10-12runtime: copy Go 1.7 runtime semaphore codeIan Lance Taylor6-477/+367
This triggered a check in releaseSudog that g.param not nil, because libgo uses the param field when starting a goroutine. Fixed by clearing g->param in kickoff in proc.c. Reviewed-on: https://go-review.googlesource.com/30951 From-SVN: r241067
2016-10-12syscall, internal/syscall/unix: Fix getrandom, clone on sparc64Ian Lance Taylor6-28/+146
Since sparc is a valid architecture, the name of getrandom_linux_sparc.go means that it will be ignored on sparc64, even though it's whitelisted with a +build line. On SPARC, clone has a unique return value convention which requires some inline assembly to convert it to the normal convention. Reviewed-on: https://go-review.googlesource.com/30873 From-SVN: r241051
2016-10-11configure: redirect -fsplit-stack compilation to dev/nullIan Lance Taylor2-6/+6
Avoid an error message in the middle of the configure output. Patch by Eric Botcazou. Reviewed-on: https://go-review.googlesource.com/30813 From-SVN: r240993
2016-10-11Accidentally failed to commit these earlier, as part of:Ian Lance Taylor3-36/+173
Update the compiler to use the new names. Add calls to printlock and printunlock around print statements. Move expression evaluation before the call to printlock. Update g's writebuf field to a slice, and adjust C code accordingly. Reviewed-on: https://go-review.googlesource.com/30717 From-SVN: r240958
2016-10-10runtime: copy print/println support from Go 1.7Ian Lance Taylor10-308/+113
Update the compiler to use the new names. Add calls to printlock and printunlock around print statements. Move expression evaluation before the call to printlock. Update g's writebuf field to a slice, and adjust C code accordingly. Reviewed-on: https://go-review.googlesource.com/30717 From-SVN: r240956
2016-10-10runtime: copy channel code from Go 1.7 runtimeIan Lance Taylor16-1241/+2558
Change the compiler to use the new routines. Drop the separation of small and large values when sending on a channel. Allocate the select struct on the stack. Remove the old C implementation of channels. Adjust the garbage collector for the new data structure. Bring in part of the tracing code, enough for the channel code to call. Bump the permitted number of allocations in one of the tests in context_test.go. The difference is that now receiving from a channel allocates a sudog, which the C code used to simply put on the stack. This will be somewhat better when we port proc.go. Reviewed-on: https://go-review.googlesource.com/30714 From-SVN: r240941
2016-10-03re PR go/77809 ("_LITTLE_ENDIAN" redefined)Ian Lance Taylor2-4/+14
PR go/77809 libgo: strip most C macros from runtime.inc The Go runtime package is picking up C macros from runtime_sysinfo.go and then re-exporting them to runtime.inc. This can cause name conflicts. Change the Makefile so that we only put the macros we need into runtime.inc. These are the constants that are actually defined by Go code, not runtime_sysinfo.go. There are only a few, so we can pattern match. This is an additional hack on runtime.inc. The long term goal is to convert the runtime package to Go and eliminate runtime.inc entirely, so a few hacks seem acceptable. Fixes GCC PR 77809. Reviewed-on: https://go-review.googlesource.com/30167 From-SVN: r240724
2016-09-30runtime: copy internal locking code from Go 1.7 runtimeIan Lance Taylor28-818/+1520
Remove the old locking code written in C. Add a shell script mkrsysinfo.sh to generate the runtime_sysinfo.go file, so that we can get Go copies of the system time structures and other types. Tweak the compiler so that when compiling the runtime package the address operator does not cause local variables to escape. When the gc compiler compiles the runtime, an escaping local variable is treated as an error. We should implement that, instead of this change, when escape analysis is turned on. Tweak the compiler so that the generated C header does not include names that start with an underscore followed by a non-upper-case letter, except for the special cases of _defer and _panic. Otherwise we translate C types to Go in runtime_sysinfo.go and then generate those Go types back as C types in runtime.inc, which is useless and painful for the C code. Change entersyscall and friends to take a dummy argument, as the gc versions do, to simplify calls from the shared code. Reviewed-on: https://go-review.googlesource.com/30079 From-SVN: r240657
2016-09-29runtime: copy runtime.go and runtime1.go from Go 1.7Ian Lance Taylor15-395/+926
Also copy over cputicks.go, env_posix.go, vdso_none.go, stubs2.go, and a part of os_linux.go. Remove the corresponding functions from the C code in libgo/go/runtime. Add some transitional support functions to stubs.go. This converts several minor functions from C to Go. Reviewed-on: https://go-review.googlesource.com/29962 From-SVN: r240609
2016-09-28libgo: fix for runtime/check failure with "-O0 -g"Ian Lance Taylor2-0/+2
Tweak the makefile rules for the runtime/check test to insure that the runtime package is compiled with "-fgo-compiling-runtime". This resolves a test failure (unsat on runtime.getcallerpc) when in a build directory where the compiler flags have been configured to disable optimization. Reviewed-on: https://go-review.googlesource.com/30010 From-SVN: r240588
2016-09-27libgo: separate mksysinfo inputs into separate Makefile targetsIan Lance Taylor4-272/+305
This is a step toward a version of mksysinfo that generates information for the runtime package. This will be used to generate the runtime_sysinfo.go file, which is currently directly generated by a Makefile target. Reviewed-on: https://go-review.googlesource.com/29683 From-SVN: r240560
2016-09-23internal/syscall/unix: add getrandom syscall for MIPS and SPARCIan Lance Taylor4-1/+34
Reviewed-on: https://go-review.googlesource.com/29678 From-SVN: r240457
2016-09-21compiler, runtime: replace hashmap code with Go 1.7 hashmapIan Lance Taylor47-1115/+2171
This change removes the gccgo-specific hashmap code and replaces it with the hashmap code from the Go 1.7 runtime. The Go 1.7 hashmap code is more efficient, does a better job on details like when to update a key, and provides some support against denial-of-service attacks. The compiler is changed to call the new hashmap functions instead of the old ones. The compiler now tracks which types are reflexive and which require updating when used as a map key, and records the information in map type descriptors. Map_index_expression is simplified. The special case for a map index on the right hand side of a tuple expression has been unnecessary for some time, and is removed. The support for specially marking a map index as an lvalue is removed, in favor of lowering an assignment to a map index into a function call. The long-obsolete support for a map index of a pointer to a map is removed. The __go_new_map_big function (known to the compiler as Runtime::MAKEMAPBIG) is no longer needed, as the new runtime.makemap function takes an int64 hint argument. The old map descriptor type and supporting expression is removed. The compiler was still supporting the long-obsolete syntax `m[k] = 0, false` to delete a value from a map. That is now removed, requiring a change to one of the gccgo-specific tests. The builtin len function applied to a map or channel p is now compiled as `p == nil ? 0 : *(*int)(p)`. The __go_chan_len function (known to the compiler as Runtime::CHAN_LEN) is removed. Support for a shared zero value for maps to large value types is introduced, along the lines of the gc compiler. The zero value is handled as a common variable. The hash function is changed to take a seed argument, changing the runtime hash functions and the compiler-generated hash functions. Unlike the gc compiler, both the hash and equal functions continue to take the type length. Types that can not be compared now store nil for the hash and equal functions, rather than pointing to functions that throw. Interface hash and comparison functions now check explicitly for nil. This matches the gc compiler and permits a simple implementation for ismapkey. The compiler is changed to permit marking struct and array types as incomparable, meaning that they have no hash or equal function. We use this for thunk types, removing the existing special code to avoid generating hash/equal functions for them. The C runtime code adds memclr, memequal, and memmove functions. The hashmap code uses go:linkname comments to make the functions visible, as otherwise the compiler would discard them. The hashmap code comments out the unused reference to the address of the first parameter in the race code, as otherwise the compiler thinks that the parameter escapes and copies it onto the heap. This is probably not needed when we enable escape analysis. Several runtime map tests that ere previously skipped for gccgo are now run. The Go runtime picks up type kind information and stubs. The type kind information causes the generated runtime header file to define some constants, including `empty`, and the C code is adjusted accordingly. A Go-callable version of runtime.throw, that takes a Go string, is added to be called from the hashmap code. Reviewed-on: https://go-review.googlesource.com/29447 * go.go-torture/execute/map-1.go: Replace old map deletion syntax with call to builtin delete function. From-SVN: r240334
2016-09-20syscall: build export_unix_test.go on solarisIan Lance Taylor1-1/+1
Patch from Rainer Orth. Reviewed-on: https://go-review.googlesource.com/29436 From-SVN: r240285
2016-09-20re PR go/77642 (GO Bootstrap fail starting with r239872 splitstack signature ↵Ian Lance Taylor1-6/+14
does not match) PR go/77642 runtime: pass correct type to __splitstack_find The code was passing uintptr* to a function that expected size_t*. Based on patch by Andreas Krebbel. Fixes GCC PR 77642. Reviewed-on: https://go-review.googlesource.com/29433 From-SVN: r240275
2016-09-14libgo: fix typo in configure.ac (PCQUANTUm -> PCQUANTUM)Ian Lance Taylor2-2/+2
Reviewed-on: https://go-review.googlesource.com/29154 From-SVN: r240146
2016-09-11runtime/internal/sys: new package, API copied from Go 1.7Ian Lance Taylor10-416/+565
Copy over the Go 1.7 runtime/internal/sys package, but instead of having separate files for each GOARCH and GOOS value, set the values in configure.ac and write them out in Makefile.am. Setting the values in configure.ac should make it easier to add new processors. Remove the automake GOARCH conditionals, which are no longer used. Leave the GOOS conditionals for now, as they are used for the C runtime package. Reviewed-on: https://go-review.googlesource.com/29018 From-SVN: r240083
2016-09-10libgo: update to Go 1.7.1 releaseIan Lance Taylor28-255/+1112
Reviewed-on: https://go-review.googlesource.com/29012 From-SVN: r240071
2016-09-10runtime/internal/atomic: new package, API copied from Go 1.7Ian Lance Taylor6-0/+431
Copy over the Go 1.7 runtime/internal/atomic package, but implement the functions in C using __atomic functions rather than using the processor-specific assembler code. Reviewed-on: https://go-review.googlesource.com/29010 From-SVN: r240070
2016-09-09runtime: use alignof to check alignment of ucontext_tIan Lance Taylor1-1/+7
Use alignof rather than assuming a 16 byte alignment. Reviewed-on: https://go-review.googlesource.com/28913 From-SVN: r240047
2016-09-09runtime: remove remaining use of MAKECONTEXT_STACK_TOP macroIan Lance Taylor1-3/+0
The definition and most uses of MAKECONTEXT_STACK_TOP were removed in https://golang.org/cl/88660043, which removed support for Solaris 8/9. One use of MAKECONTEXT_STACK_TOP was accidentally left in the source code. Remove it now. Reviewed-on: https://go-review.googlesource.com/28911 From-SVN: r240045
2016-09-09runtime: align ucontext_t argument to 16 byte boundaryIan Lance Taylor2-21/+43
Some systems, such as ia64 and PPC, require that a ucontext_t pointer passed to getcontext and friends be aligned to a 16-byte boundary. Currently the ucontext_t fields in the g structure are defined in Go, and Go has no way to ensure a 16-byte alignment for a struct field. The fields are currently represented by an array of unsafe.Pointer. Enforce the alignment by making the array larger, and picking an offset into the array that is 16-byte aligned. Reviewed-on: https://go-review.googlesource.com/28910 From-SVN: r240044
2016-08-31runtime: make gsignal stack at least SIGSTKSZ bytesIan Lance Taylor1-1/+8
The default stack size for the gsignal goroutine, 32K, is not enough on ia64. Make sure that the stack size is at least SIGSTKSZ. Reviewed-on: https://go-review.googlesource.com/28224 From-SVN: r239894
2016-08-30runtime: use -fgo-c-header to build C header fileIan Lance Taylor32-999/+1756
Use the new -fgo-c-header option to build a header file for the Go runtime code in libgo/go/runtime, and use the new header file in the C runtime code in libgo/runtime. This will ensure that the Go code and C code share the same data structures as we convert the runtime from C to Go. The new file libgo/go/runtime/runtime2.go is copied from the Go 1.7 release, and then edited to remove unnecessary data structures and modify others for use with libgo. The new file libgo/go/runtime/mcache.go is an initial version of the same files in the Go 1.7 release, and will be replaced by the Go 1.7 file when we convert to the new memory allocator. The new file libgo/go/runtime/type.go describes the gccgo version of the reflection data structures, and replaces the Go 1.7 runtime file which describes the gc version of those structures. Using the new header file means changing a number of struct fields to use Go naming conventions (that is, no underscores) and to rename constants to have a leading underscore so that they are not exported from the Go package. These names were updated in the C code. The C code was also changed to drop the thread-local variable m, as was done some time ago in the gc sources. Now the m field is always accessed using g->m, where g is the single remaining thread-local variable. This in turn required some adjustments to set g->m correctly in all cases. Also pass the new -fgo-compiling-runtime option when compiling the runtime package, although that option doesn't do anything yet. Reviewed-on: https://go-review.googlesource.com/28051 From-SVN: r239872
2016-08-15cmd/go: ignore errors from go/build for standard packagesIan Lance Taylor1-0/+7
The go/build package does not know that gccgo's standard packages don't have source, and will report an error saying that it can not find them. Work around that in the cmd/go sources, since the go/build sources don't currently have a list of standard packages. This should get a real fix in the master sources, somehow. Fixes golang/go#16701. Reviewed-on: https://go-review.googlesource.com/27052 From-SVN: r239486
2016-08-13libgo: don't unset in shell scriptIan Lance Taylor2-5/+6
Reportedly ksh fails to unset a variable that was not previously set. Change match.sh and gotest to not unset LANG, but instead set LANG=C. Also don't combine exporting and setting variable in a single statement. Reviewed-on: https://go-review.googlesource.com/26999 From-SVN: r239443
2016-08-13crypto/aes, hash/crc32: ignore s390x specific files for nowIan Lance Taylor3-0/+6
These files are used to select s390x assembler support in the gc toolchain. We don't currently have that support, as it is written in the cmd/asm syntax rather than gas syntax. Mark the files to be ignored for now, falling back to the default implementations. Patch by Andreas Krebbel. Reviewed-on: https://go-review.googlesource.com/26994 From-SVN: r239442
2016-08-13syscall: remove exec_solaris_test.goIan Lance Taylor1-37/+0
It is testing functionality that gccgo does not need and does not support. Reviewed-on: https://go-review.googlesource.com/26992 From-SVN: r239438
2016-08-11os: fix build tags for dir_regfile.goIan Lance Taylor1-2/+2
We want to build dir_regfile.go if not GNU/linux, and not solaris/386, and not solaris/sparc. The latter two conditions were incorrect. To write ! solaris/386 we have to write !solaris !386. I forgot De Morgan's Law. Reviewed-on: https://go-review.googlesource.com/26870 From-SVN: r239393