On Thu, Oct 30, 2014 at 8:40 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
> Recent go changes broke alpha bootstrap: > $files/space/homedirs/uros/gcc-svn/trunk/libgo/go/os/stat_atim.go:22:29: > error: reference to undefined field or method ‘Mtim’ > modTime: timespecToTime(st.Mtim), > ^ > /space/homedirs/uros/gcc-svn/trunk/libgo/go/os/stat_atim.go:60:50: > error: reference to undefined field or method ‘Atim’ > return timespecToTime(fi.Sys().(*syscall.Stat_t).Atim) > ^ > Makefile:4579: recipe for target 'os.lo' failed > gmake[4]: *** [os.lo] Error 1 > gmake[4]: Leaving directory > '/space/uros/gcc-build/alphaev68-unknown-linux-gnu/libgo' > > The relevant part of libgo/sysinfo.log declares: > > libgo/sysinfo.go:type Stat_t struct { Dev uint64; Ino uint64; Rdev > uint64; Size int64; Blocks uint64; Mode uint32; Uid uint32; Gid > uint32; Blksize uint32; Nlink uint32; __pad0 int32; Godump_0 struct { > Atim [16]byte; Godump_1_align [0]uint64; }; Godump_2 struct { Mtim > [16]byte; Godump_3_align [0]uint64; }; Godump_4 struct { Ctim > [16]byte; Godump_5_align [0]uint64; }; __glibc_reserved [2+1]int64; } Looks like "[PATCH 7/9] Gccgo port to s390[x] -- part I" [1,2] broke it. The definitions from bits/stat.h are: --cut here-- /* Nanosecond resolution timestamps are stored in a format equivalent to 'struct timespec'. This is the type used whenever possible but the Unix namespace rules do not allow the identifier 'timespec' to appear in the <sys/stat.h> header. Therefore we have to handle the use of this header in strictly standard-compliant sources special. Use neat tidy anonymous unions and structures when possible. */ #if defined __USE_MISC || defined __USE_XOPEN2K8 # if __GNUC_PREREQ(3,3) # define __ST_TIME(X) \ __extension__ union { \ struct timespec st_##X##tim; \ struct { \ __time_t st_##X##time; \ unsigned long st_##X##timensec; \ }; \ } # else # define __ST_TIME(X) struct timespec st_##X##tim # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec # endif #else # define __ST_TIME(X) \ __time_t st_##X##time; \ unsigned long st_##X##timensec #endif struct stat { __dev_t st_dev; /* Device. */ #ifdef __USE_FILE_OFFSET64 __ino64_t st_ino; /* File serial number. */ #else __ino_t st_ino; /* File serial number. */ int __pad0; /* 64-bit st_ino. */ #endif __dev_t st_rdev; /* Device number, if device. */ __off_t st_size; /* Size of file, in bytes. */ #ifdef __USE_FILE_OFFSET64 __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ #else __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */ int __pad1; /* 64-bit st_blocks. */ #endif __mode_t st_mode; /* File mode. */ __uid_t st_uid; /* User ID of the file's owner. */ __gid_t st_gid; /* Group ID of the file's group.*/ __blksize_t st_blksize; /* Optimal block size for I/O. */ __nlink_t st_nlink; /* Link count. */ int __pad2; /* Real padding. */ __ST_TIME(a); /* Time of last access. */ __ST_TIME(m); /* Time of last modification. */ __ST_TIME(c); /* Time of last status change. */ long __glibc_reserved[3]; }; --cut here-- [1] https://gcc.gnu.org/ml/gcc-patches/2014-10/msg02977.html [2] https://gcc.gnu.org/ml/gcc-cvs/2014-10/msg01069.html Uros.