Applied, thanks! Zhaoming Luo, le lun. 24 mars 2025 13:20:42 +0800, a ecrit: > Check the availability of host_get_time64 and use it to replace > host_get_time for CLOCK_REALTIME when it's available. Fall back to > host_get_time if gnumach does not support host_get_time64 but the > gnumach headers do. > > host_get_time is deprecated > See > https://git.savannah.gnu.org/cgit/hurd/gnumach.git/commit/?id=569df850cd7badd1e36132ad3b44aa76a4d27c25 > However, it's kept for backward compactbility. > > * config.h.in: Add HAVE_HOST_GET_TIME64 config entry. > * sysdeps/mach/clock_gettime.c: Use host_get_time64 for CLOCK_REALTIME > when it's possible, fall to host_get_time otherwise. > * sysdeps/mach/configure: Check the existence of host_get_time64 RPC. > * sysdeps/mach/configure.ac: Check the existence of host_get_time64 RPC. > --- > config.h.in | 3 +++ > sysdeps/mach/clock_gettime.c | 20 ++++++++++++++++++++ > sysdeps/mach/configure | 30 ++++++++++++++++++++++++++++++ > sysdeps/mach/configure.ac | 2 ++ > 4 files changed, 55 insertions(+) > > diff --git a/config.h.in b/config.h.in > index cdbd5553..d3575c98 100644 > --- a/config.h.in > +++ b/config.h.in > @@ -166,6 +166,9 @@ > /* Mach specific: define if the `host_get_uptime64' RPC is available. */ > #undef HAVE_HOST_GET_UPTIME64 > > +/* Mach specific: define if the `host_get_time64' RPC is available. */ > +#undef HAVE_HOST_GET_TIME64 > + > /* Mach specific: define if the `thread_set_name' RPC is available. */ > #undef HAVE_MACH_THREAD_SET_NAME > > diff --git a/sysdeps/mach/clock_gettime.c b/sysdeps/mach/clock_gettime.c > index 381ccb84..8d0143cf 100644 > --- a/sysdeps/mach/clock_gettime.c > +++ b/sysdeps/mach/clock_gettime.c > @@ -57,6 +57,26 @@ __clock_gettime (clockid_t clock_id, struct timespec *ts) > > case CLOCK_REALTIME: > { > +#ifdef HAVE_HOST_GET_TIME64 > + time_value64_t tv_64; > + err = __host_get_time64 (__mach_host_self (), &tv_64); > + > + /* If err is MIG_BAD_ID, it means an old gnumach which does not > + support __host_get_time64 is running against the new gnumach > + headers which has the signature of __host_get_time64. In that > + case, we fall back to __host_get_time. */ > + if (err != MIG_BAD_ID) > + { > + if (err) > + { > + __set_errno (err); > + return -1; > + } > + > + TIME_VALUE64_TO_TIMESPEC (&tv_64, ts); > + return 0; > + } > +#endif > /* __host_get_time can only fail if passed an invalid host_t. > __mach_host_self could theoretically fail (producing an > invalid host_t) due to resource exhaustion, but we assume > diff --git a/sysdeps/mach/configure b/sysdeps/mach/configure > index 8aa6bbb1..311b2dd3 100644 > --- a/sysdeps/mach/configure > +++ b/sysdeps/mach/configure > @@ -491,6 +491,36 @@ if test $libc_cv_mach_rpc_host_get_uptime64 = yes; then > > fi > > +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for host_get_time64 > in mach_host.defs" >&5 > +printf %s "checking for host_get_time64 in mach_host.defs... " >&6; } > +if test ${libc_cv_mach_rpc_host_get_time64+y} > +then : > + printf %s "(cached) " >&6 > +else case e in #( > + e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#include <mach/mach_host.defs> > + > +_ACEOF > +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | > + $EGREP_TRADITIONAL "host_get_time64" >/dev/null 2>&1 > +then : > + libc_cv_mach_rpc_host_get_time64=yes > +else case e in #( > + e) libc_cv_mach_rpc_host_get_time64=no ;; > +esac > +fi > +rm -rf conftest* > + ;; > +esac > +fi > +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: > $libc_cv_mach_rpc_host_get_time64" >&5 > +printf "%s\n" "$libc_cv_mach_rpc_host_get_time64" >&6; } > +if test $libc_cv_mach_rpc_host_get_time64 = yes; then > + printf "%s\n" "#define HAVE_HOST_GET_TIME64 1" >>confdefs.h > + > +fi > + > { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thread_set_name > in gnumach.defs" >&5 > printf %s "checking for thread_set_name in gnumach.defs... " >&6; } > if test ${libc_cv_mach_rpc_thread_set_name+y} > diff --git a/sysdeps/mach/configure.ac b/sysdeps/mach/configure.ac > index 08e5fdef..3a6f2443 100644 > --- a/sysdeps/mach/configure.ac > +++ b/sysdeps/mach/configure.ac > @@ -94,6 +94,8 @@ mach_RPC_CHECK(mach_host.defs, host_page_size, > HAVE_HOST_PAGE_SIZE) > mach_RPC_CHECK(mach_host.defs, host_get_uptime64, > HAVE_HOST_GET_UPTIME64) > +mach_RPC_CHECK(mach_host.defs, host_get_time64, > + HAVE_HOST_GET_TIME64) > mach_RPC_CHECK(gnumach.defs, thread_set_name, > HAVE_MACH_THREAD_SET_NAME) > mach_RPC_CHECK(gnumach.defs, thread_get_name, > -- > 2.47.2 > >
-- Samuel if (argc > 1 && strcmp(argv[1], "-advice") == 0) { printf("Don't Panic!\n"); exit(42); } -- Arnold Robbins in the LJ of February '95, describing RCS