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
This commit is contained in:
Tomoki Shirasawa
2019-02-17 16:37:29 +09:00
committed by Masamichi Takagi
parent 07aa96ef95
commit 5bc54a3bbe
15 changed files with 471 additions and 88 deletions

43
test/issues/1186/C1186.c Normal file
View File

@ -0,0 +1,43 @@
#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);
}