Something like attached.
I will clean it up next week and submit it then.
It should also fix some arm64be related issues too.

Thanks,
Andrew Pinski

On Mon, Feb 3, 2020 at 6:17 PM Ian Lance Taylor <i...@golang.org> wrote:
>
> On Sun, Feb 2, 2020 at 2:27 AM Andreas Schwab <sch...@linux-m68k.org> wrote:
> >
> > I'm getting these errors on aarch64 with -mabi=ilp32:
> >
> > ../../../../libgo/go/runtime/mpagealloc.go:226:38: error: shift count 
> > overflow
> >   226 |  chunks [1 << pallocChunksL1Bits]*[1 << 
> > pallocChunksL2Bits]pallocData
> >       |                                      ^
> > ../../../../libgo/go/runtime/mgcscavenge.go:487:15: error: shift count 
> > overflow
> >   487 |    l2 := (*[1 << 
> > pallocChunksL2Bits]pallocData)(atomic.Loadp(unsafe.Pointer(&s.chunks[i.l1()])))
> >       |               ^
> > ../../../../libgo/go/runtime/mpagealloc.go:138:22: error: shift count 
> > overflow
> >   138 |   return uint(i) & (1<<pallocChunksL2Bits - 1)
> >       |                      ^
> > ../../../../libgo/go/runtime/mpagealloc.go:129:21: error: integer constant 
> > overflow
> >   129 |   return uint(i) >> pallocChunksL1Shift
> >       |                     ^
> > ../../../../libgo/go/runtime/mpagealloc_64bit.go:34:2: error: integer 
> > constant overflow
> >    34 |  summaryL0Bits,
> >       |  ^
>
> I'm not sure that gccgo ever fully worked with aarch64 -mabi=ilp32.
> In Go I think that will have to be represented with a new GOARCH
> value, arm64p32.
>
> Ian
From 14de07bd862051df38160da375fd286ce956785f Mon Sep 17 00:00:00 2001
From: Andrew Pinski <apin...@marvell.com>
Date: Wed, 5 Feb 2020 04:36:13 +0000
Subject: [PATCH] Add ilp32 ARM64 support to gccgo.

Change-Id: Ide52be45dd9fd5d2a5dfc7d138fc56d963d06632
Signed-off-by: Andrew Pinski <apin...@marvell.com>
---
 gcc/testsuite/go.test/go-test.exp             |  9 ++++++-
 libgo/configure                               | 27 ++++++++++++++-----
 libgo/configure.ac                            | 20 +++++++++-----
 libgo/go/cmd/cgo/main.go                      |  6 +++++
 libgo/go/cmd/go/go_test.go                    |  1 +
 libgo/go/cmd/go/internal/imports/build.go     |  2 ++
 libgo/go/cmd/internal/sys/arch.go             | 10 +++++++
 libgo/go/cmd/internal/sys/supported.go        | 10 ++++---
 libgo/go/crypto/aes/aes_gcm.go                |  2 +-
 libgo/go/crypto/aes/cipher_asm.go             |  2 +-
 libgo/go/crypto/aes/cipher_generic.go         |  2 +-
 libgo/go/golang.org/x/sys/cpu/byteorder.go    |  2 ++
 ...cpu_linux_arm64.go => cpu_linux_arm64x.go} |  2 ++
 .../golang.org/x/sys/cpu/cpu_linux_other.go   |  2 +-
 .../cpu/{cpu_arm64.go => cpu_arm64x.go}       |  2 ++
 libgo/go/internal/cpu/cpu_no_init.go          |  3 +++
 .../syscall/unix/getrandom_linux_generic.go   |  2 +-
 libgo/go/runtime/cputicks.go                  |  3 +++
 libgo/go/runtime/hash32.go                    |  2 +-
 libgo/go/runtime/lfstack_32bit.go             |  2 +-
 libgo/go/runtime/mpagealloc_32bit.go          |  2 +-
 .../{os_linux_arm64.go => os_linux_arm64x.go} |  2 +-
 libgo/go/runtime/os_linux_noauxv.go           |  2 +-
 libgo/go/syscall/endian_big.go                |  2 +-
 libgo/go/syscall/endian_little.go             |  2 +-
 libgo/goarch.sh                               |  7 ++++-
 libgo/match.sh                                |  4 +--
 libgo/testsuite/gotest                        |  4 +--
 28 files changed, 103 insertions(+), 33 deletions(-)
 rename libgo/go/golang.org/x/sys/cpu/{cpu_linux_arm64.go => 
cpu_linux_arm64x.go} (97%)
 rename libgo/go/internal/cpu/{cpu_arm64.go => cpu_arm64x.go} (98%)
 rename libgo/go/runtime/{os_linux_arm64.go => os_linux_arm64x.go} (94%)

diff --git a/gcc/testsuite/go.test/go-test.exp 
b/gcc/testsuite/go.test/go-test.exp
index 51f9b381d67..7afcba14b64 100644
--- a/gcc/testsuite/go.test/go-test.exp
+++ b/gcc/testsuite/go.test/go-test.exp
@@ -188,7 +188,14 @@ proc go-set-goarch { } {
 
     switch -glob $target_triplet {
        "aarch64*-*-*" {
-           set goarch "arm64"
+           if [check_effective_target_lp64] {
+               set goarch "arm64"
+           } else {
+               set goarch "amd64p32"
+           }
+           if [check_effective_target_aarch64_big_endian] {
+               append goarch "be"
+           }
        }
        "alpha*-*-*" {
            set goarch "alpha"
diff --git a/libgo/configure b/libgo/configure
index 2f787392abd..8eca900889f 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -14070,7 +14070,7 @@ esac
 #   - libgo/go/syscall/endian_XX.go
 #   - possibly others
 # - possibly update files in libgo/go/internal/syscall/unix
-ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips 
mipsle mips64 mips64le mips64p32 mips64p32le nios2 ppc ppc64 ppc64le riscv 
riscv64 s390 s390x sh shbe sparc sparc64 wasm"
+ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be arm64p32 
arm64p32be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le nios2 
ppc ppc64 ppc64le riscv riscv64 s390 s390x sh shbe sparc sparc64 wasm"
 
 # All known GOARCH family values.
 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 NIOS2 PPC 
PPC64 RISCV RISCV64 S390 S390X SH SPARC SPARC64 WASM"
@@ -14080,11 +14080,26 @@ case ${host} in
   alpha*-*-*)
     GOARCH=alpha
     ;;
-  aarch64-*-*)
-    GOARCH=arm64
-    ;;
-  aarch64_be-*-*)
-    GOARCH=arm64be
+  aarch64-*-* | aarch64_be-*-*)
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __ILP32__
+#error ilp32
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  GOARCH=arm64
+else
+  GOARCH=arm64p32
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    case "${host}" in
+    aarch64_be-*-*)
+        GOARCH="${GOARCH}be"
+        ;;
+    esac
     ;;
   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
     GOARCH=arm
diff --git a/libgo/configure.ac b/libgo/configure.ac
index f800d44a0e9..8c9ad289f6c 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -236,7 +236,7 @@ AC_SUBST(USE_DEJAGNU)
 #   - libgo/go/syscall/endian_XX.go
 #   - possibly others
 # - possibly update files in libgo/go/internal/syscall/unix
-ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips 
mipsle mips64 mips64le mips64p32 mips64p32le nios2 ppc ppc64 ppc64le riscv 
riscv64 s390 s390x sh shbe sparc sparc64 wasm"
+ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be arm64p32 
arm64p32be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le nios2 
ppc ppc64 ppc64le riscv riscv64 s390 s390x sh shbe sparc sparc64 wasm"
 
 # All known GOARCH family values.
 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 NIOS2 PPC 
PPC64 RISCV RISCV64 S390 S390X SH SPARC SPARC64 WASM"
@@ -246,11 +246,19 @@ case ${host} in
   alpha*-*-*)
     GOARCH=alpha
     ;;
-  aarch64-*-*)
-    GOARCH=arm64
-    ;;
-  aarch64_be-*-*)
-    GOARCH=arm64be
+  aarch64-*-* | aarch64_be-*-*)
+    AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#ifdef __ILP32__
+#error ilp32
+#endif
+])],
+      [GOARCH=arm64],
+      [GOARCH=arm64p32])
+    case "${host}" in
+    aarch64_be-*-*)
+        GOARCH="${GOARCH}be"
+        ;;
+    esac
     ;;
   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
     GOARCH=arm
diff --git a/libgo/go/cmd/cgo/main.go b/libgo/go/cmd/cgo/main.go
index 80f35681d75..c217a1c3ef7 100644
--- a/libgo/go/cmd/cgo/main.go
+++ b/libgo/go/cmd/cgo/main.go
@@ -173,6 +173,9 @@ var ptrSizeMap = map[string]int64{
        "amd64":       8,
        "arm":         4,
        "arm64":       8,
+       "arm64be":     8,
+       "arm64p32":    4,
+       "arm64p32be":  4,
        "m68k":        4,
        "mips":        4,
        "mipsle":      4,
@@ -199,6 +202,9 @@ var intSizeMap = map[string]int64{
        "amd64":       8,
        "arm":         4,
        "arm64":       8,
+       "arm64be":     8,
+       "arm64p32":    8,
+       "arm64p32be":  8,
        "m68k":        4,
        "mips":        4,
        "mipsle":      4,
diff --git a/libgo/go/cmd/go/go_test.go b/libgo/go/cmd/go/go_test.go
index ebd0c7ad0ad..9f8fbbe562e 100644
--- a/libgo/go/cmd/go/go_test.go
+++ b/libgo/go/cmd/go/go_test.go
@@ -4399,6 +4399,7 @@ func TestBuildmodePIE(t *testing.T) {
        platform := fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
        switch platform {
        case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", 
"linux/ppc64le", "linux/s390x",
+               "linux/arm64be", "linux/arm64p32", "linux/arm64p32be"
                "android/amd64", "android/arm", "android/arm64", "android/386",
                "freebsd/amd64":
        case "darwin/amd64":
diff --git a/libgo/go/cmd/go/internal/imports/build.go 
b/libgo/go/cmd/go/internal/imports/build.go
index eb070eef4c1..f5285e7458d 100644
--- a/libgo/go/cmd/go/internal/imports/build.go
+++ b/libgo/go/cmd/go/internal/imports/build.go
@@ -227,6 +227,8 @@ var KnownArch = map[string]bool{
        "armbe":       true,
        "arm64":       true,
        "arm64be":     true,
+       "arm64p32":    true,
+       "arm64p32be":  true,
        "ppc64":       true,
        "ppc64le":     true,
        "mips":        true,
diff --git a/libgo/go/cmd/internal/sys/arch.go 
b/libgo/go/cmd/internal/sys/arch.go
index e8687363def..636e8e7bdfe 100644
--- a/libgo/go/cmd/internal/sys/arch.go
+++ b/libgo/go/cmd/internal/sys/arch.go
@@ -89,6 +89,15 @@ var ArchARM64 = &Arch{
        MinLC:     4,
 }
 
+var ArchARM64BE = &Arch{
+       Name:      "arm64be",
+       Family:    ARM64,
+       ByteOrder: binary.BigEndian,
+       PtrSize:   8,
+       RegSize:   8,
+       MinLC:     4,
+}
+
 var ArchMIPS = &Arch{
        Name:      "mips",
        Family:    MIPS,
@@ -175,6 +184,7 @@ var Archs = [...]*Arch{
        ArchAMD64,
        ArchARM,
        ArchARM64,
+       ArchARM64BE,
        ArchMIPS,
        ArchMIPSLE,
        ArchMIPS64,
diff --git a/libgo/go/cmd/internal/sys/supported.go 
b/libgo/go/cmd/internal/sys/supported.go
index 02f833e945e..0a5873f77a0 100644
--- a/libgo/go/cmd/internal/sys/supported.go
+++ b/libgo/go/cmd/internal/sys/supported.go
@@ -12,7 +12,7 @@ package sys
 func RaceDetectorSupported(goos, goarch string) bool {
        switch goos {
        case "linux":
-               return goarch == "amd64" || goarch == "ppc64le" || goarch == 
"arm64"
+               return goarch == "amd64" || goarch == "ppc64le" || goarch == 
"arm64" || goarch == "arm64be"
        case "darwin", "freebsd", "netbsd", "windows":
                return goarch == "amd64"
        default:
@@ -25,7 +25,7 @@ func RaceDetectorSupported(goos, goarch string) bool {
 func MSanSupported(goos, goarch string) bool {
        switch goos {
        case "linux":
-               return goarch == "amd64" || goarch == "arm64"
+               return goarch == "amd64" || goarch == "arm64" || goarch == 
"arm64be"
        default:
                return false
        }
@@ -65,6 +65,7 @@ func BuildModeSupported(compiler, buildmode, goos, goarch 
string) bool {
        case "c-shared":
                switch platform {
                case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", 
"linux/ppc64le", "linux/s390x",
+                       "linux/arm64be", "linux/arm64p32", "linux/arm64p32be",
                        "android/amd64", "android/arm", "android/arm64", 
"android/386",
                        "freebsd/amd64",
                        "darwin/amd64", "darwin/386",
@@ -82,6 +83,7 @@ func BuildModeSupported(compiler, buildmode, goos, goarch 
string) bool {
        case "pie":
                switch platform {
                case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", 
"linux/ppc64le", "linux/s390x",
+                       "linux/arm64be", "linux/arm64p32", "linux/arm64p32be",
                        "android/amd64", "android/arm", "android/arm64", 
"android/386",
                        "freebsd/amd64",
                        "darwin/amd64",
@@ -92,7 +94,8 @@ func BuildModeSupported(compiler, buildmode, goos, goarch 
string) bool {
 
        case "shared":
                switch platform {
-               case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", 
"linux/ppc64le", "linux/s390x":
+               case "linux/386", "linux/amd64", "linux/arm", "linux/arm64", 
"linux/ppc64le", "linux/s390x",
+                       "linux/arm64be", "linux/arm64p32", "linux/arm64p32be":
                        return true
                }
                return false
@@ -100,6 +103,7 @@ func BuildModeSupported(compiler, buildmode, goos, goarch 
string) bool {
        case "plugin":
                switch platform {
                case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", 
"linux/s390x", "linux/ppc64le",
+                       "linux/arm64be", "linux/arm64p32", "linux/arm64p32be",
                        "android/amd64", "android/arm", "android/arm64", 
"android/386",
                        "darwin/amd64",
                        "freebsd/amd64":
diff --git a/libgo/go/crypto/aes/aes_gcm.go b/libgo/go/crypto/aes/aes_gcm.go
index 3888010025f..24f10dee648 100644
--- a/libgo/go/crypto/aes/aes_gcm.go
+++ b/libgo/go/crypto/aes/aes_gcm.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build ignore
-// -build amd64 arm64
+// -build amd64 arm64 arm64be arm64p32 arm64p32be
 
 package aes
 
diff --git a/libgo/go/crypto/aes/cipher_asm.go 
b/libgo/go/crypto/aes/cipher_asm.go
index dc4251acc3d..ff4bcab7e3d 100644
--- a/libgo/go/crypto/aes/cipher_asm.go
+++ b/libgo/go/crypto/aes/cipher_asm.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build ignore_for_gccgo
-// +build amd64 arm64
+// +build amd64 arm64 arm64be arm64p32 arm64p32be
 
 package aes
 
diff --git a/libgo/go/crypto/aes/cipher_generic.go 
b/libgo/go/crypto/aes/cipher_generic.go
index 19a930f09d8..f8d8f508d5e 100644
--- a/libgo/go/crypto/aes/cipher_generic.go
+++ b/libgo/go/crypto/aes/cipher_generic.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 !amd64,!s390x,!ppc64le,!arm64
+// -build !amd64,!s390x,!ppc64le,!arm64,!arm64be,!arm64p32,!arm64p32be
 
 package aes
 
diff --git a/libgo/go/golang.org/x/sys/cpu/byteorder.go 
b/libgo/go/golang.org/x/sys/cpu/byteorder.go
index da6b9e4363d..8044131bb57 100644
--- a/libgo/go/golang.org/x/sys/cpu/byteorder.go
+++ b/libgo/go/golang.org/x/sys/cpu/byteorder.go
@@ -15,11 +15,13 @@ func hostByteOrder() binary.ByteOrder {
        switch runtime.GOARCH {
        case "386", "amd64", "amd64p32",
                "arm", "arm64",
+               "arm64p32",
                "mipsle", "mips64le", "mips64p32le",
                "ppc64le",
                "riscv", "riscv64":
                return binary.LittleEndian
        case "armbe", "arm64be",
+               "arm64p32be",
                "mips", "mips64", "mips64p32",
                "ppc", "ppc64",
                "s390", "s390x",
diff --git a/libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go 
b/libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64x.go
similarity index 97%
rename from libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go
rename to libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64x.go
index 15a9b4a7cc7..b523a6c93ae 100644
--- a/libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64.go
+++ b/libgo/go/golang.org/x/sys/cpu/cpu_linux_arm64x.go
@@ -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 arm64 arm64be arm64p32 arm64p32be
+
 package cpu
 
 // HWCAP/HWCAP2 bits. These are exposed by Linux.
diff --git a/libgo/go/golang.org/x/sys/cpu/cpu_linux_other.go 
b/libgo/go/golang.org/x/sys/cpu/cpu_linux_other.go
index 6e8f9fe1920..7ab839234e9 100644
--- a/libgo/go/golang.org/x/sys/cpu/cpu_linux_other.go
+++ b/libgo/go/golang.org/x/sys/cpu/cpu_linux_other.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 !amd64,!amd64p32,!386,!arm64,!ppc64,!ppc64le,!s390x
+// +build 
!amd64,!amd64p32,!386,!arm64,!arm64be,!arm64p32,!arm64p32be,!ppc64,!ppc64le,!s390x
 
 package cpu
 
diff --git a/libgo/go/internal/cpu/cpu_arm64.go 
b/libgo/go/internal/cpu/cpu_arm64x.go
similarity index 98%
rename from libgo/go/internal/cpu/cpu_arm64.go
rename to libgo/go/internal/cpu/cpu_arm64x.go
index 99fa9918625..5b0f1c5f55f 100644
--- a/libgo/go/internal/cpu/cpu_arm64.go
+++ b/libgo/go/internal/cpu/cpu_arm64x.go
@@ -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 arm64 arm64be arm64p32 arm64p32be
+
 package cpu
 
 // arm64 doesn't have a 'cpuid' equivalent, so we rely on HWCAP/HWCAP2.
diff --git a/libgo/go/internal/cpu/cpu_no_init.go 
b/libgo/go/internal/cpu/cpu_no_init.go
index d4b2be8cf4f..50e839e3301 100644
--- a/libgo/go/internal/cpu/cpu_no_init.go
+++ b/libgo/go/internal/cpu/cpu_no_init.go
@@ -6,6 +6,9 @@
 // +build !amd64
 // +build !arm
 // +build !arm64
+// +build !arm64be
+// +build !arm64p32
+// +build !arm64p32be
 // +build !ppc64
 // +build !ppc64le
 // +build !s390x
diff --git a/libgo/go/internal/syscall/unix/getrandom_linux_generic.go 
b/libgo/go/internal/syscall/unix/getrandom_linux_generic.go
index 0c79ae54f4b..8b498077b27 100644
--- a/libgo/go/internal/syscall/unix/getrandom_linux_generic.go
+++ b/libgo/go/internal/syscall/unix/getrandom_linux_generic.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build linux
-// +build arm64 arm64be nios2 riscv64
+// +build arm64 arm64be arm64p32 arm64p32be nios2 riscv64
 
 package unix
 
diff --git a/libgo/go/runtime/cputicks.go b/libgo/go/runtime/cputicks.go
index c41a58bafd0..94c93b4c547 100644
--- a/libgo/go/runtime/cputicks.go
+++ b/libgo/go/runtime/cputicks.go
@@ -4,6 +4,9 @@
 
 // // +build !arm
 // // +build !arm64
+// // +build !arm64be
+// // +build !arm64p32
+// // +build !arm64p32be
 // // +build !mips64
 // // +build !mips64le
 // // +build !mips
diff --git a/libgo/go/runtime/hash32.go b/libgo/go/runtime/hash32.go
index fba6bc354b1..30254eefd84 100644
--- a/libgo/go/runtime/hash32.go
+++ b/libgo/go/runtime/hash32.go
@@ -6,7 +6,7 @@
 //   xxhash: https://code.google.com/p/xxhash/
 // cityhash: https://code.google.com/p/cityhash/
 
-// +build 386 arm armbe m68k mips mipsle nios2 ppc s390 sh shbe sparc
+// +build 386 arm armbe m68k mips mipsle nios2 ppc s390 sh shbe sparc arm64p32 
arm64p32be
 
 package runtime
 
diff --git a/libgo/go/runtime/lfstack_32bit.go 
b/libgo/go/runtime/lfstack_32bit.go
index 6da037e3f36..7612f02f040 100644
--- a/libgo/go/runtime/lfstack_32bit.go
+++ b/libgo/go/runtime/lfstack_32bit.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 amd64p32 arm armbe m68k mips mipsle mips64p32 mips64p32le nios2 
ppc s390 sh shbe sparc
+// +build 386 amd64p32 arm64p32 arm64p32be arm armbe m68k mips mipsle 
mips64p32 mips64p32le nios2 ppc s390 sh shbe sparc
 
 package runtime
 
diff --git a/libgo/go/runtime/mpagealloc_32bit.go 
b/libgo/go/runtime/mpagealloc_32bit.go
index d18970ca26c..2caf16fd321 100644
--- a/libgo/go/runtime/mpagealloc_32bit.go
+++ b/libgo/go/runtime/mpagealloc_32bit.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 arm mips mipsle wasm darwin,arm64 amd64p32 armbe m68k mips64p32 
mips64p32le nios2 ppc s390 sh shbe sparc
+// +build 386 arm mips mipsle wasm darwin,arm64 amd64p32 arm64p32 arm64p32be 
armbe m68k mips64p32 mips64p32le nios2 ppc s390 sh shbe sparc
 
 // wasm is a treated as a 32-bit architecture for the purposes of the page
 // allocator, even though it has 64-bit pointers. This is because any wasm
diff --git a/libgo/go/runtime/os_linux_arm64.go 
b/libgo/go/runtime/os_linux_arm64x.go
similarity index 94%
rename from libgo/go/runtime/os_linux_arm64.go
rename to libgo/go/runtime/os_linux_arm64x.go
index a482d47acdd..e4cfa210548 100644
--- a/libgo/go/runtime/os_linux_arm64.go
+++ b/libgo/go/runtime/os_linux_arm64x.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 arm64
+// +build arm64 arm64be arm64p32 arm64p32be
 
 package runtime
 
diff --git a/libgo/go/runtime/os_linux_noauxv.go 
b/libgo/go/runtime/os_linux_noauxv.go
index 895b4cd5f44..bbef4250fa0 100644
--- a/libgo/go/runtime/os_linux_noauxv.go
+++ b/libgo/go/runtime/os_linux_noauxv.go
@@ -3,7 +3,7 @@
 // license that can be found in the LICENSE file.
 
 // +build linux
-// +build !arm,!arm64,!mips,!mipsle,!mips64,!mips64le,!s390x,!ppc64,!ppc64le
+// +build 
!arm,!arm64,!arm64be,!arm64p32,!arm64p32be,!mips,!mipsle,!mips64,!mips64le,!s390x,!ppc64,!ppc64le
 
 package runtime
 
diff --git a/libgo/go/syscall/endian_big.go b/libgo/go/syscall/endian_big.go
index 24a4d1df240..a30e9827bcf 100644
--- a/libgo/go/syscall/endian_big.go
+++ b/libgo/go/syscall/endian_big.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 ppc64 s390x mips mips64 armbe arm64be m68k ppc mips64p32 s390 shbe 
sparc sparc64
+// +build ppc64 s390x mips mips64 armbe arm64be arm64p32be m68k ppc mips64p32 
s390 shbe sparc sparc64
 
 package syscall
 
diff --git a/libgo/go/syscall/endian_little.go 
b/libgo/go/syscall/endian_little.go
index 0cd2d7524c6..375aea85f0e 100644
--- a/libgo/go/syscall/endian_little.go
+++ b/libgo/go/syscall/endian_little.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 alpha amd64 amd64p32 arm arm64 ia64 mips64le mipsle mips64p32le 
nios2 ppc64le riscv64 sh wasm
+// +build 386 alpha amd64 amd64p32 arm arm64 arm64p32 ia64 mips64le mipsle 
mips64p32le nios2 ppc64le riscv64 sh wasm
 
 package syscall
 
diff --git a/libgo/goarch.sh b/libgo/goarch.sh
index a5b6217c931..bb71139ba4e 100755
--- a/libgo/goarch.sh
+++ b/libgo/goarch.sh
@@ -71,7 +71,7 @@ case $goarch in
                ;;
        esac
        ;;
-    arm64 | arm64be)
+    arm64 | arm64be | arm64p32 | arm64p32be )
        family=ARM64
        cachelinesize=32
        defaultphyspagesize=65536
@@ -82,6 +82,11 @@ case $goarch in
                bigendian=true
                ;;
        esac
+       case $goarch in
+           *p32*)
+               ptrsize=4
+               ;;
+       esac
        ;;
     ia64)
        family=IA64
diff --git a/libgo/match.sh b/libgo/match.sh
index cd35942f8bc..36439e4d6a8 100755
--- a/libgo/match.sh
+++ b/libgo/match.sh
@@ -116,7 +116,7 @@ for f in $gofiles; do
        aix | android | darwin | dragonfly | freebsd | illumos | hurd | js | 
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 | 
wasm)
+       386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | arm64p32 | 
arm64p32be | 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 | hurd | illumos | js | 
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 | 
wasm)
+       386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | arm64p32 | 
arm64p32be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | 
mips64p32 | mips64p32le | nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | 
s390x | sh | shbe | sparc | sparc64 | wasm)
            tag2=nonmatchingtag
            ;;
     esac
diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest
index 33f99d77a31..85bc932ad3b 100755
--- a/libgo/testsuite/gotest
+++ b/libgo/testsuite/gotest
@@ -308,7 +308,7 @@ x)
            aix | android | darwin | dragonfly | freebsd | hurd | illumos | js 
| 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 | wasm)
+           386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | arm64p32 | 
arm64p32be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | 
mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | 
s390x | sh | shbe | sparc | sparc64 | wasm)
                tag1=nonmatchingtag
                ;;
            esac
@@ -320,7 +320,7 @@ x)
            aix | android | darwin | dragonfly | freebsd | hurd | illumos | js 
| 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 | wasm)
+           386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | arm64p32 | 
arm64p32be | alpha | ia64 | m68k | mips | mipsle | mips64 | mips64le | 
mips64p32 | mips64p32le·| nios2 | ppc | ppc64 | ppc64le | riscv64 | s390 | 
s390x | sh | shbe | sparc | sparc64 | wasm)
                tag2=nonmatchingtag
                ;;
            esac
-- 
2.17.1

Reply via email to