const unsigned long lnr = (unsigned long) (0xdeadbeef00000000ULL | nr);
const struct io_event *ev = tail_alloc(nr * sizeof(struct io_event));
- const struct timespec proto_ts = { .tv_nsec = 123456789 };
- const struct timespec *ts = tail_memdup(&proto_ts, sizeof(proto_ts));
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
(void) close(0);
if (open("/dev/zero", O_RDONLY))
bogus_ctx, (long) 0xca7faceddeadf00dLL,
(long) 0xba5e1e505ca571e0LL, ts + 1, sprintrc(rc));
+ ts->tv_sec = 0xdeadbeefU;
+ ts->tv_nsec = 0xfacefeedU;
+ rc = syscall(__NR_io_getevents, bogus_ctx, 0, 0, 0, ts);
+ printf("io_getevents(%#lx, 0, 0, NULL"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ bogus_ctx, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
+
+ ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ rc = syscall(__NR_io_getevents, bogus_ctx, 0, 0, 0, ts);
+ printf("io_getevents(%#lx, 0, 0, NULL"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ bogus_ctx, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
+
+ ts->tv_sec = 0;
+ ts->tv_nsec = 123456789;
rc = syscall(__NR_io_getevents, *ctx, nr, nr + 1, ev, ts);
printf("io_getevents(%#lx, %ld, %ld, ["
"{data=%#" PRI__x64 ", obj=%p, res=%u, res2=0}, "
(long long) req.ts.tv_sec,
zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+ req.ts.tv_sec = 0xdeadbeefU;
+ req.ts.tv_nsec = 0xfacefeedU;
+ assert(syscall(__NR_clock_nanosleep, CLOCK_REALTIME, 0,
+ &req.ts, &rem.ts) == -1);
+ printf("clock_nanosleep(CLOCK_REALTIME, 0"
+ ", {tv_sec=%lld, tv_nsec=%llu}, %p) = -1 EINVAL (%m)\n",
+ (long long) req.ts.tv_sec,
+ zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+
+ req.ts.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ req.ts.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ assert(syscall(__NR_clock_nanosleep, CLOCK_MONOTONIC, 0,
+ &req.ts, &rem.ts) == -1);
+ printf("clock_nanosleep(CLOCK_MONOTONIC, 0"
+ ", {tv_sec=%lld, tv_nsec=%llu}, %p) = -1 EINVAL (%m)\n",
+ (long long) req.ts.tv_sec,
+ zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+
assert(sigaction(SIGALRM, &act, NULL) == 0);
assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
if (setitimer(ITIMER_REAL, &itv, NULL))
perror_msg_and_skip("setitimer");
- --req.ts.tv_nsec;
+ req.ts.tv_sec = 0;
+ req.ts.tv_nsec = 999999999;
assert(syscall(__NR_clock_nanosleep, CLOCK_REALTIME, 0,
&req.ts, &rem.ts) == -1);
printf("clock_nanosleep(CLOCK_REALTIME, 0"
t.ts.tv_sec = 0xdeface1;
t.ts.tv_nsec = 0xdeface2;
- if (!syscall(__NR_clock_settime, CLOCK_THREAD_CPUTIME_ID, &t.ts))
- error_msg_and_skip("clock_settime CLOCK_THREAD_CPUTIME_ID:"
- " EINVAL expected");
+ syscall(__NR_clock_settime, CLOCK_THREAD_CPUTIME_ID, &t.ts);
+ printf("clock_settime(CLOCK_THREAD_CPUTIME_ID"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = -1 EINVAL (%m)\n",
+ (long long) t.ts.tv_sec,
+ zero_extend_signed_to_ull(t.ts.tv_nsec));
+
+ t.ts.tv_sec = 0xdeadbeefU;
+ t.ts.tv_nsec = 0xfacefeedU;
+ syscall(__NR_clock_settime, CLOCK_THREAD_CPUTIME_ID, &t.ts);
+ printf("clock_settime(CLOCK_THREAD_CPUTIME_ID"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = -1 EINVAL (%m)\n",
+ (long long) t.ts.tv_sec,
+ zero_extend_signed_to_ull(t.ts.tv_nsec));
+
+ t.ts.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ t.ts.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ syscall(__NR_clock_settime, CLOCK_THREAD_CPUTIME_ID, &t.ts);
printf("clock_settime(CLOCK_THREAD_CPUTIME_ID"
", {tv_sec=%lld, tv_nsec=%llu}) = -1 EINVAL (%m)\n",
(long long) t.ts.tv_sec,
# include "xlat/futexwakeops.h"
# include "xlat/futexwakecmps.h"
-static struct timespec *tmout;
-
void futex_error(int *uaddr, int op, unsigned long val, unsigned long timeout,
int *uaddr2, unsigned long val3, int rc)
{
uaddr[0] = 0x1deadead;
uaddr2[0] = 0xbadf00d;
- tmout = tail_alloc(sizeof(*tmout));
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, tmout);
tmout->tv_sec = 123;
tmout->tv_nsec = 0xbadc0de;
printf("futex(%p, FUTEX_WAIT, %u, %p) = %s\n",
uaddr, 0xfacefeed, tmout + 1, sprintrc(rc));
+ /* timeout is invalid */
+ tmout->tv_sec = 0xdeadbeefU;
+ tmout->tv_nsec = 0xfacefeedU;
+
+ CHECK_FUTEX(uaddr, FUTEX_WAIT, VAL, tmout, uaddr2, VAL3,
+ (rc == -1) && (errno == EINVAL));
+ printf("futex(%p, FUTEX_WAIT, %u, {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ uaddr, VAL_PR, (long long) tmout->tv_sec,
+ zero_extend_signed_to_ull(tmout->tv_nsec), sprintrc(rc));
+
+ tmout->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ tmout->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+
+ CHECK_FUTEX(uaddr, FUTEX_WAIT, VAL, tmout, uaddr2, VAL3,
+ (rc == -1) && (errno == EINVAL));
+ printf("futex(%p, FUTEX_WAIT, %u, {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ uaddr, VAL_PR, (long long) tmout->tv_sec,
+ zero_extend_signed_to_ull(tmout->tv_nsec), sprintrc(rc));
+
+ tmout->tv_sec = 123;
+ tmout->tv_nsec = 0xbadc0de;
+
/* uaddr is not as provided; uaddr2 is faulty but ignored */
CHECK_FUTEX(uaddr, FUTEX_WAIT, VAL, tmout, uaddr2 + 1, VAL3,
(rc == -1) && (errno == EAGAIN));
(long long) req.ts.tv_sec,
zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+ req.ts.tv_sec = 0xdeadbeefU;
+ req.ts.tv_nsec = 0xfacefeedU;
+ assert(nanosleep(&req.ts, &rem.ts) == -1);
+ printf("nanosleep({tv_sec=%lld, tv_nsec=%llu}, %p) = -1 EINVAL (%m)\n",
+ (long long) req.ts.tv_sec,
+ zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+
+ req.ts.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ req.ts.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ assert(nanosleep(&req.ts, &rem.ts) == -1);
+ printf("nanosleep({tv_sec=%lld, tv_nsec=%llu}, %p) = -1 EINVAL (%m)\n",
+ (long long) req.ts.tv_sec,
+ zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+
+ req.ts.tv_sec = -1;
+ req.ts.tv_nsec = -1;
+ assert(nanosleep(&req.ts, &rem.ts) == -1);
+ printf("nanosleep({tv_sec=%lld, tv_nsec=%llu}, %p) = -1 EINVAL (%m)\n",
+ (long long) req.ts.tv_sec,
+ zero_extend_signed_to_ull(req.ts.tv_nsec), &rem.ts);
+
assert(sigaction(SIGALRM, &act, NULL) == 0);
assert(sigprocmask(SIG_SETMASK, &set, NULL) == 0);
if (setitimer(ITIMER_REAL, &itv, NULL))
perror_msg_and_skip("setitimer");
+ req.ts.tv_sec = 0;
req.ts.tv_nsec = 999999999;
assert(nanosleep(&req.ts, &rem.ts) == -1);
printf("nanosleep({tv_sec=%lld, tv_nsec=%llu}"
printf("ppoll(%p, %u, %p, %p, %u) = %s\n",
efault, 42, efault + 8, efault + 16, sigset_size, errstr);
+ ts->tv_sec = 0xdeadbeefU;
+ ts->tv_nsec = 0xfacefeedU;
+ sys_ppoll(0, 0, (unsigned long) ts, 0, sigset_size);
+ printf("ppoll(NULL, 0, {tv_sec=%lld, tv_nsec=%llu}, NULL, %u) = %s\n",
+ (long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
+ sigset_size, errstr);
+
+ ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts->tv_nsec = (long) 0xbadc0dedfacefeedL;
+ sys_ppoll(0, 0, (unsigned long) ts, 0, sigset_size);
+ printf("ppoll(NULL, 0, {tv_sec=%lld, tv_nsec=%llu}, NULL, %u) = %s\n",
+ (long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
+ sigset_size, errstr);
+
if (pipe(pipe_fd) || pipe(pipe_fd + 2))
perror_msg_and_fail("pipe");
/*
* See how timeouts are decoded.
*/
+ tm.ts.tv_sec = 0xdeadbeefU;
+ tm.ts.tv_nsec = 0xfacefeedU;
+ assert(pselect(0, NULL, NULL, NULL, &tm.ts, NULL) == -1);
+ printf("pselect6(0, NULL, NULL, NULL"
+ ", {tv_sec=%lld, tv_nsec=%llu}, {NULL, %u}) = %s\n",
+ (long long) tm.ts.tv_sec,
+ zero_extend_signed_to_ull(tm.ts.tv_nsec),
+ NSIG_BYTES, sprintrc(-1));
+
+ tm.ts.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ tm.ts.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ assert(pselect(0, NULL, NULL, NULL, &tm.ts, NULL) == -1);
+ printf("pselect6(0, NULL, NULL, NULL"
+ ", {tv_sec=%lld, tv_nsec=%llu}, {NULL, %u}) = %s\n",
+ (long long) tm.ts.tv_sec,
+ zero_extend_signed_to_ull(tm.ts.tv_nsec),
+ NSIG_BYTES, sprintrc(-1));
+
assert(sigaction(SIGALRM, &act, NULL) == 0);
assert(setitimer(ITIMER_REAL, &itv, NULL) == 0);
+ tm.ts.tv_sec = 0;
tm.ts.tv_nsec = 222222222;
assert(pselect(0, NULL, NULL, NULL, &tm.ts, &mask) == -1);
printf("pselect6(0, NULL, NULL, NULL, {tv_sec=0, tv_nsec=222222222}"
.msg_iovlen = 1
}
};
- struct timespec t = { .tv_sec = 0, .tv_nsec = 12345678 };
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
+ ts->tv_sec = 0;
+ ts->tv_nsec = 12345678;
- int rc = recv_mmsg(-1, &mh, 1, 0, &t);
+ int rc = recv_mmsg(-1, &mh, 1, 0, ts);
printf("recvmmsg(-1, %p, 1, 0, {tv_sec=0, tv_nsec=12345678})"
- " = %d %s (%m)\n", &mh, rc, errno2name());
+ " = %s\n", &mh, sprintrc(rc));
- rc = recv_mmsg(fds[0], &mh, 1, 0, &t);
+ rc = recv_mmsg(fds[0], &mh, 1, 0, ts);
if (rc < 0)
perror_msg_and_skip("recvmmsg");
printf("recvmmsg(%d, [{msg_hdr={msg_name=NULL, msg_namelen=0"
", msg_controllen=0, msg_flags=0}, msg_len=1}], 1, 0"
", {tv_sec=0, tv_nsec=12345678}) = "
"%d (left {tv_sec=0, tv_nsec=%d})\n",
- fds[0], rc, (int) t.tv_nsec);
+ fds[0], rc, (int) ts->tv_nsec);
+
+ ts->tv_sec = 0xdeadbeefU;
+ ts->tv_nsec = 0xfacefeedU;
+
+ rc = recv_mmsg(fds[0], &mh, 1, 0, ts);
+ printf("recvmmsg(%d, %p, 1, 0, {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ fds[0], &mh, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
+
+ ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+
+ rc = recv_mmsg(fds[0], &mh, 1, 0, ts);
+ printf("recvmmsg(%d, %p, 1, 0, {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ fds[0], &mh, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
puts("+++ exited with 0 +++");
return 0;
(long long) timeout->tv_sec,
zero_extend_signed_to_ull(timeout->tv_nsec), set_size);
+ timeout->tv_sec = 0xdeadbeefU;
+ timeout->tv_nsec = 0xfacefeedU;
+ assert(k_sigtimedwait(k_set, NULL, timeout, set_size) == -1);
+ tprintf("rt_sigtimedwait([], NULL, {tv_sec=%lld, tv_nsec=%llu}"
+ ", %u) = -1 EINVAL (%m)\n",
+ (long long) timeout->tv_sec,
+ zero_extend_signed_to_ull(timeout->tv_nsec), set_size);
+
+ timeout->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ timeout->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ assert(k_sigtimedwait(k_set, NULL, timeout, set_size) == -1);
+ tprintf("rt_sigtimedwait([], NULL, {tv_sec=%lld, tv_nsec=%llu}"
+ ", %u) = -1 EINVAL (%m)\n",
+ (long long) timeout->tv_sec,
+ zero_extend_signed_to_ull(timeout->tv_nsec), set_size);
+
+ timeout->tv_sec = 0;
+ timeout->tv_nsec = 42;
+
TAIL_ALLOC_OBJECT_CONST_PTR(sigset_t, libc_set);
sigemptyset(libc_set);
sigaddset(libc_set, SIGHUP);
static void * const bogus_sops = (void *) -1L;
static const size_t bogus_nsops = (size_t) 0xdefaceddeadbeefULL;
- static const struct timespec ts_data = { 1, 123456789 };
-
- struct timespec *ts = tail_memdup(&ts_data, sizeof(*ts));
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct timespec, ts);
int rc;
id = semget(IPC_PRIVATE, 1, 0600);
printf("semtimedop(%d, %p, 1, %p) = %s\n",
id, sem_b + 1, ts + 1, sprintrc(rc));
+ ts->tv_sec = 1;
+ ts->tv_nsec = 123456789;
rc = semtimedop(bogus_semid, sem_b2, 2, ts);
printf("semtimedop(%d, [{%hu, %hd, %s%s%#hx}, %p], %u"
", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
", {tv_sec=%lld, tv_nsec=%llu}) = 0\n", id,
(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec));
+ sem_b->sem_op = 1;
+ ts->tv_sec = 0xdeadbeefU;
+ ts->tv_nsec = 0xfacefeedU;
+ rc = semtimedop(id, sem_b, 1, ts);
+ printf("semtimedop(%d, [{0, 1, SEM_UNDO}], 1"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ id, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
+
+ sem_b->sem_op = -1;
+ ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts->tv_nsec = (long) 0xbadc0dedfacefeedLL;
+ rc = semtimedop(id, sem_b, 1, ts);
+ printf("semtimedop(%d, [{0, -1, SEM_UNDO}], 1"
+ ", {tv_sec=%lld, tv_nsec=%llu}) = %s\n",
+ id, (long long) ts->tv_sec,
+ zero_extend_signed_to_ull(ts->tv_nsec), sprintrc(rc));
+
puts("+++ exited with 0 +++");
return 0;
}
printf("timer_settime(%d, TIMER_ABSTIME, NULL, NULL)"
" = -1 EINVAL (%m)\n", 0xdefaced);
+ long rc;
int tid;
struct sigevent sev = { .sigev_notify = SIGEV_NONE };
printf("timer_create(CLOCK_MONOTONIC, {sigev_signo=0"
", sigev_notify=SIGEV_NONE}, [%d]) = 0\n", tid);
- struct {
- struct itimerspec its;
- uint32_t pad[4];
- } old = {
- .its = {
- .it_interval = { 0xdeface5, 0xdeface6 },
- .it_value = { 0xdeface7, 0xdeface8 }
- },
- .pad = { 0xdeadbeef, 0xbadc0ded, 0xdeadbeef, 0xbadc0ded }
- }, new = {
- .its = {
- .it_interval = { 0xdeface1, 0xdeface2 },
- .it_value = { 0xdeface3, 0xdeface4 }
- },
- .pad = { 0xdeadbeef, 0xbadc0ded, 0xdeadbeef, 0xbadc0ded }
- };
-
- if (syscall(__NR_timer_settime, tid, 0, &new.its, &old.its))
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_new);
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_old);
+
+ its_new->it_interval.tv_sec = 0xdeadbeefU;
+ its_new->it_interval.tv_nsec = 0xfacefeedU;
+ its_new->it_value.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ its_new->it_value.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+
+ rc = syscall(__NR_timer_settime, tid, 0, its_new, its_old);
+ printf("timer_settime(%d, 0"
+ ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
+ ", it_value={tv_sec=%lld, tv_nsec=%llu}}, %p) = %s\n",
+ tid, (long long) its_new->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
+ (long long) its_new->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
+ its_old, sprintrc(rc));
+
+ its_new->it_interval.tv_sec = 0xdeface1;
+ its_new->it_interval.tv_nsec = 0xdeface2;
+ its_new->it_value.tv_sec = 0xdeface3;
+ its_new->it_value.tv_nsec = 0xdeface4;
+ its_old->it_interval.tv_sec = 0xdeface5;
+ its_old->it_interval.tv_nsec = 0xdeface6;
+ its_old->it_value.tv_sec = 0xdeface7;
+ its_old->it_value.tv_nsec = 0xdeface8;
+
+ if (syscall(__NR_timer_settime, tid, 0, its_new, its_old))
perror_msg_and_skip("timer_settime");
printf("timer_settime(%d, 0"
", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
", it_value={tv_sec=%lld, tv_nsec=%llu}}"
") = 0\n",
tid,
- (long long) new.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(new.its.it_interval.tv_nsec),
- (long long) new.its.it_value.tv_sec,
- zero_extend_signed_to_ull(new.its.it_value.tv_nsec),
- (long long) old.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(old.its.it_interval.tv_nsec),
- (long long) old.its.it_value.tv_sec,
- zero_extend_signed_to_ull(old.its.it_value.tv_nsec));
-
- if (syscall(__NR_timer_gettime, tid, &old.its))
+ (long long) its_new->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
+ (long long) its_new->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
+ (long long) its_old->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
+ (long long) its_old->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
+
+ if (syscall(__NR_timer_gettime, tid, its_old))
perror_msg_and_skip("timer_gettime");
printf("timer_gettime(%d"
", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
", it_value={tv_sec=%lld, tv_nsec=%llu}}) = 0\n",
tid,
- (long long) old.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(old.its.it_interval.tv_nsec),
- (long long) old.its.it_value.tv_sec,
- zero_extend_signed_to_ull(old.its.it_value.tv_nsec));
+ (long long) its_old->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
+ (long long) its_old->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
puts("+++ exited with 0 +++");
return 0;
perror_msg_and_skip("timerfd_create");
puts("timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC|TFD_NONBLOCK) = 0");
- struct {
- struct itimerspec its;
- uint32_t pad[4];
- } old = {
- .its = {
- .it_interval = { 0xdeface5, 0xdeface6 },
- .it_value = { 0xdeface7, 0xdeface8 }
- },
- .pad = { 0xdeadbeef, 0xbadc0ded, 0xdeadbeef, 0xbadc0ded }
- }, new = {
- .its = {
- .it_interval = { 0xdeface1, 0xdeface2 },
- .it_value = { 0xdeface3, 0xdeface4 }
- },
- .pad = { 0xdeadbeef, 0xbadc0ded, 0xdeadbeef, 0xbadc0ded }
- };
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_new);
+ TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_old);
- if (syscall(__NR_timerfd_settime, 0, 0, &new.its, &old.its))
+ its_new->it_interval.tv_sec = 0xdeadbeefU;
+ its_new->it_interval.tv_nsec = 0xfacefeedU;
+ its_new->it_value.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ its_new->it_value.tv_nsec = (long) 0xbadc0dedfacefeedLL;
+
+ long rc = syscall(__NR_timerfd_settime, 0, 0, its_new, its_old);
+ printf("timerfd_settime(0, 0"
+ ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
+ ", it_value={tv_sec=%lld, tv_nsec=%llu}}, %p) = %s\n",
+ (long long) its_new->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
+ (long long) its_new->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
+ its_old, sprintrc(rc));
+
+ its_new->it_interval.tv_sec = 0xdeface1;
+ its_new->it_interval.tv_nsec = 0xdeface2;
+ its_new->it_value.tv_sec = 0xdeface3;
+ its_new->it_value.tv_nsec = 0xdeface4;
+ its_old->it_interval.tv_sec = 0xdeface5;
+ its_old->it_interval.tv_nsec = 0xdeface6;
+ its_old->it_value.tv_sec = 0xdeface7;
+ its_old->it_value.tv_nsec = 0xdeface8;
+
+ if (syscall(__NR_timerfd_settime, 0, 0, its_new, its_old))
perror_msg_and_skip("timerfd_settime");
printf("timerfd_settime(0, 0"
", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
", it_value={tv_sec=%lld, tv_nsec=%llu}}"
") = 0\n",
- (long long) new.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(new.its.it_interval.tv_nsec),
- (long long) new.its.it_value.tv_sec,
- zero_extend_signed_to_ull(new.its.it_value.tv_nsec),
- (long long) old.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(old.its.it_interval.tv_nsec),
- (long long) old.its.it_value.tv_sec,
- zero_extend_signed_to_ull(old.its.it_value.tv_nsec));
+ (long long) its_new->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
+ (long long) its_new->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
+ (long long) its_old->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
+ (long long) its_old->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
- if (syscall(__NR_timerfd_gettime, 0, &old.its))
+ if (syscall(__NR_timerfd_gettime, 0, its_old))
perror_msg_and_skip("timerfd_gettime");
printf("timerfd_gettime(0"
", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
", it_value={tv_sec=%lld, tv_nsec=%llu}}) = 0\n",
- (long long) old.its.it_interval.tv_sec,
- zero_extend_signed_to_ull(old.its.it_interval.tv_nsec),
- (long long) old.its.it_value.tv_sec,
- zero_extend_signed_to_ull(old.its.it_value.tv_nsec));
+ (long long) its_old->it_interval.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
+ (long long) its_old->it_value.tv_sec,
+ zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
puts("+++ exited with 0 +++");
return 0;
print_ts(&ts[1]);
printf("], AT_SYMLINK_NOFOLLOW) = %s\n", errstr);
+ ts[0].tv_sec = 0;
+ ts[0].tv_nsec = 0;
+ ts[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts[1].tv_nsec = 0;
+
+ k_utimensat(kfdcwd, kfname, (uintptr_t) ts, 0x100);
+ printf("utimensat(AT_FDCWD, %s, [", qname);
+ print_ts(&ts[0]);
+ printf(", ");
+ print_ts(&ts[1]);
+ printf("], AT_SYMLINK_NOFOLLOW) = %s\n", errstr);
+
+ ts[0].tv_sec = 0xdeadbeefU;
+ ts[0].tv_nsec = 0xfacefeedU;
+ ts[1].tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ ts[1].tv_nsec = (long) 0xbadc0dedfacefeedLL;
+
+ k_utimensat(kfdcwd, kfname, (uintptr_t) ts, 0x100);
+ printf("utimensat(AT_FDCWD, %s, [", qname);
+ print_ts(&ts[0]);
+ printf(", ");
+ print_ts(&ts[1]);
+ printf("], AT_SYMLINK_NOFOLLOW) = %s\n", errstr);
+
ts[0].tv_nsec = UTIME_NOW;
ts[1].tv_nsec = UTIME_OMIT;
k_utimensat(kfdcwd, kfname, (uintptr_t) ts, 0x100);