This libgo patch by John Paul Adrian Glaubitz adds SH support to libgo. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu, which I admit doesn't prove much. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 256437) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -9705a1f4c37ad2c099e9fe6cd587d22a2a2ab2c3 +d8a9f7433a9e8a81c992ad2908818d2e84f3698b 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 256366) +++ libgo/configure.ac (working copy) @@ -208,10 +208,10 @@ AC_SUBST(USE_DEJAGNU) # supported by the gofrontend and all architectures supported by the # gc toolchain. # N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). -ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le ppc ppc64 ppc64le s390 s390x sparc sparc64" +ALLGOARCH="386 alpha amd64 amd64p32 arm armbe arm64 arm64be ia64 m68k mips mipsle mips64 mips64le mips64p32 mips64p32le ppc ppc64 ppc64le s390 s390x sh shbe sparc sparc64" # All known GOARCH_FAMILY values. -ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SPARC SPARC64" +ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SH SPARC SPARC64" GOARCH=unknown GOARCH_FAMILY=unknown @@ -366,6 +366,36 @@ GOARCH_MINFRAMESIZE=8 GOARCH_CACHELINESIZE=256 GOARCH_PCQUANTUM=2 ;; + sh3eb*-*-*) + GOARCH=shbe + GOARCH_FAMILY=SH + GOARCH_BIGENDIAN=true + GOARCH_CACHELINESIZE=16 + GOARCH_PCQUANTUM=2 + GOARCH_MINFRAMESIZE=4 + ;; + sh3*-*-*) + GOARCH=sh + GOARCH_FAMILY=SH + GOARCH_CACHELINESIZE=16 + GOARCH_PCQUANTUM=2 + GOARCH_MINFRAMESIZE=4 + ;; + sh4eb*-*-*) + GOARCH=shbe + GOARCH_FAMILY=SH + GOARCH_BIGENDIAN=true + GOARCH_CACHELINESIZE=32 + GOARCH_PCQUANTUM=2 + GOARCH_MINFRAMESIZE=4 + ;; + sh4*-*-*) + GOARCH=sh + GOARCH_FAMILY=SH + GOARCH_CACHELINESIZE=32 + GOARCH_PCQUANTUM=2 + GOARCH_MINFRAMESIZE=4 + ;; sparc*-*-*) AC_COMPILE_IFELSE([ #if defined(__sparcv9) || defined(__arch64__) Index: libgo/go/cmd/cgo/main.go =================================================================== --- libgo/go/cmd/cgo/main.go (revision 256366) +++ libgo/go/cmd/cgo/main.go (working copy) @@ -170,6 +170,8 @@ var ptrSizeMap = map[string]int64{ "ppc64le": 8, "s390": 4, "s390x": 8, + "sh": 4, + "shbe": 4, "sparc": 4, "sparc64": 8, } @@ -192,6 +194,8 @@ var intSizeMap = map[string]int64{ "ppc64le": 8, "s390": 4, "s390x": 8, + "sh": 4, + "shbe": 4, "sparc": 4, "sparc64": 8, } Index: libgo/go/go/build/syslist.go =================================================================== --- libgo/go/go/build/syslist.go (revision 256366) +++ libgo/go/go/build/syslist.go (working copy) @@ -5,4 +5,4 @@ package build const goosList = "aix android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows zos " -const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be alpha m68k ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc s390 s390x sparc sparc64 " +const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be alpha m68k ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc s390 s390x sh shbe sparc sparc64" Index: libgo/go/runtime/hash32.go =================================================================== --- libgo/go/runtime/hash32.go (revision 256366) +++ libgo/go/runtime/hash32.go (working copy) @@ -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 ppc s390 sparc +// +build 386 arm armbe m68k mips mipsle ppc s390 sh shbe sparc package runtime Index: libgo/go/runtime/lfstack_32bit.go =================================================================== --- libgo/go/runtime/lfstack_32bit.go (revision 256366) +++ 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 ppc s390 sparc +// +build 386 arm nacl armbe m68k mips mipsle mips64p32 mips64p32le ppc s390 sh shbe sparc package runtime Index: libgo/go/runtime/unaligned2.go =================================================================== --- libgo/go/runtime/unaligned2.go (revision 256366) +++ libgo/go/runtime/unaligned2.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 arm mips mipsle mips64 mips64le armbe m68k sparc alpha ia64 mips64p32 mips64p32le sparc64 +// +build arm mips mipsle mips64 mips64le armbe m68k sparc alpha ia64 mips64p32 mips64p32le sh shbe sparc64 package runtime Index: libgo/go/syscall/endian_big.go =================================================================== --- libgo/go/syscall/endian_big.go (revision 256366) +++ libgo/go/syscall/endian_big.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 ppc64 s390x mips mips64 armbe arm64be m68k ppc mips64p32 s390 sparc sparc64 +// +build ppc64 s390x mips mips64 armbe arm64be m68k ppc mips64p32 s390 shbe sparc sparc64 package syscall Index: libgo/go/syscall/endian_little.go =================================================================== --- libgo/go/syscall/endian_little.go (revision 256366) +++ libgo/go/syscall/endian_little.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 amd64 amd64p32 arm arm64 ppc64le mips64le mipsle alpha ia64 mips64p32le +// +build 386 amd64 amd64p32 arm arm64 ppc64le mips64le mipsle alpha ia64 mips64p32le sh package syscall Index: libgo/match.sh =================================================================== --- libgo/match.sh (revision 256366) +++ 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 | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sparc | sparc64) + 386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sh | shbe | sparc | sparc64) 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 | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sparc | sparc64) + 386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sh | shbe | sparc | sparc64) tag2=nonmatchingtag ;; esac Index: libgo/testsuite/gotest =================================================================== --- libgo/testsuite/gotest (revision 256366) +++ 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 | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sparc | sparc64) + 386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sh | shbe | sparc | sparc64) 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 | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sparc | sparc64) + 386 | amd64 | amd64p32 | arm | armbe | arm64 | arm64be | alpha | ia64 | m68k | ppc64 | ppc64le | mips | mipsle | mips64 | mips64le | mips64p32 | mips64p32le | ppc | s390 | s390x | sh | shbe | sparc | sparc64) tag2=nonmatchingtag ;; esac