diff options
author | kib <kib@FreeBSD.org> | 2016-07-20 15:07:52 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2016-07-20 15:07:52 +0000 |
commit | a7dc4a2738219ada64b9a821a01152a5643fe0c4 (patch) | |
tree | 6c76fcbd1393de31c8b439fbded43e0d17c7f850 | |
parent | 93e4d330694dc61a6ea4f3c3d78656d9cce70698 (diff) | |
download | FreeBSD-src-a7dc4a2738219ada64b9a821a01152a5643fe0c4.zip FreeBSD-src-a7dc4a2738219ada64b9a821a01152a5643fe0c4.tar.gz |
MFC r302770:
Trace timeval parameters to the getitimer(2) and setitimer(2) syscalls.
-rw-r--r-- | sys/kern/kern_time.c | 17 | ||||
-rw-r--r-- | sys/sys/ktrace.h | 2 | ||||
-rw-r--r-- | usr.bin/kdump/kdump.c | 25 |
3 files changed, 44 insertions, 0 deletions
diff --git a/sys/kern/kern_time.c b/sys/kern/kern_time.c index 6ae0fb1..7f481b3 100644 --- a/sys/kern/kern_time.c +++ b/sys/kern/kern_time.c @@ -32,6 +32,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include "opt_ktrace.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/limits.h> @@ -54,6 +56,9 @@ __FBSDID("$FreeBSD$"); #include <sys/timers.h> #include <sys/timetc.h> #include <sys/vnode.h> +#ifdef KTRACE +#include <sys/ktrace.h> +#endif #include <vm/vm.h> #include <vm/vm_extern.h> @@ -699,6 +704,10 @@ kern_getitimer(struct thread *td, u_int which, struct itimerval *aitv) *aitv = p->p_stats->p_timer[which]; PROC_ITIMUNLOCK(p); } +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + ktritimerval(aitv); +#endif return (0); } @@ -740,6 +749,10 @@ kern_setitimer(struct thread *td, u_int which, struct itimerval *aitv, if (which > ITIMER_PROF) return (EINVAL); +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + ktritimerval(aitv); +#endif if (itimerfix(&aitv->it_value) || aitv->it_value.tv_sec > INT32_MAX / 2) return (EINVAL); @@ -784,6 +797,10 @@ kern_setitimer(struct thread *td, u_int which, struct itimerval *aitv, p->p_stats->p_timer[which] = *aitv; PROC_ITIMUNLOCK(p); } +#ifdef KTRACE + if (KTRPOINT(td, KTR_STRUCT)) + ktritimerval(oitv); +#endif return (0); } diff --git a/sys/sys/ktrace.h b/sys/sys/ktrace.h index e9cfa6e..e63a41a 100644 --- a/sys/sys/ktrace.h +++ b/sys/sys/ktrace.h @@ -270,6 +270,8 @@ void ktrcapfail(enum ktr_cap_fail_type, const cap_rights_t *, const cap_rights_t *); #define ktrcaprights(s) \ ktrstruct("caprights", (s), sizeof(cap_rights_t)) +#define ktritimerval(s) \ + ktrstruct("itimerval", (s), sizeof(struct itimerval)) #define ktrsockaddr(s) \ ktrstruct("sockaddr", (s), ((struct sockaddr *)(s))->sa_len) #define ktrstat(s) \ diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c index f7d7bba..9ac8b5b 100644 --- a/usr.bin/kdump/kdump.c +++ b/usr.bin/kdump/kdump.c @@ -106,6 +106,7 @@ void ktruser_malloc(void *); void ktruser_rtld(int, void *); void ktruser(int, void *); void ktrcaprights(cap_rights_t *); +void ktritimerval(struct itimerval *it); void ktrsockaddr(struct sockaddr *); void ktrstat(struct stat *); void ktrstruct(char *, size_t); @@ -1616,6 +1617,24 @@ ktrcaprights(cap_rights_t *rightsp) printf("\n"); } +static void +ktrtimeval(struct timeval *tv) +{ + + printf("{%ld, %ld}", (long)tv->tv_sec, tv->tv_usec); +} + +void +ktritimerval(struct itimerval *it) +{ + + printf("itimerval { .interval = "); + ktrtimeval(&it->it_interval); + printf(", .value = "); + ktrtimeval(&it->it_value); + printf(" }\n"); +} + void ktrsockaddr(struct sockaddr *sa) { @@ -1799,6 +1818,7 @@ ktrstruct(char *buf, size_t buflen) size_t namelen, datalen; int i; cap_rights_t rights; + struct itimerval it; struct stat sb; struct sockaddr_storage ss; @@ -1823,6 +1843,11 @@ ktrstruct(char *buf, size_t buflen) goto invalid; memcpy(&rights, data, datalen); ktrcaprights(&rights); + } else if (strcmp(name, "itimerval") == 0) { + if (datalen != sizeof(struct itimerval)) + goto invalid; + memcpy(&it, data, datalen); + ktritimerval(&it); } else if (strcmp(name, "stat") == 0) { if (datalen != sizeof(struct stat)) goto invalid; |