Date: Sun, 4 Aug 2002 14:41:38 +0200 (CEST) From: Pawel Jakub Dawidek <nick@garage.freebsd.pl> To: FreeBSD-gnats-submit@FreeBSD.org Cc: mdodd@FreeBSD.org Subject: bin/41310: Added ,,-d'' option to truss(1) for change procfs directory from ,,/proc''. Message-ID: <20020804124138.3C0D83ABD46@milla.ask33.net>
next in thread | raw e-mail | index | archive | help
>Number: 41310 >Category: bin >Synopsis: Added ,,-d'' option to truss(1) for change procfs directory from ,,/proc''. >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sun Aug 04 05:50:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Pawel Jakub Dawidek >Release: FreeBSD 4.6-STABLE i386 >Organization: >Environment: System: FreeBSD milla.ask33.net 4.6-STABLE FreeBSD 4.6-STABLE #9: Wed Jul 31 21:18:46 CEST 2002 root@milla.ask33.net:/usr/obj/usr/src/sys/MILLA i386 >Description: Now we cn only use truss(1) if procfs(5) is mounted in ,,/proc'' directory. If we're mounting linprocfs(5) there (because of running vmware or diffrent programm that required linprocfs) or something like that, we can't use truss. I'm sending patch for truss from -STABLE branch. >How-To-Repeat: >Fix: diff -ur /usr/src/usr.bin/truss/alpha-fbsd.c truss/alpha-fbsd.c --- /usr/src/usr.bin/truss/alpha-fbsd.c Mon Oct 29 21:12:56 2001 +++ truss/alpha-fbsd.c Sun Aug 4 14:31:16 2002 @@ -115,7 +115,7 @@ void alpha_syscall_entry(int pid, int nargs) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs = { { 0 } }; int syscall; int i; @@ -124,7 +124,7 @@ int indir = 0; /* indirect system call */ if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, sizeof buf, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDWR); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); @@ -262,7 +262,7 @@ void alpha_syscall_exit(int pid, int syscall) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs; int retval; int i; @@ -270,7 +270,7 @@ struct syscall *sc; if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, MAXPATHLEN, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDONLY); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); diff -ur /usr/src/usr.bin/truss/i386-fbsd.c truss/i386-fbsd.c --- /usr/src/usr.bin/truss/i386-fbsd.c Mon Oct 29 21:12:56 2001 +++ truss/i386-fbsd.c Sun Aug 4 14:31:15 2002 @@ -44,6 +44,7 @@ #include <sys/types.h> #include <sys/ioctl.h> +#include <sys/param.h> #include <sys/pioctl.h> #include <sys/syscall.h> @@ -67,6 +68,8 @@ extern FILE *outfile; #include "syscalls.h" +extern char *procpath; + static int nsyscalls = sizeof(syscallnames) / sizeof(syscallnames[0]); /* @@ -112,7 +115,7 @@ void i386_syscall_entry(int pid, int nargs) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs = { 0 }; int syscall; int i; @@ -120,7 +123,7 @@ struct syscall *sc; if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, sizeof buf, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDWR); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); @@ -240,7 +243,7 @@ void i386_syscall_exit(int pid, int syscall) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs; int retval; int i; @@ -248,7 +251,7 @@ struct syscall *sc; if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, sizeof buf, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDONLY); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); diff -ur /usr/src/usr.bin/truss/i386-linux.c truss/i386-linux.c --- /usr/src/usr.bin/truss/i386-linux.c Fri Feb 15 12:43:51 2002 +++ truss/i386-linux.c Sun Aug 4 14:31:14 2002 @@ -42,6 +42,7 @@ #include <sys/types.h> #include <sys/ioctl.h> +#include <sys/param.h> #include <sys/pioctl.h> #include <machine/reg.h> @@ -65,6 +66,8 @@ extern FILE *outfile; #include "linux_syscalls.h" +extern char *procpath; + static int nsyscalls = sizeof(linux_syscallnames) / sizeof(linux_syscallnames[0]); @@ -92,14 +95,14 @@ void i386_linux_syscall_entry(int pid, int nargs) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs = { 0 }; int syscall; int i; struct syscall *sc; if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, sizeof buf, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDWR); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); @@ -198,7 +201,7 @@ void i386_linux_syscall_exit(int pid, int syscall) { - char buf[32]; + char buf[MAXPATHLEN]; struct reg regs; int retval; int i; @@ -206,7 +209,7 @@ struct syscall *sc; if (fd == -1 || pid != cpid) { - sprintf(buf, "/proc/%d/regs", pid); + snprintf(buf, sizeof buf, "%s/%d/regs", procpath, pid); fd = open(buf, O_RDONLY); if (fd == -1) { fprintf(outfile, "-- CANNOT READ REGISTERS --\n"); diff -ur /usr/src/usr.bin/truss/main.c truss/main.c --- /usr/src/usr.bin/truss/main.c Fri May 17 01:41:23 2002 +++ truss/main.c Sun Aug 4 14:31:11 2002 @@ -40,6 +40,8 @@ * do a lot of the work :). */ +#define PROCPATH "/proc" + #include <sys/param.h> #include <sys/ioctl.h> #include <sys/pioctl.h> @@ -64,6 +66,7 @@ int nosigs = 0; FILE *outfile; int Procfd; +char *procpath = NULL; static inline void usage(void) @@ -103,11 +106,11 @@ static struct ex_types * set_etype(void) { struct ex_types *funcs; - char etype[24]; + char etype[MAXPATHLEN]; char progt[32]; int fd; - sprintf(etype, "/proc/%d/etype", pid); + snprintf(etype, sizeof etype, "%s/%d/etype", procpath, pid); if ((fd = open(etype, O_RDONLY)) == -1) { strcpy(progt, "FreeBSD a.out"); } else { @@ -140,7 +143,7 @@ int sigexit = 0; outfile = stderr; - while ((c = getopt(ac, av, "p:o:S")) != -1) { + while ((c = getopt(ac, av, "p:o:d:S")) != -1) { switch (c) { case 'p': /* specified pid */ pid = atoi(optarg); @@ -148,6 +151,9 @@ case 'o': /* Specified output file */ fname = optarg; break; + case 'd': /* Specified procfs directory */ + procpath = optarg; + break; case 'S': /* Don't trace signals */ nosigs = 1; break; @@ -164,6 +170,9 @@ if ((outfile = fopen(fname, "w")) == NULL) errx(1, "cannot open %s", fname); } + + if (procpath == NULL) + procpath = strdup(PROCPATH); /* * If truss starts the process itself, it will ignore some signals -- diff -ur /usr/src/usr.bin/truss/setup.c truss/setup.c --- /usr/src/usr.bin/truss/setup.c Fri Feb 15 12:43:51 2002 +++ truss/setup.c Sun Aug 4 14:31:10 2002 @@ -55,6 +55,8 @@ #include "extern.h" +extern char *procpath; + static int evflags = 0; /* @@ -67,7 +69,7 @@ int setup_and_wait(char *command[]) { struct procfs_status pfs; - char buf[32]; + char buf[MAXPATHLEN]; int fd; int pid; int flags; @@ -78,9 +80,10 @@ } if (pid == 0) { /* Child */ int mask = S_EXEC | S_EXIT; - fd = open("/proc/curproc/mem", O_WRONLY); + snprintf(buf, sizeof buf, "%s/curproc/mem", procpath); + fd = open(buf, O_WRONLY); if (fd == -1) - err(2, "cannot open /proc/curproc/mem"); + err(2, "cannot open %s", buf); fcntl(fd, F_SETFD, 1); if (ioctl(fd, PIOCBIS, mask) == -1) err(3, "PIOCBIS"); @@ -107,7 +110,7 @@ exit(1); } - sprintf(buf, "/proc/%d/mem", pid); + snprintf(buf, MAXPATHLEN, "%s/%d/mem", procpath, pid); if ((fd = open(buf, O_RDWR)) == -1) err(5, "cannot open %s", buf); if (ioctl(fd, PIOCWAIT, &pfs) == -1) @@ -131,9 +134,9 @@ int start_tracing(int pid, int flags) { int fd; - char buf[32]; + char buf[MAXPATHLEN]; struct procfs_status tmp; - sprintf(buf, "/proc/%d/mem", pid); + snprintf(buf, sizeof buf, "%s/%d/mem", procpath, pid); fd = open(buf, O_RDWR); if (fd == -1) { diff -ur /usr/src/usr.bin/truss/truss.1 truss/truss.1 --- /usr/src/usr.bin/truss/truss.1 Fri Jun 21 17:29:40 2002 +++ truss/truss.1 Sun Aug 4 14:31:09 2002 @@ -10,10 +10,12 @@ .Nm .Op Fl S .Op Fl o Ar file +.Op Fl d Ar path .Fl p Ar pid .Nm .Op Fl S .Op Fl o Ar file +.Op Fl d Ar path command .Op args .Sh DESCRIPTION @@ -35,6 +37,10 @@ Print the output to the specified .Ar file instead of standard error. +.It Fl d Ar path +Use specified +.Ar path +for procfs instead of ,,/proc''. .It Fl p Ar pid Follow the process specified by .Ar pid >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020804124138.3C0D83ABD46>