Commit ffad1c54 by Ian Lance Taylor

go/types: implement SizesFor for gccgo

    
    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
parent 8532713f
fe8481db9f5b37eb9a0c329673789eaaf1335598 4aa531c1765bba52848c6d71b9f57b593063d3ba
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -506,14 +506,14 @@ s-version: Makefile ...@@ -506,14 +506,14 @@ s-version: Makefile
done done
echo >> version.go.tmp echo >> version.go.tmp
echo "const (" >> version.go.tmp echo "const (" >> version.go.tmp
echo " ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp echo " ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
echo " BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp echo " BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
echo " CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp echo " CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> version.go.tmp
echo " PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp echo " DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
echo " PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp echo " HugePageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) hugepagesize`" >> version.go.tmp
echo " Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp echo " Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
echo " HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp echo " MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
echo " MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp echo " PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
echo ")" >> version.go.tmp echo ")" >> version.go.tmp
echo >> version.go.tmp echo >> version.go.tmp
for a in $(ALLGOOS); do \ for a in $(ALLGOOS); do \
...@@ -548,6 +548,21 @@ s-objabi: Makefile ...@@ -548,6 +548,21 @@ s-objabi: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go $(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go
$(STAMP) $@ $(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 runtime_sysinfo.go: s-runtime_sysinfo; @true
s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go
GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh
...@@ -1159,6 +1174,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline ...@@ -1159,6 +1174,9 @@ runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go extra_go_files_runtime_internal_sys = version.go
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys) 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 extra_go_files_cmd_internal_objabi = objabi.go
cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi) cmd/internal/objabi.lo.dep: $(extra_go_files_cmd_internal_objabi)
......
...@@ -303,14 +303,6 @@ EGREP = @EGREP@ ...@@ -303,14 +303,6 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FGREP = @FGREP@ FGREP = @FGREP@
GOARCH = @GOARCH@ 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@ GOC = @GOC@
GOCFLAGS = $(CFLAGS) GOCFLAGS = $(CFLAGS)
GOOS = @GOOS@ GOOS = @GOOS@
...@@ -1212,6 +1204,7 @@ runtime_internal_sys_lo_check_GOCFLAGS = -fgo-compiling-runtime ...@@ -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. # Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
extra_go_files_runtime_internal_sys = version.go 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_internal_objabi = objabi.go
extra_go_files_cmd_go_internal_cfg = zdefaultcc.go extra_go_files_cmd_go_internal_cfg = zdefaultcc.go
extra_go_files_cmd_go_internal_load = zstdpkglist.go extra_go_files_cmd_go_internal_load = zstdpkglist.go
...@@ -3095,14 +3088,14 @@ s-version: Makefile ...@@ -3095,14 +3088,14 @@ s-version: Makefile
done done
echo >> version.go.tmp echo >> version.go.tmp
echo "const (" >> version.go.tmp echo "const (" >> version.go.tmp
echo " ArchFamily = $(GOARCH_FAMILY)" >> version.go.tmp echo " ArchFamily = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) family`" >> version.go.tmp
echo " BigEndian = $(GOARCH_BIGENDIAN)" >> version.go.tmp echo " BigEndian = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) bigendian`" >> version.go.tmp
echo " CacheLineSize = $(GOARCH_CACHELINESIZE)" >> version.go.tmp echo " CacheLineSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) cachelinesize`" >> version.go.tmp
echo " PhysPageSize = $(GOARCH_PHYSPAGESIZE)" >> version.go.tmp echo " DefaultPhysPageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) defaultphyspagesize`" >> version.go.tmp
echo " PCQuantum = $(GOARCH_PCQUANTUM)" >> version.go.tmp echo " HugePageSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) hugepagesize`" >> version.go.tmp
echo " Int64Align = $(GOARCH_INT64ALIGN)" >> version.go.tmp echo " Int64Align = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) int64align`" >> version.go.tmp
echo " HugePageSize = $(GOARCH_HUGEPAGESIZE)" >> version.go.tmp echo " MinFrameSize = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) minframesize`" >> version.go.tmp
echo " MinFrameSize = $(GOARCH_MINFRAMESIZE)" >> version.go.tmp echo " PCQuantum = `$(SHELL) $(srcdir)/goarch.sh $(GOARCH) pcquantum`" >> version.go.tmp
echo ")" >> version.go.tmp echo ")" >> version.go.tmp
echo >> version.go.tmp echo >> version.go.tmp
for a in $(ALLGOOS); do \ for a in $(ALLGOOS); do \
...@@ -3137,6 +3130,21 @@ s-objabi: Makefile ...@@ -3137,6 +3130,21 @@ s-objabi: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go $(SHELL) $(srcdir)/mvifdiff.sh objabi.go.tmp objabi.go
$(STAMP) $@ $(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 runtime_sysinfo.go: s-runtime_sysinfo; @true
s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go s-runtime_sysinfo: $(srcdir)/mkrsysinfo.sh gen-sysinfo.go
GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh GOARCH=$(GOARCH) GOOS=$(GOOS) $(SHELL) $(srcdir)/mkrsysinfo.sh
...@@ -3313,6 +3321,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package))) ...@@ -3313,6 +3321,7 @@ $(foreach package,$(GOTOOL_PACKAGES),$(eval $(call PACKAGE_template,$(package)))
runtime.lo.dep: $(extra_go_files_runtime) runtime.lo.dep: $(extra_go_files_runtime)
syscall.lo.dep: $(extra_go_files_syscall) syscall.lo.dep: $(extra_go_files_syscall)
runtime/internal/sys.lo.dep: $(extra_go_files_runtime_internal_sys) 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/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/cfg.lo.dep: $(extra_go_files_cmd_go_internal_cfg)
cmd/go/internal/load.lo.dep: $(extra_go_files_cmd_go_internal_load) cmd/go/internal/load.lo.dep: $(extra_go_files_cmd_go_internal_load)
......
...@@ -632,14 +632,6 @@ GO_LIBCALL_OS_ARCH_FILE ...@@ -632,14 +632,6 @@ GO_LIBCALL_OS_ARCH_FILE
GO_LIBCALL_OS_FILE GO_LIBCALL_OS_FILE
ALLGOARCHFAMILY ALLGOARCHFAMILY
ALLGOARCH ALLGOARCH
GOARCH_MINFRAMESIZE
GOARCH_HUGEPAGESIZE
GOARCH_INT64ALIGN
GOARCH_PCQUANTUM
GOARCH_PHYSPAGESIZE
GOARCH_CACHELINESIZE
GOARCH_BIGENDIAN
GOARCH_FAMILY
GOARCH GOARCH
USE_DEJAGNU USE_DEJAGNU
ALLGOOS ALLGOOS
...@@ -11114,7 +11106,7 @@ else ...@@ -11114,7 +11106,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11118 "configure" #line 11109 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11220,7 +11212,7 @@ else ...@@ -11220,7 +11212,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11224 "configure" #line 11215 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -13644,46 +13636,41 @@ esac ...@@ -13644,46 +13636,41 @@ esac
# All known GOARCH values. This is the union of all architectures # All known GOARCH values. This is the union of all architectures
# supported by the gofrontend and all architectures supported by the # supported by the gofrontend and all architectures supported by the
# gc toolchain. # 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" 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" ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SH SPARC SPARC64"
GOARCH=unknown 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 case ${host} in
alpha*-*-*) alpha*-*-*)
GOARCH=alpha GOARCH=alpha
GOARCH_FAMILY=ALPHA
GOARCH_PHYSPAGESIZE=8192
GOARCH_PCQUANTUM=4
;; ;;
aarch64-*-*) aarch64-*-*)
GOARCH=arm64 GOARCH=arm64
GOARCH_FAMILY=ARM64
GOARCH_CACHELINESIZE=32
GOARCH_PHYSPAGESIZE=65536
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=8
;; ;;
arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
GOARCH=arm GOARCH=arm
GOARCH_FAMILY=ARM
GOARCH_CACHELINESIZE=32
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=4
case ${host} in case ${host} in
arm*b*-*-*) arm*b*-*-*)
GOARCH=armbe GOARCH=armbe
GOARCH_BIGENDIAN=true
;; ;;
esac esac
;; ;;
...@@ -13697,31 +13684,16 @@ case ${host} in ...@@ -13697,31 +13684,16 @@ case ${host} in
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
GOARCH=386 GOARCH=386
GOARCH_FAMILY=I386
GOARCH_INT64ALIGN=4
GOARCH_HUGEPAGESIZE="1 << 21"
else else
GOARCH=amd64 GOARCH=amd64
GOARCH_FAMILY=AMD64
GOARCH_HUGEPAGESIZE="1 << 21"
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
;; ;;
ia64-*-*) ia64-*-*)
GOARCH=ia64 GOARCH=ia64
GOARCH_FAMILY=IA64
GOARCH_CACHELINESIZE=128
GOARCH_PHYSPAGESIZE=65536
;; ;;
m68k*-*-*) m68k*-*-*)
GOARCH=m68k GOARCH=m68k
GOARCH_FAMILY=M68K
GOARCH_BIGENDIAN=true
GOARCH_CACHELINESIZE=16
GOARCH_PCQUANTUM=4
GOARCH_INT64ALIGN=2
;; ;;
mips*-*-*) mips*-*-*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
...@@ -13767,27 +13739,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ...@@ -13767,27 +13739,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
"n32") GOARCH=mips64p32 ;; "n32") GOARCH=mips64p32 ;;
"n64") GOARCH=mips64 ;; "n64") GOARCH=mips64 ;;
esac esac
case "$mips_abi" in
"o32" | "n32")
GOARCH_FAMILY=MIPS
GOARCH_MINFRAMESIZE=4
;;
"n64")
GOARCH_FAMILY=MIPS64
GOARCH_MINFRAMESIZE=8
;;
esac
case "${host}" in case "${host}" in
mips*el-*-*) mips*el-*-*)
GOARCH="${GOARCH}le" GOARCH="${GOARCH}le"
;; ;;
*)
GOARCH_BIGENDIAN=true
;;
esac esac
GOARCH_CACHELINESIZE=32
GOARCH_PHYSPAGESIZE=16384
GOARCH_PCQUANTUM=4
;; ;;
rs6000*-*-* | powerpc*-*-*) rs6000*-*-* | powerpc*-*-*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
...@@ -13799,12 +13755,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ...@@ -13799,12 +13755,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
GOARCH=ppc GOARCH=ppc
GOARCH_FAMILY=PPC
GOARCH_BIGENDIAN=true
else else
GOARCH_FAMILY=PPC64
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
...@@ -13814,18 +13766,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ...@@ -13814,18 +13766,12 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
GOARCH=ppc64le GOARCH=ppc64le
else else
GOARCH=ppc64 GOARCH=ppc64
GOARCH_BIGENDIAN=true
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
GOARCH_PHYSPAGESIZE=65536
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=32
;; ;;
s390*-*-*) s390*-*-*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
...@@ -13837,49 +13783,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ...@@ -13837,49 +13783,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
GOARCH=s390 GOARCH=s390
GOARCH_FAMILY=S390
GOARCH_MINFRAMESIZE=4
else else
GOARCH=s390x GOARCH=s390x
GOARCH_FAMILY=S390X
GOARCH_MINFRAMESIZE=8
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext 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=shbe
GOARCH_FAMILY=SH
GOARCH_BIGENDIAN=true
GOARCH_CACHELINESIZE=16
GOARCH_PCQUANTUM=2
GOARCH_MINFRAMESIZE=4
;; ;;
sh3*-*-*) sh3*-*-* | sh4*-*-*)
GOARCH=sh 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*-*-*) sparc*-*-*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
...@@ -13891,31 +13804,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ...@@ -13891,31 +13804,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
GOARCH=sparc GOARCH=sparc
GOARCH_FAMILY=SPARC
else else
GOARCH=sparc64 GOARCH=sparc64
GOARCH_FAMILY=SPARC64
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
GOARCH_BIGENDIAN=true
GOARCH_PHYSPAGESIZE=8192
GOARCH_PCQUANTUM=4
;; ;;
esac esac
GO_LIBCALL_OS_FILE= GO_LIBCALL_OS_FILE=
GO_LIBCALL_OS_ARCH_FILE= GO_LIBCALL_OS_ARCH_FILE=
GO_SYSCALL_OS_FILE= GO_SYSCALL_OS_FILE=
......
...@@ -207,46 +207,41 @@ AC_SUBST(USE_DEJAGNU) ...@@ -207,46 +207,41 @@ AC_SUBST(USE_DEJAGNU)
# All known GOARCH values. This is the union of all architectures # All known GOARCH values. This is the union of all architectures
# supported by the gofrontend and all architectures supported by the # supported by the gofrontend and all architectures supported by the
# gc toolchain. # 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" 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" ALLGOARCHFAMILY="I386 ALPHA AMD64 ARM ARM64 IA64 M68K MIPS MIPS64 PPC PPC64 S390 S390X SH SPARC SPARC64"
GOARCH=unknown 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 case ${host} in
alpha*-*-*) alpha*-*-*)
GOARCH=alpha GOARCH=alpha
GOARCH_FAMILY=ALPHA
GOARCH_PHYSPAGESIZE=8192
GOARCH_PCQUANTUM=4
;; ;;
aarch64-*-*) aarch64-*-*)
GOARCH=arm64 GOARCH=arm64
GOARCH_FAMILY=ARM64
GOARCH_CACHELINESIZE=32
GOARCH_PHYSPAGESIZE=65536
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=8
;; ;;
arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*)
GOARCH=arm GOARCH=arm
GOARCH_FAMILY=ARM
GOARCH_CACHELINESIZE=32
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=4
case ${host} in case ${host} in
arm*b*-*-*) arm*b*-*-*)
GOARCH=armbe GOARCH=armbe
GOARCH_BIGENDIAN=true
;; ;;
esac esac
;; ;;
...@@ -257,29 +252,14 @@ changequote([,])dnl ...@@ -257,29 +252,14 @@ changequote([,])dnl
#ifdef __x86_64__ #ifdef __x86_64__
#error 64-bit #error 64-bit
#endif], #endif],
[GOARCH=386 [GOARCH=386],
GOARCH_FAMILY=I386 [GOARCH=amd64])
GOARCH_INT64ALIGN=4
GOARCH_HUGEPAGESIZE="1 << 21"
],
[GOARCH=amd64
GOARCH_FAMILY=AMD64
GOARCH_HUGEPAGESIZE="1 << 21"
])
;; ;;
ia64-*-*) ia64-*-*)
GOARCH=ia64 GOARCH=ia64
GOARCH_FAMILY=IA64
GOARCH_CACHELINESIZE=128
GOARCH_PHYSPAGESIZE=65536
;; ;;
m68k*-*-*) m68k*-*-*)
GOARCH=m68k GOARCH=m68k
GOARCH_FAMILY=M68K
GOARCH_BIGENDIAN=true
GOARCH_CACHELINESIZE=16
GOARCH_PCQUANTUM=4
GOARCH_INT64ALIGN=2
;; ;;
mips*-*-*) mips*-*-*)
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
...@@ -304,123 +284,50 @@ GOARCH_HUGEPAGESIZE="1 << 21" ...@@ -304,123 +284,50 @@ GOARCH_HUGEPAGESIZE="1 << 21"
"n32") GOARCH=mips64p32 ;; "n32") GOARCH=mips64p32 ;;
"n64") GOARCH=mips64 ;; "n64") GOARCH=mips64 ;;
esac esac
case "$mips_abi" in
"o32" | "n32")
GOARCH_FAMILY=MIPS
GOARCH_MINFRAMESIZE=4
;;
"n64")
GOARCH_FAMILY=MIPS64
GOARCH_MINFRAMESIZE=8
;;
esac
case "${host}" in case "${host}" in
mips*el-*-*) mips*el-*-*)
GOARCH="${GOARCH}le" GOARCH="${GOARCH}le"
;; ;;
*)
GOARCH_BIGENDIAN=true
;;
esac esac
GOARCH_CACHELINESIZE=32
GOARCH_PHYSPAGESIZE=16384
GOARCH_PCQUANTUM=4
;; ;;
rs6000*-*-* | powerpc*-*-*) rs6000*-*-* | powerpc*-*-*)
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
#ifdef _ARCH_PPC64 #ifdef _ARCH_PPC64
#error 64-bit #error 64-bit
#endif], #endif],
[GOARCH=ppc [GOARCH=ppc],
GOARCH_FAMILY=PPC
GOARCH_BIGENDIAN=true
],
[ [
GOARCH_FAMILY=PPC64
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
#if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) #if defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__)
#error 64be #error 64be
#endif], #endif],
[GOARCH=ppc64le [GOARCH=ppc64le],
], [GOARCH=ppc64])])
[GOARCH=ppc64
GOARCH_BIGENDIAN=true
])])
GOARCH_PHYSPAGESIZE=65536
GOARCH_PCQUANTUM=4
GOARCH_MINFRAMESIZE=32
;; ;;
s390*-*-*) s390*-*-*)
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
#if defined(__s390x__) #if defined(__s390x__)
#error 64-bit #error 64-bit
#endif], #endif],
[GOARCH=s390 [GOARCH=s390],
GOARCH_FAMILY=S390 [GOARCH=s390x])
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
;; ;;
sh3*-*-*) sh3eb*-*-* | sh4eb*-*-*)
GOARCH=sh
GOARCH_FAMILY=SH
GOARCH_CACHELINESIZE=16
GOARCH_PCQUANTUM=2
GOARCH_MINFRAMESIZE=4
;;
sh4eb*-*-*)
GOARCH=shbe GOARCH=shbe
GOARCH_FAMILY=SH
GOARCH_BIGENDIAN=true
GOARCH_CACHELINESIZE=32
GOARCH_PCQUANTUM=2
GOARCH_MINFRAMESIZE=4
;; ;;
sh4*-*-*) sh3*-*-* | sh4*-*-*)
GOARCH=sh GOARCH=sh
GOARCH_FAMILY=SH
GOARCH_CACHELINESIZE=32
GOARCH_PCQUANTUM=2
GOARCH_MINFRAMESIZE=4
;; ;;
sparc*-*-*) sparc*-*-*)
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
#if defined(__sparcv9) || defined(__arch64__) #if defined(__sparcv9) || defined(__arch64__)
#error 64-bit #error 64-bit
#endif], #endif],
[GOARCH=sparc [GOARCH=sparc],
GOARCH_FAMILY=SPARC [GOARCH=sparc64])
],
[GOARCH=sparc64
GOARCH_FAMILY=SPARC64
])
GOARCH_BIGENDIAN=true
GOARCH_PHYSPAGESIZE=8192
GOARCH_PCQUANTUM=4
;; ;;
esac esac
AC_SUBST(GOARCH) 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(ALLGOARCH)
AC_SUBST(ALLGOARCHFAMILY) AC_SUBST(ALLGOARCHFAMILY)
......
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
"go/importer" "go/importer"
"go/token" "go/token"
"go/types" "go/types"
"runtime"
) )
// stdImporter is the importer we use to import packages. // stdImporter is the importer we use to import packages.
...@@ -309,4 +310,4 @@ func (f *File) hasMethod(typ types.Type, name string) bool { ...@@ -309,4 +310,4 @@ func (f *File) hasMethod(typ types.Type, name string) bool {
return ok return ok
} }
var archSizes = types.SizesFor("gc", build.Default.GOARCH) var archSizes = types.SizesFor(runtime.Compiler, build.Default.GOARCH)
...@@ -178,10 +178,16 @@ var gcArchSizes = map[string]*StdSizes{ ...@@ -178,10 +178,16 @@ var gcArchSizes = map[string]*StdSizes{
// "386", "arm", "arm64", "amd64", "amd64p32", "mips", "mipsle", // "386", "arm", "arm64", "amd64", "amd64p32", "mips", "mipsle",
// "mips64", "mips64le", "ppc64", "ppc64le", "s390x". // "mips64", "mips64le", "ppc64", "ppc64le", "s390x".
func SizesFor(compiler, arch string) Sizes { 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 return nil
} }
s, ok := gcArchSizes[arch] s, ok := m[arch]
if !ok { if !ok {
return nil return nil
} }
......
#!/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
...@@ -107,14 +107,6 @@ EGREP = @EGREP@ ...@@ -107,14 +107,6 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
FGREP = @FGREP@ FGREP = @FGREP@
GOARCH = @GOARCH@ 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@ GOC = @GOC@
GOCFLAGS = @GOCFLAGS@ GOCFLAGS = @GOCFLAGS@
GOOS = @GOOS@ GOOS = @GOOS@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment