Author: rpaulo
Date: Sat Aug 21 13:54:33 2010
New Revision: 211562
URL: http://svn.freebsd.org/changeset/base/211562

Log:
  Port plockstat to FreeBSD. This will be connected to the build later.
  
  Sponsored by: The FreeBSD Foundation

Added:
  head/cddl/usr.sbin/plockstat/
  head/cddl/usr.sbin/plockstat/Makefile   (contents, props changed)
Modified:
  head/cddl/contrib/opensolaris/cmd/plockstat/plockstat.c

Modified: head/cddl/contrib/opensolaris/cmd/plockstat/plockstat.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/plockstat/plockstat.c     Sat Aug 21 
13:48:04 2010        (r211561)
+++ head/cddl/contrib/opensolaris/cmd/plockstat/plockstat.c     Sat Aug 21 
13:54:33 2010        (r211562)
@@ -24,7 +24,9 @@
  * Use is subject to license terms.
  */
 
+#if defined(sun)
 #pragma ident  "%Z%%M% %I%     %E% SMI"
+#endif
 
 #include <assert.h>
 #include <dtrace.h>
@@ -41,6 +43,7 @@
 #include <sys/wait.h>
 #include <libgen.h>
 #include <libproc.h>
+#include <libproc_compat.h>
 
 static char *g_pname;
 static dtrace_hdl_t *g_dtp;
@@ -502,7 +505,12 @@ getsym(struct ps_prochandle *P, uintptr_
 {
        char name[256];
        GElf_Sym sym;
+#if defined(sun)
        prsyminfo_t info;
+#else
+       prmap_t *map;
+       int info; /* XXX unused */
+#endif
        size_t len;
 
        if (P == NULL || Pxlookup_by_addr(P, addr, name, sizeof (name),
@@ -510,6 +518,7 @@ getsym(struct ps_prochandle *P, uintptr_
                (void) snprintf(buf, size, "%#lx", addr);
                return (0);
        }
+#if defined(sun)
        if (info.prs_object == NULL)
                info.prs_object = "<unknown>";
 
@@ -520,15 +529,19 @@ getsym(struct ps_prochandle *P, uintptr_
        }
 
        len = snprintf(buf, size, "%s`%s", info.prs_object, info.prs_name);
+#else
+       map = proc_addr2map(P, addr);
+       len = snprintf(buf, size, "%s`%s", map->pr_mapname, name);
+#endif
        buf += len;
        size -= len;
 
        if (sym.st_value != addr)
                len = snprintf(buf, size, "+%#lx", addr - sym.st_value);
 
-       if (nolocks && strcmp("libc.so.1", info.prs_object) == 0 &&
-           (strstr("mutex", info.prs_name) == 0 ||
-           strstr("rw", info.prs_name) == 0))
+       if (nolocks && strcmp("libc.so.1", map->pr_mapname) == 0 &&
+           (strstr("mutex", name) == 0 ||
+           strstr("rw", name) == 0))
                return (-1);
 
        return (0);
@@ -655,8 +668,13 @@ process_aggregate(const dtrace_aggdata_t
 static void
 prochandler(struct ps_prochandle *P, const char *msg, void *arg)
 {
+#if defined(sun)
        const psinfo_t *prp = Ppsinfo(P);
        int pid = Pstatus(P)->pr_pid;
+#else
+       int pid = proc_getpid(P);
+       int wstat = proc_getwstat(P);
+#endif
        char name[SIG2STR_MAX];
 
        if (msg != NULL) {
@@ -674,13 +692,13 @@ prochandler(struct ps_prochandle *P, con
                 * When /proc provides a stable pr_wstat in the status file,
                 * this code can be improved by examining this new pr_wstat.
                 */
-               if (prp != NULL && WIFSIGNALED(prp->pr_wstat)) {
+               if (WIFSIGNALED(wstat)) {
                        notice("pid %d terminated by %s\n", pid,
-                           proc_signame(WTERMSIG(prp->pr_wstat),
+                           proc_signame(WTERMSIG(wstat),
                            name, sizeof (name)));
-               } else if (prp != NULL && WEXITSTATUS(prp->pr_wstat) != 0) {
+               } else if (WEXITSTATUS(wstat) != 0) {
                        notice("pid %d exited with status %d\n",
-                           pid, WEXITSTATUS(prp->pr_wstat));
+                           pid, WEXITSTATUS(wstat));
                } else {
                        notice("pid %d has exited\n", pid);
                }
@@ -755,7 +773,9 @@ intr(int signo)
 int
 main(int argc, char **argv)
 {
+#if defined(sun)
        ucred_t *ucp;
+#endif
        int err;
        int opt_C = 0, opt_H = 0, opt_p = 0, opt_v = 0;
        char c, *p, *end;
@@ -764,7 +784,7 @@ main(int argc, char **argv)
 
        g_pname = basename(argv[0]);
        argv[0] = g_pname; /* rewrite argv[0] for getopt errors */
-
+#if defined(sun)
        /*
         * Make sure we have the required dtrace_proc privilege.
         */
@@ -777,6 +797,7 @@ main(int argc, char **argv)
 
                ucred_free(ucp);
        }
+#endif
 
        while ((c = getopt(argc, argv, PLOCKSTAT_OPTSTR)) != EOF) {
                switch (c) {
@@ -907,7 +928,7 @@ main(int argc, char **argv)
 
        if (opt_H) {
                dprog_add(g_hold_init);
-               if (g_opt_s == NULL)
+               if (!g_opt_s)
                        dprog_add(g_hold_times);
                else
                        dprog_add(g_hold_histogram);
@@ -915,7 +936,7 @@ main(int argc, char **argv)
 
        if (opt_C) {
                dprog_add(g_ctnd_init);
-               if (g_opt_s == NULL)
+               if (!g_opt_s)
                        dprog_add(g_ctnd_times);
                else
                        dprog_add(g_ctnd_histogram);
@@ -941,7 +962,7 @@ main(int argc, char **argv)
                if ((g_pr = dtrace_proc_grab(g_dtp, (pid_t)pid, 0)) == NULL)
                        dfatal(NULL);
        } else {
-               if ((g_pr = dtrace_proc_create(g_dtp, argv[0], argv)) == NULL)
+               if ((g_pr = dtrace_proc_create(g_dtp, argv[0], argv, NULL, 
NULL)) == NULL)
                        dfatal(NULL);
        }
 
@@ -966,7 +987,11 @@ main(int argc, char **argv)
 
        if (opt_v)
                (void) printf("%s: tracing enabled for pid %d\n", g_pname,
+#if defined(sun)
                    (int)Pstatus(g_pr)->pr_pid);
+#else
+                   (int)proc_getpid(g_pr));
+#endif
 
        do {
                if (!g_intr && !done)

Added: head/cddl/usr.sbin/plockstat/Makefile
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/cddl/usr.sbin/plockstat/Makefile       Sat Aug 21 13:54:33 2010        
(r211562)
@@ -0,0 +1,27 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/cmd/plockstat
+
+PROG=          plockstat
+NO_MAN=
+SRCS=          plockstat.c 
+BINDIR?=       /usr/sbin
+
+WARNS?=                1
+
+CFLAGS+=       -I${.CURDIR}/../../../sys/cddl/compat/opensolaris \
+               -I${.CURDIR}/../../../cddl/compat/opensolaris/include \
+               -I${OPENSOLARIS_USR_DISTDIR}/head \
+               -I${OPENSOLARIS_USR_DISTDIR}/lib/libdtrace/common \
+               -I${OPENSOLARIS_USR_DISTDIR}/lib/libproc/common \
+               -I${OPENSOLARIS_SYS_DISTDIR}/uts/common \
+               -I${OPENSOLARIS_SYS_DISTDIR}/compat \
+               -I${.CURDIR}/../../../cddl/lib/libdtrace \
+               -I${.CURDIR}/../../../sys
+
+DPADD=         ${LIBPTHREAD} ${LIBDTRACE} ${LIBY} ${LIBL} ${LIBPROC} ${LIBCTF}\
+               ${LIBELF} ${LIBZ} ${LIBRT} ${LIBRTLD_DB} ${LIBUTIL}
+LDADD=         -lpthread -ldtrace -ly -ll -lproc -lctf -lelf -lz -lrt \
+               -lrtld_db -lutil
+
+.include <bsd.prog.mk>
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to