Reportedly glibc 2.28 removes the ustat.h header file and the ustat function. This breaks libgo, which provides syscall.Ustat that calls the C ustat function. Fix this by removing syscall.Ustat from libgo. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline, GCC 8 branch, and GCC 7 branch.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 261871) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -d3eb93c1b8990dbfd4bb660c5c8454916b62655c +bdead75ea02fa852a559f35b41453df0c47c9a66 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 261819) +++ libgo/configure.ac (working copy) @@ -537,24 +537,6 @@ AC_CHECK_HEADERS([linux/filter.h linux/i #endif ]) -AC_CACHE_CHECK([whether <ustat.h> can be used], -[libgo_cv_c_ustat_h], -[CFLAGS_hold=$CFLAGS -CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $OSCFLAGS" -AC_COMPILE_IFELSE( -[AC_LANG_SOURCE([ -#include <sys/types.h> -#ifdef HAVE_LINUX_FILTER_H -#include <linux/filter.h> -#endif -#include <ustat.h> -])], [libgo_cv_c_ustat_h=yes], [libgo_cv_c_ustat_h=no]) -CFLAGS=$CFLAGS_hold]) -if test $libgo_cv_c_ustat_h = yes; then - AC_DEFINE(HAVE_USTAT_H, 1, - [Define to 1 if you have the <ustat.h> header file and it works.]) -fi - AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) AC_CHECK_FUNCS(strerror_r strsignal wait4 mincore setenv unsetenv dl_iterate_phdr) Index: libgo/go/syscall/libcall_linux_ustat.go =================================================================== --- libgo/go/syscall/libcall_linux_ustat.go (revision 261819) +++ libgo/go/syscall/libcall_linux_ustat.go (nonexistent) @@ -1,12 +0,0 @@ -// Copyright 2015 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. - -// GNU/Linux library ustat call. -// This is not supported on some kernels, such as arm64. -// +build !arm64,!nios2,!riscv64 - -package syscall - -//sys Ustat(dev int, ubuf *Ustat_t) (err error) -//ustat(dev _dev_t, ubuf *Ustat_t) _C_int Index: libgo/mksysinfo.sh =================================================================== --- libgo/mksysinfo.sh (revision 261819) +++ libgo/mksysinfo.sh (working copy) @@ -1164,20 +1164,6 @@ grep '^type _sysinfo ' gen-sysinfo.go | -e 's/mem_unit/Unit/' \ >> ${OUT} -# The ustat struct. -grep '^type _ustat ' gen-sysinfo.go | \ - sed -e 's/_ustat/Ustat_t/' \ - -e 's/f_tfree/Tfree/' \ - -e 's/f_tinode/Tinoe/' \ - -e 's/f_fname/Fname/' \ - -e 's/f_fpack/Fpack/' \ - >> ${OUT} -# Force it to be defined, as on some older GNU/Linux systems the -# header file fails when using with <linux/filter.h>. -if ! grep 'type _ustat ' gen-sysinfo.go >/dev/null 2>&1; then - echo 'type Ustat_t struct { Tfree int32; Tinoe uint64; Fname [5+1]int8; Fpack [5+1]int8; }' >> ${OUT} -fi - # The utimbuf struct. grep '^type _utimbuf ' gen-sysinfo.go | \ sed -e 's/_utimbuf/Utimbuf/' \ Index: libgo/sysinfo.c =================================================================== --- libgo/sysinfo.c (revision 261819) +++ libgo/sysinfo.c (working copy) @@ -144,9 +144,6 @@ #if defined(HAVE_SYS_SYSINFO_H) #include <sys/sysinfo.h> #endif -#if defined(HAVE_USTAT_H) -#include <ustat.h> -#endif #if defined(HAVE_UTIME_H) #include <utime.h> #endif