aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/kdump
diff options
context:
space:
mode:
authorJilles Tjoelker <jilles@FreeBSD.org>2013-08-13 19:57:35 +0000
committerJilles Tjoelker <jilles@FreeBSD.org>2013-08-13 19:57:35 +0000
commit8447b7cddc1e6d915fec3f8d05d0d1a1bc76620b (patch)
treedf7221f4588fdd0bfb6412b0169d73e8718e718b /usr.bin/kdump
parent89521d41087e6b9873ae88be00b63f50c88c8be5 (diff)
downloadsrc-8447b7cddc1e6d915fec3f8d05d0d1a1bc76620b.tar.gz
src-8447b7cddc1e6d915fec3f8d05d0d1a1bc76620b.zip
kdump: Improve decoding of various *at calls:
* Write AT_FDCWD where appropriate. * Decode the remaining arguments of openat() etc like open() etc.
Notes
Notes: svn path=/head/; revision=254291
Diffstat (limited to 'usr.bin/kdump')
-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 0f1a26b67539..356bed3c9986 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 aed8291ff8c5..bb70d131a2cb 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)