public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* libgo patch committed: Update to 1.11 release
@ 2018-09-24 21:49 Ian Lance Taylor
  2018-09-25  7:06 ` Andreas Schwab
                   ` (6 more replies)
  0 siblings, 7 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-24 21:49 UTC (permalink / raw)
  To: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 640 bytes --]

I've committed a patch to update libgo to the 1.11 release.  As usual
for these updates, the patch is too large to attach to this e-mail
message.  I've attached some of the more relevant directories.  This
update required some minor patches to the gotools directory and the Go
testsuite, also included here.  Bootstrapped and ran Go testsuite on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian

2018-09-24  Ian Lance Taylor  <iant@golang.org>

* 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.

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 17146 bytes --]

Index: libgo/MERGE
===================================================================
--- libgo/MERGE	(revision 264542)
+++ libgo/MERGE	(working copy)
@@ -1,4 +1,4 @@
-fe8a0d12b14108cbe2408b417afcaab722b0727c
+41e62b8c49d21659b48a95216e3062032285250f
 
 The first line of this file holds the git revision number of the
 last merge done from the master library sources.
Index: libgo/VERSION
===================================================================
--- libgo/VERSION	(revision 264542)
+++ libgo/VERSION	(working copy)
@@ -1 +1 @@
-go1.10.3
+go1.11
Index: libgo/Makefile.am
===================================================================
--- libgo/Makefile.am	(revision 264542)
+++ libgo/Makefile.am	(working copy)
@@ -541,6 +541,7 @@ s-objabi: Makefile
 	echo 'const defaultGO386 = `sse2`' >> objabi.go.tmp
 	echo 'const defaultGOARM = `5`' >> objabi.go.tmp
 	echo 'const defaultGOMIPS = `hardfloat`' >> objabi.go.tmp
+	echo 'const defaultGOMIPS64 = `hardfloat`' >> objabi.go.tmp
 	echo 'const defaultGOOS = runtime.GOOS' >> objabi.go.tmp
 	echo 'const defaultGOARCH = runtime.GOARCH' >> objabi.go.tmp
 	echo 'const defaultGO_EXTLINK_ENABLED = ``' >> objabi.go.tmp
@@ -608,7 +609,7 @@ noinst_DATA += zdefaultcc.go
 zstdpkglist.go: s-zstdpkglist; @true
 s-zstdpkglist: Makefile
 	rm -f zstdpkglist.go.tmp
-	echo 'package build' > zstdpkglist.go.tmp
+	echo 'package goroot' > zstdpkglist.go.tmp
 	echo "" >> zstdpkglist.go.tmp
 	echo 'var stdpkg = map[string]bool{' >> zstdpkglist.go.tmp
 	echo $(libgo_go_objs) 'unsafe.lo' 'runtime/cgo.lo' | sed 's|[a-z0-9_/]*_c\.lo||g' | sed 's|\([a-z0-9_/]*\)\.lo|"\1": true,|g' >> zstdpkglist.go.tmp
@@ -707,6 +708,7 @@ PACKAGES = $(shell cat $(srcdir)/libgo-p
 libgo_go_objs = \
 	$(addsuffix .lo,$(PACKAGES)) \
 	bytes/index.lo \
+	internal/bytealg/bytealg.lo \
 	reflect/makefunc_ffi_c.lo \
 	strings/index.lo \
 	$(syscall_lib_clone_lo) \
@@ -718,7 +720,8 @@ libgo_go_objs = \
 	log/syslog/syslog_c.lo \
 	$(os_lib_inotify_lo) \
 	runtime/internal/atomic_c.lo \
-	sync/atomic_c.lo
+	sync/atomic_c.lo \
+	internal/cpu/cpu_gccgo.lo
 
 libgo_ldflags = \
 	-version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS)
@@ -960,8 +963,8 @@ runtime_pprof_check_GOCFLAGS = -static-l
 extra_go_files_runtime_internal_sys = version.go
 runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
 
-extra_go_files_go_build = zstdpkglist.go
-go/build.lo.dep: $(extra_go_files_go_build)
+extra_go_files_internal_goroot = zstdpkglist.go
+internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
 
 extra_go_files_go_types = gccgosizes.go
 go/types.lo.dep: $(extra_go_files_go_types)
@@ -976,6 +979,16 @@ extra_check_libs_cmd_go_internal_cache =
 extra_check_libs_cmd_go_internal_generate = $(abs_builddir)/libgotool.a
 extra_check_libs_cmd_go_internal_get = $(abs_builddir)/libgotool.a
 extra_check_libs_cmd_go_internal_load = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_imports = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_modconv = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_modfetch = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_modfetch_codehost = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_modfile = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_modload = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_module = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_mvs = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_search = $(abs_builddir)/libgotool.a
+extra_check_libs_cmd_go_internal_web2 = $(abs_builddir)/libgotool.a
 extra_check_libs_cmd_go_internal_work = $(abs_builddir)/libgotool.a
 
 extra_check_libs_cmd_vet_internal_cfg = $(abs_builddir)/libgotool.a
@@ -990,6 +1003,9 @@ bytes/index.lo: go/bytes/indexbyte.c run
 strings/index.lo: go/strings/indexbyte.c runtime.inc
 	@$(MKDIR_P) strings
 	$(LTCOMPILE) -c -o $@ $(srcdir)/go/strings/indexbyte.c
+internal/bytealg/bytealg.lo: go/internal/bytealg/bytealg.c runtime.inc
+	@$(MKDIR_P) internal/bytealg
+	$(LTCOMPILE) -c -o $@ $(srcdir)/go/internal/bytealg/bytealg.c
 
 # Use a C function with a fixed number of arguments to call a C
 # varargs function.
@@ -1024,6 +1040,11 @@ syscall/wait.lo: go/syscall/wait.c runti
 	@$(MKDIR_P) syscall
 	$(LTCOMPILE) -c -o $@ $(srcdir)/go/syscall/wait.c
 
+# internal/cpu needs some C code.
+internal/cpu/cpu_gccgo.lo: go/internal/cpu/cpu_gccgo.c runtime.inc
+	@$(MKDIR_P) internal/cpu
+	$(LTCOMPILE) -c -o $@ $(srcdir)/go/internal/cpu/cpu_gccgo.c
+
 # Solaris 11.4 changed the type of fields in struct stat.
 # Use a build tag, based on a configure check, to cope.
 if LIBGO_IS_SOLARIS
Index: libgo/check-packages.txt
===================================================================
--- libgo/check-packages.txt	(revision 264542)
+++ libgo/check-packages.txt	(working copy)
@@ -3,9 +3,23 @@ archive/zip
 bufio
 bytes
 cmd/go/internal/cache
+cmd/go/internal/dirhash
 cmd/go/internal/generate
 cmd/go/internal/get
+cmd/go/internal/imports
 cmd/go/internal/load
+cmd/go/internal/modconv
+cmd/go/internal/modfetch
+cmd/go/internal/modfetch/codehost
+cmd/go/internal/modfile
+cmd/go/internal/modload
+cmd/go/internal/module
+cmd/go/internal/mvs
+cmd/go/internal/par
+cmd/go/internal/search
+cmd/go/internal/semver
+cmd/go/internal/txtar
+cmd/go/internal/web2
 cmd/go/internal/work
 cmd/internal/buildid
 cmd/internal/edit
@@ -29,6 +43,7 @@ crypto/dsa
 crypto/ecdsa
 crypto/elliptic
 crypto/hmac
+crypto/internal/subtle
 crypto/md5
 crypto/rand
 crypto/rc4
@@ -76,11 +91,15 @@ go/printer
 go/scanner
 go/token
 go/types
+golang_org/x/crypto/internal/chacha20
 golang_org/x/crypto/chacha20poly1305
 golang_org/x/crypto/chacha20poly1305/internal/chacha20
 golang_org/x/crypto/cryptobyte
 golang_org/x/crypto/curve25519
 golang_org/x/crypto/poly1305
+golang_org/x/net/dns/dnsmessage
+golang_org/x/net/http/httpguts
+golang_org/x/net/http/httpproxy
 golang_org/x/net/http2/hpack
 golang_org/x/net/idna
 golang_org/x/net/lex/httplex
@@ -98,6 +117,7 @@ image/draw
 image/jpeg
 image/png
 index/suffixarray
+internal/cpu
 internal/poll
 internal/singleflight
 internal/trace
Index: libgo/gotool-packages.txt
===================================================================
--- libgo/gotool-packages.txt	(revision 264542)
+++ libgo/gotool-packages.txt	(working copy)
@@ -4,6 +4,7 @@ cmd/go/internal/cache
 cmd/go/internal/cfg
 cmd/go/internal/clean
 cmd/go/internal/cmdflag
+cmd/go/internal/dirhash
 cmd/go/internal/doc
 cmd/go/internal/envcmd
 cmd/go/internal/fix
@@ -11,15 +12,32 @@ cmd/go/internal/fmtcmd
 cmd/go/internal/generate
 cmd/go/internal/get
 cmd/go/internal/help
+cmd/go/internal/imports
 cmd/go/internal/list
 cmd/go/internal/load
+cmd/go/internal/modcmd
+cmd/go/internal/modconv
+cmd/go/internal/modfetch
+cmd/go/internal/modfetch/codehost
+cmd/go/internal/modfile
+cmd/go/internal/modget
+cmd/go/internal/modinfo
+cmd/go/internal/modload
+cmd/go/internal/module
+cmd/go/internal/mvs
+cmd/go/internal/par
 cmd/go/internal/run
+cmd/go/internal/search
+cmd/go/internal/semver
 cmd/go/internal/str
 cmd/go/internal/test
 cmd/go/internal/tool
+cmd/go/internal/txtar
 cmd/go/internal/version
 cmd/go/internal/vet
 cmd/go/internal/web
+cmd/go/internal/web2
+cmd/go/internal/webtest
 cmd/go/internal/work
 cmd/internal/browser
 cmd/internal/buildid
Index: libgo/libgo-packages.txt
===================================================================
--- libgo/libgo-packages.txt	(revision 264542)
+++ libgo/libgo-packages.txt	(working copy)
@@ -19,7 +19,8 @@ crypto/dsa
 crypto/ecdsa
 crypto/elliptic
 crypto/hmac
-crypto/internal/cipherhw
+crypto/internal/randutil
+crypto/internal/subtle
 crypto/md5
 crypto/rand
 crypto/rc4
@@ -70,12 +71,16 @@ go/printer
 go/scanner
 go/token
 go/types
+golang_org/x/crypto/internal/chacha20
 golang_org/x/crypto/chacha20poly1305
 golang_org/x/crypto/chacha20poly1305/internal/chacha20
 golang_org/x/crypto/cryptobyte
 golang_org/x/crypto/cryptobyte/asn1
 golang_org/x/crypto/curve25519
 golang_org/x/crypto/poly1305
+golang_org/x/net/dns/dnsmessage
+golang_org/x/net/http/httpguts
+golang_org/x/net/http/httpproxy
 golang_org/x/net/http2/hpack
 golang_org/x/net/idna
 golang_org/x/net/internal/nettest
@@ -103,6 +108,9 @@ image/internal/imageutil
 image/jpeg
 image/png
 index/suffixarray
+internal/bytealg
+internal/cpu
+internal/goroot
 internal/nettrace
 internal/poll
 internal/race
Index: libgo/match.sh
===================================================================
--- libgo/match.sh	(revision 264542)
+++ libgo/match.sh	(working copy)
@@ -116,7 +116,7 @@ for f in $gofiles; do
 	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag1=nonmatchingtag
 	    ;;
-	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
+	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 	    tag1=nonmatchingtag
 	    ;;
     esac
@@ -128,7 +128,7 @@ for f in $gofiles; do
 	aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 	    tag2=nonmatchingtag
 	    ;;
-	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
+	386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 	    tag2=nonmatchingtag
 	    ;;
     esac
Index: libgo/merge.sh
===================================================================
--- libgo/merge.sh	(revision 264542)
+++ libgo/merge.sh	(working copy)
@@ -128,7 +128,7 @@ echo ${rev} > VERSION
 (cd ${NEWDIR}/src && find . -name '*.go' -print) | while read f; do
   skip=false
   case "$f" in
-  ./cmd/cgo/* | ./cmd/go/* | ./cmd/gofmt/* | ./cmd/internal/browser/* | ./cmd/internal/objabi/* | ./cmd/internal/buildid/*)
+  ./cmd/buildid/* | ./cmd/cgo/* | ./cmd/go/* | ./cmd/gofmt/* | ./cmd/testjson/* | ./cmd/vet/* | ./cmd/internal/browser/* | ./cmd/internal/buildid/* | ./cmd/internal/edit/* | ./cmd/internal/objabi/* | ./cmd/internal/testj2on/* )
     ;;
   ./cmd/*)
     skip=true
Index: libgo/runtime/go-caller.c
===================================================================
--- libgo/runtime/go-caller.c	(revision 264542)
+++ libgo/runtime/go-caller.c	(working copy)
@@ -210,17 +210,6 @@ Caller (int skip)
 /* Look up the function name, file name, and line number for a PC.  */
 
 struct funcfileline_return
-{
-  String retfn;
-  String retfile;
-  intgo retline;
-};
-
-struct funcfileline_return
-runtime_funcfileline (uintptr targetpc, int32 index)
-  __asm__ (GOSYM_PREFIX "runtime.funcfileline");
-
-struct funcfileline_return
 runtime_funcfileline (uintptr targetpc, int32 index)
 {
   struct funcfileline_return ret;
Index: libgo/runtime/go-runtime-error.c
===================================================================
--- libgo/runtime/go-runtime-error.c	(revision 264542)
+++ libgo/runtime/go-runtime-error.c	(working copy)
@@ -60,16 +60,29 @@ extern void __go_runtime_error (int32) _
 void
 __go_runtime_error (int32 i)
 {
+  struct funcfileline_return fileline;
+  bool in_runtime;
+
+  fileline = runtime_funcfileline ((uintptr) runtime_getcallerpc(), 0);
+  in_runtime = (fileline.retfn.len > 0
+		&& (__builtin_strncmp ((const char *) fileline.retfn.str,
+				      "runtime.", 8)
+		    == 0));
+
   switch (i)
     {
     case SLICE_INDEX_OUT_OF_BOUNDS:
     case ARRAY_INDEX_OUT_OF_BOUNDS:
     case STRING_INDEX_OUT_OF_BOUNDS:
+      if (in_runtime)
+	runtime_throw ("index out of range");
       runtime_panicstring ("index out of range");
 
     case SLICE_SLICE_OUT_OF_BOUNDS:
     case ARRAY_SLICE_OUT_OF_BOUNDS:
     case STRING_SLICE_OUT_OF_BOUNDS:
+      if (in_runtime)
+	runtime_throw ("slice bounds out of range");
       runtime_panicstring ("slice bounds out of range");
 
     case NIL_DEREFERENCE:
Index: libgo/runtime/panic.c
===================================================================
--- libgo/runtime/panic.c	(revision 264542)
+++ libgo/runtime/panic.c	(working copy)
@@ -37,3 +37,11 @@ runtime_panicstring(const char *s)
 	runtime_newErrorCString(s, &err);
 	runtime_panic(err);
 }
+
+extern void runtime_abort(void) __asm__(GOSYM_PREFIX "runtime.abort");
+
+void
+runtime_abort()
+{
+	abort();
+}
Index: libgo/runtime/runtime.h
===================================================================
--- libgo/runtime/runtime.h	(revision 264542)
+++ libgo/runtime/runtime.h	(working copy)
@@ -403,8 +403,6 @@ void runtime_panic(Eface)
 /*
  * runtime c-called (but written in Go)
  */
-void	runtime_newTypeAssertionError(const String*, const String*, const String*, const String*, Eface*)
-     __asm__ (GOSYM_PREFIX "runtime.NewTypeAssertionError");
 void	runtime_newErrorCString(const char*, Eface*)
      __asm__ (GOSYM_PREFIX "runtime.NewErrorCString");
 
@@ -479,10 +477,10 @@ extern void *getitab(const struct __go_t
   __asm__ (GOSYM_PREFIX "runtime.getitab");
 
 extern void runtime_cpuinit(void);
+extern void setRandomNumber(uint32)
+  __asm__ (GOSYM_PREFIX "runtime.setRandomNumber");
 extern void setIsCgo(void)
   __asm__ (GOSYM_PREFIX "runtime.setIsCgo");
-extern void setCpuidECX(uint32)
-  __asm__ (GOSYM_PREFIX "runtime.setCpuidECX");
 extern void setSupportAES(bool)
   __asm__ (GOSYM_PREFIX "runtime.setSupportAES");
 extern void typedmemmove(const Type *, void *, const void *)
@@ -493,3 +491,14 @@ extern Sched* runtime_getsched(void)
   __asm__ (GOSYM_PREFIX "runtime.getsched");
 extern void setpagesize(uintptr_t)
   __asm__(GOSYM_PREFIX "runtime.setpagesize");
+
+struct funcfileline_return
+{
+  String retfn;
+  String retfile;
+  intgo retline;
+};
+
+struct funcfileline_return
+runtime_funcfileline (uintptr targetpc, int32 index)
+  __asm__ (GOSYM_PREFIX "runtime.funcfileline");
Index: libgo/runtime/runtime_c.c
===================================================================
--- libgo/runtime/runtime_c.c	(revision 264542)
+++ libgo/runtime/runtime_c.c	(working copy)
@@ -33,6 +33,17 @@ runtime_atoi(const byte *p, intgo len)
 	return n;
 }
 
+// A random number from the GNU/Linux auxv array.
+static uint32 randomNumber;
+
+// Set the random number from Go code.
+
+void
+setRandomNumber(uint32 r)
+{
+	randomNumber = r;
+}
+
 #if defined(__i386__) || defined(__x86_64__) || defined (__s390__) || defined (__s390x__)
 
 // When cputicks is just asm instructions, skip the split stack
@@ -85,8 +96,8 @@ runtime_cputicks(void)
 #else
   // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand().
   // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler.
-  // TODO: need more entropy to better seed fastrand.
-  return runtime_nanotime();
+  // randomNumber provides better seeding of fastrand.
+  return runtime_nanotime() + randomNumber;
 #endif
 }
 
@@ -193,7 +204,6 @@ runtime_cpuinit()
 		}
 	}
 	if (__get_cpuid(1, &eax, &ebx, &ecx, &edx)) {
-		setCpuidECX(ecx);
 #if defined(__i386__)
 		if ((edx & bit_SSE2) != 0) {
 			hasSSE2 = true;
Index: libgo/testsuite/gotest
===================================================================
--- libgo/testsuite/gotest	(revision 264542)
+++ libgo/testsuite/gotest	(working copy)
@@ -314,7 +314,7 @@ x)
 	    aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 		tag1=nonmatchingtag
 		;;
-	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
+	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 		tag1=nonmatchingtag
 		;;
 	    esac
@@ -326,7 +326,7 @@ x)
 	    aix | android | darwin | dragonfly | freebsd | linux | nacl | netbsd | openbsd | plan9 | solaris | windows)
 		tag2=nonmatchingtag
 		;;
-	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64)
+	    386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | s390x | sh | shbe | sparc | sparc64 | wasm)
 		tag2=nonmatchingtag
 		;;
 	    esac

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
@ 2018-09-25  7:06 ` Andreas Schwab
  2018-09-25  7:57 ` Andreas Schwab
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 33+ messages in thread
From: Andreas Schwab @ 2018-09-25  7:06 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

This breaks aarch64/-mabi=ilp32.

../../../../libgo/go/internal/poll/splice_linux.go:165:45: error: reference to undefined identifier 'syscall.SYS_FCNTL'
165 |   if _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fds[0]), syscall.F_GETPIPE_SZ, 0); errno != 0 {
    |                                             ^

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
  2018-09-25  7:06 ` Andreas Schwab
@ 2018-09-25  7:57 ` Andreas Schwab
  2018-09-25  9:05   ` Andreas Schwab
  2018-09-25 13:10 ` Rainer Orth
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2018-09-25  7:57 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

It also breaks ia64.

../../../libgo/go/internal/bytealg/indexbyte_native.go:10:1: error: redefinition of 'IndexByte'
10 | func IndexByte(b []byte, c byte) int
   | ^
../../../libgo/go/internal/bytealg/indexbyte_generic.go:12:1: note: previous definition of 'IndexByte' was here
12 | func IndexByte(b []byte, c byte) int {
   | ^
../../../libgo/go/internal/bytealg/indexbyte_native.go:13:1: error: redefinition of 'IndexByteString'
13 | func IndexByteString(s string, c byte) int
   | ^
../../../libgo/go/internal/bytealg/indexbyte_generic.go:21:1: note: previous definition of 'IndexByteString' was here
21 | func IndexByteString(s string, c byte) int {
   | ^

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-25  7:57 ` Andreas Schwab
@ 2018-09-25  9:05   ` Andreas Schwab
  2018-09-25 14:39     ` Ian Lance Taylor
  0 siblings, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2018-09-25  9:05 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

../../../libgo/go/internal/cpu/cpu.go:21:16: error: reference to undefined name ‘CacheLineSize’
21 |  _            [CacheLineSize]byte
   |                ^
../../../libgo/go/internal/cpu/cpu.go:38:16: error: reference to undefined name ‘CacheLineSize’
38 |  _            [CacheLineSize]byte
   |                ^
../../../libgo/go/internal/cpu/cpu.go:51:14: error: reference to undefined name ‘CacheLineSize’
51 |  _          [CacheLineSize]byte
   |              ^
../../../libgo/go/internal/cpu/cpu.go:63:14: error: reference to undefined name ‘CacheLineSize’
63 |  _          [CacheLineSize]byte
   |              ^
../../../libgo/go/internal/cpu/cpu.go:71:15: error: reference to undefined name ‘CacheLineSize’
71 |  _           [CacheLineSize]byte
   |               ^
../../../libgo/go/internal/cpu/cpu.go:96:15: error: reference to undefined name ‘CacheLineSize’
96 |  _           [CacheLineSize]byte
   |               ^
../../../libgo/go/internal/cpu/cpu.go:102:19: error: reference to undefined name ‘CacheLineSize’
102 |  _               [CacheLineSize]byte
    |                   ^
../../../libgo/go/internal/cpu/cpu.go:119:19: error: reference to undefined name ‘CacheLineSize’
119 |  _               [CacheLineSize]byte
    |                   ^

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
  2018-09-25  7:06 ` Andreas Schwab
  2018-09-25  7:57 ` Andreas Schwab
@ 2018-09-25 13:10 ` Rainer Orth
  2018-09-25 13:34   ` Rainer Orth
  2018-09-26  7:57 ` Andreas Schwab
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 33+ messages in thread
From: Rainer Orth @ 2018-09-25 13:10 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 2795 bytes --]

Hi Ian,

> I've committed a patch to update libgo to the 1.11 release.  As usual
> for these updates, the patch is too large to attach to this e-mail
> message.  I've attached some of the more relevant directories.  This
> update required some minor patches to the gotools directory and the Go
> testsuite, also included here.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.

this patch broke Solaris badly, too.

On Solaris 11/SPARC:

*

/vol/gcc/src/hg/trunk/local/libgo/go/internal/cpu/cpu.go:21:16: error: reference to undefined name 'CacheLineSize'
21 |  _            [CacheLineSize]byte
   |                ^

  and many more.  I've introduced cpu_sparc.go and cpu_sparc64.go to
  define the constant.  However, the value is just an initial guess; I've
  not yet checked if it's correct for all SPARC implementations.

*

/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/indexbyte_native.go:10:1: error: redefinition of 'IndexByte'
10 | func IndexByte(b []byte, c byte) int
   | ^
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/indexbyte_generic.go:12:1: note: previous definition of 'IndexByte' was here
12 | func IndexByte(b []byte, c byte) int {
   | ^
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/indexbyte_native.go:13:1: error: redefinition of 'IndexByteString'
13 | func IndexByteString(s string, c byte) int
   | ^
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/indexbyte_generic.go:21:1: note: previous definition of 'IndexByteString' was here
21 | func IndexByteString(s string, c byte) int {
   | ^

  Fixed by adding sparc build tags to indexbyte_{generic, native}.go.
  It seems +ignore_for_gccgo in the former is itself ignored.

On both Solaris 11/SPARC and x86:

* 

/vol/gcc/src/hg/trunk/local/libgo/go/runtime/runtime1.go:75:2: error: reference to undefined name 'sysargs'
75 |  sysargs(c, v)
   |  ^

  sysargs is defined in go/runtime/auxv_none.go, go/runtime/os_linux.go
  in the gcc tree.

  The former excluded on solaris.  I've removed the build tag in
  auxv_none.go as hack, but auxv exists on Solaris, too!  I happened to
  find an implementation in upstream src/runtime/os3_solaris.go.  But
  what the heck is os{,2,3}_solaris.go!?

*

/vol/gcc/src/hg/trunk/local/libgo/go/runtime/traceback_gccgo.go:151:14: error: reference to undefined name 'nanotime'
151 |   waitfor = (nanotime() - gp.waitsince) / 60e9
    |              ^

  and many many more instances.  Again, I found an implementation in
  upstream src/runtime/os3_solaris.go, but that isn't usable since it
  uses syscall directly.

So I'm currently stuck on the missing nanotime.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sol2-libgo111.patch --]
[-- Type: text/x-patch, Size: 2248 bytes --]

# HG changeset patch
# Parent  8c2483dc7f68b764358ca7626f07fedeb1792a07
Fix go 1.11 libgo on Solaris

diff --git a/libgo/go/internal/bytealg/indexbyte_generic.go b/libgo/go/internal/bytealg/indexbyte_generic.go
--- a/libgo/go/internal/bytealg/indexbyte_generic.go
+++ b/libgo/go/internal/bytealg/indexbyte_generic.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +ignore_for_gccgo
-// +build !386,!amd64,!amd64p32,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm
+// +build !386,!amd64,!amd64p32,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm,!sparc,!sparc64
 
 package bytealg
 
diff --git a/libgo/go/internal/bytealg/indexbyte_native.go b/libgo/go/internal/bytealg/indexbyte_native.go
--- a/libgo/go/internal/bytealg/indexbyte_native.go
+++ b/libgo/go/internal/bytealg/indexbyte_native.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// -build 386 amd64 amd64p32 s390x arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le wasm
+// -build 386 amd64 amd64p32 s390x arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le wasm sparc sparc64
 
 package bytealg
 
diff --git a/libgo/go/internal/cpu/cpu_sparc.go b/libgo/go/internal/cpu/cpu_sparc.go
new file mode 100644
--- /dev/null
+++ b/libgo/go/internal/cpu/cpu_sparc.go
@@ -0,0 +1,7 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cpu
+
+const CacheLineSize = 64
diff --git a/libgo/go/internal/cpu/cpu_sparc64.go b/libgo/go/internal/cpu/cpu_sparc64.go
new file mode 100644
--- /dev/null
+++ b/libgo/go/internal/cpu/cpu_sparc64.go
@@ -0,0 +1,7 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cpu
+
+const CacheLineSize = 64
diff --git a/libgo/go/runtime/auxv_none.go b/libgo/go/runtime/auxv_none.go
--- a/libgo/go/runtime/auxv_none.go
+++ b/libgo/go/runtime/auxv_none.go
@@ -7,7 +7,6 @@
 // +build !dragonfly
 // +build !freebsd
 // +build !netbsd
-// +build !solaris
 
 package runtime
 

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-25 13:10 ` Rainer Orth
@ 2018-09-25 13:34   ` Rainer Orth
  2018-09-26  5:04     ` Ian Lance Taylor
  0 siblings, 1 reply; 33+ messages in thread
From: Rainer Orth @ 2018-09-25 13:34 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 829 bytes --]

Hi Ian,

> /vol/gcc/src/hg/trunk/local/libgo/go/runtime/traceback_gccgo.go:151:14: error: reference to undefined name 'nanotime'
> 151 |   waitfor = (nanotime() - gp.waitsince) / 60e9
>     |              ^
>
>   and many many more instances.  Again, I found an implementation in
>   upstream src/runtime/os3_solaris.go, but that isn't usable since it
>   uses syscall directly.
>
> So I'm currently stuck on the missing nanotime.

I think I found it: if I enable building go/runtime/stubs3.go by
removing the !solaris build tag, the runtime_nanotime implementation in
runtime/go-nanotime.c is used.  At least the builds are going along
fine, it seems.  No test results yet.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: nanotime.patch --]
[-- Type: text/x-patch, Size: 299 bytes --]

diff --git a/libgo/go/runtime/stubs3.go b/libgo/go/runtime/stubs3.go
--- a/libgo/go/runtime/stubs3.go
+++ b/libgo/go/runtime/stubs3.go
@@ -3,7 +3,6 @@
 // license that can be found in the LICENSE file.
 
 // +build !plan9
-// +build !solaris
 // +build !windows
 // +build !nacl
 // +build !freebsd

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-25  9:05   ` Andreas Schwab
@ 2018-09-25 14:39     ` Ian Lance Taylor
  0 siblings, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-25 14:39 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 2132 bytes --]

On Tue, Sep 25, 2018 at 1:03 AM, Andreas Schwab <schwab@suse.de> wrote:
> ../../../libgo/go/internal/cpu/cpu.go:21:16: error: reference to undefined name ‘CacheLineSize’
> 21 |  _            [CacheLineSize]byte
>    |                ^
> ../../../libgo/go/internal/cpu/cpu.go:38:16: error: reference to undefined name ‘CacheLineSize’
> 38 |  _            [CacheLineSize]byte
>    |                ^
> ../../../libgo/go/internal/cpu/cpu.go:51:14: error: reference to undefined name ‘CacheLineSize’
> 51 |  _          [CacheLineSize]byte
>    |              ^
> ../../../libgo/go/internal/cpu/cpu.go:63:14: error: reference to undefined name ‘CacheLineSize’
> 63 |  _          [CacheLineSize]byte
>    |              ^
> ../../../libgo/go/internal/cpu/cpu.go:71:15: error: reference to undefined name ‘CacheLineSize’
> 71 |  _           [CacheLineSize]byte
>    |               ^
> ../../../libgo/go/internal/cpu/cpu.go:96:15: error: reference to undefined name ‘CacheLineSize’
> 96 |  _           [CacheLineSize]byte
>    |               ^
> ../../../libgo/go/internal/cpu/cpu.go:102:19: error: reference to undefined name ‘CacheLineSize’
> 102 |  _               [CacheLineSize]byte
>     |                   ^
> ../../../libgo/go/internal/cpu/cpu.go:119:19: error: reference to undefined name ‘CacheLineSize’
> 119 |  _               [CacheLineSize]byte
>     |                   ^

Thanks for the various reports and sorry for the breakage.

I believe this patch will fix the three problems reported by Andreas.

In internal/bytealg correct a +build tag to never build
indexbyte_generic.go for gccgo, where we always use
indexbyte_native.go.

For internal/cpu let the Makefile define CacheLineSize using
goarch.sh, rather than trying to enumerate all the possibilities in
cpu_ARCH.go files.

In internal/poll call the C fcntl function rather than using
SYS_FCNTL.  Change mksysinfo.sh to ensure that F_GETPIPE_SZ is always
defined, and check that in internal/poll.

Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 9518 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264570)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-1dbc5b805a1665079008d1ce341991c3554c1eeb
+652fbfb7acfd81ceffe28e20984464aa7bb6024d
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/Makefile.am
===================================================================
--- libgo/Makefile.am	(revision 264546)
+++ libgo/Makefile.am	(working copy)
@@ -532,6 +532,14 @@ s-version: Makefile
 	$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
 	$(STAMP) $@
 
+cpugen.go: s-cpu; @true
+s-cpu: Makefile
+	rm -f cpugen.go.tmp
+	echo "package cpu" > cpugen.go.tmp
+	echo "const CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> cpugen.go.tmp
+	$(SHELL) $(srcdir)/mvifdiff.sh cpugen.go.tmp cpugen.go
+	$(STAMP) $@
+
 objabi.go: s-objabi; @true
 s-objabi: Makefile
 	rm -f objabi.go.tmp
@@ -963,6 +971,9 @@ runtime_pprof_check_GOCFLAGS = -static-l
 extra_go_files_runtime_internal_sys = version.go
 runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
 
+extra_go_files_internal_cpu = cpugen.go
+internal/cpu.lo.dep: $(extra_go_files_internal_cpu)
+
 extra_go_files_internal_goroot = zstdpkglist.go
 internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
 
Index: libgo/Makefile.in
===================================================================
--- libgo/Makefile.in	(revision 264546)
+++ libgo/Makefile.in	(working copy)
@@ -1002,6 +1002,7 @@ runtime_internal_sys_lo_check_GOCFLAGS =
 # Also use -fno-inline to get better results from the memory profiler.
 runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
 extra_go_files_runtime_internal_sys = version.go
+extra_go_files_internal_cpu = cpugen.go
 extra_go_files_internal_goroot = zstdpkglist.go
 extra_go_files_go_types = gccgosizes.go
 extra_go_files_cmd_internal_objabi = objabi.go
@@ -2759,6 +2760,14 @@ s-version: Makefile
 	$(SHELL) $(srcdir)/mvifdiff.sh version.go.tmp version.go
 	$(STAMP) $@
 
+cpugen.go: s-cpu; @true
+s-cpu: Makefile
+	rm -f cpugen.go.tmp
+	echo "package cpu" > cpugen.go.tmp
+	echo "const CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> cpugen.go.tmp
+	$(SHELL) $(srcdir)/mvifdiff.sh cpugen.go.tmp cpugen.go
+	$(STAMP) $@
+
 objabi.go: s-objabi; @true
 s-objabi: Makefile
 	rm -f objabi.go.tmp
@@ -2957,6 +2966,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(e
 runtime.lo.dep: $(extra_go_files_runtime)
 syscall.lo.dep: $(extra_go_files_syscall)
 runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
+internal/cpu.lo.dep: $(extra_go_files_internal_cpu)
 internal/goroot.lo.dep: $(extra_go_files_internal_goroot)
 go/types.lo.dep: $(extra_go_files_go_types)
 cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
Index: libgo/go/internal/bytealg/indexbyte_generic.go
===================================================================
--- libgo/go/internal/bytealg/indexbyte_generic.go	(revision 264546)
+++ libgo/go/internal/bytealg/indexbyte_generic.go	(working copy)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +ignore_for_gccgo
+// +build ignore_for_gccgo
 // +build !386,!amd64,!amd64p32,!s390x,!arm,!arm64,!ppc64,!ppc64le,!mips,!mipsle,!mips64,!mips64le,!wasm
 
 package bytealg
Index: libgo/go/internal/cpu/cpu_arm.go
===================================================================
--- libgo/go/internal/cpu/cpu_arm.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_arm.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 32
Index: libgo/go/internal/cpu/cpu_arm64.go
===================================================================
--- libgo/go/internal/cpu/cpu_arm64.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_arm64.go	(working copy)
@@ -4,8 +4,6 @@
 
 package cpu
 
-const CacheLineSize = 64
-
 // arm64 doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
 // These are initialized by archauxv in runtime/os_linux_arm64.go.
 // These should not be changed after they are initialized.
Index: libgo/go/internal/cpu/cpu_mips.go
===================================================================
--- libgo/go/internal/cpu/cpu_mips.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_mips.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 32
Index: libgo/go/internal/cpu/cpu_mips64.go
===================================================================
--- libgo/go/internal/cpu/cpu_mips64.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_mips64.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 32
Index: libgo/go/internal/cpu/cpu_mips64le.go
===================================================================
--- libgo/go/internal/cpu/cpu_mips64le.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_mips64le.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 32
Index: libgo/go/internal/cpu/cpu_mipsle.go
===================================================================
--- libgo/go/internal/cpu/cpu_mipsle.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_mipsle.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 32
Index: libgo/go/internal/cpu/cpu_ppc64x.go
===================================================================
--- libgo/go/internal/cpu/cpu_ppc64x.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_ppc64x.go	(working copy)
@@ -6,8 +6,6 @@
 
 package cpu
 
-const CacheLineSize = 128
-
 // ppc64x doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
 // These are initialized by archauxv in runtime/os_linux_ppc64x.go.
 // These should not be changed after they are initialized.
Index: libgo/go/internal/cpu/cpu_s390x.go
===================================================================
--- libgo/go/internal/cpu/cpu_s390x.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_s390x.go	(working copy)
@@ -4,8 +4,6 @@
 
 package cpu
 
-const CacheLineSize = 256
-
 // bitIsSet reports whether the bit at index is set. The bit index
 // is in big endian order, so bit index 0 is the leftmost bit.
 func bitIsSet(bits []uint64, index uint) bool {
Index: libgo/go/internal/cpu/cpu_wasm.go
===================================================================
--- libgo/go/internal/cpu/cpu_wasm.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_wasm.go	(nonexistent)
@@ -1,7 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package cpu
-
-const CacheLineSize = 64
Index: libgo/go/internal/cpu/cpu_x86.go
===================================================================
--- libgo/go/internal/cpu/cpu_x86.go	(revision 264546)
+++ libgo/go/internal/cpu/cpu_x86.go	(working copy)
@@ -6,8 +6,6 @@
 
 package cpu
 
-const CacheLineSize = 64
-
 // cpuid is implemented in cpu_x86.s.
 func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)
 
Index: libgo/go/internal/poll/splice_linux.go
===================================================================
--- libgo/go/internal/poll/splice_linux.go	(revision 264546)
+++ libgo/go/internal/poll/splice_linux.go	(working copy)
@@ -162,10 +162,15 @@ func newTempPipe() (prfd, pwfd int, sc s
 		defer atomic.StorePointer(&disableSplice, unsafe.Pointer(p))
 
 		// F_GETPIPE_SZ was added in 2.6.35, which does not have the -EAGAIN bug.
-		if _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fds[0]), syscall.F_GETPIPE_SZ, 0); errno != 0 {
+		if syscall.F_GETPIPE_SZ == 0 {
 			*p = true
 			destroyTempPipe(fds[0], fds[1])
-			return -1, -1, "fcntl", errno
+			return -1, -1, "fcntl", syscall.EINVAL
+		}
+		if _, errno := fcntl(uintptr(fds[0]), syscall.F_GETPIPE_SZ, 0); errno != 0 {
+			*p = true
+			destroyTempPipe(fds[0], fds[1])
+			return -1, -1, "fcntl", syscall.Errno(errno)
 		}
 	}
 
Index: libgo/mksysinfo.sh
===================================================================
--- libgo/mksysinfo.sh	(revision 264546)
+++ libgo/mksysinfo.sh	(working copy)
@@ -73,6 +73,11 @@ if ! grep '^const F_DUPFD_CLOEXEC' ${OUT
   echo "const F_DUPFD_CLOEXEC = 0" >> ${OUT}
 fi
 
+# The internal/poll package requires F_GETPIPE_SZ to be defined.
+if ! grep '^const F_GETPIPE_SZ' ${OUT} >/dev/null 2>&1; then
+  echo "const F_GETPIPE_SZ = 0" >> ${OUT}
+fi
+
 # AIX 7.1 is a 64 bits value for _FCLOEXEC (referenced by O_CLOEXEC)
 # which leads to a constant overflow when using O_CLOEXEC in some
 # go code. Issue wan not present in 6.1 (no O_CLOEXEC) and is no

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-25 13:34   ` Rainer Orth
@ 2018-09-26  5:04     ` Ian Lance Taylor
  2018-09-26  8:55       ` Rainer Orth
  0 siblings, 1 reply; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-26  5:04 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 921 bytes --]

On Tue, Sep 25, 2018 at 6:26 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>> /vol/gcc/src/hg/trunk/local/libgo/go/runtime/traceback_gccgo.go:151:14: error: reference to undefined name 'nanotime'
>> 151 |   waitfor = (nanotime() - gp.waitsince) / 60e9
>>     |              ^
>>
>>   and many many more instances.  Again, I found an implementation in
>>   upstream src/runtime/os3_solaris.go, but that isn't usable since it
>>   uses syscall directly.
>>
>> So I'm currently stuck on the missing nanotime.
>
> I think I found it: if I enable building go/runtime/stubs3.go by
> removing the !solaris build tag, the runtime_nanotime implementation in
> runtime/go-nanotime.c is used.  At least the builds are going along
> fine, it seems.  No test results yet.

Thanks for the report.  I've committed this patch to fix the build on
Solaris.  There are some test failures, though.  I haven't looked into
them.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2939 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264572)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-652fbfb7acfd81ceffe28e20984464aa7bb6024d
+e7b98cf0a380eb45791cd5c52897224a686dcdec
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/os/executable_solaris.go
===================================================================
--- libgo/go/os/executable_solaris.go	(revision 264546)
+++ libgo/go/os/executable_solaris.go	(working copy)
@@ -4,14 +4,18 @@
 
 package os
 
-import "syscall"
+import (
+	"syscall"
+	_ "unsafe" // for go:linkname
+)
 
-var executablePath string // set by sysauxv in ../runtime/os3_solaris.go
+// solarisExecutablePath is defined in the runtime package.
+func solarisExecutablePath() string
 
 var initCwd, initCwdErr = Getwd()
 
 func executable() (string, error) {
-	path := executablePath
+	path := solarisExecutablePath()
 	if len(path) == 0 {
 		path, err := syscall.Getexecname()
 		if err != nil {
Index: libgo/go/runtime/os3_solaris.go
===================================================================
--- libgo/go/runtime/os3_solaris.go	(nonexistent)
+++ libgo/go/runtime/os3_solaris.go	(working copy)
@@ -0,0 +1,54 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package runtime
+
+import (
+	"runtime/internal/sys"
+	"unsafe"
+)
+
+var executablePath string
+
+func sysargs(argc int32, argv **byte) {
+	n := argc + 1
+
+	// skip over argv, envp to get to auxv
+	for argv_index(argv, n) != nil {
+		n++
+	}
+
+	// skip NULL separator
+	n++
+
+	// now argv+n is auxv
+	auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize))
+	sysauxv(auxv[:])
+}
+
+const (
+	_AT_NULL         = 0    // Terminates the vector
+	_AT_PAGESZ       = 6    // Page size in bytes
+	_AT_SUN_EXECNAME = 2014 // exec() path name
+)
+
+func sysauxv(auxv []uintptr) {
+	for i := 0; auxv[i] != _AT_NULL; i += 2 {
+		tag, val := auxv[i], auxv[i+1]
+		switch tag {
+		case _AT_PAGESZ:
+			physPageSize = val
+		case _AT_SUN_EXECNAME:
+			executablePath = gostringnocopy((*byte)(unsafe.Pointer(val)))
+		}
+	}
+}
+
+//go:linkname solarisExecutablePath os.solarisExecutablePath
+
+// solarisExecutablePath is called from the os package to fetch the
+// saved executable path.
+func solarisExecutablePath() string {
+	return executablePath
+}
Index: libgo/go/runtime/stubs3.go
===================================================================
--- libgo/go/runtime/stubs3.go	(revision 264546)
+++ libgo/go/runtime/stubs3.go	(working copy)
@@ -3,7 +3,6 @@
 // license that can be found in the LICENSE file.
 
 // +build !plan9
-// +build !solaris
 // +build !windows
 // +build !nacl
 // +build !freebsd

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
                   ` (2 preceding siblings ...)
  2018-09-25 13:10 ` Rainer Orth
@ 2018-09-26  7:57 ` Andreas Schwab
  2018-09-26  8:59   ` Rainer Orth
  2018-09-26 11:12 ` Andreas Schwab
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 33+ messages in thread
From: Andreas Schwab @ 2018-09-26  7:57 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Sep 24 2018, Ian Lance Taylor <iant@golang.org> wrote:

> * Makefile.am (mostlyclean-local): Run chmod on check-go-dir to
> make sure it is writable.
> (check-go-tools): Likewise.

$ make check-gotools
make[1]: Entering directory `/usr/local/gcc/gcc-20180926/Build/gotools'
chmod -R u+w check-go-dir
chmod: cannot access `check-go-dir': No such file or directory
make[1]: *** [check-go-tool] Error 1
make[1]: Leaving directory `/usr/local/gcc/gcc-20180926/Build/gotools'
make: *** [check-gotools] Error 2

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26  5:04     ` Ian Lance Taylor
@ 2018-09-26  8:55       ` Rainer Orth
  0 siblings, 0 replies; 33+ messages in thread
From: Rainer Orth @ 2018-09-26  8:55 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

> On Tue, Sep 25, 2018 at 6:26 AM, Rainer Orth
> <ro@cebitec.uni-bielefeld.de> wrote:
>>
>>> /vol/gcc/src/hg/trunk/local/libgo/go/runtime/traceback_gccgo.go:151:14: error: reference to undefined name 'nanotime'
>>> 151 |   waitfor = (nanotime() - gp.waitsince) / 60e9
>>>     |              ^
>>>
>>>   and many many more instances.  Again, I found an implementation in
>>>   upstream src/runtime/os3_solaris.go, but that isn't usable since it
>>>   uses syscall directly.
>>>
>>> So I'm currently stuck on the missing nanotime.
>>
>> I think I found it: if I enable building go/runtime/stubs3.go by
>> removing the !solaris build tag, the runtime_nanotime implementation in
>> runtime/go-nanotime.c is used.  At least the builds are going along
>> fine, it seems.  No test results yet.
>
> Thanks for the report.  I've committed this patch to fix the build on
> Solaris.  There are some test failures, though.  I haven't looked into
> them.

great, thanks for fixing this.  I do know about the failures; they are
(slowly) being looked at...

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26  7:57 ` Andreas Schwab
@ 2018-09-26  8:59   ` Rainer Orth
  2018-09-26 12:54     ` Ian Lance Taylor
  0 siblings, 1 reply; 33+ messages in thread
From: Rainer Orth @ 2018-09-26  8:59 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Ian Lance Taylor, gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 983 bytes --]

Hi Andreas,

> On Sep 24 2018, Ian Lance Taylor <iant@golang.org> wrote:
>
>> * Makefile.am (mostlyclean-local): Run chmod on check-go-dir to
>> make sure it is writable.
>> (check-go-tools): Likewise.
>
> $ make check-gotools
> make[1]: Entering directory `/usr/local/gcc/gcc-20180926/Build/gotools'
> chmod -R u+w check-go-dir
> chmod: cannot access `check-go-dir': No such file or directory
> make[1]: *** [check-go-tool] Error 1
> make[1]: Leaving directory `/usr/local/gcc/gcc-20180926/Build/gotools'
> make: *** [check-gotools] Error 2

I noticed the same when finding that gotools.{sum,log} hadn't been
generated.

The following patch fixed it for me.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University


2018-09-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

	* Makefile.am (mostlyclean-local): Ignore chmod errors.
	(check-go-tool): Likewise.
	* Makefile.in: Regenerate.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: gotools-go111-chmod.patch --]
[-- Type: text/x-patch, Size: 837 bytes --]

# HG changeset patch
# Parent  b78b7013b47fb4c190e7b1e2a21aaa7e2dee7674
Ignore chmod errors during mostlyclean-local, check-go-tool

diff --git a/gotools/Makefile.am b/gotools/Makefile.am
--- a/gotools/Makefile.am
+++ b/gotools/Makefile.am
@@ -123,7 +123,7 @@ MOSTLYCLEANFILES = \
 	*.sent
 
 mostlyclean-local:
-	chmod -R u+w check-go-dir
+	-chmod -R u+w check-go-dir
 	rm -rf check-go-dir check-runtime-dir cgo-test-dir carchive-test-dir
 
 if NATIVE
@@ -229,7 +229,7 @@ ECHO_ENV = PATH=`echo $(abs_builddir):$$
 
 # check-go-tool runs `go test cmd/go` in our environment.
 check-go-tool: go$(EXEEXT) $(noinst_PROGRAMS) check-head check-gccgo check-gcc
-	chmod -R u+w check-go-dir
+	-chmod -R u+w check-go-dir
 	rm -rf check-go-dir cmd_go-testlog
 	$(MKDIR_P) check-go-dir/src/cmd/go
 	cp $(cmdsrcdir)/go/*.go check-go-dir/src/cmd/go/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
                   ` (3 preceding siblings ...)
  2018-09-26  7:57 ` Andreas Schwab
@ 2018-09-26 11:12 ` Andreas Schwab
  2018-09-26 12:49   ` Ian Lance Taylor
  2018-10-01 20:18   ` Ian Lance Taylor
  2018-09-26 14:52 ` H.J. Lu
  2018-09-28 14:28 ` Rainer Orth
  6 siblings, 2 replies; 33+ messages in thread
From: Andreas Schwab @ 2018-09-26 11:12 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

All execution tests are now failing with "fatal error: impossible call
to aeshashbody".

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26 11:12 ` Andreas Schwab
@ 2018-09-26 12:49   ` Ian Lance Taylor
  2018-10-01 20:18   ` Ian Lance Taylor
  1 sibling, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-26 12:49 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gcc-patches, gofrontend-dev

On Wed, Sep 26, 2018 at 3:54 AM, Andreas Schwab <schwab@suse.de> wrote:
>
> All execution tests are now failing with "fatal error: impossible call
> to aeshashbody".

Which target?

Ian

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26  8:59   ` Rainer Orth
@ 2018-09-26 12:54     ` Ian Lance Taylor
  0 siblings, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-26 12:54 UTC (permalink / raw)
  To: Rainer Orth; +Cc: Andreas Schwab, gcc-patches, gofrontend-dev

On Wed, Sep 26, 2018 at 1:38 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>> On Sep 24 2018, Ian Lance Taylor <iant@golang.org> wrote:
>>
>>> * Makefile.am (mostlyclean-local): Run chmod on check-go-dir to
>>> make sure it is writable.
>>> (check-go-tools): Likewise.
>>
>> $ make check-gotools
>> make[1]: Entering directory `/usr/local/gcc/gcc-20180926/Build/gotools'
>> chmod -R u+w check-go-dir
>> chmod: cannot access `check-go-dir': No such file or directory
>> make[1]: *** [check-go-tool] Error 1
>> make[1]: Leaving directory `/usr/local/gcc/gcc-20180926/Build/gotools'
>> make: *** [check-gotools] Error 2
>
> I noticed the same when finding that gotools.{sum,log} hadn't been
> generated.
>
> The following patch fixed it for me.
>
>         Rainer
>
> --
> -----------------------------------------------------------------------------
> Rainer Orth, Center for Biotechnology, Bielefeld University
>
>
> 2018-09-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
>
>         * Makefile.am (mostlyclean-local): Ignore chmod errors.
>         (check-go-tool): Likewise.
>         * Makefile.in: Regenerate.

This is OK.  Thanks for writing it.  Please go ahead and commit.

Ian

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
                   ` (4 preceding siblings ...)
  2018-09-26 11:12 ` Andreas Schwab
@ 2018-09-26 14:52 ` H.J. Lu
  2018-09-26 15:16   ` H.J. Lu
  2018-10-01 20:28   ` Ian Lance Taylor
  2018-09-28 14:28 ` Rainer Orth
  6 siblings, 2 replies; 33+ messages in thread
From: H.J. Lu @ 2018-09-26 14:52 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Mon, Sep 24, 2018 at 2:46 PM, Ian Lance Taylor <iant@golang.org> wrote:
> I've committed a patch to update libgo to the 1.11 release.  As usual
> for these updates, the patch is too large to attach to this e-mail
> message.  I've attached some of the more relevant directories.  This
> update required some minor patches to the gotools directory and the Go
> testsuite, also included here.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.
>
> Ian
>
> 2018-09-24  Ian Lance Taylor  <iant@golang.org>
>
> * 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.

When building with -mx32, I got

/export/gnu/import/git/sources/gcc/libgo/go/runtime/malloc.go:309:44:
error: integer constant overflow
309 |  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
    |                                            ^

-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26 14:52 ` H.J. Lu
@ 2018-09-26 15:16   ` H.J. Lu
  2018-10-01 20:28   ` Ian Lance Taylor
  1 sibling, 0 replies; 33+ messages in thread
From: H.J. Lu @ 2018-09-26 15:16 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Wed, Sep 26, 2018 at 7:50 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Sep 24, 2018 at 2:46 PM, Ian Lance Taylor <iant@golang.org> wrote:
>> I've committed a patch to update libgo to the 1.11 release.  As usual
>> for these updates, the patch is too large to attach to this e-mail
>> message.  I've attached some of the more relevant directories.  This
>> update required some minor patches to the gotools directory and the Go
>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>> x86_64-pc-linux-gnu.  Committed to mainline.
>>
>> Ian
>>
>> 2018-09-24  Ian Lance Taylor  <iant@golang.org>
>>
>> * 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.
>
> When building with -mx32, I got
>
> /export/gnu/import/git/sources/gcc/libgo/go/runtime/malloc.go:309:44:
> error: integer constant overflow
> 309 |  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
>     |                                            ^
>

This seems to work:

diff --git a/libgo/go/runtime/malloc.go b/libgo/go/runtime/malloc.go
index ac4759ffbf1..c3445387057 100644
--- a/libgo/go/runtime/malloc.go
+++ b/libgo/go/runtime/malloc.go
@@ -306,7 +306,7 @@ const (
   //
   // On other platforms, the user address space is contiguous
   // and starts at 0, so no offset is necessary.
-  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
+  arenaBaseOffset uintptr = _64bit * sys.GoarchAmd64 * (1 << 47)

   // Max number of threads to run garbage collection.
   // 2, 3, and 4 are all plausible maximums depending


-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
                   ` (5 preceding siblings ...)
  2018-09-26 14:52 ` H.J. Lu
@ 2018-09-28 14:28 ` Rainer Orth
  2018-10-02 17:13   ` Ian Lance Taylor
  6 siblings, 1 reply; 33+ messages in thread
From: Rainer Orth @ 2018-09-28 14:28 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

> I've committed a patch to update libgo to the 1.11 release.  As usual
> for these updates, the patch is too large to attach to this e-mail
> message.  I've attached some of the more relevant directories.  This
> update required some minor patches to the gotools directory and the Go
> testsuite, also included here.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.

I just found another issue: unlike Solaris 11, Solaris 10 lacks memmem,
breaking the build:

/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c: In function 'Index':
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:96:6: error: implicit declaration of function 'memmem'; did you mean 'memset'? [-Werror=implicit-function-declaration]
96 |  p = memmem(a.__values, a.__count, b.__values, b.__count);
   |      ^~~~~~
   |      memset
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:96:4: error: assignment to 'const byte *' {aka 'const unsigned char *'} from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
96 |  p = memmem(a.__values, a.__count, b.__values, b.__count);
   |    ^
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c: In function 'IndexString':
/vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:111:4: error: assignment to 'const byte *' {aka 'const unsigned char *'} from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
111 |  p = memmem(a.str, a.len, b.str, b.len);
    |    ^

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26 11:12 ` Andreas Schwab
  2018-09-26 12:49   ` Ian Lance Taylor
@ 2018-10-01 20:18   ` Ian Lance Taylor
  1 sibling, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-01 20:18 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 432 bytes --]

On Wed, Sep 26, 2018 at 3:54 AM, Andreas Schwab <schwab@suse.de> wrote:
> All execution tests are now failing with "fatal error: impossible call
> to aeshashbody".

Thanks.  Fixed by this patch, which adds AES hash code for arm64 using
intrinsics.  Bootstrapped and tested on x86_64-pc-linux-gnu and
aarch4-unknown-linux-gnu.  Some other aarch64 tests failed; I'm not
sure if they failed before or not.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 12937 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264690)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-f4a224ec481957ca4f14d0e8cc4fe59cc95b3a49
+013a9e68c9a31f888733d46182d19f9e5d956f27
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/runtime/aeshash.c
===================================================================
--- libgo/runtime/aeshash.c	(revision 264648)
+++ libgo/runtime/aeshash.c	(working copy)
@@ -573,13 +573,412 @@ uintptr aeshashbody(void* p, uintptr see
 
 #endif // !defined(__x86_64__)
 
-#else // !defined(__i386__) && !defined(__x86_64__) || !defined(HAVE_AS_X86_AES)
+#elif defined(__aarch64__)
+
+// Undefine some identifiers that we pick up from the Go runtime package that
+// are used in arm_neon.h.
+
+#undef t1
+#undef tx
+#undef t2
+#undef t3
+#undef t4
+#undef t5
+
+#include <arm_neon.h>
+
+// Force appropriate CPU level.  We won't call here unless the CPU
+// supports it.
+
+#pragma GCC target("+crypto")
+
+// The arm64 version of aeshashbody.
+
+uintptr aeshashbody(void* p, uintptr seed, uintptr size, Slice aeskeysched) {
+	uint8x16_t *pseed;
+	uint32x4_t vinit32;
+	uint8x16_t vinit;
+	uint8x16_t vseed, vseed2, vseed3, vseed4;
+	uint8x16_t vseed5, vseed6, vseed7, vseed8;
+	uint8x16_t vval, vval2, vval3, vval4;
+	uint8x16_t vval5, vval6, vval7, vval8;
+	uint8x16_t vvalLoop, vvalLoop2, vvalLoop3, vvalLoop4;
+	uint8x16_t vvalLoop5, vvalLoop6, vvalLoop7, vvalLoop8;
+	uint8x16x2_t avval2;
+	uint8x16x3_t avseed3;
+
+	pseed = (uint8x16_t*)(aeskeysched.__values);
+
+	// Combined hash seed and length.
+	vinit32 = vdupq_n_u32(0);
+	vinit32[0] = (uint32)seed;
+	vinit32[1] = (uint32)size;
+	vinit = vreinterpretq_u8_u32(vinit32);
+
+	// Mix in per-process seed.
+	vseed = vaeseq_u8(*pseed, vinit);
+	++pseed;
+	// Scramble seed.
+	vseed = vaesmcq_u8(vseed);
+
+	if (size <= 16) {
+		if (size == 0) {
+			// Return 64 bits of scrambled input seed.
+			return vreinterpretq_u64_u8(vseed)[0];
+		} else if (size < 16) {
+			vval = vreinterpretq_u8_u32(vdupq_n_u32(0));
+			if ((size & 8) != 0) {
+				vval = vreinterpretq_u8_u64(vld1q_lane_u64((uint64_t*)(p), vreinterpretq_u64_u8(vval), 0));
+				p = (void*)((uint64_t*)(p) + 1);
+			}
+			if ((size & 4) != 0) {
+				vval = vreinterpretq_u8_u32(vld1q_lane_u32((uint32_t*)(p), vreinterpretq_u32_u8(vval), 2));
+				p = (void*)((uint32_t*)(p) + 1);
+			}
+			if ((size & 2) != 0) {
+				vval = vreinterpretq_u8_u16(vld1q_lane_u16((uint16_t*)(p), vreinterpretq_u16_u8(vval), 6));
+				p = (void*)((uint16_t*)(p) + 1);
+			}
+			if ((size & 1) != 0) {
+				vval = vld1q_lane_u8((uint8*)(p), vval, 14);
+			}
+		} else {
+			vval = *(uint8x16_t*)(p);
+		}
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval = vaeseq_u8(vval, vseed);
+		return vreinterpretq_u64_u8(vval)[0];
+	} else if (size <= 32) {
+		// Make a second seed.
+		vseed2 = vaeseq_u8(*pseed, vinit);
+		vseed2 = vaesmcq_u8(vseed2);
+		vval = *(uint8x16_t*)(p);
+		vval2 = *(uint8x16_t*)((char*)(p) + (size - 16));
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval2 = vaeseq_u8(vval2, vseed2);
+
+		vval ^= vval2;
+
+		return vreinterpretq_u64_u8(vval)[0];
+	} else if (size <= 64) {
+		avseed3 = vld1q_u8_x3((uint8*)(pseed));
+		vseed2 = avseed3.val[0];
+		vseed3 = avseed3.val[1];
+		vseed4 = avseed3.val[2];
+
+		vseed2 = vaeseq_u8(vseed2, vinit);
+		vseed2 = vaesmcq_u8(vseed2);
+		vseed3 = vaeseq_u8(vseed3, vinit);
+		vseed3 = vaesmcq_u8(vseed3);
+		vseed4 = vaeseq_u8(vseed4, vinit);
+		vseed4 = vaesmcq_u8(vseed4);
+
+		avval2 = vld1q_u8_x2((uint8*)(p));
+		vval = avval2.val[0];
+		vval2 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 32));
+		vval3 = avval2.val[0];
+		vval4 = avval2.val[1];
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+		vval4 = vaesmcq_u8(vval4);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+		vval4 = vaesmcq_u8(vval4);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+
+		vval ^= vval3;
+		vval2 ^= vval4;
+		vval ^= vval2;
+
+		return vreinterpretq_u64_u8(vval)[0];
+	} else if (size <= 128) {
+		// For some reason vld1q_u8_x4 is missing.
+		avseed3 = vld1q_u8_x3((uint8*)(pseed));
+		vseed2 = avseed3.val[0];
+		vseed3 = avseed3.val[1];
+		vseed4 = avseed3.val[2];
+		avseed3 = vld1q_u8_x3((uint8*)(pseed + 3));
+		vseed5 = avseed3.val[0];
+		vseed6 = avseed3.val[1];
+		vseed7 = avseed3.val[2];
+		vseed8 = *(pseed + 6);
+
+		vseed2 = vaeseq_u8(vseed2, vinit);
+		vseed2 = vaesmcq_u8(vseed2);
+		vseed3 = vaeseq_u8(vseed3, vinit);
+		vseed3 = vaesmcq_u8(vseed3);
+		vseed4 = vaeseq_u8(vseed4, vinit);
+		vseed4 = vaesmcq_u8(vseed4);
+		vseed5 = vaeseq_u8(vseed5, vinit);
+		vseed5 = vaesmcq_u8(vseed5);
+		vseed6 = vaeseq_u8(vseed6, vinit);
+		vseed6 = vaesmcq_u8(vseed6);
+		vseed7 = vaeseq_u8(vseed7, vinit);
+		vseed7 = vaesmcq_u8(vseed7);
+		vseed8 = vaeseq_u8(vseed8, vinit);
+		vseed8 = vaesmcq_u8(vseed8);
+
+		avval2 = vld1q_u8_x2((uint8*)(p));
+		vval = avval2.val[0];
+		vval2 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + 32);
+		vval3 = avval2.val[0];
+		vval4 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 64));
+		vval5 = avval2.val[0];
+		vval6 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 32));
+		vval7 = avval2.val[0];
+		vval8 = avval2.val[1];
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+		vval4 = vaesmcq_u8(vval4);
+		vval5 = vaeseq_u8(vval5, vseed5);
+		vval5 = vaesmcq_u8(vval5);
+		vval6 = vaeseq_u8(vval6, vseed6);
+		vval6 = vaesmcq_u8(vval6);
+		vval7 = vaeseq_u8(vval7, vseed7);
+		vval7 = vaesmcq_u8(vval7);
+		vval8 = vaeseq_u8(vval8, vseed8);
+		vval8 = vaesmcq_u8(vval8);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+		vval4 = vaesmcq_u8(vval4);
+		vval5 = vaeseq_u8(vval5, vseed5);
+		vval5 = vaesmcq_u8(vval5);
+		vval6 = vaeseq_u8(vval6, vseed6);
+		vval6 = vaesmcq_u8(vval6);
+		vval7 = vaeseq_u8(vval7, vseed7);
+		vval7 = vaesmcq_u8(vval7);
+		vval8 = vaeseq_u8(vval8, vseed8);
+		vval8 = vaesmcq_u8(vval8);
+
+		vval = vaeseq_u8(vval, vseed);
+		vval2 = vaeseq_u8(vval2, vseed2);
+		vval3 = vaeseq_u8(vval3, vseed3);
+		vval4 = vaeseq_u8(vval4, vseed4);
+		vval5 = vaeseq_u8(vval5, vseed5);
+		vval6 = vaeseq_u8(vval6, vseed6);
+		vval7 = vaeseq_u8(vval7, vseed7);
+		vval8 = vaeseq_u8(vval8, vseed8);
+
+		vval ^= vval5;
+		vval2 ^= vval6;
+		vval3 ^= vval7;
+		vval4 ^= vval8;
+		vval ^= vval3;
+		vval2 ^= vval4;
+		vval ^= vval2;
+
+		return vreinterpretq_u64_u8(vval)[0];
+	} else {
+		// For some reason vld1q_u8_x4 is missing.
+		avseed3 = vld1q_u8_x3((uint8*)(pseed));
+		vseed2 = avseed3.val[0];
+		vseed3 = avseed3.val[1];
+		vseed4 = avseed3.val[2];
+		avseed3 = vld1q_u8_x3((uint8*)(pseed + 3));
+		vseed5 = avseed3.val[0];
+		vseed6 = avseed3.val[1];
+		vseed7 = avseed3.val[2];
+		vseed8 = *(pseed + 6);
+
+		vseed2 = vaeseq_u8(vseed2, vinit);
+		vseed2 = vaesmcq_u8(vseed2);
+		vseed3 = vaeseq_u8(vseed3, vinit);
+		vseed3 = vaesmcq_u8(vseed3);
+		vseed4 = vaeseq_u8(vseed4, vinit);
+		vseed4 = vaesmcq_u8(vseed4);
+		vseed5 = vaeseq_u8(vseed5, vinit);
+		vseed5 = vaesmcq_u8(vseed5);
+		vseed6 = vaeseq_u8(vseed6, vinit);
+		vseed6 = vaesmcq_u8(vseed6);
+		vseed7 = vaeseq_u8(vseed7, vinit);
+		vseed7 = vaesmcq_u8(vseed7);
+		vseed8 = vaeseq_u8(vseed8, vinit);
+		vseed8 = vaesmcq_u8(vseed8);
+
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 128));
+		vval = avval2.val[0];
+		vval2 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 96));
+		vval3 = avval2.val[0];
+		vval4 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 64));
+		vval5 = avval2.val[0];
+		vval6 = avval2.val[1];
+		avval2 = vld1q_u8_x2((uint8*)(p) + (size - 32));
+		vval7 = avval2.val[0];
+		vval8 = avval2.val[1];
+
+		vvalLoop = vseed;
+		vvalLoop2 = vseed2;
+		vvalLoop3 = vseed3;
+		vvalLoop4 = vseed4;
+		vvalLoop5 = vseed5;
+		vvalLoop6 = vseed6;
+		vvalLoop7 = vseed7;
+		vvalLoop8 = vseed8;
+
+		size--;
+		size >>= 7;
+		do {
+			vval = vaeseq_u8(vval, vvalLoop);
+			vval = vaesmcq_u8(vval);
+			vval2 = vaeseq_u8(vval2, vvalLoop2);
+			vval2 = vaesmcq_u8(vval2);
+			vval3 = vaeseq_u8(vval3, vvalLoop3);
+			vval3 = vaesmcq_u8(vval3);
+			vval4 = vaeseq_u8(vval4, vvalLoop4);
+			vval4 = vaesmcq_u8(vval4);
+			vval5 = vaeseq_u8(vval5, vvalLoop5);
+			vval5 = vaesmcq_u8(vval5);
+			vval6 = vaeseq_u8(vval6, vvalLoop6);
+			vval6 = vaesmcq_u8(vval6);
+			vval7 = vaeseq_u8(vval7, vvalLoop7);
+			vval7 = vaesmcq_u8(vval7);
+			vval8 = vaeseq_u8(vval8, vvalLoop8);
+			vval8 = vaesmcq_u8(vval8);
+
+			avval2 = vld1q_u8_x2((uint8*)(p));
+			vvalLoop = avval2.val[0];
+			vvalLoop2 = avval2.val[1];
+			avval2 = vld1q_u8_x2((uint8*)(p) + 32);
+			vvalLoop3 = avval2.val[0];
+			vvalLoop4 = avval2.val[1];
+			avval2 = vld1q_u8_x2((uint8*)(p) + 64);
+			vvalLoop5 = avval2.val[0];
+			vvalLoop6 = avval2.val[1];
+			avval2 = vld1q_u8_x2((uint8*)(p) + 96);
+			vvalLoop7 = avval2.val[0];
+			vvalLoop8 = avval2.val[1];
+
+			p = (void *)((uint8*)(p) + 128);
+
+			vval = vaeseq_u8(vval, vvalLoop);
+			vval = vaesmcq_u8(vval);
+			vval2 = vaeseq_u8(vval2, vvalLoop2);
+			vval2 = vaesmcq_u8(vval2);
+			vval3 = vaeseq_u8(vval3, vvalLoop3);
+			vval3 = vaesmcq_u8(vval3);
+			vval4 = vaeseq_u8(vval4, vvalLoop4);
+			vval4 = vaesmcq_u8(vval4);
+			vval5 = vaeseq_u8(vval5, vvalLoop5);
+			vval5 = vaesmcq_u8(vval5);
+			vval6 = vaeseq_u8(vval6, vvalLoop6);
+			vval6 = vaesmcq_u8(vval6);
+			vval7 = vaeseq_u8(vval7, vvalLoop7);
+			vval7 = vaesmcq_u8(vval7);
+			vval8 = vaeseq_u8(vval8, vvalLoop8);
+			vval8 = vaesmcq_u8(vval8);
+		} while (--size > 0);
+
+		vval = vaeseq_u8(vval, vvalLoop);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vvalLoop2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vvalLoop3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vvalLoop4);
+		vval4 = vaesmcq_u8(vval4);
+		vval5 = vaeseq_u8(vval5, vvalLoop5);
+		vval5 = vaesmcq_u8(vval5);
+		vval6 = vaeseq_u8(vval6, vvalLoop6);
+		vval6 = vaesmcq_u8(vval6);
+		vval7 = vaeseq_u8(vval7, vvalLoop7);
+		vval7 = vaesmcq_u8(vval7);
+		vval8 = vaeseq_u8(vval8, vvalLoop8);
+		vval8 = vaesmcq_u8(vval8);
+
+
+		vval = vaeseq_u8(vval, vvalLoop);
+		vval = vaesmcq_u8(vval);
+		vval2 = vaeseq_u8(vval2, vvalLoop2);
+		vval2 = vaesmcq_u8(vval2);
+		vval3 = vaeseq_u8(vval3, vvalLoop3);
+		vval3 = vaesmcq_u8(vval3);
+		vval4 = vaeseq_u8(vval4, vvalLoop4);
+		vval4 = vaesmcq_u8(vval4);
+		vval5 = vaeseq_u8(vval5, vvalLoop5);
+		vval5 = vaesmcq_u8(vval5);
+		vval6 = vaeseq_u8(vval6, vvalLoop6);
+		vval6 = vaesmcq_u8(vval6);
+		vval7 = vaeseq_u8(vval7, vvalLoop7);
+		vval7 = vaesmcq_u8(vval7);
+		vval8 = vaeseq_u8(vval8, vvalLoop8);
+		vval8 = vaesmcq_u8(vval8);
+
+		vval = vaeseq_u8(vval, vvalLoop);
+		vval2 = vaeseq_u8(vval2, vvalLoop2);
+		vval3 = vaeseq_u8(vval3, vvalLoop3);
+		vval4 = vaeseq_u8(vval4, vvalLoop4);
+		vval5 = vaeseq_u8(vval5, vvalLoop5);
+		vval6 = vaeseq_u8(vval6, vvalLoop6);
+		vval7 = vaeseq_u8(vval7, vvalLoop7);
+		vval8 = vaeseq_u8(vval8, vvalLoop8);
+
+		vval ^= vval5;
+		vval2 ^= vval6;
+		vval3 ^= vval7;
+		vval4 ^= vval8;
+		vval ^= vval3;
+		vval2 ^= vval4;
+		vval ^= vval2;
+
+		return vreinterpretq_u64_u8(vval)[0];
+	}
+}
+
+#else // (!defined(__i386__) && !defined(__x86_64__) || !defined(HAVE_AS_X86_AES)) && !defined(__aarch64__)
 
 uintptr aeshashbody(void* p __attribute__((unused)),
 		    uintptr seed __attribute__((unused)),
 		    uintptr size __attribute__((unused)),
 		    Slice aeskeysched __attribute__((unused))) {
-	// We should never get here on a non-x86 system.
+	// We should never get here on a non-x86, non-arm64 system.
 	runtime_throw("impossible call to aeshashbody");
 }
 

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26 14:52 ` H.J. Lu
  2018-09-26 15:16   ` H.J. Lu
@ 2018-10-01 20:28   ` Ian Lance Taylor
  2018-10-01 20:59     ` H.J. Lu
  1 sibling, 1 reply; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-01 20:28 UTC (permalink / raw)
  To: H.J. Lu; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 1407 bytes --]

On Wed, Sep 26, 2018 at 7:50 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Sep 24, 2018 at 2:46 PM, Ian Lance Taylor <iant@golang.org> wrote:
>> I've committed a patch to update libgo to the 1.11 release.  As usual
>> for these updates, the patch is too large to attach to this e-mail
>> message.  I've attached some of the more relevant directories.  This
>> update required some minor patches to the gotools directory and the Go
>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>> x86_64-pc-linux-gnu.  Committed to mainline.
>>
>> Ian
>>
>> 2018-09-24  Ian Lance Taylor  <iant@golang.org>
>>
>> * 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.
>
> When building with -mx32, I got
>
> /export/gnu/import/git/sources/gcc/libgo/go/runtime/malloc.go:309:44:
> error: integer constant overflow
> 309 |  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
>     |                                            ^


Thanks.  I fixed this problem by switching to using amd64p32 on x32.
Bootstrapped and ran testsuite on x86_64-pc-linux-gnu using
--with-multilib-list=m64,m32,mx32.  However, I ran this on a kernel
without x32 support, so while building succeeds, I couldn't actually
run any tests.  Let me know how they do.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2892 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264771)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-013a9e68c9a31f888733d46182d19f9e5d956f27
+2f56d51c6b3104242613c74b02fa6c63a2fe16c5
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/configure.ac
===================================================================
--- libgo/configure.ac	(revision 264648)
+++ libgo/configure.ac	(working copy)
@@ -252,8 +252,13 @@ changequote([,])dnl
 #ifdef __x86_64__
 #error 64-bit
 #endif],
-[GOARCH=386],
-[GOARCH=amd64])
+	[GOARCH=386],
+	AC_COMPILE_IFELSE([
+#ifdef __ILP32__
+#error x32
+#endif],
+	[GOARCH=amd64],
+	[GOARCH=amd64p32]))
     ;;
   ia64-*-*)
     GOARCH=ia64
Index: libgo/go/hash/crc32/crc32_amd64p32.go
===================================================================
--- libgo/go/hash/crc32/crc32_amd64p32.go	(revision 264648)
+++ libgo/go/hash/crc32/crc32_amd64p32.go	(working copy)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build ignore
+
 package crc32
 
 import "internal/cpu"
Index: libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go
===================================================================
--- libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go	(nonexistent)
+++ libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go	(working copy)
@@ -0,0 +1,9 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unix
+
+// Linux getrandom system call number.
+// See GetRandom in getrandom_linux.go.
+const randomTrap uintptr = 0x40000000 + 318
Index: libgo/go/runtime/lfstack_32bit.go
===================================================================
--- libgo/go/runtime/lfstack_32bit.go	(revision 264648)
+++ libgo/go/runtime/lfstack_32bit.go	(working copy)
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// +build 386 arm nacl armbe m68k mips mipsle mips64p32 mips64p32le nios2 ppc s390 sh shbe sparc
+// +build 386 amd64p32 arm nacl armbe m68k mips mipsle mips64p32 mips64p32le nios2 ppc s390 sh shbe sparc
 
 package runtime
 
Index: libgo/goarch.sh
===================================================================
--- libgo/goarch.sh	(revision 264648)
+++ libgo/goarch.sh	(working copy)
@@ -57,10 +57,15 @@ case $goarch in
 	defaultphyspagesize=8192
 	pcquantum=4
 	;;
-    amd64 | amd64p32)
+    amd64)
 	family=AMD64
 	hugepagesize="1 << 21"
 	;;
+    amd64p32)
+	family=AMD64
+	hugepagesize="1 << 21"
+	ptrsize=4
+	;;
     arm | armbe)
 	family=ARM
 	cachelinesize=32

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-01 20:28   ` Ian Lance Taylor
@ 2018-10-01 20:59     ` H.J. Lu
  2018-10-02  0:06       ` H.J. Lu
  0 siblings, 1 reply; 33+ messages in thread
From: H.J. Lu @ 2018-10-01 20:59 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Mon, Oct 1, 2018 at 1:18 PM, Ian Lance Taylor <iant@golang.org> wrote:
> On Wed, Sep 26, 2018 at 7:50 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Mon, Sep 24, 2018 at 2:46 PM, Ian Lance Taylor <iant@golang.org> wrote:
>>> I've committed a patch to update libgo to the 1.11 release.  As usual
>>> for these updates, the patch is too large to attach to this e-mail
>>> message.  I've attached some of the more relevant directories.  This
>>> update required some minor patches to the gotools directory and the Go
>>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>>> x86_64-pc-linux-gnu.  Committed to mainline.
>>>
>>> Ian
>>>
>>> 2018-09-24  Ian Lance Taylor  <iant@golang.org>
>>>
>>> * 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.
>>
>> When building with -mx32, I got
>>
>> /export/gnu/import/git/sources/gcc/libgo/go/runtime/malloc.go:309:44:
>> error: integer constant overflow
>> 309 |  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
>>     |                                            ^
>
>
> Thanks.  I fixed this problem by switching to using amd64p32 on x32.
> Bootstrapped and ran testsuite on x86_64-pc-linux-gnu using
> --with-multilib-list=m64,m32,mx32.  However, I ran this on a kernel
> without x32 support, so while building succeeds, I couldn't actually
> run any tests.  Let me know how they do.
>
> Ian

I am giving it try.

Thanks.

-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-01 20:59     ` H.J. Lu
@ 2018-10-02  0:06       ` H.J. Lu
  2018-10-02  0:59         ` Ian Lance Taylor
  0 siblings, 1 reply; 33+ messages in thread
From: H.J. Lu @ 2018-10-02  0:06 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Mon, Oct 1, 2018 at 1:27 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Oct 1, 2018 at 1:18 PM, Ian Lance Taylor <iant@golang.org> wrote:
>> On Wed, Sep 26, 2018 at 7:50 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>> On Mon, Sep 24, 2018 at 2:46 PM, Ian Lance Taylor <iant@golang.org> wrote:
>>>> I've committed a patch to update libgo to the 1.11 release.  As usual
>>>> for these updates, the patch is too large to attach to this e-mail
>>>> message.  I've attached some of the more relevant directories.  This
>>>> update required some minor patches to the gotools directory and the Go
>>>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>>>> x86_64-pc-linux-gnu.  Committed to mainline.
>>>>
>>>> Ian
>>>>
>>>> 2018-09-24  Ian Lance Taylor  <iant@golang.org>
>>>>
>>>> * 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.
>>>
>>> When building with -mx32, I got
>>>
>>> /export/gnu/import/git/sources/gcc/libgo/go/runtime/malloc.go:309:44:
>>> error: integer constant overflow
>>> 309 |  arenaBaseOffset uintptr = sys.GoarchAmd64 * (1 << 47)
>>>     |                                            ^
>>
>>
>> Thanks.  I fixed this problem by switching to using amd64p32 on x32.
>> Bootstrapped and ran testsuite on x86_64-pc-linux-gnu using
>> --with-multilib-list=m64,m32,mx32.  However, I ran this on a kernel
>> without x32 support, so while building succeeds, I couldn't actually
>> run any tests.  Let me know how they do.
>>
>> Ian
>
> I am giving it try.
>

Compared with my patch, there are some new failures:

--- FAIL: TestAtomicStop (1.82s)
    signal_test.go:384: iteration 5: output lost signal on tries: 2
    signal_test.go:392: iteration 5: lost signal
FAIL
FAIL: os/signal

FAIL: go.test/test/env.go execution,  -O2 -g
FAIL: go.test/test/nilptr2.go execution,  -O2 -g
FAIL: go.test/test/nilptr2.go execution,  -O2 -g

FAIL: net/http

--- FAIL: TestExtraFiles (0.21s)
    exec_test.go:611: Run: exit status 1; stdout "leaked parent file.
fd = 6; want 4\n", stderr ""
FAIL
FAIL: os/exec

goroutine 4538 [runnable]:
created by net_http_test.TestConcurrentServerServe
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest51963/test/serve_test.go:5394
+310

goroutine 4539 [runnable]:
created by net_http_test.TestConcurrentServerServe
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest51963/test/serve_test.go:5395
+421

eax    0x0
ebx    0x2
ecx    0xa6cf6a5c
edx    0x0
edi    0x0
esi    0x8
ebp    0xa6cf6a5c
esp    0xa6cf6a40
eip    0xf7ed4069
eflags 0x282
cs     0x23
fs     0x0
gs     0x63
FAIL: net/http

goroutine 23819 [GC worker (idle)]:
runtime.mcall
        /export/gnu/import/git/sources/gcc/libgo/runtime/proc.c:342
runtime.gopark
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/proc.go:333
runtime.gcBgMarkWorker
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/mgc.go:1773
runtime.kickoff
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/proc.go:1214
created by runtime.gcBgMarkStartWorkers
        /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/mgc.go:1719
+92

eax    0x0
ebx    0x2
ecx    0xaa4ecaec
edx    0x0
edi    0x0
esi    0x8
ebp    0xaa4ecaec
esp    0xaa4ecad0
eip    0xf7f81069
eflags 0x286
cs     0x23
fs     0x0
gs     0x63
FAIL: runtime

FAIL: go.test/test/env.go execution,  -O2 -g
FAIL: go.test/test/nilptr2.go execution,  -O2 -g
FAIL: go.test/test/nilptr2.go execution,  -O2 -g

-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02  0:06       ` H.J. Lu
@ 2018-10-02  0:59         ` Ian Lance Taylor
  2018-10-02  2:37           ` H.J. Lu
  2018-10-03 22:04           ` Ian Lance Taylor
  0 siblings, 2 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-02  0:59 UTC (permalink / raw)
  To: H.J. Lu; +Cc: gcc-patches, gofrontend-dev

On Mon, Oct 1, 2018 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Compared with my patch, there are some new failures:

Thanks.  We probably need a patch in gcc/testsuite/go.test/go-test.exp
to set goarch to amd64p32 when appropriate.

Other than that there seems to be some sort of signal handling
problem.  Hard to say what that might be.

Ian


> --- FAIL: TestAtomicStop (1.82s)
>     signal_test.go:384: iteration 5: output lost signal on tries: 2
>     signal_test.go:392: iteration 5: lost signal
> FAIL
> FAIL: os/signal
>
> FAIL: go.test/test/env.go execution,  -O2 -g
> FAIL: go.test/test/nilptr2.go execution,  -O2 -g
> FAIL: go.test/test/nilptr2.go execution,  -O2 -g
>
> FAIL: net/http
>
> --- FAIL: TestExtraFiles (0.21s)
>     exec_test.go:611: Run: exit status 1; stdout "leaked parent file.
> fd = 6; want 4\n", stderr ""
> FAIL
> FAIL: os/exec
>
> goroutine 4538 [runnable]:
> created by net_http_test.TestConcurrentServerServe
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest51963/test/serve_test.go:5394
> +310
>
> goroutine 4539 [runnable]:
> created by net_http_test.TestConcurrentServerServe
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest51963/test/serve_test.go:5395
> +421
>
> eax    0x0
> ebx    0x2
> ecx    0xa6cf6a5c
> edx    0x0
> edi    0x0
> esi    0x8
> ebp    0xa6cf6a5c
> esp    0xa6cf6a40
> eip    0xf7ed4069
> eflags 0x282
> cs     0x23
> fs     0x0
> gs     0x63
> FAIL: net/http
>
> goroutine 23819 [GC worker (idle)]:
> runtime.mcall
>         /export/gnu/import/git/sources/gcc/libgo/runtime/proc.c:342
> runtime.gopark
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/proc.go:333
> runtime.gcBgMarkWorker
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/mgc.go:1773
> runtime.kickoff
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/proc.go:1214
> created by runtime.gcBgMarkStartWorkers
>         /export/build/gnu/tools-build/gcc-x32/build-x86_64-linux/x86_64-pc-linux-gnu/32/libgo/gotest93522/test/mgc.go:1719
> +92
>
> eax    0x0
> ebx    0x2
> ecx    0xaa4ecaec
> edx    0x0
> edi    0x0
> esi    0x8
> ebp    0xaa4ecaec
> esp    0xaa4ecad0
> eip    0xf7f81069
> eflags 0x286
> cs     0x23
> fs     0x0
> gs     0x63
> FAIL: runtime
>
> FAIL: go.test/test/env.go execution,  -O2 -g
> FAIL: go.test/test/nilptr2.go execution,  -O2 -g
> FAIL: go.test/test/nilptr2.go execution,  -O2 -g
>
> --
> H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02  0:59         ` Ian Lance Taylor
@ 2018-10-02  2:37           ` H.J. Lu
  2018-10-02  4:09             ` Ian Lance Taylor
  2018-10-03 22:04           ` Ian Lance Taylor
  1 sibling, 1 reply; 33+ messages in thread
From: H.J. Lu @ 2018-10-02  2:37 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: GCC Patches, gofrontend-dev

On Mon, Oct 1, 2018 at 5:06 PM Ian Lance Taylor <iant@golang.org> wrote:
>
> On Mon, Oct 1, 2018 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > Compared with my patch, there are some new failures:
>
> Thanks.  We probably need a patch in gcc/testsuite/go.test/go-test.exp
> to set goarch to amd64p32 when appropriate.
>
> Other than that there seems to be some sort of signal handling
> problem.  Hard to say what that might be.
>

Does amd64p32 disable any amd64 specific handling?

-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02  2:37           ` H.J. Lu
@ 2018-10-02  4:09             ` Ian Lance Taylor
  2018-10-03 14:09               ` H.J. Lu
  0 siblings, 1 reply; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-02  4:09 UTC (permalink / raw)
  To: H.J. Lu; +Cc: GCC Patches, gofrontend-dev

On Mon, Oct 1, 2018 at 6:57 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Oct 1, 2018 at 5:06 PM Ian Lance Taylor <iant@golang.org> wrote:
>>
>> On Mon, Oct 1, 2018 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> >
>> > Compared with my patch, there are some new failures:
>>
>> Thanks.  We probably need a patch in gcc/testsuite/go.test/go-test.exp
>> to set goarch to amd64p32 when appropriate.
>>
>> Other than that there seems to be some sort of signal handling
>> problem.  Hard to say what that might be.
>>
>
> Does amd64p32 disable any amd64 specific handling?

Not as far as I can see.

Ian

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-28 14:28 ` Rainer Orth
@ 2018-10-02 17:13   ` Ian Lance Taylor
  2018-10-04 12:05     ` Rainer Orth
  0 siblings, 1 reply; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-02 17:13 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 1839 bytes --]

On Fri, Sep 28, 2018 at 7:22 AM, Rainer Orth
<ro@cebitec.uni-bielefeld.de> wrote:
>
>> I've committed a patch to update libgo to the 1.11 release.  As usual
>> for these updates, the patch is too large to attach to this e-mail
>> message.  I've attached some of the more relevant directories.  This
>> update required some minor patches to the gotools directory and the Go
>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>> x86_64-pc-linux-gnu.  Committed to mainline.
>
> I just found another issue: unlike Solaris 11, Solaris 10 lacks memmem,
> breaking the build:
>
> /vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c: In function 'Index':
> /vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:96:6: error: implicit declaration of function 'memmem'; did you mean 'memset'? [-Werror=implicit-function-declaration]
> 96 |  p = memmem(a.__values, a.__count, b.__values, b.__count);
>    |      ^~~~~~
>    |      memset
> /vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:96:4: error: assignment to 'const byte *' {aka 'const unsigned char *'} from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
> 96 |  p = memmem(a.__values, a.__count, b.__values, b.__count);
>    |    ^
> /vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c: In function 'IndexString':
> /vol/gcc/src/hg/trunk/local/libgo/go/internal/bytealg/bytealg.c:111:4: error: assignment to 'const byte *' {aka 'const unsigned char *'} from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
> 111 |  p = memmem(a.str, a.len, b.str, b.len);
>     |    ^

Thanks for the note.  This patch should fix the problem.  Bootstrapped
and ran Go tests on x86_64-pc-linux-gnu, both normally and pretending
that the system had no memmem.  Committed to mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1994 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264793)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-098e36f4ddfcf50aeb34509b5f25b86d7050749c
+bde5ac90e0b4efdf3e9a4d72af4eb23250608611
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/configure.ac
===================================================================
--- libgo/configure.ac	(revision 264772)
+++ libgo/configure.ac	(working copy)
@@ -544,7 +544,7 @@ AC_CHECK_HEADERS([linux/filter.h linux/i
 
 AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes)
 
-AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr)
+AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr memmem)
 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
 
Index: libgo/go/internal/bytealg/bytealg.c
===================================================================
--- libgo/go/internal/bytealg/bytealg.c	(revision 264648)
+++ libgo/go/internal/bytealg/bytealg.c	(working copy)
@@ -10,6 +10,33 @@
 #include "runtime.h"
 #include "array.h"
 
+#ifndef HAVE_MEMMEM
+
+#define memmem goMemmem
+
+static const void *goMemmem(const void *in, size_t inl, const void *s, size_t sl) {
+	const char *p;
+	char first;
+	const char *stop;
+
+	if (sl == 0) {
+		return in;
+	}
+	if (inl < sl) {
+		return nil;
+	}
+	first = *(const char *)(s);
+	stop = (const char *)(in) + (inl - sl);
+	for (p = (const char *)(in); p <= stop; p++) {
+		if (*p == first && __builtin_memcmp(p + 1, (const char *)(s) + 1, sl - 1) == 0) {
+			return (const void *)(p);
+		}
+	}
+	return nil;
+}
+
+#endif
+
 intgo Compare(struct __go_open_array, struct __go_open_array)
   __asm__(GOSYM_PREFIX "internal_bytealg.Compare")
   __attribute__((no_split_stack));

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02  4:09             ` Ian Lance Taylor
@ 2018-10-03 14:09               ` H.J. Lu
  0 siblings, 0 replies; 33+ messages in thread
From: H.J. Lu @ 2018-10-03 14:09 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: GCC Patches, gofrontend-dev

On Mon, Oct 1, 2018 at 9:08 PM Ian Lance Taylor <iant@golang.org> wrote:
>
> On Mon, Oct 1, 2018 at 6:57 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> > On Mon, Oct 1, 2018 at 5:06 PM Ian Lance Taylor <iant@golang.org> wrote:
> >>
> >> On Mon, Oct 1, 2018 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> >> >
> >> > Compared with my patch, there are some new failures:
> >>
> >> Thanks.  We probably need a patch in gcc/testsuite/go.test/go-test.exp
> >> to set goarch to amd64p32 when appropriate.
> >>
> >> Other than that there seems to be some sort of signal handling
> >> problem.  Hard to say what that might be.
> >>
> >
> > Does amd64p32 disable any amd64 specific handling?
>
> Not as far as I can see.
>

These tests aren't very reliable.  Let's go with your patch.  At least, it
builds for x32.

Thanks.

-- 
H.J.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02  0:59         ` Ian Lance Taylor
  2018-10-02  2:37           ` H.J. Lu
@ 2018-10-03 22:04           ` Ian Lance Taylor
  1 sibling, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-03 22:04 UTC (permalink / raw)
  To: H.J. Lu; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 843 bytes --]

On Mon, Oct 1, 2018 at 5:06 PM, Ian Lance Taylor <iant@golang.org> wrote:
> On Mon, Oct 1, 2018 at 4:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> Compared with my patch, there are some new failures:
>
> Thanks.  We probably need a patch in gcc/testsuite/go.test/go-test.exp
> to set goarch to amd64p32 when appropriate.

This is that patch.  I figured out how to run x32 binaries on my
system.  With this patch, everything passes except some code using
getpwuid_r, which also fails in plain C so I'm not going to worry
about it.  That said, I do not see some of the failures you mentioned.

In any case, this patch does pass bootstrap and testing on
x86_64-pc-linux-gnu both with and without -mx32.  Committed to
mainline.

Ian

2018-10-03  Ian Lance Taylor  <iant@google.com>

* go.test/go-test.exp (go-set-goarch): Use amd64p32 on x32.

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 390 bytes --]

Index: go.test/go-test.exp
===================================================================
--- go.test/go-test.exp	(revision 264816)
+++ go.test/go-test.exp	(working copy)
@@ -203,6 +203,8 @@
 	"x86_64-*-*" {
 	    if [check_effective_target_ia32] {
 		set goarch "386"
+	    } elseif [check_effective_target_x32] {
+		set goarch "amd64p32"
 	    } else {
 		set goarch "amd64"
 	    }

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-10-02 17:13   ` Ian Lance Taylor
@ 2018-10-04 12:05     ` Rainer Orth
  0 siblings, 0 replies; 33+ messages in thread
From: Rainer Orth @ 2018-10-04 12:05 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

Hi Ian,

> Thanks for the note.  This patch should fix the problem.  Bootstrapped
> and ran Go tests on x86_64-pc-linux-gnu, both normally and pretending
> that the system had no memmem.  Committed to mainline.

I've now verified the patch on i386-pc-solaris2.10: bootstrap restored.

Thanks.
        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-28  7:13 ` Uros Bizjak
@ 2018-10-02 15:13   ` Ian Lance Taylor
  0 siblings, 0 replies; 33+ messages in thread
From: Ian Lance Taylor @ 2018-10-02 15:13 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 1381 bytes --]

On Fri, Sep 28, 2018 at 12:05 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Wed, Sep 26, 2018 at 9:57 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>> I've committed a patch to update libgo to the 1.11 release.  As usual
>> for these updates, the patch is too large to attach to this e-mail
>> message.  I've attached some of the more relevant directories.  This
>> update required some minor patches to the gotools directory and the Go
>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>> x86_64-pc-linux-gnu.  Committed to mainline.
>
> There is one new libgo failure on CentOS 5.11:
>
> --- FAIL: TestSplice (0.18s)
>     --- FAIL: TestSplice/readerAtEOF (0.01s)
>         splice_test.go:228: closed connection: got err = pipe2:
> function not implemented, handled = false, want handled = true
> FAIL
> FAIL: net
>
> as there is no pipe2 on old systems.

This isn't a real failure, only a testsuite failure.  I believe that
this patch will fix it.  The test is assuming that the unexported
slice function will handle the splice, but if pipe2 does not work then
it doesn't.  The relevant code in internal/poll/splice_linux.go says
"Falling back to pipe is possible, but prior to 2.6.29 splice returns
-EAGAIN instead of 0 when the connection is closed."  Bootstrapped and
ran Go tests on x86_64-pc-linux-gnu (on a newer kernel).  Committed to
mainline.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1139 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264773)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-53d0d7ca278a5612fcdb5fb098e7bf950a0178ef
+098e36f4ddfcf50aeb34509b5f25b86d7050749c
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/net/splice_test.go
===================================================================
--- libgo/go/net/splice_test.go	(revision 264648)
+++ libgo/go/net/splice_test.go	(working copy)
@@ -11,7 +11,9 @@ import (
 	"fmt"
 	"io"
 	"io/ioutil"
+	"os"
 	"sync"
+	"syscall"
 	"testing"
 )
 
@@ -225,6 +227,10 @@ func testSpliceReaderAtEOF(t *testing.T)
 	serverUp.Close()
 	_, err, handled := splice(serverDown.(*TCPConn).fd, serverUp)
 	if !handled {
+		if serr, ok := err.(*os.SyscallError); ok && serr.Syscall == "pipe2" && serr.Err == syscall.ENOSYS {
+			t.Skip("pipe2 not supported")
+		}
+
 		t.Errorf("closed connection: got err = %v, handled = %t, want handled = true", err, handled)
 	}
 	lr := &io.LimitedReader{

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26  7:58 Uros Bizjak
  2018-09-26 15:22 ` Ian Lance Taylor
@ 2018-09-28  7:13 ` Uros Bizjak
  2018-10-02 15:13   ` Ian Lance Taylor
  1 sibling, 1 reply; 33+ messages in thread
From: Uros Bizjak @ 2018-09-28  7:13 UTC (permalink / raw)
  To: Ian Taylor; +Cc: gcc-patches, gofrontend-dev

On Wed, Sep 26, 2018 at 9:57 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
> I've committed a patch to update libgo to the 1.11 release.  As usual
> for these updates, the patch is too large to attach to this e-mail
> message.  I've attached some of the more relevant directories.  This
> update required some minor patches to the gotools directory and the Go
> testsuite, also included here.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.

There is one new libgo failure on CentOS 5.11:

--- FAIL: TestSplice (0.18s)
    --- FAIL: TestSplice/readerAtEOF (0.01s)
        splice_test.go:228: closed connection: got err = pipe2:
function not implemented, handled = false, want handled = true
FAIL
FAIL: net

as there is no pipe2 on old systems.

Uros.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26 15:22 ` Ian Lance Taylor
@ 2018-09-27 20:26   ` Uros Bizjak
  0 siblings, 0 replies; 33+ messages in thread
From: Uros Bizjak @ 2018-09-27 20:26 UTC (permalink / raw)
  To: Ian Lance Taylor; +Cc: gcc-patches, gofrontend-dev

On Wed, Sep 26, 2018 at 5:18 PM, Ian Lance Taylor <iant@golang.org> wrote:
> On Wed, Sep 26, 2018 at 12:57 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>>> I've committed a patch to update libgo to the 1.11 release.  As usual
>>> for these updates, the patch is too large to attach to this e-mail
>>> message.  I've attached some of the more relevant directories.  This
>>> update required some minor patches to the gotools directory and the Go
>>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>>> x86_64-pc-linux-gnu.  Committed to mainline.
>>
>> Fails to build on alpha-linux-gnu:
>>
>> /space/homedirs/uros/gcc-svn/trunk/libgo/go/syscall/setuidgid_linux.go:11:16:
>> error: reference to undefined name ‘SYS_GETEUID’
>> 11 |  sys_GETEUID = SYS_GETEUID
>>    |                ^
>>
>> This is because /usr/include/asm/unistd.h says:
>>
>> /*
>>  * Ignore legacy syscalls that we don't use.
>>  */
>> #define __IGNORE_alarm
>> #define __IGNORE_creat
>> #define __IGNORE_getegid
>> #define __IGNORE_geteuid
>> #define __IGNORE_getgid
>> #define __IGNORE_getpid
>> #define __IGNORE_getppid
>> #define __IGNORE_getuid
>> #define __IGNORE_pause
>> #define __IGNORE_time
>> #define __IGNORE_utime
>> #define __IGNORE_umount2
>>
>> These legacy syscalls are undefined for alpha-linux-gnu.
>
> Thanks for the report.  This is only used for testing.  I've committed
> this patch, which I think should fix the problem.

Thanks, with your patch, I was able to build the library.

Uros.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
  2018-09-26  7:58 Uros Bizjak
@ 2018-09-26 15:22 ` Ian Lance Taylor
  2018-09-27 20:26   ` Uros Bizjak
  2018-09-28  7:13 ` Uros Bizjak
  1 sibling, 1 reply; 33+ messages in thread
From: Ian Lance Taylor @ 2018-09-26 15:22 UTC (permalink / raw)
  To: Uros Bizjak; +Cc: gcc-patches, gofrontend-dev

[-- Attachment #1: Type: text/plain, Size: 1365 bytes --]

On Wed, Sep 26, 2018 at 12:57 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>> I've committed a patch to update libgo to the 1.11 release.  As usual
>> for these updates, the patch is too large to attach to this e-mail
>> message.  I've attached some of the more relevant directories.  This
>> update required some minor patches to the gotools directory and the Go
>> testsuite, also included here.  Bootstrapped and ran Go testsuite on
>> x86_64-pc-linux-gnu.  Committed to mainline.
>
> Fails to build on alpha-linux-gnu:
>
> /space/homedirs/uros/gcc-svn/trunk/libgo/go/syscall/setuidgid_linux.go:11:16:
> error: reference to undefined name ‘SYS_GETEUID’
> 11 |  sys_GETEUID = SYS_GETEUID
>    |                ^
>
> This is because /usr/include/asm/unistd.h says:
>
> /*
>  * Ignore legacy syscalls that we don't use.
>  */
> #define __IGNORE_alarm
> #define __IGNORE_creat
> #define __IGNORE_getegid
> #define __IGNORE_geteuid
> #define __IGNORE_getgid
> #define __IGNORE_getpid
> #define __IGNORE_getppid
> #define __IGNORE_getuid
> #define __IGNORE_pause
> #define __IGNORE_time
> #define __IGNORE_utime
> #define __IGNORE_umount2
>
> These legacy syscalls are undefined for alpha-linux-gnu.

Thanks for the report.  This is only used for testing.  I've committed
this patch, which I think should fix the problem.

Ian

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1669 bytes --]

Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE	(revision 264593)
+++ gcc/go/gofrontend/MERGE	(working copy)
@@ -1,4 +1,4 @@
-e7b98cf0a380eb45791cd5c52897224a686dcdec
+944784a93cf89d3a238e5607c993ea5f18f99c12
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/syscall/syscall_linux_test.go
===================================================================
--- libgo/go/syscall/syscall_linux_test.go	(revision 264546)
+++ libgo/go/syscall/syscall_linux_test.go	(working copy)
@@ -302,6 +302,10 @@ func TestSyscallNoError(t *testing.T) {
 		t.Skip("skipping root only test")
 	}
 
+	if syscall.Sys_GETEUID == 0 {
+		t.Skip("skipping because there is no geteuid system call")
+	}
+
 	// Copy the test binary to a location that a non-root user can read/execute
 	// after we drop privileges
 	tempDir, err := ioutil.TempDir("", "TestSyscallNoError")
Index: libgo/mksysinfo.sh
===================================================================
--- libgo/mksysinfo.sh	(revision 264572)
+++ libgo/mksysinfo.sh	(working copy)
@@ -138,6 +138,12 @@ if ! grep '^const SYS_GETDENTS64 ' ${OUT
   echo "const SYS_GETDENTS64 = 0" >> ${OUT}
 fi
 
+# The syscall package wants the geteuid system call number.  It isn't
+# defined on Alpha, which only provides the getresuid system call.
+if ! grep '^const SYS_GETEUID ' ${OUT} >/dev/null 2>&1; then
+  echo "const SYS_GETEUID = 0" >> ${OUT}
+fi
+
 # Stat constants.
 grep '^const _S_' gen-sysinfo.go | \
   sed -e 's/^\(const \)_\(S_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: libgo patch committed: Update to 1.11 release
@ 2018-09-26  7:58 Uros Bizjak
  2018-09-26 15:22 ` Ian Lance Taylor
  2018-09-28  7:13 ` Uros Bizjak
  0 siblings, 2 replies; 33+ messages in thread
From: Uros Bizjak @ 2018-09-26  7:58 UTC (permalink / raw)
  To: Ian Taylor; +Cc: gcc-patches, gofrontend-dev

> I've committed a patch to update libgo to the 1.11 release.  As usual
> for these updates, the patch is too large to attach to this e-mail
> message.  I've attached some of the more relevant directories.  This
> update required some minor patches to the gotools directory and the Go
> testsuite, also included here.  Bootstrapped and ran Go testsuite on
> x86_64-pc-linux-gnu.  Committed to mainline.

Fails to build on alpha-linux-gnu:

/space/homedirs/uros/gcc-svn/trunk/libgo/go/syscall/setuidgid_linux.go:11:16:
error: reference to undefined name ‘SYS_GETEUID’
11 |  sys_GETEUID = SYS_GETEUID
   |                ^

This is because /usr/include/asm/unistd.h says:

/*
 * Ignore legacy syscalls that we don't use.
 */
#define __IGNORE_alarm
#define __IGNORE_creat
#define __IGNORE_getegid
#define __IGNORE_geteuid
#define __IGNORE_getgid
#define __IGNORE_getpid
#define __IGNORE_getppid
#define __IGNORE_getuid
#define __IGNORE_pause
#define __IGNORE_time
#define __IGNORE_utime
#define __IGNORE_umount2

These legacy syscalls are undefined for alpha-linux-gnu.

Uros.

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2018-10-04 11:34 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-24 21:49 libgo patch committed: Update to 1.11 release Ian Lance Taylor
2018-09-25  7:06 ` Andreas Schwab
2018-09-25  7:57 ` Andreas Schwab
2018-09-25  9:05   ` Andreas Schwab
2018-09-25 14:39     ` Ian Lance Taylor
2018-09-25 13:10 ` Rainer Orth
2018-09-25 13:34   ` Rainer Orth
2018-09-26  5:04     ` Ian Lance Taylor
2018-09-26  8:55       ` Rainer Orth
2018-09-26  7:57 ` Andreas Schwab
2018-09-26  8:59   ` Rainer Orth
2018-09-26 12:54     ` Ian Lance Taylor
2018-09-26 11:12 ` Andreas Schwab
2018-09-26 12:49   ` Ian Lance Taylor
2018-10-01 20:18   ` Ian Lance Taylor
2018-09-26 14:52 ` H.J. Lu
2018-09-26 15:16   ` H.J. Lu
2018-10-01 20:28   ` Ian Lance Taylor
2018-10-01 20:59     ` H.J. Lu
2018-10-02  0:06       ` H.J. Lu
2018-10-02  0:59         ` Ian Lance Taylor
2018-10-02  2:37           ` H.J. Lu
2018-10-02  4:09             ` Ian Lance Taylor
2018-10-03 14:09               ` H.J. Lu
2018-10-03 22:04           ` Ian Lance Taylor
2018-09-28 14:28 ` Rainer Orth
2018-10-02 17:13   ` Ian Lance Taylor
2018-10-04 12:05     ` Rainer Orth
2018-09-26  7:58 Uros Bizjak
2018-09-26 15:22 ` Ian Lance Taylor
2018-09-27 20:26   ` Uros Bizjak
2018-09-28  7:13 ` Uros Bizjak
2018-10-02 15:13   ` Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).