(root)/
strace-6.5/
tests-mx32/
timer_xettime.c
       1  /*
       2   * This file is part of timer_xettime strace test.
       3   *
       4   * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@strace.io>
       5   * Copyright (c) 2015-2023 The strace developers.
       6   * All rights reserved.
       7   *
       8   * SPDX-License-Identifier: GPL-2.0-or-later
       9   */
      10  
      11  #include "tests.h"
      12  #include "scno.h"
      13  
      14  #if defined __NR_timer_gettime \
      15   && defined __NR_timer_settime
      16  
      17  # include <stdio.h>
      18  # include <stdint.h>
      19  # include <signal.h>
      20  # include <time.h>
      21  # include <unistd.h>
      22  
      23  int
      24  main(void)
      25  {
      26  	syscall(__NR_timer_settime, 0xdefaced, TIMER_ABSTIME, NULL, NULL);
      27  	printf("timer_settime(%d, TIMER_ABSTIME, NULL, NULL)"
      28  	       " = -1 EINVAL (%m)\n", 0xdefaced);
      29  
      30  	long rc;
      31  	int tid;
      32  	struct sigevent sev = { .sigev_notify = SIGEV_NONE };
      33  
      34  	if (syscall(__NR_timer_create, CLOCK_MONOTONIC, &sev, &tid))
      35  		perror_msg_and_skip("timer_create");
      36  	printf("timer_create(CLOCK_MONOTONIC, {sigev_signo=0"
      37  	       ", sigev_notify=SIGEV_NONE}, [%d]) = 0\n", tid);
      38  
      39  	TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_new);
      40  	TAIL_ALLOC_OBJECT_CONST_PTR(struct itimerspec, its_old);
      41  
      42  	its_new->it_interval.tv_sec = 0xdeadbeefU;
      43  	its_new->it_interval.tv_nsec = 0xfacefeedU;
      44  	its_new->it_value.tv_sec =
      45  		(typeof(its_new->it_value.tv_sec)) 0xcafef00ddeadbeefLL;
      46  	its_new->it_value.tv_nsec = (long) 0xbadc0dedfacefeedLL;
      47  
      48  	rc = syscall(__NR_timer_settime, tid, 0, its_new, its_old);
      49  	printf("timer_settime(%d, 0"
      50  	       ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
      51  	       ", it_value={tv_sec=%lld, tv_nsec=%llu}}, %p) = %s\n",
      52  	       tid, (long long) its_new->it_interval.tv_sec,
      53  	       zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
      54  	       (long long) its_new->it_value.tv_sec,
      55  	       zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
      56  	       its_old, sprintrc(rc));
      57  
      58  	its_new->it_interval.tv_sec = 0xdeface1;
      59  	its_new->it_interval.tv_nsec = 0xdeface2;
      60  	its_new->it_value.tv_sec = 0xdeface3;
      61  	its_new->it_value.tv_nsec = 0xdeface4;
      62  	its_old->it_interval.tv_sec = 0xdeface5;
      63  	its_old->it_interval.tv_nsec = 0xdeface6;
      64  	its_old->it_value.tv_sec = 0xdeface7;
      65  	its_old->it_value.tv_nsec = 0xdeface8;
      66  
      67  	if (syscall(__NR_timer_settime, tid, 0, its_new, its_old))
      68  		perror_msg_and_skip("timer_settime");
      69  	printf("timer_settime(%d, 0"
      70  	       ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
      71  	       ", it_value={tv_sec=%lld, tv_nsec=%llu}}"
      72  	       ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
      73  	       ", it_value={tv_sec=%lld, tv_nsec=%llu}}"
      74  	       ") = 0\n",
      75  	       tid,
      76  	       (long long) its_new->it_interval.tv_sec,
      77  	       zero_extend_signed_to_ull(its_new->it_interval.tv_nsec),
      78  	       (long long) its_new->it_value.tv_sec,
      79  	       zero_extend_signed_to_ull(its_new->it_value.tv_nsec),
      80  	       (long long) its_old->it_interval.tv_sec,
      81  	       zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
      82  	       (long long) its_old->it_value.tv_sec,
      83  	       zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
      84  
      85  	if (syscall(__NR_timer_gettime, tid, its_old))
      86  		perror_msg_and_skip("timer_gettime");
      87  	printf("timer_gettime(%d"
      88  	       ", {it_interval={tv_sec=%lld, tv_nsec=%llu}"
      89  	       ", it_value={tv_sec=%lld, tv_nsec=%llu}}) = 0\n",
      90  	       tid,
      91  	       (long long) its_old->it_interval.tv_sec,
      92  	       zero_extend_signed_to_ull(its_old->it_interval.tv_nsec),
      93  	       (long long) its_old->it_value.tv_sec,
      94  	       zero_extend_signed_to_ull(its_old->it_value.tv_nsec));
      95  
      96  	puts("+++ exited with 0 +++");
      97  	return 0;
      98  }
      99  
     100  #else
     101  
     102  SKIP_MAIN_UNDEFINED("__NR_timer_gettime && __NR_timer_settime")
     103  
     104  #endif