#include <sys/syscall.h>

__attribute__((__visibility__("hidden"))) long __syscall_cp_internal(
    volatile void*,
    long long,
    long long,
    long long,
    long long,
    long long,
    long long,
    long long);

struct __timespec {
  long long tv_sec;
  long tv_nsec;
};
struct __timespec_kernel {
  long long tv_sec;
  long long tv_nsec;
};
#define __tsc(X) ((struct __timespec*)(unsigned long)(X))
#define __fixup(X)                     \
  do {                                 \
    if (X) {                           \
      ts->tv_sec = __tsc(X)->tv_sec;   \
      ts->tv_nsec = __tsc(X)->tv_nsec; \
      (X) = (unsigned long)ts;         \
    }                                  \
  } while (0)

__attribute__((__visibility__("hidden"))) long __syscall_cp_asm(
    volatile void* foo,
    long long n,
    long long a1,
    long long a2,
    long long a3,
    long long a4,
    long long a5,
    long long a6) {
  struct __timespec_kernel ts[1];
  switch (n) {
    case SYS_mq_timedsend:
    case SYS_mq_timedreceive:
    case SYS_pselect6:
      __fixup(a5);
      break;
    case SYS_futex:
      if ((a2 & (~128 /* FUTEX_PRIVATE_FLAG */)) == 0 /* FUTEX_WAIT */)
        __fixup(a4);
      break;
    case SYS_clock_nanosleep:
    case SYS_rt_sigtimedwait:
    case SYS_ppoll:
      __fixup(a3);
      break;
    case SYS_nanosleep:
      __fixup(a1);
      break;
  }
  return __syscall_cp_internal(foo, n, a1, a2, a3, a4, a5, a6);
}
