1 /*
2 * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
3 * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
4 * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
5 * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@strace.io>
6 * Copyright (c) 2015-2021 The strace developers.
7 * All rights reserved.
8 *
9 * SPDX-License-Identifier: LGPL-2.1-or-later
10 */
11
12 static void
13 PRINT_TIMEX_TIME(const typeof_field(TIMEX_T, time) *const p)
14 {
15 tprint_struct_begin();
16 PRINT_FIELD_D(*p, tv_sec);
17 tprint_struct_next();
18 PRINT_FIELD_U(*p, tv_usec);
19 tprint_struct_end();
20 }
21
22 int
23 PRINT_TIMEX(struct tcb *const tcp, const kernel_ulong_t addr)
24 {
25 TIMEX_T tx;
26
27 if (umove_or_printaddr(tcp, addr, &tx))
28 return -1;
29
30 tprint_struct_begin();
31 PRINT_FIELD_FLAGS(tx, modes, adjtimex_modes, "ADJ_???");
32 tprint_struct_next();
33 PRINT_FIELD_D(tx, offset);
34 tprint_struct_next();
35 PRINT_FIELD_D(tx, freq);
36 tprint_struct_next();
37 PRINT_FIELD_D(tx, maxerror);
38 tprint_struct_next();
39 PRINT_FIELD_D(tx, esterror);
40 tprint_struct_next();
41 PRINT_FIELD_FLAGS(tx, status, adjtimex_status, "STA_???");
42 tprint_struct_next();
43 PRINT_FIELD_D(tx, constant);
44 tprint_struct_next();
45 PRINT_FIELD_D(tx, precision);
46 tprint_struct_next();
47 PRINT_FIELD_D(tx, tolerance);
48 tprint_struct_next();
49 PRINT_FIELD_OBJ_PTR(tx, time, PRINT_TIMEX_TIME);
50 tprint_struct_next();
51 PRINT_FIELD_D(tx, tick);
52 tprint_struct_next();
53 PRINT_FIELD_D(tx, ppsfreq);
54 tprint_struct_next();
55 PRINT_FIELD_D(tx, jitter);
56 tprint_struct_next();
57 PRINT_FIELD_D(tx, shift);
58 tprint_struct_next();
59 PRINT_FIELD_D(tx, stabil);
60 tprint_struct_next();
61 PRINT_FIELD_D(tx, jitcnt);
62 tprint_struct_next();
63 PRINT_FIELD_D(tx, calcnt);
64 tprint_struct_next();
65 PRINT_FIELD_D(tx, errcnt);
66 tprint_struct_next();
67 PRINT_FIELD_D(tx, stbcnt);
68 tprint_struct_next();
69 PRINT_FIELD_D(tx, tai);
70 tprint_struct_end();
71 return 0;
72 }