On Wed, May 10, 2017 at 5:37 PM, Andrew Pinski <apin...@cavium.com> wrote: > On Wed, May 10, 2017 at 10:26 AM, Ian Lance Taylor <i...@golang.org> wrote: >> I have committed a large patch to update the Go frontend and libgo to >> the recent changes in the gofrontend repository. I had postponed >> merging changes during the GCC 7 release process. I am now merging >> all the changes that were pending during that period. Although this >> is a merged patch, the changes can be seen individually in the >> gofrontend repo (https://go.googlesource.com/gofrontend). They are >> also listed below. >> >> This is a fairly significant patch that brings in the concurrent >> garbage collector used in the Go 1.8 runtime. This significantly >> reduces pauses due to garbage collection while running a Go program. >> >> This patch also brings in experimental support for AIX for gccgo, >> contributed by Matthieu Sarter and others at Atos Infogérance. >> >> The actual patch is too large for this e-mail patch, but I have >> attached all the changes to the gcc/go directory. >> >> Ian > > > This causes a build failure on aarch64-linux-gnu: > ../../../gcc/libgo/runtime/proc.c: In function ‘runtime_malg’: > ../../../gcc/libgo/runtime/proc.c:729:43: warning: implicit > declaration of function ‘mstats’; did you mean ‘mstart1’? > [-Wimplicit-function-declaration] > void *p = runtime_sysAlloc(stacksize, &mstats()->other_sys); > ^~~~~~ > mstart1 > ../../../gcc/libgo/runtime/proc.c:729:51: error: invalid type argument > of ‘->’ (have ‘int’) > void *p = runtime_sysAlloc(stacksize, &mstats()->other_sys); > ^~ >
Just FYI the reason why it fails on aarch64-linux-gnu and not x86_64-linux-gnu is because this code is only enabled for targets which don't not support split stacks. Thanks, andrew Pinski > > Thanks, > Andrew > > > >> >> >> 2017-05-10 Than McIntosh <th...@google.com> >> >> * go-backend.c: Include "go-c.h". >> * go-gcc.cc (Gcc_backend::write_export_data): New method. >> >> 2017-05-10 Ian Lance Taylor <i...@google.com> >> >> * go-gcc.cc (Gcc_backend::Gcc_backend): Declare >> __builtin_prefetch. >> * Make-lang.in (GO_OBJS): Add go/wb.o. >> >> commit 884c9f2cafb3fc1decaca70f1817ae269e4c6889 >> Author: Than McIntosh <th...@google.com> >> Date: Mon Jan 23 15:07:07 2017 -0500 >> >> compiler: insert additional conversion for type desc ptr expr >> >> Change the method Type::type_descriptor_pointer to apply an additional >> type conversion to its result Bexpression, to avoid type clashes in >> the back end. The backend expression for a given type descriptor var >> is given a type of "_type", however the virtual calls that create the >> variable use types derived from _type, hence the need to force a >> conversion. >> >> Reviewed-on: https://go-review.googlesource.com/35506 >> >> >> commit 5f0647c71e3b29eddcd0eecc44e7ba44ae7fc8dd >> Author: Than McIntosh <th...@google.com> >> Date: Mon Jan 23 15:22:26 2017 -0500 >> >> compiler: insure tree integrity in Call_expression::set_result >> >> Depending on the back end, it can be problematic to reuse Bexpressions >> (passing the same Bexpression to more than one Backend call to create >> additional Bexpressions or Bstatements). The Call_expression::set_result >> method was reusing its Bexpression input in more than one tree >> context; the fix is to pass in an Expression instead and generate >> multiple Bexpression references to it within the method. >> >> Reviewed-on: https://go-review.googlesource.com/35505 >> >> >> commit 7a8e49870885af898c3c790275e513d1764a2828 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Tue Jan 24 21:19:06 2017 -0800 >> >> runtime: copy more of the scheduler from the Go 1.8 runtime >> >> Copies mstart, newm, m0, g0, and friends. >> >> Reviewed-on: https://go-review.googlesource.com/35645 >> >> >> commit 3546e2f002d0277d805ec59c5403bc1d4eda4ed9 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Jan 26 19:47:37 2017 -0800 >> >> runtime: remove a few C functions that are no longer used >> >> Reviewed-on: https://go-review.googlesource.com/35849 >> >> >> commit a71b835254f6d3164a0e6beaf54f2b175d1a6a92 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Jan 26 16:51:16 2017 -0800 >> >> runtime: copy over more of the Go 1.8 scheduler >> >> In particular __go_go (aka newproc) and goexit[01]. >> >> Reviewed-on: https://go-review.googlesource.com/35847 >> >> >> commit c3ffff725adbe54d8283c373b6aa7dc95d6fc27f >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Jan 27 16:58:20 2017 -0800 >> >> runtime: copy syscall handling from Go 1.8 runtime >> >> Entering a syscall still has to start in C, to save the registers. >> Fix entersyscallblock to save them more reliably. >> >> This copies over the tracing code for syscalls, which we previously >> weren't doing, and lets us turn on runtime/trace/check. >> >> Reviewed-on: https://go-review.googlesource.com/35912 >> >> >> commit d5b921de4a28b04000fc4c8dac7f529a4a624dfc >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Jan 27 18:34:11 2017 -0800 >> >> runtime: copy SIGPROF handling from Go 1.8 runtime >> >> Also copy over Breakpoint. >> >> Fix Func.Name and Func.Entry to not crash on a nil Func. >> >> Reviewed-on: https://go-review.googlesource.com/35913 >> >> >> commit cc60235e55aef14b15c3d2114030245beb3adfef >> Author: Than McIntosh <th...@google.com> >> Date: Mon Feb 6 11:12:12 2017 -0500 >> >> compiler: convert go_write_export_data to Backend method. >> >> Convert the helper function 'go_write_export_data' into a Backend >> class method, to allow for an implementation of this function that >> needs to access backend state. >> >> Reviewed-on: https://go-review.googlesource.com/36357 >> >> >> commit e387439bfd24d5e142874b8e68e7039f74c744d7 >> Author: Than McIntosh <th...@google.com> >> Date: Wed Feb 8 11:13:46 2017 -0500 >> >> compiler: insert backend conversion in temporary statement init >> >> Insert an additional type conversion in >> Temporary_statement::do_get_backend >> when assigning a Bexpression initializer to the temporary variable, to >> avoid potential clashes in the back end. This can come up when assigning >> something of concrete pointer-to-function type to a variable of generic >> pointer-to-function type. >> >> Reviewed-on: https://go-review.googlesource.com/36591 >> >> >> commit c5acf0ce09e61ff623847a35a99da465b8571609 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 1 17:57:53 2017 +0100 >> >> libgo: build tags for aix >> >> Build tags for the libgo source files required to build >> libgo on AIX. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37633 >> >> >> commit 67ed19616898ea18a101ec9325b82d028cd395d9 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 2 15:41:31 2017 +0100 >> >> libgo: handle AIX tag in match.sh and gotest >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37638 >> >> >> commit 83ea2d694c10b2dd83fc8620c43da13d20db754e >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 1 17:48:16 2017 +0100 >> >> libgo: add AIX support in configure and Makefile >> >> - support for GOOS=aix >> - CFLAGS/GOCFLAGS/LDFLAGS for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37632 >> >> >> commit 35d577fe22ffa16a3ccaadf5dae9f6f425c8ec8c >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Mon Mar 6 15:00:15 2017 +0100 >> >> runtime: adapt memory management to AIX mmap >> >> On AIX: >> * mmap does not allow to map an already mapped range, >> * mmap range start at 0x30000000 for 32 bits processes, >> * mmap range start at 0x70000000_00000000 for 64 bits processes >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37845 >> >> >> commit 4e49e56a5fd4072b4ca7fcefe4158d6885d9ee62 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Mon Mar 6 13:42:26 2017 +0100 >> >> runtime: add getproccount implementation for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37844 >> >> >> commit ff626470294237ac664127894826614edc46a3d0 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Mon Mar 6 17:31:21 2017 +0100 >> >> runtime: handle ERESTART errno with AIX's wait4 >> >> On AIX, wait4 may return with errno set to ERESTART, which causes >> unexepected >> behavior (for instance, go build may exit with the message "wait: restart >> system call" after running a command, even if it was successfull). >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37846 >> >> >> commit 37daabbfc83d533b826ef9ab10e2dee7406e7198 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Mon Mar 6 11:02:58 2017 +0100 >> >> runtime: support for AIX's procfs tree >> >> On AIX, the process executable file is available under >> /proc/<pid>/object/a.out >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37842 >> >> >> commit a0275c039d56acf4bf48151978c1a4ec5758cc2c >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Mar 8 07:00:05 2017 -0800 >> >> libgo/Makefile.am: don't use nonportable \n or \t in sed expression >> >> The resulting zstdpktlist.go is less pretty, but it works. >> >> Reviewed-on: https://go-review.googlesource.com/37940 >> >> >> commit 29b190f76105aafa2b50b48249afdafecc97a4be >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 9 16:02:34 2017 +0100 >> >> runtime: netpoll and semaphores for AIX >> >> semaphore implementation based on Solaris implementation in >> libgo/go/runtime/os_solaris.go >> >> netpoll is just a stub to avoid build failure on AIX. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37966 >> >> >> commit 55ca6d3f3cddf0ff9ccb074b2694da9fc54de7ec >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 9 15:38:30 2017 +0100 >> >> libmain: ensure initfn is called when loading a go library >> >> AIX does not support .init_array. >> The alterative is to export the __go_init function and tell the linker >> it is an init function with the -Wl,-binitfini:__go_init option. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37965 >> >> >> commit 349a30d17d880ac8bc1a35e1a2ffee6d6e870ae9 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Mar 10 11:15:08 2017 +0100 >> >> libgo: use an import list for missing symbols >> >> libgo depends on symbols provided by Go programs at runtime. On AIX, >> this requires either to build libgo with -Wl,-berok linker option and >> the programs with -Wl,-brtl, or to provide a list of imported symbols >> when building libgo. The second options seems preferable, to avoid >> requiring an additional option for every Go program. >> >> There are also some symbols that are specific to GNU ld and do not >> exist when linking with AIX ld (__data_start, __edata, __etext and >> __bss_start). >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37969 >> >> >> commit 91db0ea1ff068ca1d97b9c99612100ea5b96ddb2 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 8 15:34:45 2017 +0100 >> >> crypto/x509: add certificate files locations for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/37952 >> >> >> commit 92e521c854e91709b949548c47e267377850f26a >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Mar 10 14:10:11 2017 -0800 >> >> compiler: fix check for pointer in Temporary_reference_expression >> >> The check for an unrepresentable pointer in >> Temporary_reference_expression::do_get_backend was incorrectly >> translated from C to Go in https://golang.org/cl/14346043. Fix the >> check to use points_to rather than has_pointer and deref. This should >> not make any difference in practice as either way the condition will >> only be true for a pointer to void, but points_to is correct and more >> efficient. >> >> Reviewed-on: https://go-review.googlesource.com/38009 >> >> >> commit 9a0b676e59e7171a630c48fdc3d4de6712bad0ca >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 16 16:51:53 2017 +0100 >> >> libgo: add missing _arpcom struct to *sysinfo.go >> >> This struct is filtered due to having a field of type _in6_addr, >> but other types exported to *sysinfo.go are depending on it. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38251 >> >> >> commit 61262a757bdd3d9a595ab6a90f68c0c4ebed7bc1 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 16 18:27:46 2017 +0100 >> >> syscall: raw_ptrace stub for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38253 >> >> >> commit 8029632b50880fd9b5e39299c738b38e3386595f >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 15 16:58:37 2017 +0100 >> >> libgo: adapt runtime.inc to AIX >> >> * Two AIX types are wrongfully exported to runtime.inc as their names >> make them look like a Go type. >> * The sigset go type conflicts with a system sigset type. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38192 >> >> >> commit 25f3a90d14bc268479369ecc0eada72791612f86 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 15 16:58:37 2017 +0100 >> >> libgo: update Makefile.in, accidentally omitted from last change >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38310 >> >> >> commit d52b4895616b66f93b460366527e74336829aaa5 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 16 18:39:26 2017 +0100 >> >> syscall: TIOCSCTTY does not exist on AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38254 >> >> >> commit ff1ec3847a4472008e5d53a98b6694b1e54ca322 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 16 18:07:34 2017 +0100 >> >> syscall: syscall does not exist on AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38252 >> >> >> commit c1ee60dabf0b243a0b0286215481a5d326c34596 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Mar 17 17:18:18 2017 +0100 >> >> net: EAI_OVERFLOW does not exist on AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38266 >> >> >> commit ad4ad29aed9f70b14b39b488bfeb9ee745382ec4 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Mar 17 17:23:56 2017 +0100 >> >> net: sockopt/sockoptip stubs for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38267 >> >> >> commit 5d7db2d7542fe7082f426d42f8c2ce14aad6df55 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Mar 17 16:35:05 2017 +0100 >> >> os/user: add listgroups stub for AIX >> >> This is required to build os/user. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38263 >> >> >> commit 4e57a7973e9fa4cb5ab977c6d792e62a8f7c5795 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 22 11:11:30 2017 +0100 >> >> os: fix readdirnames for AIX >> >> Largefile implementation should be used on AIX. >> >> readdir64_r function returns 9 and sets result to NULL when >> reaching end of directory, so this return code should not >> always be considered as an error. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38359 >> >> >> commit b34036967d1ec57b25e3debe077439b4210a1d4a >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Mar 17 17:39:31 2017 +0100 >> >> libgo: adapt sigtab.go to AIX >> >> On AIX, _NSIG is not directly defined to its integer value in >> gen-sysinfo.go. >> The real value is _SIGMAX32+1 or _SIGMAX64+1, depending if we are >> building a 32bit ligbo or a 64bit libgo, so we need to read one of >> those constants to set nsig value in mksigtab.sh >> >> This change also ensures that all signal numbers from 0 to nsig-1 >> are referenced in sigtable. >> >> Reviewed-on: https://go-review.googlesource.com/38268 >> >> >> commit 20991c32671a183ec859b4f285df37fdd4634247 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 23 17:28:09 2017 +0100 >> >> syscall: missing import in socket_bsd.go >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38369 >> >> >> commit c34754bd9adf5496c4c26257eaa50793553c11e8 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 22 17:57:01 2017 +0100 >> >> sycall: WCOREDUMP macro is not defined on AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38363 >> >> >> commit 4f38813482227b12ea0ac6ac1b981ff9ef9853ef >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 23 17:44:43 2017 +0100 >> >> libgo: additional build tags for AIX >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38510 >> >> >> commit d117ede6ff5a7083e9c40eba28a0f94f3535d773 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 23 17:48:46 2017 +0100 >> >> go/build: add AIX to "go build" command known OS >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38511 >> >> >> commit 7b0ddaa6a6a71f9eb1c374122d29775b13c2cac5 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Mar 23 09:57:01 2017 -0700 >> >> compiler: don't crash if imported package imports this one >> >> When building a test it's OK if test code imports a package that >> imports this one. The go tool is supposed to catch cases where this >> creates an impossible initialization order. The compiler already has >> code to permit this in Gogo::add_import_init_fn. This CL avoids a >> compiler crash on a similar case when writing out the export data. >> >> I have no test case for this. Basically it pushes a compiler crash >> into an error reported elsewhere. >> >> Problem was reported by Tony Reix. >> >> Reviewed-on: https://go-review.googlesource.com/38462 >> >> >> commit 925636975d075e3e3353823b09db3f933f23cb03 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Mar 29 14:14:18 2017 -0700 >> >> runtime: copy finalizer support from Go 1.8 runtime >> >> Reviewed-on: https://go-review.googlesource.com/38794 >> >> >> commit 1ccb22b96cb3b1011db0e427877d9ddecb577fa9 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Mar 30 15:21:06 2017 +0200 >> >> runtime: initcontext and setcontext stubs for AIX >> >> Further investigations are required to understand the clobbering >> issue and implement a proper fix. Until then, those stubs are >> required to allow the build to complete. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38930 >> >> >> commit 27db481f369b54256063c72b911d22390c59199c >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 29 18:07:25 2017 +0200 >> >> os: fix Readlink failure on AIX >> >> AIX readlink routine returns an error if the link is longer >> than the buffer, instead of truncating the link. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38700 >> >> >> commit c93babbf48eddd0bc34d4179ffb302dc60087299 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 29 17:26:35 2017 +0200 >> >> compiler: implement support for reading AIX big archives >> >> This is required to read go export from a Go library. >> >> Code courtesy of Damien Bergamini from Atos Infogérance. >> >> Issue golang/go#19200 >> Reviewed-on: https://go-review.googlesource.com/38698 >> >> >> commit 930dd53482bdee3a9074850d168d0b9d7819c135 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 6 18:50:11 2017 -0700 >> >> compiler: fix whether conversions are static initializers >> >> The compiler was incorrectly treating type conversions from string to >> int or vice-versa as static initializers. That doesn't work, as those >> conversions are implemented via a function call. >> >> This case may never actually arise but it seems like the right thing to >> do. >> >> Reviewed-on: https://go-review.googlesource.com/39872 >> >> >> commit f02691e4195728dbf06f4dde0853c6bccc922183 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 6 17:24:08 2017 -0700 >> >> compiler, runtime: don't let slices point past end of memory block >> >> When Go code uses a slice expression like [:len(str)] or [:cap(slice)], >> it's natural for the resulting pointer to point just past the end of >> the memory block. If the next memory block is not live, we now have a >> live pointer to a dead block, which will unnecessarily keep the block >> alive. That wastes space, and with the new Go 1.8 GC (not yet >> committed) will trigger an error when using GODEBUG=gccheckmark=1. >> >> This changes the implementation of slice expressions to not move the >> pointer if the resulting string length or slice capacity is 0. When >> the length/capacity is zero, the pointer is never used anyhow. >> >> Reviewed-on: https://go-review.googlesource.com/39870 >> >> >> commit 17527c35b027e1afcc318faf5563909e1e9d44a6 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 6 15:30:11 2017 -0700 >> >> compiler: emit write barriers >> >> The Go 1.8 concurrent GC requires optional write barriers for all >> assignments that may change pointer values in the heap or in a global >> variable. For details see https://blog.golang.org/go15gc. >> >> This changes the gofrontend code to emit write barriers as needed. >> This is in preparation for future changes. At the moment the write >> barriers will do nothing. They test runtime.writeBarrier.enabled, >> which will never be non-zero. They call simple functions which just >> do a move without doing any of the other operations required by the >> write barrier. >> >> Reviewed-on: https://go-review.googlesource.com/39852 >> >> >> commit c0b00f072bf34b2c288e1271ec8118b88c4f6f6f >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Tue Apr 11 17:47:29 2017 +0200 >> >> libgo: allow building gox files from PIC objects >> >> libtool builds non-PIC objects in the same directory as .lo files >> and PIC objects in a .libs subdirectory. >> BUILDGOX rule uses the non-PIC objects to build the gox files, >> but on AIX only the PIC objects are built. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/40355 >> >> >> commit ea0f3da174c5503a209043f14ddda34871cfec52 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 6 19:06:14 2017 -0700 >> >> compiler: add code to generate a ptrmask for a type >> >> The Go 1.8 garbage collector uses a ptrmask for all types below a >> certain size. A ptrmask is simply a bit vector with a single bit for >> each pointer-sized word in the value. The bit is 1 if the type has a >> pointer in that position, 0 if it does not. >> >> This change adds code to the compiler to generate a ptrmask. The code >> is not used by anything yet, it is just compiled. It will be used >> when we switch over to the Go 1.8 garbage collector. >> >> The new Array_type::int_length method, and the new memory_size >> methods, will also be used by other patches coming later. >> >> Reviewed-on: https://go-review.googlesource.com/39873 >> >> >> commit 3029e1df3be3614d196a03c15e50e68ff850aa4c >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 7 10:31:39 2017 -0700 >> >> compiler: add code to generate a gcprog for a type >> >> The Go 1.8 garbage collector uses a gcprog for all types above a >> certain size. A gcprog describes where the pointers are in the type, >> using a simple bytecode machine that supports repeating bits. The >> effect is to permit using much less space to describe arrays. The >> format is described in runtime/mbitmap.go in the docs for runGCProg. >> This is not yet added to the gofrontend, but can be seen in the gc >> sources. >> >> This change adds code to the compiler to generate a gcprog. The code >> is not used by anything yet, it is just compiled. It will be used >> when we switch over to the Go 1.8 garbage collector. >> >> Reviewed-on: https://go-review.googlesource.com/39923 >> >> >> commit 8b01ef1e9176d20f4c9e667972fe031069a4d057 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 13 07:00:35 2017 -0700 >> >> compiler: add ptrdata computations and expressions >> >> For the upcoming Go 1.8 GC we need to compute the "ptrdata" of a type: >> the number of bytes in the type that can contain pointers. For types >> that do not contain pointers this number is zero. For many types it >> is a number larger than zero but smaller than the total size of the >> type. The Go 1.8 GC uses this number to make loops looking for >> pointers run faster by not scanning the suffix of a value that can not >> contain a pointer. >> >> Unfortunately there are two subtly different definitions of ptrdata, >> and we need both. The first is the simple one: the prefix that can >> contain pointers. The second is the number of bytes described by the >> gcprog for the type. Recall that we describe the exact position of >> pointers in a type using either a ptrmask or a gcprog. The ptrmask is >> simpler, the gcprog uses less space. We use the gcprog for large >> types, currently defined as types that are more than 2048 bytes. When >> the Go 1.8 runtime expands a gcprog, it verifies that the gcprog >> describes exactly the same number of bytes as the ptrdata field in the >> type descriptor. If the last pointer-containing portion of a type is >> an array, and if the elements of the array have a ptrdata that is less >> than the size of the element type, then the simple definition of the >> ptrdata will not include the final non-pointer-containing bytes of the >> last element of the array. However, the gcprog will define the array >> using a repeat count, and will therefore include the full size of the >> last element of the array. So for a type that needs a gcprog, the >> ptrdata field in the type descriptor must be the size of the data >> described by the gcprog, and that is not necessarily the same as the >> simple ptrdata. >> >> It might seem that we can always use the gcprog version of the ptrdata >> calculation, since that is what will appear in a type descriptor, but >> it turns out that for global variables we always use a ptrmask, not a >> gcprog, even if the global variable is large. This is because gcprogs >> are handled by expanding them into a ptrmask at runtime, and for a >> global variable there is no natural place to put the ptrmask. Simpler >> to always use the ptrmask. That means that we need to describe the >> size of the ptrmask, and that means that we need an expression for the >> simple form of the ptrdata. >> >> This CL implements the ptrdata calculation. This code is not actually >> used yet. It will be used later when the Go 1.8 GC is committed. >> >> Reviewed-on: https://go-review.googlesource.com/40573 >> >> >> commit 7a37331303b572412179a08141f1dd35339d40c8 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 06:55:48 2017 -0700 >> >> compiler: zero length arrays never contain pointers >> >> Reviewed-on: https://go-review.googlesource.com/40696 >> >> >> commit c242f0508a64d3d74a28d498cbaeda785ff76258 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 07:26:54 2017 -0700 >> >> bytes: disable allocations test on gccgo >> >> It turns out that testing.AllocsPerRun has not been producing correct >> results with the current gccgo memory allocator. When we update to >> the Go 1.8 memory allocator, testing.AllocsPerRun will work again, and >> this test will fail due to lack of escape analysis. >> >> Reviewed-on: https://go-review.googlesource.com/40700 >> >> >> commit 0dc369f1d63376a36bfb0999a1b0377fd444bfab >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Tue Apr 11 16:22:38 2017 +0200 >> >> os: alternative way to find executable path, using Args[0] >> >> AIX does not provide a proper way to find the original >> executable path from procfs, which contains just an >> hardlink. >> Executable path can be found using Args[0], Getcwd and >> $PATH. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/40353 >> >> >> commit f9bad1342569b338e3b2ea9f12ffc6d3d3fa3028 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 08:01:19 2017 -0700 >> >> compiler: don't write struct with multiple sink fields to C header file >> >> When writing a struct to the C header file used by the C runtime code, >> a single sink field is fine: it will be called "_", which is valid C. >> There are structs with single sink fields that we want to write out, >> such as finblock. As it happens, though, the Go 1.8 runtime has a >> struct with two sink fields, gcControllerState, which will produce a C >> definition with two fields named "_", which will fail. Since we don't >> need to know that struct in C, rather than fix the general case, just >> punt if the struct has multiple sink fields. >> >> After the conversion to the Go 1.8 GC, we may be able to get rid of >> the C header file anyhow. I'm not sure yet. >> >> Reviewed-on: https://go-review.googlesource.com/40701 >> >> >> commit cfc28901a572aeb15b2f10a38f79eec04c64dfb2 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 10:07:23 2017 -0700 >> >> runtime: disable allocations test on gccgo >> >> It turns out that testing.AllocsPerRun has not been producing correct >> results with the current gccgo memory allocator. When we update to >> the Go 1.8 memory allocator, testing.AllocsPerRun will work again, and >> these tests will fail due to lack of escape analysis. >> >> Reviewed-on: https://go-review.googlesource.com/40703 >> >> >> commit 36fedd76edaa48b9ec09709a70d9e4abaddf0caf >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 10:47:06 2017 -0700 >> >> runtime: remove unused size argument from hash/equal fns >> >> The size argument was removed from hash and equal functions in CL >> 34983. Somehow I missed removing them from three of the predefined >> functions. >> >> Reviewed-on: https://go-review.googlesource.com/40770 >> >> >> commit 90f6accb48d2e78cad8955b9292933f6ce3fe4c8 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 13:23:05 2017 -0700 >> >> 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 >> >> >> commit befa71603fc66a214e01ac219f2bba36e19f136f >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 13:18:34 2017 -0700 >> >> runtime: build fastlog >> >> Take out the build tags which were preventing fastlog2 from being >> built. It's used by the upcoming Go 1.8 GC. >> >> Reviewed-on: https://go-review.googlesource.com/40773 >> >> >> commit b7e19e9be4ab4c3cd8f4c9506d79a8cd56bace40 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Fri Apr 14 10:04:23 2017 -0700 >> >> runtime: add tests from Go 1.8 >> >> Some runtime package tests never made it into the gofrontend repo for >> some reason. Add them now. >> Reviewed-on: https://go-review.googlesource.com/40869 >> >> >> commit 1feef185aebd71bc2a09b9a04287461806096610 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Mon Apr 17 16:26:11 2017 -0700 >> >> runtime: change mcall to take a Go function value >> >> For future work in bringing in the Go 1.8 GC, change the mcall >> function to take a Go function value, which means that mcall can take >> a closure rather than just a straight C function pointer. >> >> As part of this change move kickoff from C to Go, which we want to do >> anyhow so that we run the write barriers that it generates. >> >> Reviewed-on: https://go-review.googlesource.com/40935 >> >> >> commit c3db34f4efc2d610f74a01dd2ad7775f48889b29 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Tue Apr 11 16:11:26 2017 +0200 >> >> runtime: netpoll implementation for AIX >> >> Code courtesy of Damien Bergamini from Atos Infogérance. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/40352 >> >> >> commit f5634dff40e53ad9ce61afd67fd07334e3af9d1f >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Tue Apr 18 22:06:07 2017 -0700 >> >> runtime: move mstart from Go to C >> >> The assignments done in mstart must be done without write barriers, as >> mstart is running without an m or p. In the gc toolchain the >> equivalent code to intialize g and g->m is written in assembler; >> on GNU/Linux, it's in the clone function. >> >> Reviewed-on: https://go-review.googlesource.com/40989 >> >> >> commit 671d7c74592f4b6fe3665af279482ba0ea47ca2d >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Tue Apr 18 17:47:28 2017 -0700 >> >> compiler: varargs slices do not escape in runtime >> >> Also, don't try to allocate an empty slice on the stack, as it will >> confuse the GCC backend. >> >> Also add a few trivial style, code formatting, and debug output fixes. >> >> Updates golang/go#17431 >> >> Reviewed-on: https://go-review.googlesource.com/40983 >> >> >> commit 94699d25f31353bf03419eda56b15993a39f3275 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Tue Apr 18 17:30:09 2017 -0700 >> >> compiler: add Ptrmask_symbol_expression >> >> Add an expression to evaluate to the ptrmask for a type. This will be >> used for global variables, which always use a ptrmask no matter how >> large they are. >> >> Reviewed-on: https://go-review.googlesource.com/40981 >> >> >> commit bfff1654eac5b9288fa6c431e66cba8c9da6a660 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Mon Apr 17 10:51:16 2017 -0700 >> >> runtime: change g's in systemstack >> >> The systemstack function in the gc toolchain changes to a different g. >> This is often used to get more stack space; the gofrontend uses a >> different stack growth mechanism that does not require changing g's, >> so we've been running with a version of systemstack that keeps the >> same g. However, the garbage collector has various tests to verify >> that it is running on g0 rather than on a normal g. For simplicity, >> change the gofrontend version of systemstack to change to a different >> g just as the gc toolchain does. >> >> This permits us to uncomment some sanity checks in notetsleep. >> Doing that requires us to fix up a couple of places where C code calls >> {start,stop}TheWorldWithSema while not on g0. >> >> Note that this does slow down some code in the runtime package >> unnecessarily. >> It may be useful to find some places where the runtime calls >> systemstack only to get more stack space and change it to use some >> other function. That other function would act like systemstack in the >> gc toolchain but simply call the argument in the gofrontend. >> >> Reviewed-on: https://go-review.googlesource.com/40973 >> >> >> commit b2ccc7601ce71a7c5732154cf9b2eeea64681469 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 10:36:12 2017 -0700 >> >> compiler, runtime: include ptrmask in GC roots >> >> Change the list of registered GC roots to include a ptrmask, >> and change the data structures to be easily used from Go code. >> The new ptrmask will be used by the Go 1.8 GC to only scan pointers. >> Tweak the current GC to use the new structures, but ignore the new >> ptrmask information for now. >> >> The new GC root data includes the size of the variable. The size is >> not currently used, but will be used later by the cgo checking code. >> >> Reviewed-on: https://go-review.googlesource.com/41075 >> >> >> commit 9e065149970bc180e4ca83bb99c74d9c4f43b47b >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 12:23:16 2017 -0700 >> >> compiler, runtime: don't pass size to __go_new >> >> There is no reason to pass the size to __go_new, as the type >> descriptor includes the size anyhow. This makes the function >> correspond to the Go 1.8 function runtime.newobject, which is what we >> will use when we update to the Go 1.8 memory allocator. >> >> Reviewed-on: https://go-review.googlesource.com/41080 >> >> >> commit c321de7b738c4a3387c1842919c9305acfa04c57 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 13:13:56 2017 -0700 >> >> compiler, runtime, reflect: make type descriptors more like Go 1.8 >> >> Change the type descriptor structure to be more like the one in the Go >> 1.8 runtime. Specifically we add the ptrdata field, rename the gc >> field to gcdata and change the type to *byte, and rearrange a few of >> the fields. The structure is still not identical to the Go 1.8 >> structure--we don't use any of the tricks to reduce overall executable >> size--but it is more similar. >> >> For now we don't use the new ptrdata field, and the gcdata field is >> still the old format rather than the new Go 1.8 ptrmask/gcprog format. >> >> Reviewed-on: https://go-review.googlesource.com/41081 >> >> >> commit 7b70c52cddeebea9ebeac003f8c6aad59497e5f0 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 14:54:29 2017 -0700 >> >> reflect: make sure to clear unusable hash/equal function >> >> Otherwise we wind up copying the one from the prototype, which is wrong. >> >> Also rewrite the hash/equal functions to look like the ones in Go 1.8, >> mainly a matter of changing names and using arrayAt. >> >> Reviewed-on: https://go-review.googlesource.com/41133 >> >> >> commit 84d26f467f7de8bdbb0d230458135fe1b6b2a99d >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 14:59:13 2017 -0700 >> >> runtime: remove duplicate declarations of SetFinalizer/KeepAlive >> >> These should have been removed in CL 38794. It's a bug that the >> compiler even permits these duplicate declarations. >> >> Reviewed-on: https://go-review.googlesource.com/41134 >> >> >> commit f85ff7e64c24031f6d0bd7c9c426b6176cb95160 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 15:56:32 2017 -0700 >> >> runtime: don't crash if panicstring called with no m >> >> It's possible for runtime_panicstring to be called with no m if a >> signal handler, or scheduler innards, do something wrong. If that >> happens carry on with the panic rather than crashing. >> >> Reviewed-on: https://go-review.googlesource.com/41137 >> >> >> commit 5b362b04f642afb8b20715930416fc3b7d91bb12 >> Author: Than McIntosh <th...@google.com> >> Date: Fri Mar 31 14:35:48 2017 -0400 >> >> compiler: fix for expr sharing introduced by Order_eval::statement. >> >> When processing an expression statement with a top-level call >> that returns multiple results, Order_eval::statement can wind up >> creating a tree that has multiple references to the same call, >> which results in a confusing AST dump. Change the implementation >> to avoid introducing this unwanted sharing. >> >> Reviewed-on: https://go-review.googlesource.com/39210 >> >> >> commit b05b4260a68695bf9c9cc29e14ae86ca2699458a >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 16:00:28 2017 -0700 >> >> runtime: restore correct m in gtraceback >> >> If gtraceback is used to get a stack trace of a g running in the same m, >> as can happen if we collect a stack trace from a g0, then restore the >> old m value, don't clear it. >> >> Reviewed-on: https://go-review.googlesource.com/41138 >> >> >> commit ca8bbf4dfac19b3f4f7ce21a688b96a418c75031 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 16:03:24 2017 -0700 >> >> runtime: set startpc field when starting a new goroutine >> >> This puts the right value in a trace--previously it was always zero. >> >> Reviewed-on: https://go-review.googlesource.com/41139 >> >> >> commit ca8bbf4dfac19b3f4f7ce21a688b96a418c75031 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 16:03:24 2017 -0700 >> >> runtime: set startpc field when starting a new goroutine >> >> This puts the right value in a trace--previously it was always zero. >> >> Reviewed-on: https://go-review.googlesource.com/41139 >> >> >> commit 887690dce42d7bf8f711f8ea082e4928fb70f2a5 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 17:06:11 2017 -0700 >> >> runtime: add prefetch functions >> >> The Go 1.8 GC uses prefetch functions. Add versions for gccgo that >> call __builtin_prefetch. Uncomment the test for them in testAtomic64. >> Don't force the check function to return early, as now taking the >> address of a local variable in the runtime package does not force it >> onto the heap. >> >> Reviewed-on: https://go-review.googlesource.com/41144 >> >> >> commit 4269db69f9184e5a45c54aaee7352425a1f88bff >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 17:55:21 2017 -0700 >> >> runtime: split up ticks to get correct alignment >> >> On 32-bit x86 a uint64 variable by itself is aligned to an 8-byte >> boundary. >> A uint64 field in a struct is aligned to a 4-byte boundary. >> The runtime.ticks variable has a uint64 field that must be aligned >> to an 8-byte boundary. Rather than rely on luck, split up the struct >> into separate vars so that the required alignment happens reliably. >> >> It would be much nicer if issue golang/go#19057 were fixed somehow, >> but that is for another day. >> >> Reviewed-on: https://go-review.googlesource.com/41143 >> >> >> commit 66926cabdbdbf3431b4f172f7756e195c1c6c513 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Apr 20 17:15:38 2017 +0200 >> >> libgo: fix bad value for O_CLOEXEC on AIX 7.1 >> >> On AIX 7.1, O_CLOEXEC is defined as 0x0000001000000000, which >> creates an integer constant overflow error when building libgo. >> >> This affects only 7.1, O_CLOEXEC is not defined on 6.1 (and >> defaults to O in sysinfo.go) and is defined as 0x00800000 on >> AIX 7.2. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/41214 >> >> >> commit af288ff10aeafc47651f5def327ed56425d5be19 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 20 17:15:02 2017 -0700 >> >> runtime: preserve stack context in tracebackothers >> >> The tracebackothers function works by saving the current stack context >> in the goroutine's context field and then calling gogo to switch to a >> new goroutine. The new goroutine will collect its own stack trace and >> then call gogo to switch back to the original goroutine. This works >> fine, but if the original goroutine was called by mcall then the >> contents of its context field are needed to return from the mcall. >> Fix this by saving the stack context across the calls to the other >> goroutines. >> >> Reviewed-on: https://go-review.googlesource.com/41293 >> >> >> commit 43101e5956e793f1b4de05c15d7738c785e927df >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Apr 21 10:58:52 2017 +0200 >> >> os/user: use _posix_* libc functions >> >> libc getpwnam_r function has a different signature, we must use >> _posix_getpwnam_r instead (by default, the pwd.h system include >> file defines getpwnam_r as a static function calling >> _posix_getpwnam_r, so a C program calling getpwnam_r will indeed >> reference the _posix_getpwnam_r symbol). >> >> Idem for getpwuid_r, getgrnam_r and getgrgid_r. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/41334 >> >> >> commit 71e1fec4d2a536591ea6657a06916a17b5127071 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Apr 19 21:24:48 2017 -0700 >> >> runtime: don't use pointers in g_ucontext_t or stackcontext >> >> The g_ucontext_t type holds registers saved for a goroutine. We have >> to scan it for pointers, but since registers don't necessarily hold >> pointers we have to scan it conservatively. That means that it should >> not have a pointer type, since the GC will always scan pointers. >> Instead it needs special treatment to be scanned conservatively. >> The current GC doesn't care when a pointer type holds a non-pointer, >> but the Go 1.8 GC does. >> >> For the current GC this means we have to explicitly scan the >> g_ucontext_t values in a G. >> >> While we're at it change stackcontext to be uintptr too. The entries >> in stackcontext never hold pointers that the Go GC cares about. >> >> Reviewed-on: https://go-review.googlesource.com/41270 >> >> >> commit eab2960aee91d3e3a6baa5b1bce01262d24c714f >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Thu Apr 20 17:08:19 2017 -0700 >> >> runtime/internal/sys: define Goexperiment >> >> The gc toolchain defines Goexperiment based on the environment >> variable GOEXPERIMENT when the toolchain is built. We just always set >> Goexperiment to the empty string. >> >> Reviewed-on: https://go-review.googlesource.com/41292 >> >> >> commit be4a751943265c0637da859d15a4faf162f5c478 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Thu Apr 20 14:04:35 2017 +0200 >> >> net: sockopt implementation for AIX >> >> This is a copy of the Linux implementation, it allows to >> run some simple client/server applications on AIX, while >> the current sockopt stubs don't. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/41213 >> >> >> commit 46a669c4ca5b80fd6f6a0a42095804d9f704611d >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Mar 29 17:55:06 2017 +0200 >> >> math: fix sign for atan/expm1/log1p(-0) >> >> AIX libc returns +0 for atan(-0), expm1(-0) and log1p(-0), >> while matching Go functions must return -0. >> >> Code courtesy of Tony Reix. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/38699 >> >> >> commit 53b0e809130038a46f0a3d2870e3905f44ab888d >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Apr 26 17:29:22 2017 +0200 >> >> runtime: fix context clobbering on AIX >> >> On AIX 64-bits, r13 is a pointer to thread data. >> setcontext() overwrites r13 with the value saved by getcontext(). >> So, when a goroutine is scheduled on a new thread, r13 will point >> to the old thread data after calling setcontext(). >> >> Code courtesy of Damien Bergamini. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/41854 >> >> >> commit f8d5ebd71c71e6e777200530d8204b92619157f8 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Wed Apr 26 18:01:19 2017 +0200 >> >> runtime: fix wrong time calculation in semasleep >> >> tv_nsec is added twice when calculating the sleep end time. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/41855 >> >> >> commit ef56097f4ea848d48fbf61eba1c757fe7fce99d3 >> Author: Matthieu Sarter <matthieu.sarter.exter...@atos.net> >> Date: Fri Apr 28 10:27:32 2017 +0200 >> >> libgo: pass $(NM) value when running benchmarks >> >> On AIX, we need to use "nm -B" instead of "nm", to have the >> epxected output format, so the configured $(NM) value from >> the Makefile should be exported before running gotest, which >> defaults to "nm" if $NM is not set. >> >> Issue golang/go#19200 >> >> Reviewed-on: https://go-review.googlesource.com/42051 >> >> >> commit 0fb550083ae474fb964435927b899ec8e4b62771 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Wed Nov 16 21:12:53 2016 -0800 >> >> runtime: copy garbage collector from Go 1.8 runtime >> >> This giant patch replaces the old Go 1.4 memory allocator and garbage >> collector with the new Go 1.8 code. The memory allocator is fairly >> similar, though now written in Go rather than C. The garbage >> collector is completely different. It now uses ptrmask and gcprog >> information, which requires changes in the compiler and the reflect >> package as well as the runtime. And, of course, the garbage collector >> now runs concurrently with program execution. >> >> In the gc toolchain the garbage collector is strict and precise at all >> levels. In the gofrontend we do not have stack maps, so stacks, and >> register values, are collected conservatively. That means that an >> old, no longer used, pointer on a stack or in a register can cause a >> memory object to live longer than it should. That in turns means that >> we must disable some checks for invalid pointers in the garbage >> collection code. Not only can we get an invalid pointer on the stack; >> the concurrent nature of the collector means that we can in effect >> resurrect a block that was already unmarked but that the collector had >> not yet gotten around to freeing, and that block can in turn point to >> other blocks that the collector had managed to already free. So we >> must disable pointer checks in general. In effect we are relying on >> the fact that the strict pointer checks in the gc toolchain ensure >> that the garbage collector is correct, and we just assume that it is >> correct for the gofrontend since we are using the same code. >> >> Reviewed-on: https://go-review.googlesource.com/41307 >> >> >> commit a95078d501175240d095500a8c5fbfb21bec65cb >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Mon Apr 24 16:33:47 2017 -0700 >> >> libgo/Makefile: clean more files >> >> Fix up the mostlyclean, clean, and distclean targets to better follow >> https://www.gnu.org/prep/standards/html_node/Standard-Targets.html. >> >> Reviewed-on: https://go-review.googlesource.com/41625 >> >> >> commit 5956bf1055451cf4239cdfeca259c23b1ded54d8 >> Author: Ian Lance Taylor <i...@golang.org> >> Date: Mon May 8 13:35:11 2017 -0700 >> >> libgo: delete goc2c >> >> The last .goc file has been removed, so remove goc2c. >> >> The goc2c program was my first contribution to the gc repository that >> was more than 100 lines: >> >> https://github.com/golang/go/commit/2b57a1124e87b0dc8bc1ff6899297b4d7d6e74f2 >> The program was used in gc for a few years under various guises but >> was finally removed in https://golang.org/cl/132680043. Now we can >> remove it from gofrontend as well. >> >> Reviewed-on: https://go-review.googlesource.com/42911 >> >> >> commit a222e35d041de0cd42506b61c93b8209e07702b9 >> Author: Than McIntosh <th...@google.com> >> Date: Tue May 9 10:33:10 2017 -0400 >> >> compiler: set "need_init_fn" when adding gc root >> >> Variables that back slice initializers in certain cases have to be >> added to the gc roots list, since they can be modified at runtime. The >> code that was doing this addition did not update the flag that tracks >> whether the package being compiled needs an initializer function, >> which resulted in the call in question being left out of the final >> generated code in certain cases. Fix is to change Gogo::add_gc_root() >> to update the "needs init" flag. >> >> Reviewed-on: https://go-review.googlesource.com/43030 >> >> >> commit 822ab419bf7d1c705cdce1c12133e7a11f56be2e >> Author: Than McIntosh <th...@google.com> >> Date: Tue May 9 11:36:51 2017 -0400 >> >> compiler: fix variable context nit in write barrier generation >> >> Update the write barrier generation code to insure that the "lvalue >> context" tag on the space var expression is set only in the case where >> the expr feeds directly into an assignment. This is somewhat >> counter-intuitive, but needed in the case where the backend looks at >> context tags. >> >> Reviewed-on: https://go-review.googlesource.com/43031