Files
mckernel/test/issues/1186/C1186.c
Tomoki Shirasawa 5bc54a3bbe Fixed time processing.
- arm64: Get TSC corresponding to boot time from IHK.

- x86_64: Calculate the current time using vdso.

Refs: #1186
Fujitsu: POSTK_DEBUG_ARCH_DEP_52
Change-Id: I293ba4bbe5390d50dea44b8a5b7471f59237daff
2019-02-22 04:13:13 +00:00

44 lines
944 B
C

#include <stdlib.h>
#include <stdio.h>
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <time.h>
long
ts_delta(struct timespec *t1, struct timespec *t2)
{
long delta = (t2->tv_sec - t1->tv_sec) * 1000000000L;
delta += (t2->tv_nsec - t1->tv_nsec);
return delta;
}
int
main(int argc, char **argv)
{
struct timespec d1;
struct timespec d2;
struct timespec d3;
long delta1;
long delta2;
printf("*** C1186T02: test start\n");
clock_gettime(CLOCK_REALTIME, &d1);
syscall(SYS_clock_gettime, CLOCK_REALTIME, &d2);
clock_gettime(CLOCK_REALTIME, &d3);
delta1 = ts_delta(&d1, &d2);
delta2 = ts_delta(&d2, &d3);
printf("%ld.%09ld\n", d1.tv_sec, d1.tv_nsec);
printf("%ld.%09ld %ld\n", d2.tv_sec, d2.tv_nsec, delta1);
printf("%ld.%09ld %ld\n", d3.tv_sec, d3.tv_nsec, delta2);
if (delta1 <= 0 || delta2 <= 0) {
printf("*** C1186T02: NG\n");
exit(1);
}
else {
printf("*** C1186T02: OK\n");
}
exit(0);
}