Bug#712196: timer_settime broken on kfreebsd-amd64
The fix is to annotate syscall description
with correct number of parameters.
--- kfreebsd/syscalls.list
+++ kfreebsd/syscalls.list
-sys_ktimer_settime - ktimer_settime i:ip __syscall_ktimer_settime
+sys_ktimer_settime - ktimer_settime i:iipp __syscall_ktimer_settime
It is problem only on kfreebsd-amd64.
In functions with 4 and more parameters is necessary to
do "movq %rcx, %r10" before "syscall".
Test program:
**************************************************************
#include <signal.h>
#include <time.h>
struct itimerspec nv, ov;
int main()
{
timer_t tm;
nv.it_value.tv_sec = 100;
timer_create(CLOCK_MONOTONIC, NULL, &tm);
printf("should be zero: %ld\n", ov.it_value.tv_sec);
timer_settime(tm, 0, &nv, &ov);
printf("should be zero: %ld\n", ov.it_value.tv_sec);
timer_settime(tm, 0, &nv, &ov);
printf("should be 99 or 100: %ld\n", ov.it_value.tv_sec);
sleep (5);
timer_settime(tm, 0, &nv, &ov);
printf("should be 94 or 95: %ld\n", ov.it_value.tv_sec);
}
**************************************************************
Reply to: