https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119698
John David Anglin <danglin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|FIXED |DUPLICATE --- Comment #20 from John David Anglin <danglin at gcc dot gnu.org> --- sh debian/ada/check_ali_update.sh /usr/lib/gcc/hppa-linux-gnu/12 build/gcc/ada/rts error: changes in Ada Library Information files. You are seeing this because * build and host GCC major versions match. * build_type=build-native and with_libgnat=yes in debian/rules.defs. * differing files: s-oscons.ali s-osprim.ali s-parame.ali --- /usr/lib/gcc/hppa-linux-gnu/12/adainclude/s-oscons.ads +++ build/gcc/ada/rts/s-oscons.ads @@ -357,8 +357,8 @@ SO_BROADCAST : constant := 32; -- Can send broadcast msgs SO_SNDBUF : constant := 4097; -- Set/get send buffer size SO_RCVBUF : constant := 4098; -- Set/get recv buffer size - SO_SNDTIMEO : constant := 4101; -- Emission timeout - SO_RCVTIMEO : constant := 4102; -- Reception timeout + SO_SNDTIMEO : constant := 16449; -- Emission timeout + SO_RCVTIMEO : constant := 16448; -- Reception timeout SO_ERROR : constant := 4103; -- Get/clear error status SO_BUSY_POLL : constant := 16423; -- Busy polling IP_MULTICAST_IF : constant := 32; -- Set/get mcast interface @@ -394,8 +394,8 @@ ---------------------- -- Sizes (in bytes) of the components of struct timeval - SIZEOF_tv_sec : constant := 4; -- tv_sec - SIZEOF_tv_usec : constant := 4; -- tv_usec + SIZEOF_tv_sec : constant := 8; -- tv_sec + SIZEOF_tv_usec : constant := 8; -- tv_usec -- Maximum allowed value for tv_sec MAX_tv_sec : constant := 2 ** (SIZEOF_tv_sec * 8 - 1) - 1; @@ -469,6 +469,6 @@ -------------------------------- SIZEOF_struct_file_attributes : constant := 32; -- struct file_attributes - SIZEOF_struct_dirent_alloc : constant := 267; -- struct dirent allocation + SIZEOF_struct_dirent_alloc : constant := 275; -- struct dirent allocation end System.OS_Constants; --- /usr/lib/gcc/hppa-linux-gnu/12/adainclude/s-osprim.adb +++ build/gcc/ada/rts/s-osprim.adb @@ -29,15 +29,18 @@ -- -- ------------------------------------------------------------------------------ --- This version is for POSIX-like operating systems -with System.Parameters; +-- This version is for POSIX.1-2008-like operating systems +with System.CRTL; +with System.OS_Constants; +with System.Parameters; package body System.OS_Primitives is - -- ??? These definitions are duplicated from System.OS_Interface - -- because we don't want to depend on any package. Consider removing - -- these declarations in System.OS_Interface and move these ones in - -- the spec. + subtype int is System.CRTL.int; + + -- ??? These definitions are duplicated from System.OS_Interface because + -- we don't want to depend on any package. Consider removing these + -- declarations in System.OS_Interface and move these ones to the spec. type time_t is range -2 ** (System.Parameters.time_t_bits - 1) .. 2 ** (System.Parameters.time_t_bits - 1) - 1; @@ -56,43 +59,22 @@ ----------- function Clock return Duration is + TS : aliased timespec; + Result : int; - type timeval is array (1 .. 3) of Long_Integer; - -- The timeval array is sized to contain Long_Long_Integer sec and - -- Long_Integer usec. If Long_Long_Integer'Size = Long_Integer'Size then - -- it will be overly large but that will not effect the implementation - -- since it is not accessed directly. - - procedure timeval_to_duration - (T : not null access timeval; - sec : not null access Long_Long_Integer; - usec : not null access Long_Integer); - pragma Import (C, timeval_to_duration, "__gnat_timeval_to_duration"); - - Micro : constant := 10**6; - sec : aliased Long_Long_Integer; - usec : aliased Long_Integer; - TV : aliased timeval; - Result : Integer; - pragma Unreferenced (Result); - - function gettimeofday - (Tv : access timeval; - Tz : System.Address := System.Null_Address) return Integer; - pragma Import (C, gettimeofday, "gettimeofday"); + type clockid_t is new int; + CLOCK_REALTIME : constant clockid_t := + System.OS_Constants.CLOCK_REALTIME; + + function clock_gettime + (clock_id : clockid_t; + tp : access timespec) return int; + pragma Import (C, clock_gettime, "clock_gettime"); begin - -- The return codes for gettimeofday are as follows (from man pages): - -- EPERM settimeofday is called by someone other than the superuser - -- EINVAL Timezone (or something else) is invalid - -- EFAULT One of tv or tz pointed outside accessible address space - - -- None of these codes signal a potential clock skew, hence the return - -- value is never checked. - - Result := gettimeofday (TV'Access, System.Null_Address); - timeval_to_duration (TV'Access, sec'Access, usec'Access); - return Duration (sec) + Duration (usec) / Micro; + Result := clock_gettime (CLOCK_REALTIME, TS'Unchecked_Access); + pragma Assert (Result = 0); + return Duration (TS.tv_sec) + Duration (TS.tv_nsec) / 10#1#E9; end Clock; ----------------- --- /usr/lib/gcc/hppa-linux-gnu/12/adainclude/s-parame.ads +++ build/gcc/ada/rts/s-parame.ads @@ -29,7 +29,7 @@ -- -- ------------------------------------------------------------------------------ --- Default version used when no target-specific version is provided +-- This is the Posix 2008 version for 64 bit time_t. -- This package defines some system dependent parameters for GNAT. These -- are values that are referenced by the runtime library and are therefore @@ -102,8 +102,9 @@ -- Characteristics of time_t type -- ------------------------------------ - time_t_bits : constant := Long_Integer'Size; - -- Number of bits in type time_t + time_t_bits : constant := Long_Long_Integer'Size; + -- Number of bits in type time_t. Use for targets that are Posix 2008 + -- compliant (fixes the year 2038 time_t overflow). ---------------------------------------------- -- Characteristics of types in Interfaces.C -- This may break Ada packages, see https://people.debian.org/~lbrenta/debian-ada-policy.html. If you are uploading to Debian, please contact debian-...@lists.debian.org. debian/ada/check_ali_update.sh: 66: DEB_FAIL_ON_ADA_LIB_INFO_CHANGE: parameter not set make[1]: [debian/rules2:1343: stamps/05-build-stamp] Error 2 (ignored) touch stamps/05-build-stamp The switch to s-osprim.adb for POSIX.1-2008-like operating systems was in this Debian patch: pr114065-proposed.diff. This was Matthias' proposed fix for pr114065 (gnat build with -D_TIME_BITS=64 -D_FILE_OFFSET_BITS=64 fails on 32bit archs). I suspect this patch needs to be removed until there is a proper fix for pr114065, but maybe there is more... Probably, this a duplicate of 114065. *** This bug has been marked as a duplicate of bug 114065 ***