summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/alpha/osf_adjtime.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/alpha/osf_adjtime.c')
-rw-r--r--sysdeps/unix/sysv/linux/alpha/osf_adjtime.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/alpha/osf_adjtime.c b/sysdeps/unix/sysv/linux/alpha/osf_adjtime.c
new file mode 100644
index 0000000000..73874ef2f0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/osf_adjtime.c
@@ -0,0 +1,130 @@
+/* adjtime -- adjust the system clock. Linux/Alpha/tv32 version.
+ Copyright (C) 2019 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+
+#include <sys/time.h>
+#include <sys/timex.h>
+#include <tv32-compat.h>
+
+struct timex32 {
+ unsigned int modes; /* mode selector */
+ long offset; /* time offset (usec) */
+ long freq; /* frequency offset (scaled ppm) */
+ long maxerror; /* maximum error (usec) */
+ long esterror; /* estimated error (usec) */
+ int status; /* clock command/status */
+ long constant; /* pll time constant */
+ long precision; /* clock precision (usec) (read only) */
+ long tolerance; /* clock frequency tolerance (ppm)
+ * (read only)
+ */
+ struct timeval32 time; /* (read only) */
+ long tick; /* (modified) usecs between clock ticks */
+
+ long ppsfreq; /* pps frequency (scaled ppm) (ro) */
+ long jitter; /* pps jitter (us) (ro) */
+ int shift; /* interval duration (s) (shift) (ro) */
+ long stabil; /* pps stability (scaled ppm) (ro) */
+ long jitcnt; /* jitter limit exceeded (ro) */
+ long calcnt; /* calibration intervals (ro) */
+ long errcnt; /* calibration errors (ro) */
+ long stbcnt; /* stability limit exceeded (ro) */
+
+ int :32; int :32; int :32; int :32;
+ int :32; int :32; int :32; int :32;
+ int :32; int :32; int :32; int :32;
+};
+
+int
+attribute_compat_text_section
+__adjtime_tv32 (const struct timeval32 *itv, struct timeval32 *otv)
+{
+ struct timeval itv64, otv64;
+ TV32_TO_TV64 (&itv64, itv);
+
+ if (__adjtime (&itv64, &otv64) == -1)
+ return -1;
+
+ TV64_TO_TV32 (otv, &itv64);
+ return 0;
+}
+
+int
+attribute_compat_text_section
+__adjtimex_tv32 (struct timex32 *tx)
+{
+ struct timex tx64;
+ memset (&tx64, 0, sizeof tx64);
+ tx64.modes = tx->modes;
+ tx64.offset = tx->offset;
+ tx64.freq = tx->freq;
+ tx64.maxerror = tx->maxerror;
+ tx64.esterror = tx->esterror;
+ tx64.status = tx->status;
+ tx64.constant = tx->constant;
+ tx64.precision = tx->precision;
+ tx64.tolerance = tx->tolerance;
+ tx64.tick = tx->tick;
+ tx64.ppsfreq = tx->ppsfreq;
+ tx64.jitter = tx->jitter;
+ tx64.shift = tx->shift;
+ tx64.stabil = tx->stabil;
+ tx64.jitcnt = tx->jitcnt;
+ tx64.calcnt = tx->calcnt;
+ tx64.errcnt = tx->errcnt;
+ tx64.stbcnt = tx->stbcnt;
+ TV32_TO_TV64 (&tx64.time, &tx->time);
+
+ int status = __adjtimex (&tx64);
+ if (status < 0)
+ return status;
+
+ memset (tx, 0, sizeof *tx);
+ tx->modes = tx64.modes;
+ tx->offset = tx64.offset;
+ tx->freq = tx64.freq;
+ tx->maxerror = tx64.maxerror;
+ tx->esterror = tx64.esterror;
+ tx->status = tx64.status;
+ tx->constant = tx64.constant;
+ tx->precision = tx64.precision;
+ tx->tolerance = tx64.tolerance;
+ tx->tick = tx64.tick;
+ tx->ppsfreq = tx64.ppsfreq;
+ tx->jitter = tx64.jitter;
+ tx->shift = tx64.shift;
+ tx->stabil = tx64.stabil;
+ tx->jitcnt = tx64.jitcnt;
+ tx->calcnt = tx64.calcnt;
+ tx->errcnt = tx64.errcnt;
+ tx->stbcnt = tx64.stbcnt;
+ TV64_TO_TV32 (&tx->time, &tx64.time);
+
+ return status;
+}
+
+strong_alias (__adjtimex_tv32, __adjtimex_tv32_1);
+strong_alias (__adjtimex_tv32, __adjtimex_tv32_2);
+compat_symbol (libc, __adjtimex_tv32_1, __adjtimex, GLIBC_2_0);
+compat_symbol (libc, __adjtimex_tv32_2, adjtimex, GLIBC_2_0);
+compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2_0);
+
+#endif /* SHLIB_COMPAT */