Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Sep 2017 05:34:36 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r323151 - in head: lib/libsysdecode usr.bin/kdump usr.bin/truss
Message-ID:  <201709040534.v845Yaxs095486@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb
Date: Mon Sep  4 05:34:36 2017
New Revision: 323151
URL: https://svnweb.freebsd.org/changeset/base/323151

Log:
  Decode pathconf() names, *at() flags, and sysarch() numbers in libsysdecode.
  
  Move tables that were previously in truss over to libsysdecode.  truss
  output is unchanged, but kdump has been updated to decode these fields.
  In addition, sysdecode_sysarch_number() should support all platforms
  whereas the old table in truss only supported x86.

Modified:
  head/lib/libsysdecode/Makefile
  head/lib/libsysdecode/flags.c
  head/lib/libsysdecode/mktables
  head/lib/libsysdecode/sysdecode.h
  head/lib/libsysdecode/sysdecode_enum.3
  head/lib/libsysdecode/sysdecode_mask.3
  head/usr.bin/kdump/kdump.c
  head/usr.bin/truss/syscalls.c

Modified: head/lib/libsysdecode/Makefile
==============================================================================
--- head/lib/libsysdecode/Makefile	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/Makefile	Mon Sep  4 05:34:36 2017	(r323151)
@@ -42,6 +42,7 @@ MLINKS+=sysdecode_enum.3 sysdecode_acltype.3 \
 	sysdecode_enum.3 sysdecode_minherit_flags.3 \
 	sysdecode_enum.3 sysdecode_msgctl_cmd.3 \
 	sysdecode_enum.3 sysdecode_nfssvc_flags.3 \
+	sysdecode_enum.3 sysdecode_pathconf_name.3 \
 	sysdecode_enum.3 sysdecode_prio_which.3 \
 	sysdecode_enum.3 sysdecode_procctl_cmd.3 \
 	sysdecode_enum.3 sysdecode_ptrace_request.3 \
@@ -63,11 +64,13 @@ MLINKS+=sysdecode_enum.3 sysdecode_acltype.3 \
 	sysdecode_enum.3 sysdecode_socketdomain.3 \
 	sysdecode_enum.3 sysdecode_sockettype.3 \
 	sysdecode_enum.3 sysdecode_sockopt_level.3 \
+	sysdecode_enum.3 sysdecode_sysarch_number.3 \
 	sysdecode_enum.3 sysdecode_umtx_op.3 \
 	sysdecode_enum.3 sysdecode_vmresult.3 \
 	sysdecode_enum.3 sysdecode_whence.3
 MLINKS+=sysdecode_fcntl_arg.3 sysdecode_fcntl_arg_p.3
 MLINKS+=sysdecode_mask.3 sysdecode_accessmode.3 \
+	sysdecode_mask.3 sysdecode_atflags.3 \
 	sysdecode_mask.3 sysdecode_capfcntlrights.3 \
 	sysdecode_mask.3 sysdecode_fcntl_fileflags.3 \
 	sysdecode_mask.3 sysdecode_fileflags.3 \

Modified: head/lib/libsysdecode/flags.c
==============================================================================
--- head/lib/libsysdecode/flags.c	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/flags.c	Mon Sep  4 05:34:36 2017	(r323151)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/stat.h>
 #include <sys/thr.h>
 #include <sys/umtx.h>
+#include <machine/sysarch.h>
 #include <netinet/in.h>
 #include <netinet/sctp.h>
 #include <netinet/tcp.h>
@@ -250,6 +251,13 @@ sysdecode_atfd(int fd)
 	return (NULL);
 }
 
+bool
+sysdecode_atflags(FILE *fp, int flag, int *rem)
+{
+
+	return (print_mask_int(fp, atflags, flag, rem));
+}
+
 static struct name_table semctlops[] = {
 	X(GETNCNT) X(GETPID) X(GETVAL) X(GETALL) X(GETZCNT) X(SETVAL) X(SETALL)
 	X(IPC_RMID) X(IPC_SET) X(IPC_STAT) XEND
@@ -948,6 +956,13 @@ sysdecode_mmap_flags(FILE *fp, int flags, int *rem)
 }
 
 const char *
+sysdecode_pathconf_name(int name)
+{
+
+	return (lookup_value(pathconfname, name));
+}
+
+const char *
 sysdecode_rtprio_function(int function)
 {
 
@@ -986,6 +1001,13 @@ sysdecode_sigcode(int sig, int si_code)
 	default:
 		return (NULL);
 	}
+}
+
+const char *
+sysdecode_sysarch_number(int number)
+{
+
+	return (lookup_value(sysarchnum, number));
 }
 
 bool

Modified: head/lib/libsysdecode/mktables
==============================================================================
--- head/lib/libsysdecode/mktables	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/mktables	Mon Sep  4 05:34:36 2017	(r323151)
@@ -91,6 +91,7 @@ _EOF_
 
 gen_table "accessmode"      "[A-Z]_OK[[:space:]]+0?x?[0-9A-Fa-f]+"         "sys/unistd.h"
 gen_table "acltype"         "ACL_TYPE_[A-Z4_]+[[:space:]]+0x[0-9]+"        "sys/acl.h"
+gen_table "atflags"         "AT_[A-Z_]+[[:space:]]+0x[0-9]+"               "sys/fcntl.h"
 gen_table "capfcntl"        "CAP_FCNTL_[A-Z]+[[:space:]]+\(1"              "sys/capsicum.h"
 gen_table "extattrns"       "EXTATTR_NAMESPACE_[A-Z]+[[:space:]]+0x[0-9]+" "sys/extattr.h"
 gen_table "fadvisebehav"    "POSIX_FADV_[A-Z]+[[:space:]]+[0-9]+"          "sys/fcntl.h"
@@ -109,6 +110,7 @@ gen_table "filemode"        "S_[A-Z]+[[:space:]]+[0-6]
 gen_table "mountflags"      "MNT_[A-Z]+[[:space:]]+0x[0-9]+"               "sys/mount.h"
 gen_table "msyncflags"      "MS_[A-Z]+[[:space:]]+0x[0-9]+"                "sys/mman.h"
 gen_table "nfssvcflags"     "NFSSVC_[A-Z0-9]+[[:space:]]+0x[0-9]+"         "nfs/nfssvc.h"
+gen_table "pathconfname"    "_PC_[A-Z4_]+[[:space:]]+[0-9]+"               "sys/unistd.h"
 gen_table "prio"            "PRIO_[A-Z]+[[:space:]]+[0-9]"                 "sys/resource.h"
 gen_table "procctlcmd"      "PROC_[A-Z_]+[[:space:]]+[0-9]"                 "sys/procctl.h"	"PROC_TRACE_CTL_"
 gen_table "ptraceop"        "PT_[[:alnum:]_]+[[:space:]]+[0-9]+"           "sys/ptrace.h"
@@ -153,6 +155,11 @@ gen_table "sigcode"         "SI_[A-Z]+[[:space:]]+0(x[
 gen_table "umtxcvwaitflags" "CVWAIT_[A-Z_]+[[:space:]]+0x[0-9]+"           "sys/umtx.h"
 gen_table "umtxrwlockflags" "URWLOCK_PREFER_READER[[:space:]]+0x[0-9]+"    "sys/umtx.h"
 gen_table "caprights"       "CAP_[A-Z_]+[[:space:]]+CAPRIGHT\([0-9],[[:space:]]+0x[0-9]{16}ULL\)"   "sys/capsicum.h"
+if [ -e "${include_dir}/x86/sysarch.h" ]; then
+	gen_table "sysarchnum" "(AMD64|I386)_[A-Z86_]+[[:space:]]+[0-9]+"  "x86/sysarch.h"
+else
+	gen_table "sysarchnum" "[A-Z_]+[[:space:]]+[0-9]+"                 "machine/sysarch.h"
+fi
 
 # Generate a .depend file for our output file
 if [ -n "$output_file" ]; then

Modified: head/lib/libsysdecode/sysdecode.h
==============================================================================
--- head/lib/libsysdecode/sysdecode.h	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/sysdecode.h	Mon Sep  4 05:34:36 2017	(r323151)
@@ -42,6 +42,7 @@ int	sysdecode_abi_to_freebsd_errno(enum sysdecode_abi 
 bool	sysdecode_access_mode(FILE *_fp, int _mode, int *_rem);
 const char *sysdecode_acltype(int _type);
 const char *sysdecode_atfd(int _fd);
+bool	sysdecode_atflags(FILE *_fp, int _flags, int *_rem);
 bool	sysdecode_cap_fcntlrights(FILE *_fp, uint32_t _rights, uint32_t *_rem);
 void	sysdecode_cap_rights(FILE *_fp, cap_rights_t *_rightsp);
 const char *sysdecode_extattrnamespace(int _namespace);
@@ -73,6 +74,7 @@ bool	sysdecode_msg_flags(FILE *_fp, int _flags, int *_
 bool	sysdecode_msync_flags(FILE *_fp, int _flags, int *_rem);
 const char *sysdecode_nfssvc_flags(int _flags);
 bool	sysdecode_open_flags(FILE *_fp, int _flags, int *_rem);
+const char *sysdecode_pathconf_name(int _name);
 bool	sysdecode_pipe2_flags(FILE *_fp, int _flags, int *_rem);
 const char *sysdecode_prio_which(int _which);
 const char *sysdecode_procctl_cmd(int _cmd);
@@ -105,6 +107,7 @@ bool	sysdecode_socket_type(FILE *_fp, int _type, int *
 const char *sysdecode_sockopt_level(int _level);
 const char *sysdecode_sockopt_name(int _level, int _optname);
 const char *sysdecode_syscallname(enum sysdecode_abi _abi, unsigned int _code);
+const char *sysdecode_sysarch_number(int _number);
 bool	sysdecode_thr_create_flags(FILE *_fp, int _flags, int *_rem);
 bool	sysdecode_umtx_cvwait_flags(FILE *_fp, u_long _flags, u_long *_rem);
 const char *sysdecode_umtx_op(int _op);

Modified: head/lib/libsysdecode/sysdecode_enum.3
==============================================================================
--- head/lib/libsysdecode/sysdecode_enum.3	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/sysdecode_enum.3	Mon Sep  4 05:34:36 2017	(r323151)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 3, 2017
+.Dd September 3, 2017
 .Dt sysdecode_enum 3
 .Os
 .Sh NAME
@@ -46,6 +46,7 @@
 .Nm sysdecode_minherit_flags ,
 .Nm sysdecode_msgctl_cmd ,
 .Nm sysdecode_nfssvc_flags ,
+.Nm sysdecode_pathconf_name ,
 .Nm sysdecode_prio_which ,
 .Nm sysdecode_procctl_cmd ,
 .Nm sysdecode_ptrace_request ,
@@ -67,6 +68,7 @@
 .Nm sysdecode_socketdomain ,
 .Nm sysdecode_sockettype ,
 .Nm sysdecode_sockopt_level ,
+.Nm sysdecode_sysarch_number ,
 .Nm sysdecode_umtx_op ,
 .Nm sysdecode_vmresult ,
 .Nm sysdecode_whence
@@ -110,6 +112,8 @@
 .Ft const char *
 .Fn sysdecode_nfssvc_flags "int flags"
 .Ft const char *
+.Fn sysdecode_pathconf_name "int name"
+.Ft const char *
 .Fn sysdecode_prio_which "int which"
 .Ft const char *
 .Fn sysdecode_procctl_cmd "int cmd"
@@ -152,6 +156,8 @@
 .Ft const char *
 .Fn sysdecode_sockopt_level "int level"
 .Ft const char *
+.Fn sysdecode_sysarch_number "int number"
+.Ft const char *
 .Fn sysdecode_umtx_op "int op"
 .Ft const char *
 .Fn sysdecode_vmresult "int result"
@@ -186,6 +192,7 @@ Most of these functions decode an argument passed to a
 .It Fn sysdecode_minherit_inherit Ta Xr minherit 2 Ta Fa inherit
 .It Fn sysdecode_msgctl_cmd Ta Xr msgctl 2 Ta Fa cmd
 .It Fn sysdecode_nfssvc_flags Ta Xr nfssvc 2 Ta Fa flags
+.It Fn sysdecode_pathconf_name Ta Xr pathconf 2 Ta Fa name
 .It Fn sysdecode_prio_which Ta Xr getpriority 2 Ta Fa which
 .It Fn sysdecode_procctl_cmd Ta Xr procctl 2 Ta Fa cmd
 .It Fn sysdecode_ptrace_request Ta Xr ptrace 2 Ta Fa request
@@ -198,6 +205,7 @@ Most of these functions decode an argument passed to a
 .It Fn sysdecode_shutdown_how Ta Xr shutdown 2 Ta Fa how
 .It Fn sysdecode_sigprocmask_how Ta Xr sigprocmask 2 Ta Fa how
 .It Fn sysdecode_sockopt_level Ta Xr getsockopt 2 Ta Fa level
+.It Fn sysdecode_sysarch_number Ta Xr sysarch 2 Ta Fa number
 .It Fn sysdecode_umtx_op Ta Xr _umtx_op 2 Ta Fa op
 .It Fn sysdecode_whence Ta Xr lseek 2 Ta Fa whence
 .El

Modified: head/lib/libsysdecode/sysdecode_mask.3
==============================================================================
--- head/lib/libsysdecode/sysdecode_mask.3	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/lib/libsysdecode/sysdecode_mask.3	Mon Sep  4 05:34:36 2017	(r323151)
@@ -25,12 +25,13 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd January 2, 2017
+.Dd September 3, 2017
 .Dt sysdecode_mask 3
 .Os
 .Sh NAME
 .Nm sysdecode_mask ,
 .Nm sysdecode_accessmode ,
+.Nm sysdecode_atflags ,
 .Nm sysdecode_capfcntlrights ,
 .Nm sysdecode_fcntl_fileflags ,
 .Nm sysdecode_fileflags ,
@@ -66,6 +67,8 @@
 .Ft bool
 .Fn sysdecode_access_mode "FILE *fp" "int mode" "int *rem"
 .Ft bool
+.Fn sysdecode_atflags "FILE *fp" "int flags" "int *rem"
+.Ft bool
 .Fn sysdecode_cap_fcntlrights "FILE *fp" "uint32_t rights" "uint32_t *rem"
 .Ft bool
 .Fn sysdecode_fcntl_fileflags "FILE *fp" "int flags" "int *rem"
@@ -148,6 +151,7 @@ Most of these functions decode an argument passed to a
 .Bl -column "Fn sysdecode_flock_operation" "Xr cap_fcntls_limit 2"
 .It Sy Function Ta Sy System Call Ta Sy Argument
 .It Fn sysdecode_access_mode Ta Xr access 2 Ta Fa mode
+.It Fn sysdecode_atflags Ta Xr chflagsat 2 , Xr fstatat 2 Ta Fa atflag , Fa flag
 .It Fn sysdecode_cap_fcntlrights Ta Xr cap_fcntls_limit 2 Ta Fa fcntlrights
 .It Fn sysdecode_fileflags Ta Xr chflags 2 Ta Fa flags
 .It Fn sysdecode_filemode Ta Xr chmod 2 , Xr open 2 Ta mode

Modified: head/usr.bin/kdump/kdump.c
==============================================================================
--- head/usr.bin/kdump/kdump.c	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/usr.bin/kdump/kdump.c	Mon Sep  4 05:34:36 2017	(r323151)
@@ -1060,6 +1060,15 @@ ktrsyscall(struct ktr_syscall *ktr, u_int sv_flags)
 				ip++;
 				narg--;
 				break;
+			case SYS_pathconf:
+			case SYS_lpathconf:
+			case SYS_fpathconf:
+				print_number(ip, narg, c);
+				putchar(',');
+				print_integer_arg(sysdecode_pathconf_name, *ip);
+				ip++;
+				narg--;
+				break;
 			case SYS_getpriority:
 			case SYS_setpriority:
 				putchar('(');
@@ -1419,6 +1428,7 @@ ktrsyscall(struct ktr_syscall *ktr, u_int sv_flags)
 				print_integer_arg_valid(sysdecode_atfd, *ip);
 				ip++;
 				narg--;
+				print_number(ip, narg, c);
 				break;
 			case SYS_cap_fcntls_limit:
 				print_number(ip, narg, c);
@@ -1476,6 +1486,41 @@ ktrsyscall(struct ktr_syscall *ktr, u_int sv_flags)
 			case SYS_truncate:
 				print_number(ip, narg, c);
 				print_number64(first, ip, narg, c);
+				break;
+			case SYS_fchownat:
+				print_number(ip, narg, c);
+				print_number(ip, narg, c);
+				print_number(ip, narg, c);
+				break;
+			case SYS_fstatat:
+			case SYS_utimensat:
+				print_number(ip, narg, c);
+				print_number(ip, narg, c);
+				break;
+			case SYS_unlinkat:
+				print_number(ip, narg, c);
+				break;
+			case SYS_sysarch:
+				putchar('(');
+				print_integer_arg(sysdecode_sysarch_number, *ip);
+				ip++;
+				narg--;
+				c = ',';
+				break;
+			}
+			switch (ktr->ktr_code) {
+			case SYS_chflagsat:
+			case SYS_fchownat:
+			case SYS_faccessat:
+			case SYS_fchmodat:
+			case SYS_fstatat:
+			case SYS_linkat:
+			case SYS_unlinkat:
+			case SYS_utimensat:
+				putchar(',');
+				print_mask_arg0(sysdecode_atflags, *ip);
+				ip++;
+				narg--;
 				break;
 			}
 		}

Modified: head/usr.bin/truss/syscalls.c
==============================================================================
--- head/usr.bin/truss/syscalls.c	Sun Sep  3 22:02:59 2017	(r323150)
+++ head/usr.bin/truss/syscalls.c	Mon Sep  4 05:34:36 2017	(r323151)
@@ -49,7 +49,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/stat.h>
 #include <sys/un.h>
 #include <sys/wait.h>
-#include <machine/sysarch.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
@@ -697,35 +696,6 @@ static struct xlat sigaction_flags[] = {
 	X(SA_NODEFER) X(SA_NOCLDWAIT) X(SA_SIGINFO) XEND
 };
 
-static struct xlat pathconf_arg[] = {
-	X(_PC_LINK_MAX)  X(_PC_MAX_CANON)  X(_PC_MAX_INPUT)
-	X(_PC_NAME_MAX) X(_PC_PATH_MAX) X(_PC_PIPE_BUF)
-	X(_PC_CHOWN_RESTRICTED) X(_PC_NO_TRUNC) X(_PC_VDISABLE)
-	X(_PC_ASYNC_IO) X(_PC_PRIO_IO) X(_PC_SYNC_IO)
-	X(_PC_ALLOC_SIZE_MIN) X(_PC_FILESIZEBITS)
-	X(_PC_REC_INCR_XFER_SIZE) X(_PC_REC_MAX_XFER_SIZE)
-	X(_PC_REC_MIN_XFER_SIZE) X(_PC_REC_XFER_ALIGN)
-	X(_PC_SYMLINK_MAX) X(_PC_ACL_EXTENDED) X(_PC_ACL_PATH_MAX)
-	X(_PC_CAP_PRESENT) X(_PC_INF_PRESENT) X(_PC_MAC_PRESENT)
-	X(_PC_ACL_NFS4) X(_PC_MIN_HOLE_SIZE) XEND
-};
-
-static struct xlat at_flags[] = {
-	X(AT_EACCESS) X(AT_SYMLINK_NOFOLLOW) X(AT_SYMLINK_FOLLOW)
-	X(AT_REMOVEDIR) XEND
-};
-
-static struct xlat sysarch_ops[] = {
-#if defined(__i386__) || defined(__amd64__)
-	X(I386_GET_LDT) X(I386_SET_LDT) X(I386_GET_IOPERM) X(I386_SET_IOPERM)
-	X(I386_VM86) X(I386_GET_FSBASE) X(I386_SET_FSBASE) X(I386_GET_GSBASE)
-	X(I386_SET_GSBASE) X(I386_GET_XFPUSTATE) X(AMD64_GET_FSBASE)
-	X(AMD64_SET_FSBASE) X(AMD64_GET_GSBASE) X(AMD64_SET_GSBASE)
-	X(AMD64_GET_XFPUSTATE)
-#endif
-	XEND
-};
-
 static struct xlat linux_socketcall_ops[] = {
 	X(LINUX_SOCKET) X(LINUX_BIND) X(LINUX_CONNECT) X(LINUX_LISTEN)
 	X(LINUX_ACCEPT) X(LINUX_GETSOCKNAME) X(LINUX_GETPEERNAME)
@@ -1689,7 +1659,7 @@ print_arg(struct syscall_args *sc, unsigned long *args
 		print_integer_arg(sysdecode_getrusage_who, fp, args[sc->offset]);
 		break;
 	case Pathconf:
-		fputs(xlookup(pathconf_arg, args[sc->offset]), fp);
+		print_integer_arg(sysdecode_pathconf_name, fp, args[sc->offset]);
 		break;
 	case Rforkflags:
 		print_mask_arg(sysdecode_rfork_flags, fp, args[sc->offset]);
@@ -1955,13 +1925,14 @@ print_arg(struct syscall_args *sc, unsigned long *args
 		print_integer_arg(sysdecode_atfd, fp, args[sc->offset]);
 		break;
 	case Atflags:
-		fputs(xlookup_bits(at_flags, args[sc->offset]), fp);
+		print_mask_arg(sysdecode_atflags, fp, args[sc->offset]);
 		break;
 	case Accessmode:
 		print_mask_arg(sysdecode_access_mode, fp, args[sc->offset]);
 		break;
 	case Sysarch:
-		fputs(xlookup(sysarch_ops, args[sc->offset]), fp);
+		print_integer_arg(sysdecode_sysarch_number, fp,
+		    args[sc->offset]);
 		break;
 	case PipeFds:
 		/*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709040534.v845Yaxs095486>