svn commit: r257222 - head/lib/libproc

Mark Johnston markj at FreeBSD.org
Sun Oct 27 20:39:11 UTC 2013


Author: markj
Date: Sun Oct 27 20:39:10 2013
New Revision: 257222
URL: http://svnweb.freebsd.org/changeset/base/257222

Log:
  Clean up the debug printing in libproc a bit. In particular:
  
  * Don't print any error messages to stderr unless DEBUG is defined.
  * Add a DPRINTFX macro for use when errno isn't set.
  * Print the error string from libelf when appropriate.

Modified:
  head/lib/libproc/_libproc.h
  head/lib/libproc/proc_bkpt.c
  head/lib/libproc/proc_create.c
  head/lib/libproc/proc_regs.c
  head/lib/libproc/proc_sym.c
  head/lib/libproc/proc_util.c

Modified: head/lib/libproc/_libproc.h
==============================================================================
--- head/lib/libproc/_libproc.h	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/_libproc.h	Sun Oct 27 20:39:10 2013	(r257222)
@@ -49,7 +49,9 @@ struct proc_handle {
 };
 
 #ifdef DEBUG
-#define DPRINTF(...) 	warn(__VA_ARGS__)
+#define	DPRINTF(...) 	warn(__VA_ARGS__)
+#define	DPRINTFX(...)	warnx(__VA_ARGS__)
 #else
-#define DPRINTF(...)
+#define	DPRINTF(...)
+#define	DPRINTFX(...)
 #endif

Modified: head/lib/libproc/proc_bkpt.c
==============================================================================
--- head/lib/libproc/proc_bkpt.c	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/proc_bkpt.c	Sun Oct 27 20:39:10 2013	(r257222)
@@ -78,8 +78,8 @@ proc_bkptset(struct proc_handle *phdl, u
 	piod.piod_addr = &paddr;
 	piod.piod_len  = BREAKPOINT_INSTR_SZ;
 	if (ptrace(PT_IO, proc_getpid(phdl), (caddr_t)&piod, 0) < 0) {
-		DPRINTF("ERROR: couldn't read instruction at address 0x%" PRIuPTR,
-		    address);
+		DPRINTF("ERROR: couldn't read instruction at address 0x%"
+		    PRIuPTR, address);
 		return (-1);
 	}
 	*saved = paddr;
@@ -93,8 +93,8 @@ proc_bkptset(struct proc_handle *phdl, u
 	piod.piod_addr = &paddr;
 	piod.piod_len  = BREAKPOINT_INSTR_SZ;
 	if (ptrace(PT_IO, proc_getpid(phdl), (caddr_t)&piod, 0) < 0) {
-		warn("ERROR: couldn't write instruction at address 0x%" PRIuPTR,
-		    address);
+		DPRINTF("ERROR: couldn't write instruction at address 0x%"
+		    PRIuPTR, address);
 		return (-1);
 	}
 
@@ -113,7 +113,7 @@ proc_bkptdel(struct proc_handle *phdl, u
 		errno = ENOENT;
 		return (-1);
 	}
-	DPRINTF("removing breakpoint at 0x%lx\n", address);
+	DPRINTFX("removing breakpoint at 0x%lx\n", address);
 	/*
 	 * Overwrite the breakpoint instruction that we setup previously.
 	 */
@@ -124,8 +124,8 @@ proc_bkptdel(struct proc_handle *phdl, u
 	piod.piod_addr = &paddr;
 	piod.piod_len  = BREAKPOINT_INSTR_SZ;
 	if (ptrace(PT_IO, proc_getpid(phdl), (caddr_t)&piod, 0) < 0) {
-		DPRINTF("ERROR: couldn't write instruction at address 0x%" PRIuPTR,
-		    address);
+		DPRINTF("ERROR: couldn't write instruction at address 0x%"
+		    PRIuPTR, address);
 		return (-1);
 	}
  
@@ -153,12 +153,12 @@ proc_bkptexec(struct proc_handle *phdl, 
 	int status;
 
 	if (proc_regget(phdl, REG_PC, &pc) < 0) {
-		warn("ERROR: couldn't get PC register");
+		DPRINTFX("ERROR: couldn't get PC register");
 		return (-1);
 	}
 	proc_bkptregadj(&pc);
 	if (proc_bkptdel(phdl, pc, saved) < 0) {
-		warn("ERROR: couldn't delete breakpoint");
+		DPRINTFX("ERROR: couldn't delete breakpoint");
 		return (-1);
 	}
 	/*
@@ -167,13 +167,13 @@ proc_bkptexec(struct proc_handle *phdl, 
 	 */
 	proc_regset(phdl, REG_PC, pc);
 	if (ptrace(PT_STEP, proc_getpid(phdl), (caddr_t)1, 0) < 0) {
-		warn("ERROR: ptrace step failed");
+		DPRINTFX("ERROR: ptrace step failed");
 		return (-1);
 	}
 	proc_wstatus(phdl);
 	status = proc_getwstat(phdl);
 	if (!WIFSTOPPED(status)) {
-		warn("ERROR: don't know why process stopped");
+		DPRINTFX("ERROR: don't know why process stopped");
 		return (-1);
 	}
 	/*
@@ -181,7 +181,7 @@ proc_bkptexec(struct proc_handle *phdl, 
 	 * the same as the one that we were passed in.
 	 */
 	if (proc_bkptset(phdl, pc, &samesaved) < 0) {
-		warn("ERROR: couldn't restore breakpoint");
+		DPRINTFX("ERROR: couldn't restore breakpoint");
 		return (-1);
 	}
 	assert(samesaved == saved);

Modified: head/lib/libproc/proc_create.c
==============================================================================
--- head/lib/libproc/proc_create.c	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/proc_create.c	Sun Oct 27 20:39:10 2013	(r257222)
@@ -75,7 +75,7 @@ proc_attach(pid_t pid, int flags, struct
 
 	/* Check for an unexpected status. */
 	if (WIFSTOPPED(status) == 0)
-		DPRINTF("ERROR: child process %d status 0x%x", pid, status);
+		DPRINTFX("ERROR: child process %d status 0x%x", pid, status);
 	else
 		phdl->status = PS_STOP;
 
@@ -130,14 +130,14 @@ proc_create(const char *file, char * con
 		/* Wait for the child process to stop. */
 		if (waitpid(pid, &status, WUNTRACED) == -1) {
 			error = errno;
-                	DPRINTF("ERROR: child process %d didn't stop as expected", pid);
+			DPRINTF("ERROR: child process %d didn't stop as expected", pid);
 			goto bad;
 		}
 
 		/* Check for an unexpected status. */
 		if (WIFSTOPPED(status) == 0) {
 			error = errno;
-                	DPRINTF("ERROR: child process %d status 0x%x", pid, status);
+			DPRINTFX("ERROR: child process %d status 0x%x", pid, status);
 			goto bad;
 		} else
 			phdl->status = PS_STOP;

Modified: head/lib/libproc/proc_regs.c
==============================================================================
--- head/lib/libproc/proc_regs.c	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/proc_regs.c	Sun Oct 27 20:39:10 2013	(r257222)
@@ -76,7 +76,7 @@ proc_regget(struct proc_handle *phdl, pr
 #endif
 		break;
 	default:
-		warn("ERROR: no support for reg number %d", reg);
+		DPRINTFX("ERROR: no support for reg number %d", reg);
 		return (-1);
 	}
 
@@ -119,7 +119,7 @@ proc_regset(struct proc_handle *phdl, pr
 #endif
 		break;
 	default:
-		warn("ERROR: no support for reg number %d", reg);
+		DPRINTFX("ERROR: no support for reg number %d", reg);
 		return (-1);
 	}
 	if (ptrace(PT_SETREGS, proc_getpid(phdl), (caddr_t)&regs, 0) < 0)

Modified: head/lib/libproc/proc_sym.c
==============================================================================
--- head/lib/libproc/proc_sym.c	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/proc_sym.c	Sun Oct 27 20:39:10 2013	(r257222)
@@ -238,16 +238,16 @@ proc_addr2sym(struct proc_handle *p, uin
 
 	if ((map = proc_addr2map(p, addr)) == NULL)
 		return (-1);
-	if (!map->pr_mapname || (fd = open(map->pr_mapname, O_RDONLY, 0)) < 0) {
-		warn("ERROR: open %s failed", map->pr_mapname);
+	if ((fd = open(map->pr_mapname, O_RDONLY, 0)) < 0) {
+		DPRINTF("ERROR: open %s failed", map->pr_mapname);
 		goto err0;
 	}
 	if ((e = elf_begin(fd, ELF_C_READ, NULL)) == NULL) {
-		warn("ERROR: elf_begin() failed");
+		DPRINTFX("ERROR: elf_begin() failed: %s", elf_errmsg(-1));
 		goto err1;
 	}
 	if (gelf_getehdr(e, &ehdr) == NULL) {
-		warn("ERROR: gelf_getehdr() failed");
+		DPRINTFX("ERROR: gelf_getehdr() failed: %s", elf_errmsg(-1));
 		goto err2;
 	}
 	/*
@@ -275,7 +275,7 @@ proc_addr2sym(struct proc_handle *p, uin
 	 * Then look up the string name in STRTAB (.dynstr)
 	 */
 	if ((data = elf_getdata(dynsymscn, NULL)) == NULL) {
-		DPRINTF("ERROR: elf_getdata() failed");
+		DPRINTFX("ERROR: elf_getdata() failed: %s", elf_errmsg(-1));
 		goto symtab;
 	}
 	i = 0;
@@ -312,7 +312,7 @@ symtab:
 	if (symtabscn == NULL)
 		goto err2;
 	if ((data = elf_getdata(symtabscn, NULL)) == NULL) {
-		DPRINTF("ERROR: elf_getdata() failed");
+		DPRINTFX("ERROR: elf_getdata() failed: %s", elf_errmsg(-1));
 		goto err2;
 	}
 	i = 0;
@@ -420,7 +420,7 @@ proc_name2sym(struct proc_handle *p, con
 	unsigned long symtabstridx = 0, dynsymstridx = 0;
 
 	if ((map = proc_name2map(p, object)) == NULL) {
-		DPRINTF("ERROR: couldn't find object %s", object);
+		DPRINTFX("ERROR: couldn't find object %s", object);
 		goto err0;
 	}
 	if ((fd = open(map->pr_mapname, O_RDONLY, 0)) < 0) {
@@ -428,11 +428,11 @@ proc_name2sym(struct proc_handle *p, con
 		goto err0;
 	}
 	if ((e = elf_begin(fd, ELF_C_READ, NULL)) == NULL) {
-		warn("ERROR: elf_begin() failed");
+		DPRINTFX("ERROR: elf_begin() failed: %s", elf_errmsg(-1));
 		goto err1;
 	}
 	if (gelf_getehdr(e, &ehdr) == NULL) {
-		warn("ERROR: gelf_getehdr() failed");
+		DPRINTFX("ERROR: gelf_getehdr() failed: %s", elf_errmsg(-1));
 		goto err2;
 	}
 	/*
@@ -460,7 +460,7 @@ proc_name2sym(struct proc_handle *p, con
 	 * Then look up the string name in STRTAB (.dynstr)
 	 */
 	if ((data = elf_getdata(dynsymscn, NULL))) {
-		DPRINTF("ERROR: elf_getdata() failed");
+		DPRINTFX("ERROR: elf_getdata() failed: %s", elf_errmsg(-1));
 		i = 0;
 		while (gelf_getsym(data, i++, &sym) != NULL) {
 			s = elf_strptr(e, dynsymstridx, sym.st_name);
@@ -519,11 +519,11 @@ proc_iter_symbyaddr(struct proc_handle *
 	if ((map = proc_name2map(p, object)) == NULL)
 		return (-1);
 	if ((fd = open(map->pr_mapname, O_RDONLY)) < 0) {
-		warn("ERROR: open %s failed", map->pr_mapname);
+		DPRINTF("ERROR: open %s failed", map->pr_mapname);
 		goto err0;
 	}
 	if ((e = elf_begin(fd, ELF_C_READ, NULL)) == NULL) {
-		warn("ERROR: elf_begin() failed");
+		DPRINTFX("ERROR: elf_begin() failed: %s", elf_errmsg(-1));
 		goto err1;
 	}
 	/*
@@ -546,7 +546,7 @@ proc_iter_symbyaddr(struct proc_handle *
 		return (-1);
 	stridx = shdr.sh_link;
 	if ((data = elf_getdata(foundscn, NULL)) == NULL) {
-		DPRINTF("ERROR: elf_getdata() failed");
+		DPRINTFX("ERROR: elf_getdata() failed: %s", elf_errmsg(-1));
 		goto err2;
 	}
 	i = 0;

Modified: head/lib/libproc/proc_util.c
==============================================================================
--- head/lib/libproc/proc_util.c	Sun Oct 27 18:52:09 2013	(r257221)
+++ head/lib/libproc/proc_util.c	Sun Oct 27 20:39:10 2013	(r257222)
@@ -146,7 +146,7 @@ proc_wstatus(struct proc_handle *phdl)
 		return (-1);
 	if (waitpid(phdl->pid, &status, WUNTRACED) < 0) {
 		if (errno != EINTR)
-			warn("waitpid");
+			DPRINTF("waitpid");
 		return (-1);
 	}
 	if (WIFSTOPPED(status))


More information about the svn-src-head mailing list