From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23988 invoked by alias); 21 Jan 2008 22:57:04 -0000 Received: (qmail 23953 invoked by uid 367); 21 Jan 2008 22:56:57 -0000 Date: Mon, 21 Jan 2008 22:57:00 -0000 Message-ID: <20080121225657.23938.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Generate frysk.sys.Signal (and the corresponding Signal.cxx). X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 0b4b96242bb2a9e635adb03a77145e40acf119b5 X-Git-Newrev: 01e4144f085eb072e2210b4a5cb6a0e8c8d12fd6 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-q1/txt/msg00096.txt.bz2 The branch, master has been updated via 01e4144f085eb072e2210b4a5cb6a0e8c8d12fd6 (commit) from 0b4b96242bb2a9e635adb03a77145e40acf119b5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 01e4144f085eb072e2210b4a5cb6a0e8c8d12fd6 Author: Andrew Cagney Date: Mon Jan 21 17:55:23 2008 -0500 Generate frysk.sys.Signal (and the corresponding Signal.cxx). frysk-common/ChangeLog 2008-01-21 Andrew Cagney * Makefile.rules (SUFFIXES): Fix typos. cxx-sh to .cxx-sh, ..c-in to .c-in, ..java-in to .java-in. frysk-sys/frysk/sys/ChangeLog 2008-01-21 Andrew Cagney * TestSignal.java: New file. * cni/Signal.cxx: Replace this with ... * cni/Signal.cxx-sh (frysk): ... this. New file. * Signal.java: Replace this with ... * Signal.java-sh: ... this. New file. * ProcessIdentifier.java (intValue()): New. ----------------------------------------------------------------------- Summary of changes: frysk-common/ChangeLog | 5 + frysk-common/Makefile.rules | 8 +- frysk-sys/frysk/sys/ChangeLog | 9 + frysk-sys/frysk/sys/ProcessIdentifier.java | 6 +- .../frysk/sys/{Signal.java => Signal.java-sh} | 204 ++++++++++---------- .../frysk/sys/TestSignal.java | 31 ++- .../frysk/sys/cni/{Signal.cxx => Signal.cxx-sh} | 54 +++--- 7 files changed, 175 insertions(+), 142 deletions(-) rename frysk-sys/frysk/sys/{Signal.java => Signal.java-sh} (50%) copy frysk-core/frysk/testbed/TestStatState.java => frysk-sys/frysk/sys/TestSignal.java (80%) rename frysk-sys/frysk/sys/cni/{Signal.cxx => Signal.cxx-sh} (85%) First 500 lines of diff: diff --git a/frysk-common/ChangeLog b/frysk-common/ChangeLog index acce967..81f910b 100644 --- a/frysk-common/ChangeLog +++ b/frysk-common/ChangeLog @@ -1,3 +1,8 @@ +2008-01-21 Andrew Cagney + + * Makefile.rules (SUFFIXES): Fix typos. cxx-sh to .cxx-sh, ..c-in + to .c-in, ..java-in to .java-in. + 2008-01-17 Andrew Cagney * Makefile.rules (.jar): Sort the .class file list. diff --git a/frysk-common/Makefile.rules b/frysk-common/Makefile.rules index 2087b81..13d8310 100644 --- a/frysk-common/Makefile.rules +++ b/frysk-common/Makefile.rules @@ -231,7 +231,7 @@ SUFFIXES += .java-sh $(SHELL) $< > $*.tmp $@ chmod a-w $*.tmp mv -f $*.tmp $@ -SUFFIXES += cxx-sh +SUFFIXES += .cxx-sh .cxx-sh.cxx: rm -f $*.tmp mkdir -p `dirname $*` @@ -239,7 +239,7 @@ SUFFIXES += cxx-sh $(SHELL) $< > $*.tmp $@ chmod a-w $*.tmp mv -f $*.tmp $@ -SUFFIXES += ..c-sh +SUFFIXES += .c-sh .c-sh.c: rm -f $*.tmp mkdir -p `dirname $*` @@ -305,13 +305,13 @@ SUBST = \ chmod a-w $@.tmp ; \ mv -f $@.tmp $@ -SUFFIXES += ..java-in +SUFFIXES += .java-in .java-in.java: $(SUBST) SUFFIXES += .cxx-in .cxx-in.cxx: $(SUBST) -SUFFIXES += ..c-in +SUFFIXES += .c-in .c-in.c: $(SUBST) TestRunner.java: common/TestRunner.java-in diff --git a/frysk-sys/frysk/sys/ChangeLog b/frysk-sys/frysk/sys/ChangeLog index 53c85c1..8275d0a 100644 --- a/frysk-sys/frysk/sys/ChangeLog +++ b/frysk-sys/frysk/sys/ChangeLog @@ -1,3 +1,12 @@ +2008-01-21 Andrew Cagney + + * TestSignal.java: New file. + * cni/Signal.cxx: Replace this with ... + * cni/Signal.cxx-sh (frysk): ... this. New file. + * Signal.java: Replace this with ... + * Signal.java-sh: ... this. New file. + * ProcessIdentifier.java (intValue()): New. + 2008-01-17 Andrew Cagney * Signal.java (tkill(int,int)): Make public. diff --git a/frysk-sys/frysk/sys/ProcessIdentifier.java b/frysk-sys/frysk/sys/ProcessIdentifier.java index 2f0489f..b7cc1df 100644 --- a/frysk-sys/frysk/sys/ProcessIdentifier.java +++ b/frysk-sys/frysk/sys/ProcessIdentifier.java @@ -50,10 +50,12 @@ public class ProcessIdentifier { this.pid = pid; } - public int hashCode () - { + public int hashCode () { return pid; } + public int intValue() { + return pid; + } public int compareTo (Object o) { return ((ProcessIdentifier)o).pid - this.pid; diff --git a/frysk-sys/frysk/sys/Signal.java b/frysk-sys/frysk/sys/Signal.java-sh similarity index 50% rename from frysk-sys/frysk/sys/Signal.java rename to frysk-sys/frysk/sys/Signal.java-sh index f45e755..b1f337a 100644 --- a/frysk-sys/frysk/sys/Signal.java +++ b/frysk-sys/frysk/sys/Signal.java-sh @@ -1,6 +1,8 @@ +#!/bin/sh +cat <"); + } + int signum; + public int hashCode() { + return signum; + } + } + private static final ScratchSignal scratchSignal = new ScratchSignal(); + /** + * A map for looking up known signals; weak so that scratch + * signals do not accumulate. + */ + private static final Map signals = new WeakHashMap(); + /** + * Given an integer, return (or create) the corresponding signal. + */ public static Signal valueOf(int signum) { if (signum < 0) throw new NullPointerException("invalid signal: " + signum); - if (ALRM.equals(signum)) return ALRM; - if (BUS.equals(signum)) return BUS; - if (CONT.equals(signum)) return CONT; - if (CHLD.equals(signum)) return CHLD; - if (FPE.equals(signum)) return FPE; - if (HUP.equals(signum)) return HUP; - if (ILL.equals(signum)) return ILL; - if (INT.equals(signum)) return INT; - if (IO.equals(signum)) return IO; - if (KILL.equals(signum)) return KILL; - if (NONE.equals(signum)) return NONE; - if (PROF.equals(signum)) return PROF; - if (PWR.equals(signum)) return PWR; - if (SEGV.equals(signum)) return SEGV; - if (STOP.equals(signum)) return STOP; - if (TERM.equals(signum)) return TERM; - if (TRAP.equals(signum)) return TRAP; - if (USR1.equals(signum)) return USR1; - if (USR2.equals(signum)) return USR2; - if (URG.equals(signum)) return URG; - if (WINCH.equals(signum)) return WINCH; - return new Signal(signum, "???"); + synchronized (scratchSignal) { + scratchSignal.signum = signum; + Signal signal = (Signal)signals.get(scratchSignal); + if (signal == null) + return signalFactory(signum, "SIG" + signum); + else + return signal; + } } + + /** + * Create a signal, also enter the signal into the signals table + * for later retrieval. + */ + private static Signal signalFactory(int sig, String name) { + if (sig >= 0) { + Signal signal = new Signal(sig, name); + signals.put(signal, signal); + return signal; + } else + return null; // Return a known value? + } + + public static final Signal NONE = signalFactory(0, "SIGNONE"); +EOF + +for sig in \ + hup int_ quit ill abrt fpe kill segv pipe alrm term usr1 usr2 chld cont stop tstp ttin ttou \ + bus poll prof sys trap urg vtalrm xcpu xfsz \ + iot emt stkflt io cld pwr info lost winch unused +do + SIG=`echo "${sig}" | tr '[a-z]' '[A-Z]' | sed 's/_$//'` + echo " private static native int ${sig}();" + echo " public static final Signal ${SIG} = signalFactory(${sig}(), \"SIG${SIG}\");" +done + +cat </proc/$$/stat. + * Test the value of some well known signals; for each confirm that + * they are singleton's. */ -public class TestStatState extends TestLib { - public void testSleeping() { - Offspring daemon = SlaveOffspring.createDaemon(); - daemon.assertIs(StatState.SLEEPING); +public class TestSignal extends TestCase { + + private void check(int val, Signal sig) { + assertEquals("value", val, sig.intValue()); + assertSame("identity", sig, Signal.valueOf(val)); + } + + public void testNone() { + check(0, Signal.NONE); } - public void testRunToSleeping() { - Offspring daemon = SlaveOffspring.createDaemon(); - daemon.assertRunUntil(StatState.SLEEPING); + + public void testKill() { + check(9, Signal.KILL); + } + + public void testTerm() { + check(15, Signal.TERM); } + } diff --git a/frysk-sys/frysk/sys/cni/Signal.cxx b/frysk-sys/frysk/sys/cni/Signal.cxx-sh similarity index 85% rename from frysk-sys/frysk/sys/cni/Signal.cxx rename to frysk-sys/frysk/sys/cni/Signal.cxx-sh index 4899ddc..3b44859 100644 --- a/frysk-sys/frysk/sys/cni/Signal.cxx +++ b/frysk-sys/frysk/sys/cni/Signal.cxx-sh @@ -1,6 +1,8 @@ +#!/bin/sh +cat < #include @@ -50,33 +55,6 @@ #include #include -#define SIGVAL(sig, SIG) \ - jint \ - frysk::sys::Signal::sig() { \ - return (jint)(SIG); \ - } -SIGVAL(alrm,SIGALRM) -SIGVAL(bus,SIGBUS) -SIGVAL(chld,SIGCHLD) -SIGVAL(cont,SIGCONT) -SIGVAL(fpe,SIGFPE) -SIGVAL(hup,SIGHUP) -SIGVAL(ill,SIGILL) -SIGVAL(int_,SIGINT) -SIGVAL(io,SIGIO) -SIGVAL(kill,SIGKILL) -SIGVAL(none,0) -SIGVAL(prof,SIGPROF) -SIGVAL(pwr,SIGPWR) -SIGVAL(segv,SIGSEGV) -SIGVAL(stop,SIGSTOP) -SIGVAL(term,SIGTERM) -SIGVAL(trap,SIGTRAP) -SIGVAL(usr1,SIGUSR1) -SIGVAL(usr2,SIGUSR2) -SIGVAL(urg,SIGURG) -SIGVAL(winch,SIGWINCH) - void frysk::sys::Signal::tkill(jint tid, jint signum) { errno = 0; @@ -110,3 +88,23 @@ frysk::sys::Signal::drain (jint signum) { // printf ("After: %d (%s) pending? %s\n", signum, strsignal (signum), // sigismember (&set, signum) ? "YES" : "NO"); } + +EOF + +for sig in \ + hup int_ quit ill abrt fpe kill segv pipe alrm term usr1 usr2 chld cont stop tstp ttin ttou \ + bus poll prof sys trap urg vtalrm xcpu xfsz \ + iot emt stkflt io cld pwr info lost winch unused +do + SIG=SIG`echo "${sig}" | tr '[a-z]' '[A-Z]' | sed 's/_$//'` + cat <