]> granicus.if.org Git - strace/blobdiff - time.c
Use XLAT_END macro
[strace] / time.c
diff --git a/time.c b/time.c
index 877613bf6a23d7b264018907b3bc95f146dccac1..9f47a71d8a64f0fea423bfc639b46b5a15c0120f 100644 (file)
--- a/time.c
+++ b/time.c
@@ -280,10 +280,10 @@ sys_nanosleep(struct tcb *tcp)
 }
 
 static const struct xlat which[] = {
-       { ITIMER_REAL,  "ITIMER_REAL"   },
-       { ITIMER_VIRTUAL,"ITIMER_VIRTUAL"},
-       { ITIMER_PROF,  "ITIMER_PROF"   },
-       { 0,            NULL            },
+       XLAT(ITIMER_REAL),
+       XLAT(ITIMER_VIRTUAL),
+       XLAT(ITIMER_PROF),
+       XLAT_END
 };
 
 static void
@@ -403,121 +403,121 @@ sys_osf_setitimer(struct tcb *tcp)
 #endif
 
 static const struct xlat adjtimex_modes[] = {
-       { 0,            "0"                     },
+       XLAT(0),
 #ifdef ADJ_OFFSET
-       { ADJ_OFFSET,   "ADJ_OFFSET"            },
+       XLAT(ADJ_OFFSET),
 #endif
 #ifdef ADJ_FREQUENCY
-       { ADJ_FREQUENCY, "ADJ_FREQUENCY"        },
+       XLAT(ADJ_FREQUENCY),
 #endif
 #ifdef ADJ_MAXERROR
-       { ADJ_MAXERROR, "ADJ_MAXERROR"          },
+       XLAT(ADJ_MAXERROR),
 #endif
 #ifdef ADJ_ESTERROR
-       { ADJ_ESTERROR, "ADJ_ESTERROR"          },
+       XLAT(ADJ_ESTERROR),
 #endif
 #ifdef ADJ_STATUS
-       { ADJ_STATUS,   "ADJ_STATUS"            },
+       XLAT(ADJ_STATUS),
 #endif
 #ifdef ADJ_TIMECONST
-       { ADJ_TIMECONST, "ADJ_TIMECONST"        },
+       XLAT(ADJ_TIMECONST),
 #endif
 #ifdef ADJ_TAI
-       { ADJ_TAI, "ADJ_TAI"                    },
+       XLAT(ADJ_TAI),
 #endif
 #ifdef ADJ_SETOFFSET
-       { ADJ_SETOFFSET, "ADJ_SETOFFSET"        },
+       XLAT(ADJ_SETOFFSET),
 #endif
 #ifdef ADJ_MICRO
-       { ADJ_MICRO, "ADJ_MICRO"                },
+       XLAT(ADJ_MICRO),
 #endif
 #ifdef ADJ_NANO
-       { ADJ_NANO, "ADJ_NANO"                  },
+       XLAT(ADJ_NANO),
 #endif
 #ifdef ADJ_TICK
-       { ADJ_TICK,     "ADJ_TICK"              },
+       XLAT(ADJ_TICK),
 #endif
 #ifdef ADJ_OFFSET_SINGLESHOT
-       { ADJ_OFFSET_SINGLESHOT, "ADJ_OFFSET_SINGLESHOT" },
+       XLAT(ADJ_OFFSET_SINGLESHOT),
 #endif
 #ifdef ADJ_OFFSET_SS_READ
-       { ADJ_OFFSET_SS_READ, "ADJ_OFFSET_SS_READ" },
+       XLAT(ADJ_OFFSET_SS_READ),
 #endif
-       { 0,            NULL                    }
+       XLAT_END
 };
 
 static const struct xlat adjtimex_status[] = {
 #ifdef STA_PLL
-       { STA_PLL,      "STA_PLL"       },
+       XLAT(STA_PLL),
 #endif
 #ifdef STA_PPSFREQ
-       { STA_PPSFREQ,  "STA_PPSFREQ"   },
+       XLAT(STA_PPSFREQ),
 #endif
 #ifdef STA_PPSTIME
-       { STA_PPSTIME,  "STA_PPSTIME"   },
+       XLAT(STA_PPSTIME),
 #endif
 #ifdef STA_FLL
-       { STA_FLL,      "STA_FLL"       },
+       XLAT(STA_FLL),
 #endif
 #ifdef STA_INS
-       { STA_INS,      "STA_INS"       },
+       XLAT(STA_INS),
 #endif
 #ifdef STA_DEL
-       { STA_DEL,      "STA_DEL"       },
+       XLAT(STA_DEL),
 #endif
 #ifdef STA_UNSYNC
-       { STA_UNSYNC,   "STA_UNSYNC"    },
+       XLAT(STA_UNSYNC),
 #endif
 #ifdef STA_FREQHOLD
-       { STA_FREQHOLD, "STA_FREQHOLD"  },
+       XLAT(STA_FREQHOLD),
 #endif
 #ifdef STA_PPSSIGNAL
-       { STA_PPSSIGNAL, "STA_PPSSIGNAL" },
+       XLAT(STA_PPSSIGNAL),
 #endif
 #ifdef STA_PPSJITTER
-       { STA_PPSJITTER, "STA_PPSJITTER" },
+       XLAT(STA_PPSJITTER),
 #endif
 #ifdef STA_PPSWANDER
-       { STA_PPSWANDER, "STA_PPSWANDER" },
+       XLAT(STA_PPSWANDER),
 #endif
 #ifdef STA_PPSERROR
-       { STA_PPSERROR, "STA_PPSERROR"  },
+       XLAT(STA_PPSERROR),
 #endif
 #ifdef STA_CLOCKERR
-       { STA_CLOCKERR, "STA_CLOCKERR"  },
+       XLAT(STA_CLOCKERR),
 #endif
 #ifdef STA_NANO
-       { STA_NANO,     "STA_NANO"      },
+       XLAT(STA_NANO),
 #endif
 #ifdef STA_MODE
-       { STA_MODE,     "STA_MODE"      },
+       XLAT(STA_MODE),
 #endif
 #ifdef STA_CLK
-       { STA_CLK,      "STA_CLK"       },
+       XLAT(STA_CLK),
 #endif
-       { 0,            NULL            }
+       XLAT_END
 };
 
 static const struct xlat adjtimex_state[] = {
 #ifdef TIME_OK
-       { TIME_OK,      "TIME_OK"       },
+       XLAT(TIME_OK),
 #endif
 #ifdef TIME_INS
-       { TIME_INS,     "TIME_INS"      },
+       XLAT(TIME_INS),
 #endif
 #ifdef TIME_DEL
-       { TIME_DEL,     "TIME_DEL"      },
+       XLAT(TIME_DEL),
 #endif
 #ifdef TIME_OOP
-       { TIME_OOP,     "TIME_OOP"      },
+       XLAT(TIME_OOP),
 #endif
 #ifdef TIME_WAIT
-       { TIME_WAIT,    "TIME_WAIT"     },
+       XLAT(TIME_WAIT),
 #endif
 #ifdef TIME_ERROR
-       { TIME_ERROR,   "TIME_ERROR"    },
+       XLAT(TIME_ERROR),
 #endif
-       { 0,            NULL            }
+       XLAT_END
 };
 
 #if SUPPORTED_PERSONALITIES > 1
@@ -639,40 +639,70 @@ sys_adjtimex(struct tcb *tcp)
 }
 
 static const struct xlat clockflags[] = {
-       { TIMER_ABSTIME,        "TIMER_ABSTIME" },
-       { 0,                    NULL            }
+       XLAT(TIMER_ABSTIME),
+       XLAT_END
 };
 
 static const struct xlat clocknames[] = {
 #ifdef CLOCK_REALTIME
-       { CLOCK_REALTIME,               "CLOCK_REALTIME" },
+       XLAT(CLOCK_REALTIME),
 #endif
 #ifdef CLOCK_MONOTONIC
-       { CLOCK_MONOTONIC,              "CLOCK_MONOTONIC" },
+       XLAT(CLOCK_MONOTONIC),
 #endif
 #ifdef CLOCK_PROCESS_CPUTIME_ID
-       { CLOCK_PROCESS_CPUTIME_ID,     "CLOCK_PROCESS_CPUTIME_ID" },
+       XLAT(CLOCK_PROCESS_CPUTIME_ID),
 #endif
 #ifdef CLOCK_THREAD_CPUTIME_ID
-       { CLOCK_THREAD_CPUTIME_ID,      "CLOCK_THREAD_CPUTIME_ID" },
+       XLAT(CLOCK_THREAD_CPUTIME_ID),
 #endif
 #ifdef CLOCK_MONOTONIC_RAW
-       { CLOCK_MONOTONIC_RAW,          "CLOCK_MONOTONIC_RAW" },
+       XLAT(CLOCK_MONOTONIC_RAW),
 #endif
 #ifdef CLOCK_REALTIME_COARSE
-       { CLOCK_REALTIME_COARSE,        "CLOCK_REALTIME_COARSE" },
+       XLAT(CLOCK_REALTIME_COARSE),
 #endif
 #ifdef CLOCK_MONOTONIC_COARSE
-       { CLOCK_MONOTONIC_COARSE,       "CLOCK_MONOTONIC_COARSE" },
+       XLAT(CLOCK_MONOTONIC_COARSE),
 #endif
-       { 0,                            NULL }
+       XLAT_END
 };
 
+#ifdef CLOCKID_TO_FD
+static const struct xlat cpuclocknames[] = {
+       XLAT(CPUCLOCK_PROF),
+       XLAT(CPUCLOCK_VIRT),
+       XLAT(CPUCLOCK_SCHED),
+       XLAT_END
+};
+#endif
+
+static void
+printclockname(int clockid)
+{
+#ifdef CLOCKID_TO_FD
+       if (clockid < 0) {
+               if ((clockid & CLOCKFD_MASK) == CLOCKFD)
+                       tprintf("FD_TO_CLOCKID(%d)", CLOCKID_TO_FD(clockid));
+               else {
+                       if(CPUCLOCK_PERTHREAD(clockid))
+                               tprintf("MAKE_THREAD_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
+                       else
+                               tprintf("MAKE_PROCESS_CPUCLOCK(%d,", CPUCLOCK_PID(clockid));
+                       printxval(cpuclocknames, clockid & CLOCKFD_MASK, "CPUCLOCK_???");
+                       tprints(")");
+               }
+       }
+       else
+#endif
+               printxval(clocknames, clockid, "CLOCK_???");
+}
+
 int
 sys_clock_settime(struct tcb *tcp)
 {
        if (entering(tcp)) {
-               printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
                printtv(tcp, tcp->u_arg[1]);
        }
@@ -683,7 +713,7 @@ int
 sys_clock_gettime(struct tcb *tcp)
 {
        if (entering(tcp)) {
-               printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
        } else {
                if (syserror(tcp))
@@ -698,7 +728,7 @@ int
 sys_clock_nanosleep(struct tcb *tcp)
 {
        if (entering(tcp)) {
-               printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
                printflags(clockflags, tcp->u_arg[1], "TIMER_???");
                tprints(", ");
@@ -718,7 +748,7 @@ sys_clock_adjtime(struct tcb *tcp)
 {
        if (exiting(tcp))
                return do_adjtimex(tcp, tcp->u_arg[1]);
-       printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+       printclockname(tcp->u_arg[0]);
        tprints(", ");
        return 0;
 }
@@ -727,11 +757,11 @@ sys_clock_adjtime(struct tcb *tcp)
 # define SIGEV_THREAD_ID 4
 #endif
 static const struct xlat sigev_value[] = {
-       { SIGEV_SIGNAL+1, "SIGEV_SIGNAL" },
-       { SIGEV_NONE+1, "SIGEV_NONE" },
-       { SIGEV_THREAD+1, "SIGEV_THREAD" },
-       { SIGEV_THREAD_ID+1, "SIGEV_THREAD_ID" },
-       { 0, NULL }
+       XLAT(SIGEV_SIGNAL),
+       XLAT(SIGEV_NONE),
+       XLAT(SIGEV_THREAD),
+       XLAT(SIGEV_THREAD_ID),
+       XLAT_END
 };
 
 #if SUPPORTED_PERSONALITIES > 1
@@ -759,7 +789,7 @@ printsigevent32(struct tcb *tcp, long arg)
                        tprintf("%s, ", signame(sev.sigev_signo));
                else
                        tprintf("%u, ", sev.sigev_signo);
-               printxval(sigev_value, sev.sigev_notify + 1, "SIGEV_???");
+               printxval(sigev_value, sev.sigev_notify, "SIGEV_???");
                tprints(", ");
                if (sev.sigev_notify == SIGEV_THREAD_ID)
                        tprintf("{%d}", sev.un.tid);
@@ -793,7 +823,7 @@ printsigevent(struct tcb *tcp, long arg)
                        tprintf("%s, ", signame(sev.sigev_signo));
                else
                        tprintf("%u, ", sev.sigev_signo);
-               printxval(sigev_value, sev.sigev_notify+1, "SIGEV_???");
+               printxval(sigev_value, sev.sigev_notify, "SIGEV_???");
                tprints(", ");
                if (sev.sigev_notify == SIGEV_THREAD_ID)
 #if defined(HAVE_STRUCT_SIGEVENT__SIGEV_UN__PAD)
@@ -820,7 +850,7 @@ int
 sys_timer_create(struct tcb *tcp)
 {
        if (entering(tcp)) {
-               printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
                printsigevent(tcp, tcp->u_arg[1]);
                tprints(", ");
@@ -958,8 +988,8 @@ rtc_ioctl(struct tcb *tcp, long code, long arg)
 #endif
 
 static const struct xlat timerfdflags[] = {
-       { TFD_TIMER_ABSTIME,    "TFD_TIMER_ABSTIME"     },
-       { 0,                    NULL                    }
+       XLAT(TFD_TIMER_ABSTIME),
+       XLAT_END
 };
 
 int
@@ -968,7 +998,7 @@ sys_timerfd(struct tcb *tcp)
        if (entering(tcp)) {
                /* It does not matter that the kernel uses itimerspec.  */
                tprintf("%ld, ", tcp->u_arg[0]);
-               printxval(clocknames, tcp->u_arg[1], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
                printflags(timerfdflags, tcp->u_arg[2], "TFD_???");
                tprints(", ");
@@ -981,7 +1011,7 @@ int
 sys_timerfd_create(struct tcb *tcp)
 {
        if (entering(tcp)) {
-               printxval(clocknames, tcp->u_arg[0], "CLOCK_???");
+               printclockname(tcp->u_arg[0]);
                tprints(", ");
                printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
        }