$ cat main.c #include <stdio.h> #include <time.h> int main() { struct timespec ts; for (int i = 0; i < 100; ++i) { clock_gettime(CLOCK_MONOTONIC_COARSE, &ts); printf("%d %ld\n", ts.tv_sec, ts.tv_nsec); } return 0; } $ cc -m32 main.c $ ./a.out -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 -1 318747501 .... This happens when building the program as 32bit executable on 64bit FreeBSD and run the executable on 64bit FreeBSD.
*** Bug 273086 has been marked as a duplicate of this bug. ***
which architecutre? Amd64, aarch64 or powerpc64?
I see it on amd64. There is something weird with vdso' 32bit timehands.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=93626d54370292b09cd0ca604b144737109e9071 commit 93626d54370292b09cd0ca604b144737109e9071 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2023-08-12 19:51:37 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2023-08-12 22:34:08 +0000 tc_fill_vdso_timehands32(): fix On 64bit, there is a 4-byte hole in struct vdso_timekeep32 after tk_current, if the structure is not packed. This is due to the MD th_x86_pvc_last_systime being 64bit. Change amd64 VDSO_TIMEHANDS_MD32 to not use uint64_t, replace it with pair of uint32_t, as it is done for all other members. PR: 273085 Sponsored by: The FreeBSD Foundation MFC after: 1 week sys/dev/acpica/acpi_hpet.c | 3 ++- sys/x86/include/vdso.h | 7 ++++++- sys/x86/x86/pvclock.c | 2 +- sys/x86/x86/tsc.c | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-)
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=8fe73008036b0770e3d0a5b41e9b845feb46bdf1 commit 8fe73008036b0770e3d0a5b41e9b845feb46bdf1 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2023-08-12 19:51:37 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2023-08-19 00:35:29 +0000 tc_fill_vdso_timehands32(): fix PR: 273085 (cherry picked from commit 93626d54370292b09cd0ca604b144737109e9071) sys/dev/acpica/acpi_hpet.c | 3 ++- sys/x86/include/vdso.h | 7 ++++++- sys/x86/x86/pvclock.c | 2 +- sys/x86/x86/tsc.c | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-)