Module Name: src
Committed By: reinoud
Date: Sat Aug 27 17:51:38 UTC 2011
Modified Files:
src/sys/kern: kern_exec.c
Log Message:
Enhance EXEC_DEBUG by also printing the UVM commands
To generate a diff of this commit:
cvs rdiff -u -r1.325 -r1.326 src/sys/kern/kern_exec.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/kern_exec.c
diff -u src/sys/kern/kern_exec.c:1.325 src/sys/kern/kern_exec.c:1.326
--- src/sys/kern/kern_exec.c:1.325 Fri Aug 26 19:07:13 2011
+++ src/sys/kern/kern_exec.c Sat Aug 27 17:51:38 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exec.c,v 1.325 2011/08/26 19:07:13 jmcneill Exp $ */
+/* $NetBSD: kern_exec.c,v 1.326 2011/08/27 17:51:38 reinoud Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.325 2011/08/26 19:07:13 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.326 2011/08/27 17:51:38 reinoud Exp $");
#include "opt_exec.h"
#include "opt_ktrace.h"
@@ -850,6 +850,29 @@
if (pack.ep_vmcmds.evs_used == 0)
panic("%s: no vmcmds", __func__);
#endif
+
+#ifdef DEBUG_EXEC
+ {
+ size_t j;
+ struct exec_vmcmd *vp = &pack.ep_vmcmds.evs_cmds[0];
+ DPRINTF("vmcmds %u\n", pack.ep_vmcmds.evs_used);
+ for (j = 0; j < pack.ep_vmcmds.evs_used; j++) {
+ DPRINTF("vmcmd[%zu] = vmcmd_map_%s %#"
+ PRIxVADDR"/%#"PRIxVSIZE" fd@%#"
+ PRIxVSIZE" prot=0%o flags=%d\n", j,
+ vp[j].ev_proc == vmcmd_map_pagedvn ?
+ "pagedvn" :
+ vp[j].ev_proc == vmcmd_map_readvn ?
+ "readvn" :
+ vp[j].ev_proc == vmcmd_map_zero ?
+ "zero" : "*unknown*",
+ vp[j].ev_addr, vp[j].ev_len,
+ vp[j].ev_offset, vp[j].ev_prot,
+ vp[j].ev_flags);
+ }
+ }
+#endif /* DEBUG_EXEC */
+
for (i = 0; i < pack.ep_vmcmds.evs_used && !error; i++) {
struct exec_vmcmd *vcp;
@@ -870,10 +893,10 @@
if (error) {
size_t j;
struct exec_vmcmd *vp = &pack.ep_vmcmds.evs_cmds[0];
- uprintf("vmcmds %zu/%u, error %d\n", i,
+ DPRINTF("vmcmds %zu/%u, error %d\n", i,
pack.ep_vmcmds.evs_used, error);
- for (j = 0; j <= i; j++)
- uprintf("vmcmd[%zu] = vmcmd_map_%s %#"
+ for (j = 0; j < pack.ep_vmcmds.evs_used; j++) {
+ DPRINTF("vmcmd[%zu] = vmcmd_map_%s %#"
PRIxVADDR"/%#"PRIxVSIZE" fd@%#"
PRIxVSIZE" prot=0%o flags=%d\n", j,
vp[j].ev_proc == vmcmd_map_pagedvn ?
@@ -885,6 +908,9 @@
vp[j].ev_addr, vp[j].ev_len,
vp[j].ev_offset, vp[j].ev_prot,
vp[j].ev_flags);
+ if (j == i)
+ DPRINTF(" ^--- failed\n");
+ }
}
#endif /* DEBUG_EXEC */
if (vcp->ev_flags & VMCMD_BASE)
@@ -1249,6 +1275,7 @@
pathbuf_stringcopy_put(pb, pathstring);
pathbuf_destroy(pb);
PNBUF_PUT(resolvedpathbuf);
+ DPRINTF("%s finished\n", __func__);
return (EJUSTRETURN);
bad: