summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2013-08-13 19:57:35 +0000
committerjilles <jilles@FreeBSD.org>2013-08-13 19:57:35 +0000
commit7817797d293e752b1b26e3e8098f8017382fa645 (patch)
treedf7221f4588fdd0bfb6412b0169d73e8718e718b /usr.bin
parent9381206c83fd21139368e4421be5d9b0c3d16bab (diff)
downloadFreeBSD-src-7817797d293e752b1b26e3e8098f8017382fa645.zip
FreeBSD-src-7817797d293e752b1b26e3e8098f8017382fa645.tar.gz
kdump: Improve decoding of various *at calls:
* Write AT_FDCWD where appropriate. * Decode the remaining arguments of openat() etc like open() etc.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/kdump/kdump.c35
-rw-r--r--usr.bin/kdump/mksubr12
2 files changed, 47 insertions, 0 deletions
diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index 0f1a26b..356bed3 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -606,6 +606,27 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
if (fancy &&
(flags == 0 || (flags & SV_ABI_MASK) == SV_ABI_FREEBSD)) {
switch (ktr->ktr_code) {
+ case SYS_faccessat:
+ case SYS_fchmodat:
+ case SYS_fchownat:
+ case SYS_fstatat:
+ case SYS_futimesat:
+ case SYS_linkat:
+ case SYS_mkdirat:
+ case SYS_mkfifoat:
+ case SYS_mknodat:
+ case SYS_openat:
+ case SYS_readlinkat:
+ case SYS_renameat:
+ case SYS_unlinkat:
+ putchar('(');
+ atfdname(*ip, decimal);
+ c = ',';
+ ip++;
+ narg--;
+ break;
+ }
+ switch (ktr->ktr_code) {
case SYS_ioctl: {
print_number(ip, narg, c);
putchar(c);
@@ -624,6 +645,7 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
break;
case SYS_access:
case SYS_eaccess:
+ case SYS_faccessat:
print_number(ip, narg, c);
putchar(',');
accessmodename(*ip);
@@ -631,6 +653,7 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
narg--;
break;
case SYS_open:
+ case SYS_openat:
print_number(ip, narg, c);
putchar(',');
flagsandmodename(ip[0], ip[1], decimal);
@@ -655,6 +678,7 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
narg--;
break;
case SYS_mknod:
+ case SYS_mknodat:
print_number(ip, narg, c);
putchar(',');
modename(*ip);
@@ -860,7 +884,9 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
narg--;
break;
case SYS_mkfifo:
+ case SYS_mkfifoat:
case SYS_mkdir:
+ case SYS_mkdirat:
print_number(ip, narg, c);
putchar(',');
modename(*ip);
@@ -1083,6 +1109,15 @@ ktrsyscall(struct ktr_syscall *ktr, u_int flags)
ip++;
narg--;
break;
+ case SYS_linkat:
+ case SYS_renameat:
+ case SYS_symlinkat:
+ print_number(ip, narg, c);
+ putchar(',');
+ atfdname(*ip, decimal);
+ ip++;
+ narg--;
+ break;
case SYS_cap_new:
case SYS_cap_rights_limit:
print_number(ip, narg, c);
diff --git a/usr.bin/kdump/mksubr b/usr.bin/kdump/mksubr
index aed8291..bb70d13 100644
--- a/usr.bin/kdump/mksubr
+++ b/usr.bin/kdump/mksubr
@@ -209,6 +209,18 @@ cat <<_EOF_
while (0)
/* MANUAL */
+void
+atfdname(int fd, int decimal)
+{
+ if (fd == AT_FDCWD)
+ printf("AT_FDCWD");
+ else if (decimal)
+ printf("%d", fd);
+ else
+ printf("%#x", fd);
+}
+
+/* MANUAL */
extern char *signames[]; /* from kdump.c */
void
signame(int sig)
OpenPOWER on IntegriCloud