This is the mail archive of the
frysk-cvs@sources.redhat.com
mailing list for the frysk project.
[SCM] master: Add more tracing to ptrace code (unfortunatly fprintf).
- From: cagney at sourceware dot org
- To: frysk-cvs at sourceware dot org
- Date: 20 Jun 2008 19:10:30 -0000
- Subject: [SCM] master: Add more tracing to ptrace code (unfortunatly fprintf).
- Reply-to: frysk at sourceware dot org
The branch, master has been updated
via 50ae71ea90cbbb3d8822fa7929a08322247cd24c (commit)
from 9147b4bdb1a382b221dcdc340365ebd3f411f694 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit 50ae71ea90cbbb3d8822fa7929a08322247cd24c
Author: Andrew Cagney <cagney@redhat.com>
Date: Fri Jun 20 15:07:07 2008 -0400
Add more tracing to ptrace code (unfortunatly fprintf).
frysk-sys/frysk/sys/ptrace/ChangeLog
2008-06-20 Andrew Cagney <cagney@redhat.com>
* jni/AddressSpace.cxx: Simplify debug code.
* cni/AddressSpace.cxx: Ditto.
* jni/Ptrace.hxx (ptraceOpToString(int)): Declare.
* cni/Ptrace.hxx (ptraceOpToString(int)): Ditto.
* jni/Ptrace.cxx (ptraceOpToString): Rename op_as_string.
* cni/Ptrace.cxx (ptraceOpToString): Ditto.
-----------------------------------------------------------------------
Summary of changes:
frysk-sys/frysk/sys/ptrace/ChangeLog | 9 +++
frysk-sys/frysk/sys/ptrace/cni/AddressSpace.cxx | 88 ++++++++++-------------
frysk-sys/frysk/sys/ptrace/cni/Ptrace.cxx | 18 ++++--
frysk-sys/frysk/sys/ptrace/cni/Ptrace.hxx | 1 +
frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx | 88 ++++++++++-------------
frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx | 18 ++++--
frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx | 1 +
7 files changed, 113 insertions(+), 110 deletions(-)
First 500 lines of diff:
diff --git a/frysk-sys/frysk/sys/ptrace/ChangeLog b/frysk-sys/frysk/sys/ptrace/ChangeLog
index 9484163..30c1ac0 100644
--- a/frysk-sys/frysk/sys/ptrace/ChangeLog
+++ b/frysk-sys/frysk/sys/ptrace/ChangeLog
@@ -1,3 +1,12 @@
+2008-06-20 Andrew Cagney <cagney@redhat.com>
+
+ * jni/AddressSpace.cxx: Simplify debug code.
+ * cni/AddressSpace.cxx: Ditto.
+ * jni/Ptrace.hxx (ptraceOpToString(int)): Declare.
+ * cni/Ptrace.hxx (ptraceOpToString(int)): Ditto.
+ * jni/Ptrace.cxx (ptraceOpToString): Rename op_as_string.
+ * cni/Ptrace.cxx (ptraceOpToString): Ditto.
+
2008-05-25 Andrew Cagney <cagney@redhat.com>
* jni/AddressSpace.cxx: Use jbyteArrayElements.
diff --git a/frysk-sys/frysk/sys/ptrace/cni/AddressSpace.cxx b/frysk-sys/frysk/sys/ptrace/cni/AddressSpace.cxx
index 232e1f3..b8d0af7 100644
--- a/frysk-sys/frysk/sys/ptrace/cni/AddressSpace.cxx
+++ b/frysk-sys/frysk/sys/ptrace/cni/AddressSpace.cxx
@@ -37,6 +37,9 @@
// version and license this file solely under the GPL without
// exception.
+#define DEBUG 0
+
+#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/ptrace.h>
@@ -61,21 +64,17 @@ jint
frysk::sys::ptrace::AddressSpace::peek(jint pid, jlong addr) {
union word w;
long paddr = addr & -sizeof(long);
-#if DEBUG
- fprintf(stderr, "peek 0x%lx paddr 0x%lx", (long)addr, paddr);
-#endif
+ if (DEBUG)
+ fprintf(stderr, "peek 0x%lx paddr 0x%lx", (long)addr, paddr);
w.l = ptraceOp(ptPeek, pid, (void*)paddr, 0);
-#if DEBUG
- fprintf(stderr, " word 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx", w.l);
int index = addr & (sizeof(long) - 1);
-#if DEBUG
- fprintf(stderr, " index %d", index);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " index %d", index);
uint8_t byte = w.b[index];
-#if DEBUG
- fprintf(stderr, " byte %d/0x%x\n", byte, byte);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " byte %d/0x%x\n", byte, byte);
return byte;
}
@@ -83,25 +82,20 @@ void
frysk::sys::ptrace::AddressSpace::poke(jint pid, jlong addr, jint data) {
// Implement read-modify-write
union word w;
-#if DEBUG
- fprintf(stderr, "poke 0x%x", (int)(data & 0xff));
-#endif
+ if (DEBUG)
+ fprintf(stderr, "poke 0x%x", (int)(data & 0xff));
long paddr = addr & -sizeof(long);
-#if DEBUG
- fprintf(stderr, " addr 0x%lx paddr 0x%lx", (long)addr, paddr);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " addr 0x%lx paddr 0x%lx", (long)addr, paddr);
w.l = ptraceOp(ptPeek, pid, (void*)paddr, 0);
-#if DEBUG
- fprintf(stderr, " word 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx", w.l);
int index = addr & (sizeof(long) - 1);
-#if DEBUG
- fprintf (stderr, " index %d", index);
-#endif
+ if (DEBUG)
+ fprintf (stderr, " index %d", index);
w.b[index] = data;
-#if DEBUG
- fprintf(stderr, " word 0x%lx\n", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx\n", w.l);
ptraceOp(ptPoke, pid, (void*)(addr & -sizeof(long)), w.l);
}
@@ -112,13 +106,11 @@ frysk::sys::ptrace::AddressSpace::transfer(jint op, jint pid, jlong addr,
verifyBounds(bytes, offset, length);
// Somewhat more clueful implementation
for (jlong i = 0; i < length;) {
-#if DEBUG
- fprintf(stderr,
- "transfer pid %d addr 0x%lx length %d offset %d op %d (%s)",
- (int)pid, (long)addr, (int)length, (int)offset,
- (int)op, op_as_string(op));
-#endif
-
+ if (DEBUG)
+ fprintf(stderr,
+ "transfer pid %d addr 0x%lx length %d offset %d op %d (%s) ...",
+ (int)pid, (long)addr, (int)length, (int)offset,
+ (int)op, ptraceOpToString(op));
union word w;
unsigned long waddr = addr & -sizeof(long);
unsigned long woff = (addr - waddr);
@@ -130,37 +122,33 @@ frysk::sys::ptrace::AddressSpace::transfer(jint op, jint pid, jlong addr,
wend = woff + remaining;
long wlen = wend - woff;
-#if DEBUG
- fprintf(stderr,
- " i %ld waddr 0x%lx woff %lu wend %lu remaining %lu wlen %lu",
- (long)i, waddr, woff, wend, remaining, wlen);
-#endif
+ if (DEBUG)
+ fprintf(stderr,
+ " i %ld waddr 0x%lx woff %lu wend %lu remaining %lu wlen %lu ...",
+ (long)i, waddr, woff, wend, remaining, wlen);
// Either a peek; or a partial write requiring read/modify/write.
if (op == ptPeek || woff != 0 || wend != sizeof(long)) {
- w.l = ptraceOp(ptPeek, pid, (void*)waddr, 0);
-#if DEBUG
- fprintf(stderr, " peek 0x%lx", w.l);
-#endif
- }
+ w.l = ptraceOp(ptPeek, pid, (void*)waddr, 0);
+ if (DEBUG)
+ fprintf(stderr, " peek 0x%lx ...", w.l);
+ }
// extract or modify
if (op == ptPeek)
memcpy(offset + i + elements(bytes), &w.b[woff], wlen);
else {
memcpy(&w.b[woff], offset + i + elements(bytes), wlen);
-#if DEBUG
- fprintf(stderr, " poke 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " poke 0x%lx ...", w.l);
w.l = ptraceOp(ptPoke, pid, (void*)waddr, w.l);
}
i += wlen;
addr += wlen;
-#if DEBUG
- fprintf(stderr, "\n");
-#endif
+ if (DEBUG)
+ fprintf(stderr, "\n");
}
}
diff --git a/frysk-sys/frysk/sys/ptrace/cni/Ptrace.cxx b/frysk-sys/frysk/sys/ptrace/cni/Ptrace.cxx
index 4aa12eb..3375efd 100644
--- a/frysk-sys/frysk/sys/ptrace/cni/Ptrace.cxx
+++ b/frysk-sys/frysk/sys/ptrace/cni/Ptrace.cxx
@@ -37,6 +37,10 @@
// version and license this file solely under the GPL without
// exception.
+#define DEBUG 0
+
+#include <stdio.h>
+#include <string.h>
#include <errno.h>
#include <sys/ptrace.h>
#include "linux.ptrace.h"
@@ -47,8 +51,8 @@
#include "frysk/sys/ptrace/Ptrace.h"
#include "frysk/sys/ptrace/cni/Ptrace.hxx"
-static const char*
-op_as_string(int op) {
+const char*
+ptraceOpToString(int op) {
switch(op) {
#define OP(NAME) case NAME: return #NAME
OP(PTRACE_ATTACH);
@@ -82,10 +86,14 @@ op_as_string(int op) {
long
ptraceOp(int op, int pid, void* addr, long data) {
errno = 0;
- long result = ::ptrace ((enum __ptrace_request) op, pid, addr, data);
- if (errno != 0)
+ long result = ::ptrace((enum __ptrace_request) op, pid, addr, data);
+ if (errno != 0) {
+ int err = errno;
+ if (DEBUG)
+ fprintf(stderr, "throwing %s\n", strerror(err));
throwErrno(errno, "ptrace", "op 0x%x (%s), pid %d, addr 0x%lx, data 0x%lx",
- op, op_as_string(op), pid, (long)addr, data);
+ op, ptraceOpToString(op), pid, (long)addr, data);
+ }
return result;
}
diff --git a/frysk-sys/frysk/sys/ptrace/cni/Ptrace.hxx b/frysk-sys/frysk/sys/ptrace/cni/Ptrace.hxx
index 78bda4d..1da0f03 100644
--- a/frysk-sys/frysk/sys/ptrace/cni/Ptrace.hxx
+++ b/frysk-sys/frysk/sys/ptrace/cni/Ptrace.hxx
@@ -38,3 +38,4 @@
// exception.
extern long ptraceOp(int, int, void*, long);
+extern const char *ptraceOpToString(int op);
diff --git a/frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx b/frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx
index 598d8cc..9600657 100644
--- a/frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx
+++ b/frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx
@@ -37,6 +37,9 @@
// version and license this file solely under the GPL without
// exception.
+#define DEBUG 0
+
+#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/ptrace.h>
@@ -60,21 +63,17 @@ jint
frysk::sys::ptrace::AddressSpace::peek(::jnixx::env env, jint pid, jlong addr) {
union word w;
long paddr = addr & -sizeof(long);
-#if DEBUG
- fprintf(stderr, "peek 0x%lx paddr 0x%lx", (long)addr, paddr);
-#endif
+ if (DEBUG)
+ fprintf(stderr, "peek 0x%lx paddr 0x%lx", (long)addr, paddr);
w.l = ptraceOp(env, GetPtPeek(env), pid, (void*)paddr, 0);
-#if DEBUG
- fprintf(stderr, " word 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx", w.l);
int index = addr & (sizeof(long) - 1);
-#if DEBUG
- fprintf(stderr, " index %d", index);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " index %d", index);
uint8_t byte = w.b[index];
-#if DEBUG
- fprintf(stderr, " byte %d/0x%x\n", byte, byte);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " byte %d/0x%x\n", byte, byte);
return byte;
}
@@ -82,25 +81,20 @@ void
frysk::sys::ptrace::AddressSpace::poke(::jnixx::env env, jint pid, jlong addr, jint data) {
// Implement read-modify-write
union word w;
-#if DEBUG
- fprintf(stderr, "poke 0x%x", (int)(data & 0xff));
-#endif
+ if (DEBUG)
+ fprintf(stderr, "poke 0x%x", (int)(data & 0xff));
long paddr = addr & -sizeof(long);
-#if DEBUG
- fprintf(stderr, " addr 0x%lx paddr 0x%lx", (long)addr, paddr);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " addr 0x%lx paddr 0x%lx", (long)addr, paddr);
w.l = ptraceOp(env, GetPtPeek(env), pid, (void*)paddr, 0);
-#if DEBUG
- fprintf(stderr, " word 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx", w.l);
int index = addr & (sizeof(long) - 1);
-#if DEBUG
- fprintf (stderr, " index %d", index);
-#endif
+ if (DEBUG)
+ fprintf (stderr, " index %d", index);
w.b[index] = data;
-#if DEBUG
- fprintf(stderr, " word 0x%lx\n", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " word 0x%lx\n", w.l);
ptraceOp(env, GetPtPoke(env), pid, (void*)(addr & -sizeof(long)), w.l);
}
@@ -114,13 +108,11 @@ frysk::sys::ptrace::AddressSpace::transfer(::jnixx::env env,
verifyBounds(env, byteArray, offset, length);
// Somewhat more clueful implementation
for (jlong i = 0; i < length;) {
-#if DEBUG
- fprintf(stderr,
- "transfer pid %d addr 0x%lx length %d offset %d op %d (%s)",
- (int)pid, (long)addr, (int)length, (int)offset,
- (int)op, op_as_string(op));
-#endif
-
+ if (DEBUG)
+ fprintf(stderr,
+ "transfer pid %d addr 0x%lx length %d offset %d op %d (%s) ...",
+ (int)pid, (long)addr, (int)length, (int)offset,
+ (int)op, ptraceOpToString(op));
union word w;
unsigned long waddr = addr & -sizeof(long);
unsigned long woff = (addr - waddr);
@@ -132,19 +124,17 @@ frysk::sys::ptrace::AddressSpace::transfer(::jnixx::env env,
wend = woff + remaining;
long wlen = wend - woff;
-#if DEBUG
- fprintf(stderr,
- " i %ld waddr 0x%lx woff %lu wend %lu remaining %lu wlen %lu",
- (long)i, waddr, woff, wend, remaining, wlen);
-#endif
+ if (DEBUG)
+ fprintf(stderr,
+ " i %ld waddr 0x%lx woff %lu wend %lu remaining %lu wlen %lu ...",
+ (long)i, waddr, woff, wend, remaining, wlen);
// Either a peek; or a partial write requiring read/modify/write.
if (op == ptPeek || woff != 0 || wend != sizeof(long)) {
- w.l = ptraceOp(env, ptPeek, pid, (void*)waddr, 0);
-#if DEBUG
- fprintf(stderr, " peek 0x%lx", w.l);
-#endif
- }
+ w.l = ptraceOp(env, ptPeek, pid, (void*)waddr, 0);
+ if (DEBUG)
+ fprintf(stderr, " peek 0x%lx ...", w.l);
+ }
// extract or modify
jbyteArrayElements bytes = jbyteArrayElements(env, byteArray);
@@ -152,9 +142,8 @@ frysk::sys::ptrace::AddressSpace::transfer(::jnixx::env env,
memcpy(offset + i + bytes.elements(), &w.b[woff], wlen);
else {
memcpy(&w.b[woff], offset + i + bytes.elements(), wlen);
-#if DEBUG
- fprintf(stderr, " poke 0x%lx", w.l);
-#endif
+ if (DEBUG)
+ fprintf(stderr, " poke 0x%lx ...", w.l);
w.l = ptraceOp(env, ptPoke, pid, (void*)waddr, w.l);
}
bytes.release();
@@ -162,9 +151,8 @@ frysk::sys::ptrace::AddressSpace::transfer(::jnixx::env env,
i += wlen;
addr += wlen;
-#if DEBUG
- fprintf(stderr, "\n");
-#endif
+ if (DEBUG)
+ fprintf(stderr, "\n");
}
}
diff --git a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx
index 1a7c13f..dce86e5 100644
--- a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx
+++ b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.cxx
@@ -37,6 +37,10 @@
// version and license this file solely under the GPL without
// exception.
+#define DEBUG 0
+
+#include <stdio.h>
+#include <string.h>
#include <errno.h>
#include <sys/ptrace.h>
#include "linux.ptrace.h"
@@ -47,8 +51,8 @@
#include "jnixx/exceptions.hxx"
-static const char*
-op_as_string(int op) {
+const char*
+ptraceOpToString(int op) {
switch(op) {
#define OP(NAME) case NAME: return #NAME
OP(PTRACE_ATTACH);
@@ -82,11 +86,15 @@ op_as_string(int op) {
long
ptraceOp(::jnixx::env env, int op, int pid, void* addr, long data) {
errno = 0;
- long result = ::ptrace ((enum __ptrace_request) op, pid, addr, data);
- if (errno != 0)
+ long result = ::ptrace((enum __ptrace_request) op, pid, addr, data);
+ if (errno != 0) {
+ int err = errno;
+ if (DEBUG)
+ fprintf(stderr, "throwing %s\n", strerror(err));
errnoException(env, errno, "ptrace",
"op 0x%x (%s), pid %d, addr 0x%lx, data 0x%lx",
- op, op_as_string(op), pid, (long)addr, data);
+ op, ptraceOpToString(op), pid, (long)addr, data);
+ }
return result;
}
diff --git a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx
index be134ef..46e2edd 100644
--- a/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx
+++ b/frysk-sys/frysk/sys/ptrace/jni/Ptrace.hxx
@@ -38,3 +38,4 @@
// exception.
extern long ptraceOp(::jnixx::env, int, int, void*, long);
+extern const char *ptraceOpToString(int op);
hooks/post-receive
--
frysk system monitor/debugger