[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: