1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) 2019 Linaro Limited. All rights reserved.
4  * Author: Rafael David Tinoco <rafael.tinoco@linaro.org>
5  */
6 
7 #include "config.h"
8 #include "tst_test.h"
9 #include "tst_timer.h"
10 #include "tst_safe_clocks.h"
11 #include "lapi/syscalls.h"
12 #include "lapi/posix_clocks.h"
13 #include <time.h>
14 #include <pwd.h>
15 #include <sys/timex.h>
16 #include <sys/types.h>
17 #include "lapi/timex.h"
18 
19 static int sys_clock_adjtime(clockid_t, struct timex *);
20 static void timex_show(char *, struct timex);
21 
22 /*
23  * bad pointer w/ libc causes SIGSEGV signal, call syscall directly
24  */
sys_clock_adjtime(clockid_t clk_id,struct timex * txc)25 static int sys_clock_adjtime(clockid_t clk_id, struct timex *txc)
26 {
27 	return tst_syscall(__NR_clock_adjtime, clk_id, txc);
28 }
29 
timex_show(char * given,struct timex txc)30 static void timex_show(char *given, struct timex txc)
31 {
32 	tst_res(TINFO,  "%s\n"
33 			"             mode: %d\n"
34 			"           offset: %ld\n"
35 			"        frequency: %ld\n"
36 			"         maxerror: %ld\n"
37 			"         esterror: %ld\n"
38 			"           status: %d (0x%x)\n"
39 			"    time_constant: %ld\n"
40 			"        precision: %ld\n"
41 			"        tolerance: %ld\n"
42 			"             tick: %ld\n"
43 			"         raw time: %d(s) %d(us)",
44 			given,
45 			txc.modes,
46 			txc.offset,
47 			txc.freq,
48 			txc.maxerror,
49 			txc.esterror,
50 			txc.status,
51 			txc.status,
52 			txc.constant,
53 			txc.precision,
54 			txc.tolerance,
55 			txc.tick,
56 			(int)txc.time.tv_sec,
57 			(int)txc.time.tv_usec);
58 }
59