libgo: support x32 as GOARCH=amd64p32 GOOS=linux
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 1 Oct 2018 20:17:11 +0000 (20:17 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 1 Oct 2018 20:17:11 +0000 (20:17 +0000)
    This is enough to let libgo build when configured using
    --with-multilib-list=m64,m32,mx32.  I don't have an x32-enabled kernel
    so I haven't tested whether it executes correctly.

    For https://gcc.gnu.org/PR87470

    Reviewed-on: https://go-review.googlesource.com/138817

From-SVN: r264772

gcc/go/gofrontend/MERGE
libgo/configure
libgo/configure.ac
libgo/go/hash/crc32/crc32_amd64p32.go
libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go [new file with mode: 0644]
libgo/go/runtime/lfstack_32bit.go
libgo/goarch.sh

index 69dd8b746b7805c2e08c8f6e40c5fbd21cd56376..6ad214689fb7bafee33a0a812b86ae79c4cf845d 100644 (file)
@@ -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 7166f94016bc9129a3cdc32a186ecb16b9f5df2f..f7996e115ebda1a9dc276364b4d340b5230a5181 100755 (executable)
@@ -13685,7 +13685,19 @@ _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=386
 else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __ILP32__
+#error x32
+#endif
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=amd64
+else
+  GOARCH=amd64p32
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     ;;
index 1c192752ab207b728e2fdbf738fe7a6c89d8aa59..20ce205f2f434d266f2201d1b2360641ee35bb65 100644 (file)
@@ -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 1ec44cb496a51ea940c87a3d9587ec2ca7912931..f61b801b4184da28d88a4f38a20b4761506f28d1 100644 (file)
@@ -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"
diff --git a/libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go b/libgo/go/internal/syscall/unix/getrandom_linux_amd64p32.go
new file mode 100644 (file)
index 0000000..911b608
--- /dev/null
@@ -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 1288c1a2aaa0b170f907aa383cf1a2441a1facea..f50c50895b491caa1fba8c411c934211c15349b6 100644 (file)
@@ -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 f5c0a34b1da2763d79eafc2453a59fe13b78129d..f7aef9d7ddeb4f677dbcc7b18637a68477e9ed9c 100755 (executable)
@@ -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