https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114065

--- Comment #68 from dave.anglin at bell dot net ---
On 2026-09-27 5:07 a.m., ebotcazou at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114065
> 
> --- Comment #66 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
>> 3 passes each bit offset of the timeval and timespec C structs to the
>> related Ada record representation clause.  This should prevent issues like
>> the one reported by John.
> 
> I'd rather not fiddle with representation clauses in this unit.  What's the
> declaration of the problematic structure in C exactly?

glibc defines struct __timespec64 as follows:

#ifndef _STRUCT_TIMESPEC64_H
#define _STRUCT_TIMESPEC64_H

#if __TIMESIZE == 64
# define __timespec64 timespec
#else
#include <endian.h>
/* The glibc Y2038-proof struct __timespec64 structure for a time value.
   To keep things Posix-ish, we keep the nanoseconds field a 32-bit
   signed long, but since the Linux field is a 64-bit signed int, we
   pad our tv_nsec with a 32-bit unnamed bit-field padding.

   As a general rule the Linux kernel is ignoring upper 32 bits of
   tv_nsec field.  */
struct __timespec64
{
  __time64_t tv_sec;         /* Seconds */
# if BYTE_ORDER == BIG_ENDIAN
  __int32_t :32;             /* Padding */
  __int32_t tv_nsec;         /* Nanoseconds */
# else
  __int32_t tv_nsec;         /* Nanoseconds */
  __int32_t :32;             /* Padding */
# endif
};
#endif
#endif /* _STRUCT_TIMESPEC64_H  */

See: glibc/include/struct___timespec64.h

Reply via email to