go/types: implement SizesFor for gccgo
authorIan Lance Taylor <ian@gcc.gnu.org>
Sun, 14 Jan 2018 04:59:01 +0000 (04:59 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Sun, 14 Jan 2018 04:59:01 +0000 (04:59 +0000)
    Move the architecture-specific settings out of configure.ac into a new
    shell script goarch.sh.  Use the new script to collect the values for
    all architectures to make them available in go/types.

    Also fix cmd/vet to pass the right compiler when it calls SizesFor.

    This fixes cmd/vet for systems that are not implemented in the gc
    toolchain, such as alpha and ia64.

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

From-SVN: r256655

gcc/go/gofrontend/MERGE
libgo/Makefile.am
libgo/Makefile.in
libgo/configure
libgo/configure.ac
libgo/go/cmd/vet/types.go
libgo/go/go/types/sizes.go
libgo/goarch.sh [new file with mode: 0755]
libgo/testsuite/Makefile.in

index 35bebbbf2658aaebe9bbf32e0eccae282ec1d9c3..7d87aa8ab53de07d49b0cfb6dc7e524861159329 100644 (file)
@@ -1,4 +1,4 @@
-fe8481db9f5b37eb9a0c329673789eaaf1335598
+4aa531c1765bba52848c6d71b9f57b593063d3ba
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index c8b444c7fd8baf2bd054c2f840a592201746c2de..32e1e4dd09ef590dbe4b1193f2388d97f163c7d4 100644 (file)
@@ -506,14 +506,14 @@ s-version: Makefile
        done
        echo >> version.go.tmp
        echo "const (" >> version.go.tmp
-       echo "  ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp
-       echo "  BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp
-       echo "  CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp
-       echo "  PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp
-       echo "  PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp
-       echo "  Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp
-       echo "  HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp
-       echo "  MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp
+       echo "  ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
+       echo "  BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
+       echo "  CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> version.go.tmp
+       echo "  DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
+       echo "  HugePageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) hugepagesize`" >> version.go.tmp
+       echo "  Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
+       echo "  MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
+       echo "  PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
        echo ")" >> version.go.tmp
        echo >> version.go.tmp
        for a in $(ALLGOOS); do \
@@ -548,6 +548,21 @@ s-objabi: Makefile
        $(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go
        $(STAMP) $@
 
+gccgosizes.go: s-gccgosizes; @true
+s-gccgosizes: Makefile goarch.sh
+       rm -f gccgosizes.go.tmp
+       echo "package types" > gccgosizes.go.tmp
+       echo >> gccgosizes.go.tmp
+       echo "var gccgoArchSizes = map[string]*StdSizes{" >> gccgosizes.go.tmp
+       for a in $(ALLGOARCH); do \
+         ptrsize=`$(SHELL) $(srcdir)/goarch.sh $$a ptrsize`; \
+         maxalign=`$(SHELL) $(srcdir)/goarch.sh $$a maxalign`; \
+         echo "        \"$$a\": {$${ptrsize}, $${maxalign}}," >> gccgosizes.go.tmp; \
+       done
+       echo "}" >> gccgosizes.go.tmp
+       $(SHELL) $(srcdir)/mvifdiff.sh gccgosizes.go.tmp gccgosizes.go
+       $(STAMP) $@
+
 runtime_sysinfo.go: s-runtime_sysinfo; @true
 s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go
        GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh
@@ -1159,6 +1174,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
 extra_go_files_runtime_internal_sys = version.go
 runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys)
 
+extra_go_files_go_types = gccgosizes.go
+go/types.lo.dep: $(extra_go_files_go_types)
+
 extra_go_files_cmd_internal_objabi = objabi.go
 cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
 
index 99fbd8c7308f3ac29c99490b46319dd3112f4628..4c69dbd7f26343324afafeb63cd5368454f7cce1 100644 (file)
@@ -303,14 +303,6 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 GOARCH = @GOARCH@
-GOARCH_BIGENDIAN = @GOARCH_BIGENDIAN@
-GOARCH_CACHELINESIZE = @GOARCH_CACHELINESIZE@
-GOARCH_FAMILY = @GOARCH_FAMILY@
-GOARCH_HUGEPAGESIZE = @GOARCH_HUGEPAGESIZE@
-GOARCH_INT64ALIGN = @GOARCH_INT64ALIGN@
-GOARCH_MINFRAMESIZE = @GOARCH_MINFRAMESIZE@
-GOARCH_PCQUANTUM = @GOARCH_PCQUANTUM@
-GOARCH_PHYSPAGESIZE = @GOARCH_PHYSPAGESIZE@
 GOC = @GOC@
 GOCFLAGS = $(CFLAGS)
 GOOS = @GOOS@
@@ -1212,6 +1204,7 @@ runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime
 # 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_go_types = gccgosizes.go
 extra_go_files_cmd_internal_objabi = objabi.go
 extra_go_files_cmd_go_internal_cfg = zdefaultcc.go
 extra_go_files_cmd_go_internal_load = zstdpkglist.go
@@ -3095,14 +3088,14 @@ s-version: Makefile
        done
        echo >> version.go.tmp
        echo "const (" >> version.go.tmp
-       echo "  ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp
-       echo "  BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp
-       echo "  CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp
-       echo "  PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp
-       echo "  PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp
-       echo "  Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp
-       echo "  HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp
-       echo "  MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp
+       echo "  ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
+       echo "  BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
+       echo "  CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> version.go.tmp
+       echo "  DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
+       echo "  HugePageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) hugepagesize`" >> version.go.tmp
+       echo "  Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
+       echo "  MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
+       echo "  PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
        echo ")" >> version.go.tmp
        echo >> version.go.tmp
        for a in $(ALLGOOS); do \
@@ -3137,6 +3130,21 @@ s-objabi: Makefile
        $(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go
        $(STAMP) $@
 
+gccgosizes.go: s-gccgosizes; @true
+s-gccgosizes: Makefile goarch.sh
+       rm -f gccgosizes.go.tmp
+       echo "package types" > gccgosizes.go.tmp
+       echo >> gccgosizes.go.tmp
+       echo "var gccgoArchSizes = map[string]*StdSizes{" >> gccgosizes.go.tmp
+       for a in $(ALLGOARCH); do \
+         ptrsize=`$(SHELL) $(srcdir)/goarch.sh $$a ptrsize`; \
+         maxalign=`$(SHELL) $(srcdir)/goarch.sh $$a maxalign`; \
+         echo "        \"$$a\": {$${ptrsize}, $${maxalign}}," >> gccgosizes.go.tmp; \
+       done
+       echo "}" >> gccgosizes.go.tmp
+       $(SHELL) $(srcdir)/mvifdiff.sh gccgosizes.go.tmp gccgosizes.go
+       $(STAMP) $@
+
 runtime_sysinfo.go: s-runtime_sysinfo; @true
 s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go
        GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh
@@ -3313,6 +3321,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))
 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)
+go/types.lo.dep: $(extra_go_files_go_types)
 cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
 cmd/go/internal/cfg.lo.dep: $(extra_go_files_cmd_go_internal_cfg)
 cmd/go/internal/load.lo.dep: $(extra_go_files_cmd_go_internal_load)
index 28e283c6316beae1e3ce0dba5733a9b10fa6c5e6..d0550c37c55a9bd95b3c96e8092566c1f9237137 100755 (executable)
@@ -632,14 +632,6 @@ GO_LIBCALL_OS_ARCH_FILE
 GO_LIBCALL_OS_FILE
 ALLGOARCHFAMILY
 ALLGOARCH
-GOARCH_MINFRAMESIZE
-GOARCH_HUGEPAGESIZE
-GOARCH_INT64ALIGN
-GOARCH_PCQUANTUM
-GOARCH_PHYSPAGESIZE
-GOARCH_CACHELINESIZE
-GOARCH_BIGENDIAN
-GOARCH_FAMILY
 GOARCH
 USE_DEJAGNU
 ALLGOOS
@@ -11114,7 +11106,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11118 "configure"
+#line 11109 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11220,7 +11212,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11224 "configure"
+#line 11215 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13644,46 +13636,41 @@ esac
 # All known GOARCH values.  This is the union of all architectures
 # 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).
+# To add a new architecture:
+# - add it to this list
+# - if appropriate, add an entry to ALLGOARCHFAMILY below
+# - add an entry to the case on ${host} below to set GOARCH
+# - update goarchList in libgo/go/go/build/syslist.go
+# - update goarch.sh to report the values for this architecture
+# - update go-set-goarch in gcc/testsuite/go.test/go-test.exp
+# - update ptrSizeMap and intSizeMap in libgo/go/cmd/cgo/main.go
+# - update arch lists in libgo/match.sh
+# - update arch lists in libgo/testsuite/gotest
+# - update +build lines in several places
+#   - libgo/go/runtime/lfstack_NNbit.go
+#   - libgo/go/runtime/hashNN.go
+#   - libgo/go/runtime/unalignedN.go
+#   - 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 ppc ppc64 ppc64le s390 s390x sh shbe sparc sparc64"
 
-# All known GOARCH_FAMILY values.
+# All known GOARCH family values.
 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SH SPARC SPARC64"
 
 GOARCH=unknown
-GOARCH_FAMILY=unknown
-GOARCH_BIGENDIAN=false
-GOARCH_CACHELINESIZE=64
-GOARCH_PHYSPAGESIZE=4096
-GOARCH_PCQUANTUM=1
-GOARCH_INT64ALIGN=8
-GOARCH_HUGEPAGESIZE=0
-GOARCH_MINFRAMESIZE=0
 case ${host} in
   alpha*-*-*)
     GOARCH=alpha
-    GOARCH_FAMILY=ALPHA
-    GOARCH_PHYSPAGESIZE=8192
-    GOARCH_PCQUANTUM=4
     ;;
   aarch64-*-*)
     GOARCH=arm64
-    GOARCH_FAMILY=ARM64
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PHYSPAGESIZE=65536
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=8
     ;;
   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
     GOARCH=arm
-    GOARCH_FAMILY=ARM
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=4
     case ${host} in
       arm*b*-*-*)
        GOARCH=armbe
-        GOARCH_BIGENDIAN=true
        ;;
     esac
     ;;
@@ -13697,31 +13684,16 @@ case ${host} in
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=386
-GOARCH_FAMILY=I386
-GOARCH_INT64ALIGN=4
-GOARCH_HUGEPAGESIZE="1 << 21"
-
 else
   GOARCH=amd64
-GOARCH_FAMILY=AMD64
-GOARCH_HUGEPAGESIZE="1 << 21"
-
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     ;;
   ia64-*-*)
     GOARCH=ia64
-    GOARCH_FAMILY=IA64
-    GOARCH_CACHELINESIZE=128
-    GOARCH_PHYSPAGESIZE=65536
     ;;
   m68k*-*-*)
     GOARCH=m68k
-    GOARCH_FAMILY=M68K
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=16
-    GOARCH_PCQUANTUM=4
-    GOARCH_INT64ALIGN=2
     ;;
   mips*-*-*)
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13767,27 +13739,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     "n32") GOARCH=mips64p32 ;;
     "n64") GOARCH=mips64 ;;
     esac
-    case "$mips_abi" in
-    "o32" | "n32")
-        GOARCH_FAMILY=MIPS
-       GOARCH_MINFRAMESIZE=4
-        ;;
-    "n64")
-        GOARCH_FAMILY=MIPS64
-       GOARCH_MINFRAMESIZE=8
-        ;;
-    esac
     case "${host}" in
     mips*el-*-*)
         GOARCH="${GOARCH}le"
         ;;
-    *)
-       GOARCH_BIGENDIAN=true
-        ;;
     esac
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PHYSPAGESIZE=16384
-    GOARCH_PCQUANTUM=4
     ;;
   rs6000*-*-* | powerpc*-*-*)
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13799,12 +13755,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=ppc
-GOARCH_FAMILY=PPC
-GOARCH_BIGENDIAN=true
-
 else
 
-GOARCH_FAMILY=PPC64
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -13814,18 +13766,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=ppc64le
-
 else
   GOARCH=ppc64
-GOARCH_BIGENDIAN=true
-
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    GOARCH_PHYSPAGESIZE=65536
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=32
     ;;
   s390*-*-*)
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13837,49 +13783,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=s390
-GOARCH_FAMILY=S390
-GOARCH_MINFRAMESIZE=4
-
 else
   GOARCH=s390x
-GOARCH_FAMILY=S390X
-GOARCH_MINFRAMESIZE=8
-
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=256
-    GOARCH_PCQUANTUM=2
     ;;
-  sh3eb*-*-*)
+  sh3eb*-*-* | sh4eb*-*-*)
     GOARCH=shbe
-    GOARCH_FAMILY=SH
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=16
-    GOARCH_PCQUANTUM=2
-    GOARCH_MINFRAMESIZE=4
     ;;
-  sh3*-*-*)
+  sh3*-*-* | sh4*-*-*)
     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*-*-*)
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -13891,31 +13804,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   GOARCH=sparc
-GOARCH_FAMILY=SPARC
-
 else
   GOARCH=sparc64
-GOARCH_FAMILY=SPARC64
-
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    GOARCH_BIGENDIAN=true
-    GOARCH_PHYSPAGESIZE=8192
-    GOARCH_PCQUANTUM=4
     ;;
 esac
 
 
 
 
-
-
-
-
-
-
-
-
 GO_LIBCALL_OS_FILE=
 GO_LIBCALL_OS_ARCH_FILE=
 GO_SYSCALL_OS_FILE=
index 1077c9e114d273f5604d87ae00296bc5bff4c59a..c497e78c31a3f7558ca895dbecf3b4ce189fa8dc 100644 (file)
@@ -207,46 +207,41 @@ AC_SUBST(USE_DEJAGNU)
 # All known GOARCH values.  This is the union of all architectures
 # 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).
+# To add a new architecture:
+# - add it to this list
+# - if appropriate, add an entry to ALLGOARCHFAMILY below
+# - add an entry to the case on ${host} below to set GOARCH
+# - update goarchList in libgo/go/go/build/syslist.go
+# - update goarch.sh to report the values for this architecture
+# - update go-set-goarch in gcc/testsuite/go.test/go-test.exp
+# - update ptrSizeMap and intSizeMap in libgo/go/cmd/cgo/main.go
+# - update arch lists in libgo/match.sh
+# - update arch lists in libgo/testsuite/gotest
+# - update +build lines in several places
+#   - libgo/go/runtime/lfstack_NNbit.go
+#   - libgo/go/runtime/hashNN.go
+#   - libgo/go/runtime/unalignedN.go
+#   - 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 ppc ppc64 ppc64le s390 s390x sh shbe sparc sparc64"
 
-# All known GOARCH_FAMILY values.
+# All known GOARCH family values.
 ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SH SPARC SPARC64"
 
 GOARCH=unknown
-GOARCH_FAMILY=unknown
-GOARCH_BIGENDIAN=false
-GOARCH_CACHELINESIZE=64
-GOARCH_PHYSPAGESIZE=4096
-GOARCH_PCQUANTUM=1
-GOARCH_INT64ALIGN=8
-GOARCH_HUGEPAGESIZE=0
-GOARCH_MINFRAMESIZE=0
 case ${host} in
   alpha*-*-*)
     GOARCH=alpha
-    GOARCH_FAMILY=ALPHA
-    GOARCH_PHYSPAGESIZE=8192
-    GOARCH_PCQUANTUM=4
     ;;
   aarch64-*-*)
     GOARCH=arm64
-    GOARCH_FAMILY=ARM64
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PHYSPAGESIZE=65536
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=8
     ;;
   arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
     GOARCH=arm
-    GOARCH_FAMILY=ARM
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=4
     case ${host} in
       arm*b*-*-*)
        GOARCH=armbe
-        GOARCH_BIGENDIAN=true
        ;;
     esac
     ;;
@@ -257,29 +252,14 @@ changequote([,])dnl
 #ifdef __x86_64__
 #error 64-bit
 #endif],
-[GOARCH=386
-GOARCH_FAMILY=I386
-GOARCH_INT64ALIGN=4
-GOARCH_HUGEPAGESIZE="1 << 21"
-],
-[GOARCH=amd64
-GOARCH_FAMILY=AMD64
-GOARCH_HUGEPAGESIZE="1 << 21"
-])
+[GOARCH=386],
+[GOARCH=amd64])
     ;;
   ia64-*-*)
     GOARCH=ia64
-    GOARCH_FAMILY=IA64
-    GOARCH_CACHELINESIZE=128
-    GOARCH_PHYSPAGESIZE=65536
     ;;
   m68k*-*-*)
     GOARCH=m68k
-    GOARCH_FAMILY=M68K
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=16
-    GOARCH_PCQUANTUM=4
-    GOARCH_INT64ALIGN=2
     ;;
   mips*-*-*)
     AC_COMPILE_IFELSE([
@@ -304,123 +284,50 @@ GOARCH_HUGEPAGESIZE="1 << 21"
     "n32") GOARCH=mips64p32 ;;
     "n64") GOARCH=mips64 ;;
     esac
-    case "$mips_abi" in
-    "o32" | "n32")
-        GOARCH_FAMILY=MIPS
-       GOARCH_MINFRAMESIZE=4
-        ;;
-    "n64")
-        GOARCH_FAMILY=MIPS64
-       GOARCH_MINFRAMESIZE=8
-        ;;
-    esac
     case "${host}" in
     mips*el-*-*)
         GOARCH="${GOARCH}le"
         ;;
-    *)
-       GOARCH_BIGENDIAN=true
-        ;;
     esac
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PHYSPAGESIZE=16384
-    GOARCH_PCQUANTUM=4
     ;;
   rs6000*-*-* | powerpc*-*-*)
     AC_COMPILE_IFELSE([
 #ifdef _ARCH_PPC64
 #error 64-bit
 #endif],
-[GOARCH=ppc
-GOARCH_FAMILY=PPC
-GOARCH_BIGENDIAN=true
-],
+[GOARCH=ppc],
     [
-GOARCH_FAMILY=PPC64
 AC_COMPILE_IFELSE([
 #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
 #error 64be
 #endif],
-[GOARCH=ppc64le
-],
-[GOARCH=ppc64
-GOARCH_BIGENDIAN=true
-])])
-    GOARCH_PHYSPAGESIZE=65536
-    GOARCH_PCQUANTUM=4
-    GOARCH_MINFRAMESIZE=32
+[GOARCH=ppc64le],
+[GOARCH=ppc64])])
     ;;
   s390*-*-*)
     AC_COMPILE_IFELSE([
 #if defined(__s390x__)
 #error 64-bit
 #endif],
-[GOARCH=s390
-GOARCH_FAMILY=S390
-GOARCH_MINFRAMESIZE=4
-], [GOARCH=s390x
-GOARCH_FAMILY=S390X
-GOARCH_MINFRAMESIZE=8
-])
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=256
-    GOARCH_PCQUANTUM=2
-    ;;
-  sh3eb*-*-*)
-    GOARCH=shbe
-    GOARCH_FAMILY=SH
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=16
-    GOARCH_PCQUANTUM=2
-    GOARCH_MINFRAMESIZE=4
+[GOARCH=s390],
+[GOARCH=s390x])
     ;;
-  sh3*-*-*)
-    GOARCH=sh
-    GOARCH_FAMILY=SH
-    GOARCH_CACHELINESIZE=16
-    GOARCH_PCQUANTUM=2
-    GOARCH_MINFRAMESIZE=4
-    ;;
-  sh4eb*-*-*)
+  sh3eb*-*-* | sh4eb*-*-*)
     GOARCH=shbe
-    GOARCH_FAMILY=SH
-    GOARCH_BIGENDIAN=true
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PCQUANTUM=2
-    GOARCH_MINFRAMESIZE=4
     ;;
-  sh4*-*-*)
+  sh3*-*-* | sh4*-*-*)
     GOARCH=sh
-    GOARCH_FAMILY=SH
-    GOARCH_CACHELINESIZE=32
-    GOARCH_PCQUANTUM=2
-    GOARCH_MINFRAMESIZE=4
     ;;
   sparc*-*-*)
     AC_COMPILE_IFELSE([
 #if defined(__sparcv9) || defined(__arch64__)
 #error 64-bit
 #endif],
-[GOARCH=sparc
-GOARCH_FAMILY=SPARC
-],
-[GOARCH=sparc64
-GOARCH_FAMILY=SPARC64
-])
-    GOARCH_BIGENDIAN=true
-    GOARCH_PHYSPAGESIZE=8192
-    GOARCH_PCQUANTUM=4
+[GOARCH=sparc],
+[GOARCH=sparc64])
     ;;
 esac
 AC_SUBST(GOARCH)
-AC_SUBST(GOARCH_FAMILY)
-AC_SUBST(GOARCH_BIGENDIAN)
-AC_SUBST(GOARCH_CACHELINESIZE)
-AC_SUBST(GOARCH_PHYSPAGESIZE)
-AC_SUBST(GOARCH_PCQUANTUM)
-AC_SUBST(GOARCH_INT64ALIGN)
-AC_SUBST(GOARCH_HUGEPAGESIZE)
-AC_SUBST(GOARCH_MINFRAMESIZE)
 AC_SUBST(ALLGOARCH)
 AC_SUBST(ALLGOARCHFAMILY)
 
index 799dc655e607cb68e28197dde9865a4a54a50f0e..d83611b4da0b34a8988b0377b15921c48ff08976 100644 (file)
@@ -12,6 +12,7 @@ import (
        "go/importer"
        "go/token"
        "go/types"
+       "runtime"
 )
 
 // stdImporter is the importer we use to import packages.
@@ -309,4 +310,4 @@ func (f *File) hasMethod(typ types.Type, name string) bool {
        return ok
 }
 
-var archSizes = types.SizesFor("gc", build.Default.GOARCH)
+var archSizes = types.SizesFor(runtime.Compiler, build.Default.GOARCH)
index 0821a61359d7a055fa130afe8f7c439a19114306..05d14dae132bfa3238088a4361189376315dbd3e 100644 (file)
@@ -178,10 +178,16 @@ var gcArchSizes = map[string]*StdSizes{
 // "386", "arm", "arm64", "amd64", "amd64p32", "mips", "mipsle",
 // "mips64", "mips64le", "ppc64", "ppc64le", "s390x".
 func SizesFor(compiler, arch string) Sizes {
-       if compiler != "gc" {
+       var m map[string]*StdSizes
+       switch compiler {
+       case "gc":
+               m = gcArchSizes
+       case "gccgo":
+               m = gccgoArchSizes
+       default:
                return nil
        }
-       s, ok := gcArchSizes[arch]
+       s, ok := m[arch]
        if !ok {
                return nil
        }
diff --git a/libgo/goarch.sh b/libgo/goarch.sh
new file mode 100755 (executable)
index 0000000..9165e6a
--- /dev/null
@@ -0,0 +1,238 @@
+#!/bin/sh
+
+# 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.
+
+# Code in Makefile.am will invoke this script with two arguments.
+# The first is a GOARCH value.  The second is a keyword.
+# The script will print the value of that keyword for that GOARCH.
+# Keywords:
+# - bigendian: true or false
+# - cachelinesize: the cache line size in bytes
+#      (for performance only; it's not essential to get this right)
+# - defaultphyspagesize: the default physical page size in bytes
+#      (not currently used, but maybe some day)
+# - family: the processor family, from ALLGOARCHFAMILY in configure.ac
+# - hugepagesize: size of a huge page in bytes
+#      (used only to decide when to use madvise with MADV_[NO]HUGEPAGE)
+#      (set to 0 if there are no huge pages)
+# - int64align: alignment of int64 type in bytes
+# - maxalign: maximum alignment of values of Go types in bytes
+# - minframesize: size of smallest possible function frame in bytes
+#      (not currently used, may never be used)
+# - pcquantum: minimum size of a single instruction in bytes
+# - ptrsize: size of a pointer in bytes
+
+if test $# -ne 2; then
+    echo 1>&2 "usage: goarch <goarch> <keyword>"
+    exit 1
+fi
+
+goarch=$1
+keyword=$2
+
+# Default values
+bigendian=false
+cachelinesize=64
+defaultphyspagesize=4096
+family=unknown
+hugepagesize=0
+int64align=8
+maxalign=8
+minframesize=0
+pcquantum=1
+ptrsize=8
+
+case $goarch in
+    386)
+       family=I386
+       hugepagesize="1 << 21"
+       int64align=4
+       maxalign=4
+       ptrsize=4
+       ;;
+    alpha)
+       family=ALPHA
+       defaultphyspagesize=8192
+       pcquantum=4
+       ;;
+    amd64 | amd64p32)
+       family=AMD64
+       hugepagesize="1 << 21"
+       ;;
+    arm | armbe)
+       family=ARM
+       cachelinesize=32
+       minframesize=4
+       pcquantum=4
+       ptrsize=4
+       case $goarch in
+           *be)
+               bigendian=true
+               ;;
+       esac
+       ;;
+    arm64 | arm64be)
+       family=ARM64
+       cachelinesize=32
+       defaultphyspagesize=65536
+       minframesize=8
+       pcquantum=4
+       case $goarch in
+           *be)
+               bigendian=true
+               ;;
+       esac
+       ;;
+    ia64)
+       family=IA64
+       cachelinesize=128
+       defaultphyspagesize=65536
+       ;;
+    m68k)
+       family=M68K
+       bigendian=true
+       cachelinesize=16
+       int64align=2
+       maxalign=2
+       pcquantum=4
+       ptrsize=4
+       ;;
+    mips | mipsle | mips64p32 | mips64p32le)
+       family=MIPS
+       bigendian=true
+       cachelinesize=32
+       defaultphyspagesize=16384
+       minframesize=4
+       pcquantum=4
+       ptrsize=4
+       case $goarch in
+           *le)
+               bigendian=false
+               ;;
+       esac
+       ;;
+    mips64 | mips64le)
+       family=MIPS64
+       bigendian=true
+       cachelinesize=32
+       defaultphyspagesize=16384
+       minframesize=8
+       pcquantum=4
+       case $goarch in
+           *le)
+               bigendian=false
+               ;;
+       esac
+       ;;
+    ppc)
+       family=PPC
+       bigendian=true
+       defaultphyspagesize=65536
+       minframesize=32
+       pcquantum=4
+       ptrsize=4
+       ;;
+    ppc64 | ppc64le)
+       family=PPC64
+       bigendian=true
+       defaultphyspagesize=65536
+       minframesize=32
+       pcquantum=4
+       case $goarch in
+           *le)
+               bigendian=false
+               ;;
+       esac
+       ;;
+    s390)
+       family=S390
+       bigendian=true
+       cachelinesize=256
+       minframesize=4
+       pcquantum=2
+       ptrsize=4
+       ;;
+    s390x)
+       family=S390X
+       bigendian=true
+       cachelinesize=256
+       minframesize=8
+       pcquantum=2
+       ;;
+    sh | shbe)
+       family=SH
+       cachelinesize=16
+       int64align=4
+       minframesize=4
+       pcquantum=2
+       ptrsize=4
+       case $goarch in
+           *be)
+               bigendian=true
+               ;;
+       esac
+       ;;
+    sparc)
+       family=SPARC
+       bigendian=true
+       defaultphyspagesize=8192
+       pcquantum=4
+       ptrsize=4
+       ;;
+    sparc64)
+       family=SPARC64
+       bigendian=true
+       defaultphyspagesize=8192
+       pcquantum=4
+       ;;
+    *)
+       echo 1>&2 "unrecognized goarch value \"$goarch\""
+       exit 1
+       ;;
+esac
+
+if test "$family" = "unknown"; then
+    echo 1>&2 "internal error: no family for goarch value \"$goarch\""
+    exit 1
+fi
+
+case $keyword in
+    bigendian)
+       echo $bigendian
+       ;;
+    cachelinesize)
+       echo $cachelinesize
+       ;;
+    defaultphyspagesize)
+       echo $defaultphyspagesize
+       ;;
+    family)
+       echo $family
+       ;;
+    hugepagesize)
+       echo $hugepagesize
+       ;;
+    int64align)
+       echo $int64align
+       ;;
+    maxalign)
+       echo $maxalign
+       ;;
+    minframesize)
+       echo $minframesize
+       ;;
+    pcquantum)
+       echo $pcquantum
+       ;;
+    ptrsize)
+       echo $ptrsize
+       ;;
+    *)
+       echo 1>&2 "unrecognized keyword \"$keyword\""
+       exit 1
+       ;;
+esac
+
+exit 0
index 79da1c91ff6901e57d9befef535938e9b198a333..fc02e093ef80322153658b2e7dab6f3f8c2eb12b 100644 (file)
@@ -107,14 +107,6 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
 GOARCH = @GOARCH@
-GOARCH_BIGENDIAN = @GOARCH_BIGENDIAN@
-GOARCH_CACHELINESIZE = @GOARCH_CACHELINESIZE@
-GOARCH_FAMILY = @GOARCH_FAMILY@
-GOARCH_HUGEPAGESIZE = @GOARCH_HUGEPAGESIZE@
-GOARCH_INT64ALIGN = @GOARCH_INT64ALIGN@
-GOARCH_MINFRAMESIZE = @GOARCH_MINFRAMESIZE@
-GOARCH_PCQUANTUM = @GOARCH_PCQUANTUM@
-GOARCH_PHYSPAGESIZE = @GOARCH_PHYSPAGESIZE@
 GOC = @GOC@
 GOCFLAGS = @GOCFLAGS@
 GOOS = @GOOS@