From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24992 invoked by alias); 20 May 2008 11:55:47 -0000 Received: (qmail 24958 invoked by uid 367); 20 May 2008 11:55:47 -0000 Date: Tue, 20 May 2008 11:55:00 -0000 Message-ID: <20080520115547.24943.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement JNI AuxvBuilder. X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 68fefadcd7878a491927faf628081163af926bd0 X-Git-Newrev: 24e628ca394f14d40fb4b297b2ad949cba3c2fa6 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/msg00251.txt.bz2 The branch, master has been updated via 24e628ca394f14d40fb4b297b2ad949cba3c2fa6 (commit) via 1e7606a84852dcd4ed85b33ad497f7caced38a97 (commit) via 2f73c8693d751a9a55131bc9c46716a229c6a953 (commit) via 305cad42d3256e6c8d028574ab425e6e3cdd1da4 (commit) via a566d43935b6ca68ff3d97d1f422edf270c06f8f (commit) via 57d7b20b506aa959b7ea2541af6aedef09308e5c (commit) from 68fefadcd7878a491927faf628081163af926bd0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 24e628ca394f14d40fb4b297b2ad949cba3c2fa6 Author: Andrew Cagney Date: Tue May 20 07:50:45 2008 -0400 Implement JNI AuxvBuilder. frysk-sys/frysk/sys/proc/ChangeLog 2008-05-20 Andrew Cagney * jni/AuxvBuilder.cxx: Implement. frysk-sys/frysk/sys/ptrace/ChangeLog 2008-05-20 Andrew Cagney * jni/AddressSpace.cxx: Update; ByteArrayElements renamed to ArrayBytes. * jni/RegisterSet.cxx: Ditto. frysk-sys/jnixx/ChangeLog 2008-05-20 Andrew Cagney * elements.hxx (class ArrayBytes): Rename ByteArrayElements. Add length field, extend ByteArray, rename "p" to elements. (class Bytes): New. (class FileBytes): New. * elements.cxx (class FileBytes): Implement. commit 1e7606a84852dcd4ed85b33ad497f7caced38a97 Author: Andrew Cagney Date: Sat May 17 14:29:20 2008 -0400 Fix parameters to getRawSet. frysk-sys/frysk/sys/ChangeLog 2008-05-17 Andrew Cagney * jni/SignalSet.hxx (getRawSet): Add env parameter. * jni/Wait.cxx (Wait::wait): Update. commit 2f73c8693d751a9a55131bc9c46716a229c6a953 Author: Andrew Cagney Date: Sat May 17 14:23:07 2008 -0400 Implement JNi SignalSet. frysk-sys/frysk/sys/ChangeLog 2008-05-17 Andrew Cagney * jni/SignalSet.cxx: Implement in jni. frysk-sys/jnixx/ChangeLog 2008-05-17 Andrew Cagney * jni/Native.cxx: Use new/delete. Don't #include . * elements.cxx: Ditto. commit 305cad42d3256e6c8d028574ab425e6e3cdd1da4 Author: Andrew Cagney Date: Sat May 17 13:44:45 2008 -0400 Eliminate RawDataManaged from SignalSet. frysk-sys/frysk/sys/ChangeLog 2008-05-17 Andrew Cagney * TestFork.java: Use SignalSet.setProcMask(). * SignalSet.java: Eliminate RawDataManaged * cni/SignalSet.cxx: Update. commit a566d43935b6ca68ff3d97d1f422edf270c06f8f Author: Andrew Cagney Date: Sat May 17 10:54:04 2008 -0400 Really throw/catch a java::lang::Throwable in JNIXX. frysk-common/ChangeLog 2008-05-17 Andrew Cagney * Makefile.gen.sh (jnixx_sources): Fix path to sources. frysk-sys/frysk/sys/ChangeLog 2008-05-17 Andrew Cagney * jni/SignalSet.hxx: New. * jni/Wait.cxx (processStatus): Catch java::lang::Throwable. frysk-sys/jnixx/ChangeLog 2008-05-17 Andrew Cagney * TestJnixx.java (testThrowCatch()): New. (testRethrowCatch()): New. * JniBindings.java: Add IsInstanceOf. Generate throwPendingException. * jnixx.hxx (jnixx::exception): Delete. (jnixx::env::throwPendingException()): New. * PrintHxxDefinitions.java: Don't check for NULL objects. * PrintCxxDefinitions.java: Generate catch java::lang::Throwable. * exceptions.cxx (runtimeException): Catch java::lang::Throwable. * print.cxx (vajprintf): Ditto. commit 57d7b20b506aa959b7ea2541af6aedef09308e5c Author: Andrew Cagney Date: Fri May 16 15:47:47 2008 -0400 Prototype JNI Wait.cxx. frysk-sys/ChangeLog 2008-05-16 Andrew Cagney * Makefile.am (JNIXX_CLASSES): Add Errno$Esrch. frysk-sys/frysk/sys/ChangeLog 2008-05-16 Andrew Cagney * jni/Wait.cxx: Convert to JNI. ----------------------------------------------------------------------- Summary of changes: frysk-common/ChangeLog | 4 + frysk-common/Makefile.gen.sh | 2 +- frysk-sys/ChangeLog | 4 + frysk-sys/Makefile.am | 1 + frysk-sys/frysk/sys/ChangeLog | 18 + frysk-sys/frysk/sys/SignalSet.java | 132 ++++-- frysk-sys/frysk/sys/TestFork.java | 5 +- frysk-sys/frysk/sys/cni/SignalSet.cxx | 113 ++--- frysk-sys/frysk/sys/jni/SignalSet.cxx | 127 +++++- .../frysk/sys/jni/{SignalSet.cxx => SignalSet.hxx} | 4 +- frysk-sys/frysk/sys/jni/Wait.cxx | 554 +++++++++++++++++++- frysk-sys/frysk/sys/proc/ChangeLog | 4 + frysk-sys/frysk/sys/proc/jni/AuxvBuilder.cxx | 162 ++++++- frysk-sys/frysk/sys/ptrace/ChangeLog | 6 + frysk-sys/frysk/sys/ptrace/jni/AddressSpace.cxx | 12 +- frysk-sys/frysk/sys/ptrace/jni/RegisterSet.cxx | 6 +- frysk-sys/jnixx/ChangeLog | 24 + frysk-sys/jnixx/JniBindings.java | 124 ++++-- frysk-sys/jnixx/Native.java | 14 +- frysk-sys/jnixx/PrintCxxDefinitions.java | 5 +- frysk-sys/jnixx/PrintHxxDefinitions.java | 3 - frysk-sys/jnixx/TestJnixx.java | 18 + frysk-sys/jnixx/cni/Native.cxx | 16 + frysk-sys/jnixx/elements.cxx | 88 +++- frysk-sys/jnixx/elements.hxx | 36 +- frysk-sys/jnixx/exceptions.cxx | 2 +- frysk-sys/jnixx/jni/Native.cxx | 23 +- frysk-sys/jnixx/jnixx.hxx | 400 +++++++------- frysk-sys/jnixx/print.cxx | 2 +- 29 files changed, 1528 insertions(+), 381 deletions(-) copy frysk-sys/frysk/sys/jni/{SignalSet.cxx => SignalSet.hxx} (95%) First 500 lines of diff: diff --git a/frysk-common/ChangeLog b/frysk-common/ChangeLog index c04030d..29024e3 100644 --- a/frysk-common/ChangeLog +++ b/frysk-common/ChangeLog @@ -1,3 +1,7 @@ +2008-05-17 Andrew Cagney + + * Makefile.gen.sh (jnixx_sources): Fix path to sources. + 2008-05-15 Tim Moore * Makefile.rules (AM_CXXFLAGS): Add elfutils/{libasm,libebl}. diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh index b59a71c..fa8f15d 100755 --- a/frysk-common/Makefile.gen.sh +++ b/frysk-common/Makefile.gen.sh @@ -897,7 +897,7 @@ lib${GEN_DIRNAME}-jni.so: lib${GEN_DIRNAME}-jni.a .PHONY: jni jni: lib${GEN_DIRNAME}-jni.so ${GEN_DIRNAME}.jar lib${GEN_MAKENAME}_jni_a_SOURCES += jni.cxx -jnixx_sources = \$(wildcard \$(root_srcdir)/frysk-sys/frysk/jnixx/*.java) +jnixx_sources = \$(wildcard \$(root_srcdir)/frysk-sys/jnixx/*.java) CLEANFILES += jni.hxx jni.cxx jni.hxx.gch \$(lib${GEN_MAKENAME}_jni_a_SOURCES): | jni.hxx jni.hxx.gch jni.hxx: \$(jnixx_sources) | ${GEN_DIRNAME}.jar diff --git a/frysk-sys/ChangeLog b/frysk-sys/ChangeLog index 90559a4..659ac0b 100644 --- a/frysk-sys/ChangeLog +++ b/frysk-sys/ChangeLog @@ -1,3 +1,7 @@ +2008-05-16 Andrew Cagney + + * Makefile.am (JNIXX_CLASSES): Add Errno$Esrch. + 2008-05-15 Tim Moore * Makefile.am (GEN_GCJ_LDADD_LIST): Add elfutils/libasm/libasm.a. diff --git a/frysk-sys/Makefile.am b/frysk-sys/Makefile.am index 90644c4..7aed15f 100644 --- a/frysk-sys/Makefile.am +++ b/frysk-sys/Makefile.am @@ -75,6 +75,7 @@ lib/unwind/Unwind%.java: lib/unwind/Unwind.java # explicitly add them here. JNIXX_CLASSES += frysk.sys.ProcessIdentifierFactory JNIXX_CLASSES += java.lang.ArrayIndexOutOfBoundsException +JNIXX_CLASSES += frysk.sys.Errno$$Esrch # Quick hack to get a test JNI program up-and-running; as a package is diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog index e51e955..f8c40c3 100644 --- a/frysk-sys/frysk/sys/ChangeLog +++ b/frysk-sys/frysk/sys/ChangeLog @@ -1,3 +1,21 @@ +2008-05-17 Andrew Cagney + + * jni/SignalSet.hxx (getRawSet): Add env parameter. + * jni/Wait.cxx (Wait::wait): Update. + + * jni/SignalSet.cxx: Implement in jni. + + * TestFork.java: Use SignalSet.setProcMask(). + * SignalSet.java: Eliminate RawDataManaged + * cni/SignalSet.cxx: Update. + + * jni/SignalSet.hxx: New. + * jni/Wait.cxx (processStatus): Catch java::lang::Throwable. + +2008-05-16 Andrew Cagney + + * jni/Wait.cxx: Convert to JNI. + 2008-05-14 Andrew Cagney * jni/Fork.cxx: Update #includes for jnixx rename. diff --git a/frysk-sys/frysk/sys/SignalSet.java b/frysk-sys/frysk/sys/SignalSet.java index bc40158..519a921 100644 --- a/frysk-sys/frysk/sys/SignalSet.java +++ b/frysk-sys/frysk/sys/SignalSet.java @@ -39,30 +39,26 @@ package frysk.sys; -import gnu.gcj.RawDataManaged; - /** * A Signal Set, corresponds to sigset_t. */ -public final class SignalSet -{ - private RawDataManaged rawSet; - private native RawDataManaged newRawSet (); +public final class SignalSet { + private long rawSet; + private native static long malloc(); + private native static void free(long rawSet); /** * Return a pointer to the underlying sigset_t buffer. */ - RawDataManaged getRawSet () - { + long getRawSet() { return rawSet; } /** * Create an empty signal set. */ - public SignalSet () - { - rawSet = newRawSet (); + public SignalSet() { + rawSet = malloc(); } /** * Create a SigSet containing the signals in the array. @@ -79,11 +75,17 @@ public final class SignalSet add(sig); } + protected void finalize() { + if (rawSet != 0) { + free(rawSet); + rawSet = 0; + } + } + /** * As a string. */ - public String toString() - { + public String toString() { Signal[] sigs = toArray(); StringBuffer s = new StringBuffer("{"); for (int i = 0; i < sigs.length; i++) { @@ -115,90 +117,136 @@ public final class SignalSet /** * Empty the signal set; return this. */ - public native SignalSet empty (); + public SignalSet empty() { + empty(rawSet); + return this; + } + private static native void empty(long rawSet); /** * Fill the signal set; return this. */ - public native SignalSet fill (); + public SignalSet fill() { + fill(rawSet); + return this; + } + private static native void fill(long rawSet); /** * Add sigNum to the SignalSet; return this. */ - public native SignalSet add(Signal sig); + public SignalSet add(Signal sig) { + add(rawSet, sig.intValue()); + return this; + } + private static native void add(long rawSet, int sig); /** * Add the array of signals to the SignalSet; return this. */ public SignalSet add(Signal[] sigs) { for (int i = 0; i < sigs.length; i++) { if (sigs[i] != null) - add(sigs[i]); + add(rawSet, sigs[i].intValue()); } return this; } /** * The number of elements in the set. */ - public native int size(); + public int size() { + return size(rawSet); + } + private static native int size(long rawSet); /** * Remove Signal from the SignalSet (the underlying code uses * sigdelset, the name remove is more consistent with * java); return this. */ - public native SignalSet remove (Signal sig); + public SignalSet remove(Signal sig) { + remove(rawSet, sig.intValue()); + return this; + } + private static native void remove(long rawSet, int sig); /** * Does this SignalSet contain sigNum (the underlying code uses * sigismember, the name contains is more consistent with * java. */ - public native boolean contains (Signal sig); + public boolean contains(Signal sig) { + return contains(rawSet, sig.intValue()); + } + private static native boolean contains(long rawSet, int sig); /** - * Get the pending set of signals; return this + * Set to the set of pending signals; return this */ - public native SignalSet getPending (); + public SignalSet getPending() { + getPending(rawSet); + return this; + } + private static native void getPending(long rawSet); /** * Suspend the thread, unblocking signals in SignalSet; return this. */ - public native SignalSet suspend (); + public SignalSet suspend() { + suspend(rawSet); + return this; + } + private static native void suspend(long rawSet); /** - * Block this SignalSet's signals; if oldSet is non-null, return the - * previous signal set; return this. + * Block this SignalSet's signals; return the previous signal set + * in oldSet; return this. */ - public native SignalSet blockProcMask (SignalSet oldSet); + public SignalSet blockProcMask(SignalSet oldSet) { + blockProcMask(rawSet, oldSet.rawSet); + return this; + } + private static native void blockProcMask(long rawSet, long oldSet); /** * Block this SignalSet's signals; return this. */ - public SignalSet blockProcMask () - { - return blockProcMask (null); + public SignalSet blockProcMask() { + blockProcMask(rawSet, 0); + return this; } /** - * Unblock this SignalSet's signals; if oldSet is non-null, return - * the previous signal set; return this. + * Unblock this SignalSet's signals; return the previous signal + * set in oldSet; return this. */ - public native SignalSet unblockProcMask (SignalSet oldSet); + public SignalSet unblockProcMask(SignalSet oldSet) { + unblockProcMask(rawSet, oldSet.rawSet); + return this; + } + private static native void unblockProcMask(long rawSet, long oldSet); /** * Unblock this SignalSet's signals; return this. */ - public SignalSet unblockProcMask () - { - return unblockProcMask (null); + public SignalSet unblockProcMask() { + unblockProcMask(rawSet, 0); + return this; } /** - * Set the signal mask to this SignalSet's signals; if oldSet is - * non-null, return the previous signal set; return this. + * Set the thread's signal mask to this SignalSet's signals; + * return the previous signal set in oldSet. */ - public native SignalSet setProcMask (SignalSet oldSet); + public SignalSet setProcMask(SignalSet oldSet) { + setProcMask(rawSet, oldSet.rawSet); + return this; + } + private static native void setProcMask(long rawSet, long oldSet); /** * Set the process signal mask to this SignalSet's signals; return * this. */ - public SignalSet setProcMask () - { - return setProcMask (null); + public SignalSet setProcMask() { + setProcMask(rawSet, 0); + return this; } /** * Get the current process signal mask; return this. */ - public native SignalSet getProcMask (); + public SignalSet getProcMask() { + getProcMask(rawSet); + return this; + } + private static native void getProcMask(long rawSet); } diff --git a/frysk-sys/frysk/sys/TestFork.java b/frysk-sys/frysk/sys/TestFork.java index 64cbf68..82ba7a9 100644 --- a/frysk-sys/frysk/sys/TestFork.java +++ b/frysk-sys/frysk/sys/TestFork.java @@ -56,10 +56,9 @@ public class TestFork extends TestCase { /** * Rip down everything related to PID. */ - public void tearDown () - { + public void tearDown() { TearDownProcess.tearDown (); - defaultSignalSet.setProcMask(null); + defaultSignalSet.setProcMask(); } /** diff --git a/frysk-sys/frysk/sys/cni/SignalSet.cxx b/frysk-sys/frysk/sys/cni/SignalSet.cxx index e18d66e..45ea662 100644 --- a/frysk-sys/frysk/sys/cni/SignalSet.cxx +++ b/frysk-sys/frysk/sys/cni/SignalSet.cxx @@ -42,7 +42,6 @@ #include #include -#include #include "frysk/sys/SignalSet.h" #include "frysk/sys/Signal.h" @@ -50,127 +49,109 @@ #include "frysk/sys/cni/Errno.hxx" sigset_t * -getRawSet (frysk::sys::SignalSet* set) -{ - return (sigset_t*) set->getRawSet (); +getRawSet(frysk::sys::SignalSet* set) { + return (sigset_t*) set->getRawSet(); } -frysk::sys::SignalSet* -frysk::sys::SignalSet::fill () -{ +void +frysk::sys::SignalSet::fill(jlong rawSet) { sigset_t *sigset = (sigset_t*) rawSet; - ::sigfillset (sigset); - return this; + ::sigfillset(sigset); } -frysk::sys::SignalSet* -frysk::sys::SignalSet::remove (frysk::sys::Signal* sig) -{ +void +frysk::sys::SignalSet::remove(jlong rawSet, jint sig) { sigset_t *sigset = (sigset_t*) rawSet; - ::sigdelset (sigset, sig->hashCode ()); - return this; + ::sigdelset(sigset, sig); } -frysk::sys::SignalSet* -frysk::sys::SignalSet::add (frysk::sys::Signal* sig) -{ +void +frysk::sys::SignalSet::add(jlong rawSet, jint sig) { sigset_t *sigset = (sigset_t*) rawSet; - ::sigaddset (sigset, sig->hashCode ()); - return this; + ::sigaddset(sigset, sig); } jboolean -frysk::sys::SignalSet::contains (frysk::sys::Signal* sig) -{ +frysk::sys::SignalSet::contains(jlong rawSet, jint sig) { sigset_t *sigset = (sigset_t*) rawSet; - return ::sigismember (sigset, sig->hashCode ()); + return ::sigismember(sigset, sig); } -gnu::gcj::RawDataManaged * -frysk::sys::SignalSet::newRawSet () -{ - sigset_t* sigset = (sigset_t*) JvAllocBytes (sizeof (sigset_t)); - ::sigemptyset (sigset); - return (gnu::gcj::RawDataManaged*) sigset; +jlong +frysk::sys::SignalSet::malloc() { + sigset_t* sigset = (sigset_t*) JvMalloc (sizeof (sigset_t)); + ::sigemptyset(sigset); + return (long)(void*)sigset; } -frysk::sys::SignalSet* -frysk::sys::SignalSet::empty () -{ +void +frysk::sys::SignalSet::free(jlong rawSet) { sigset_t *sigset = (sigset_t*) rawSet; - ::sigemptyset (sigset); - return this; + JvFree(sigset); } -frysk::sys::SignalSet* -frysk::sys::SignalSet::getPending () -{ +void +frysk::sys::SignalSet::empty(jlong rawSet) { + sigset_t *sigset = (sigset_t*) rawSet; + ::sigemptyset(sigset); +} + +void +frysk::sys::SignalSet::getPending(jlong rawSet) { sigset_t *sigset = (sigset_t*) rawSet; errno = 0; - if (::sigpending (sigset) < 0) - throwErrno (errno, "sigpending"); - return this; + if (::sigpending(sigset) < 0) + throwErrno(errno, "sigpending"); } -frysk::sys::SignalSet* -frysk::sys::SignalSet::suspend() -{ +void +frysk::sys::SignalSet::suspend(jlong rawSet) { sigset_t *sigset = (sigset_t*) rawSet; errno = 0; - ::sigsuspend (sigset); // always fails with EINTR. + ::sigsuspend(sigset); // always fails with EINTR. if (errno != EINTR) throwErrno (errno, "sigsuspend"); - return this; } -frysk::sys::SignalSet* -frysk::sys::SignalSet::blockProcMask (frysk::sys::SignalSet* oset) -{ +void +frysk::sys::SignalSet::blockProcMask(jlong rawSet, jlong oset) { sigset_t *set = (sigset_t*) rawSet; - sigset_t* old = (sigset_t*) (oset == NULL ? NULL : oset->rawSet); + sigset_t* old = (sigset_t*) oset; errno = 0; - if (::sigprocmask (SIG_BLOCK, set, old) < 0) + if (::sigprocmask(SIG_BLOCK, set, old) < 0) throwErrno (errno, "sigprocmask.SIG_BLOCK"); - return this; } -frysk::sys::SignalSet* -frysk::sys::SignalSet::unblockProcMask (frysk::sys::SignalSet* oset) -{ +void +frysk::sys::SignalSet::unblockProcMask(jlong rawSet, jlong oset) { sigset_t *set = (sigset_t*) rawSet; - sigset_t* old = (sigset_t*) (oset == NULL ? NULL : oset->rawSet); + sigset_t* old = (sigset_t*) oset; errno = 0; if (::sigprocmask (SIG_UNBLOCK, set, old) < 0) throwErrno (errno, "sigprocmask.SIG_UNBLOCK"); - return this; } -frysk::sys::SignalSet* -frysk::sys::SignalSet::setProcMask (frysk::sys::SignalSet* oset) -{ +void +frysk::sys::SignalSet::setProcMask (jlong rawSet, jlong oset) { sigset_t *set = (sigset_t*) rawSet; - sigset_t* old = (sigset_t*) (oset == NULL ? NULL : oset->rawSet); + sigset_t* old = (sigset_t*) oset; errno = 0; if (::sigprocmask (SIG_SETMASK, set, old) < 0) throwErrno (errno, "sigprocmask.SIG_SETMASK"); - return this; } -frysk::sys::SignalSet* -frysk::sys::SignalSet::getProcMask () -{ +void +frysk::sys::SignalSet::getProcMask(jlong rawSet) { sigset_t *set = (sigset_t*) rawSet; errno = 0; if (::sigprocmask (SIG_SETMASK, NULL, set) < 0) throwErrno (errno, "sigprocmask.SIG_SETMASK"); - return this; } hooks/post-receive -- frysk system monitor/debugger