On Sat, Apr 2, 2011 at 1:17 AM, Ian Lance Taylor <i...@google.com> wrote:
> Rainer Orth <r...@cebitec.uni-bielefeld.de> writes:
>
>> I've got a similar issue on IRIX 6.5: <sys/time.h> has
>>
>> struct timeval {
>> #if _MIPS_SZLONG == 64
>>       __int32_t :32;
>> #endif
>>       time_t  tv_sec;         /* seconds */
>>       long    tv_usec;        /* and microseconds */
>> };
>>
>> which causes the 64-bit libgo build to break.
>
> I don't immediately see why that would break anything.  For a case like
> this I would expect layout_decl to turn the first field into an ordinary
> non-bit-field anyhow.
>
> What does the line for timeval look like in gen-sysinfo.go?

For Alpha, it looks like this:

type _timeval struct { tv_sec int64; tv_usec int64; }

where struct stat, as defined in bits/stat.h looks like:

struct stat
  {
...
    int __pad0;                 /* 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 __unused[3];
  };

with __ST_TIME defined as:

#ifdef __USE_MISC
# 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

This results in:

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; _f0 struct { Atime Timespec; }; _f1 struct
{ Mtime Timespec; }; _f2 struct { Ctime Timespec; }; __unused
[2+1]int64; }

Uros.

Reply via email to