This libgo patch by Xiangdong JI is for the GoLLVM build on arm64 GNU/Linux. It incorporates a type definition of 'uint128' to 'runtime' and 'syscall' packages. This fixes https://golang.org/issue/33711. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 275814) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -09ca3c1ea8a52b5d3d6c4331c59d44e0b6bfab57 +d81ff42c367cce2110ccf5ddbadb6cc9bdf94e28 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/mkrsysinfo.sh =================================================================== --- libgo/mkrsysinfo.sh (revision 275698) +++ libgo/mkrsysinfo.sh (working copy) @@ -209,3 +209,9 @@ grep '^type _kevent ' gen-sysinfo.go | \ sed -e s'/_kevent/keventt/' \ -e 's/ udata [^;}]*/ udata *byte/' \ >> ${OUT} + +# Type 'uint128' is needed in a couple of type definitions on arm64,such +# as _user_fpsimd_struct, _elf_fpregset_t, etc. +if ! grep '^type uint128' ${OUT} > /dev/null 2>&1; then + echo "type uint128 [16]byte" >> ${OUT} +fi Index: libgo/mksysinfo.sh =================================================================== --- libgo/mksysinfo.sh (revision 275698) +++ libgo/mksysinfo.sh (working copy) @@ -1393,4 +1393,10 @@ grep '^type _mactun_info_t ' gen-sysinfo sed -e 's/_in6_addr_t/[16]byte/g' \ >> ${OUT} +# Type 'uint128' is needed in a couple of type definitions on arm64,such +# as _user_fpsimd_struct, _elf_fpregset_t, etc. +if ! grep '^type uint128' ${OUT} > /dev/null 2>&1; then + echo "type uint128 [16]byte" >> ${OUT} +fi + exit $? Index: libgo/sysinfo.c =================================================================== --- libgo/sysinfo.c (revision 275698) +++ libgo/sysinfo.c (working copy) @@ -424,7 +424,11 @@ EREF(MNT_FORCE); #if defined(HAVE_SYS_PTRACE_H) // From <sys/ptrace.h> +#if defined (__aarch64__) +SREF(user_pt_regs); +#else SREF(pt_regs); +#endif EREF(PTRACE_PEEKTEXT); #endif