From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25578 invoked by alias); 20 Jun 2008 19:10:31 -0000 Received: (qmail 25552 invoked by uid 367); 20 Jun 2008 19:10:30 -0000 Date: Fri, 20 Jun 2008 19:10:00 -0000 Message-ID: <20080620191030.25537.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Add more tracing to ptrace code (unfortunatly fprintf). X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 9147b4bdb1a382b221dcdc340365ebd3f411f694 X-Git-Newrev: 50ae71ea90cbbb3d8822fa7929a08322247cd24c Mailing-List: contact frysk-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: frysk-cvs-owner@sourceware.org Reply-To: frysk@sourceware.org X-SW-Source: 2008-q2/txt/msg00393.txt.bz2 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 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 * 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 + + * 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 * 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 #include #include #include @@ -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 +#include #include #include #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 #include #include #include @@ -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 +#include #include #include #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