[SCM] master: Replace Task.getSyscallEventInfo() with .getSyscallTable().

cagney@sourceware.org cagney@sourceware.org
Fri Dec 28 01:31:00 GMT 2007


The branch, master has been updated
       via  e68f1caacd4cd7353ae700ca964e3127f6512975 (commit)
       via  372d1faf476e5dcdd31d26bccf8f0cdb8d628aea (commit)
       via  31925084aeeb004fc3626aaea599cd6b91e9c11b (commit)
       via  bd7f62167671d79f56e675342f0e90b99bfbfc2b (commit)
       via  4c882a67462277b14fc0f018b9eb9145444ee345 (commit)
      from  90b3799ab0d02de462524c4d60a66a9b3e51fa0c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit e68f1caacd4cd7353ae700ca964e3127f6512975
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Dec 27 20:29:00 2007 -0500

    Replace Task.getSyscallEventInfo() with .getSyscallTable().
    
    frysk-core/frysk/ftrace/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* Ftrace.java: Update; use Task.getSyscallTable().
    	* MappingGuard.java: Ditto.
    
    frysk-core/frysk/proc/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* Task.java (getSyscallTable()): New.
    	(getSyscallEventInfo()): Delete.
    	* TestTaskSyscallObserver.java: Update.
    	* TestSyscallRunning.java: Update.
    	* TestSyscallSignal.java: Update.
    
    frysk-gui/frysk/gui/monitor/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* observers/SysCallUtilyInfo.java: Update; use
    	Task.getSyscallTable().

commit 372d1faf476e5dcdd31d26bccf8f0cdb8d628aea
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Dec 27 19:03:22 2007 -0500

    Rename SyscallTable.syscallByName(String) to getSyscall(String).
    
    frysk-core/frysk/proc/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* SyscallTable.java (getSyscall(String)): Rename
    	syscallByName(String).
    	* TestTaskSyscallObserver.java: Update.
    	* TestSyscallsWithAudit.java: Update.
    	* TestSyscallSignal.java: Update.
    	* TestSyscallRunning.java: Update.
    	* LinuxPPC32Syscall.java: Update.
    	* LinuxIa32Syscall.java: Update.
    	* LinuxPPC64Syscall.java: Update.
    	* LinuxX8664Syscall.java: Update.

commit 31925084aeeb004fc3626aaea599cd6b91e9c11b
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Dec 27 18:50:36 2007 -0500

    Add SyscallTable.getSyscall(Task).
    
    frysk-core/frysk/proc/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* SyscallTable.java (getSyscall(Task)): Declare.
    	(getSyscall(long)): New.
    	(unknownSyscall(long)): Replace unknownSyscall(int).
    	* LinuxX8664Syscall.java (getSyscall(Task)): New.
    	* LinuxPPC32Syscall.java (getSyscall(Task)): New.
    	* LinuxIa32Syscall.java (getSyscall(Task)): New.
    	* LinuxPPC64Syscall.java (getSyscall(Task)): New.

commit bd7f62167671d79f56e675342f0e90b99bfbfc2b
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Dec 27 18:10:55 2007 -0500

    Delete SyscallEventDecoder.
    
    frysk-core/frysk/proc/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* Isa.java (getSyscallEventInfo()): Declare.
    	* SyscallEventDecoder.java: Delete.
    	* Task.java (getSyscallEventInfo): Update.
    	* LinuxIa32.java: Do not implement SyscallEventDecoder.
    	* LinuxPPC64.java: Ditto.
    	* LinuxPPC32.java: Ditto.
    	* LinuxX8664.java: Ditto.

commit 4c882a67462277b14fc0f018b9eb9145444ee345
Author: Andrew Cagney <cagney@redhat.com>
Date:   Thu Dec 27 18:02:15 2007 -0500

    Replace getUnknownSyscalls() with unknownSyscall(int).
    
    frysk-core/frysk/proc/ChangeLog
    2007-12-27  Andrew Cagney  <cagney@redhat.com>
    
    	* SyscallTable.java (getUnknownSyscalls()): Delete.
    	(unknownSyscall(int)): New.
    	* LinuxIa32Syscall.java (getUnknownSyscalls()): Delete.
    	* LinuxPPC32Syscall.java: Ditto.
    	* LinuxX8664Syscall.java: Ditto.
    	* Syscall.java: Update.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/ftrace/ChangeLog                  |    5 ++
 frysk-core/frysk/ftrace/Ftrace.java                |    2 +-
 frysk-core/frysk/ftrace/MappingGuard.java          |    6 +-
 frysk-core/frysk/proc/ChangeLog                    |   40 +++++++++++++++++
 frysk-core/frysk/proc/Isa.java                     |    2 +
 frysk-core/frysk/proc/LinuxIa32.java               |    2 +-
 frysk-core/frysk/proc/LinuxIa32Syscall.java        |   32 ++++++++++----
 frysk-core/frysk/proc/LinuxPPC32.java              |    2 +-
 frysk-core/frysk/proc/LinuxPPC32Syscall.java       |   26 +++++++----
 frysk-core/frysk/proc/LinuxPPC64.java              |    3 +-
 frysk-core/frysk/proc/LinuxPPC64Syscall.java       |   26 +++++++----
 frysk-core/frysk/proc/LinuxX8664.java              |    2 +-
 frysk-core/frysk/proc/LinuxX8664Syscall.java       |   15 +++----
 frysk-core/frysk/proc/Syscall.java                 |   27 +-----------
 frysk-core/frysk/proc/SyscallEventDecoder.java     |   45 --------------------
 frysk-core/frysk/proc/SyscallTable.java            |   43 ++++++++++++++++++-
 frysk-core/frysk/proc/Task.java                    |   10 +++--
 frysk-core/frysk/proc/TestSyscallRunning.java      |   10 ++--
 frysk-core/frysk/proc/TestSyscallSignal.java       |   16 ++++----
 frysk-core/frysk/proc/TestSyscallsWithAudit.java   |    2 +-
 frysk-core/frysk/proc/TestTaskSyscallObserver.java |   26 ++++++------
 frysk-gui/frysk/gui/monitor/ChangeLog              |    5 ++
 .../gui/monitor/observers/SysCallUtilyInfo.java    |   20 ++++----
 23 files changed, 208 insertions(+), 159 deletions(-)
 delete mode 100644 frysk-core/frysk/proc/SyscallEventDecoder.java

First 500 lines of diff:
diff --git a/frysk-core/frysk/ftrace/ChangeLog b/frysk-core/frysk/ftrace/ChangeLog
index c39f510..a27caee 100644
--- a/frysk-core/frysk/ftrace/ChangeLog
+++ b/frysk-core/frysk/ftrace/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-27  Andrew Cagney  <cagney@redhat.com>
+
+	* Ftrace.java: Update; use Task.getSyscallTable().
+	* MappingGuard.java: Ditto.
+
 2007-12-21  Andrew Cagney  <cagney@redhat.com>
 
 	* Ftrace.java: Use Syscall.isNoReturn().
diff --git a/frysk-core/frysk/ftrace/Ftrace.java b/frysk-core/frysk/ftrace/Ftrace.java
index fee19da..943f497 100644
--- a/frysk-core/frysk/ftrace/Ftrace.java
+++ b/frysk-core/frysk/ftrace/Ftrace.java
@@ -434,7 +434,7 @@ public class Ftrace
 	public Action updateSyscallEnter(Task task)
 	{
 	    frysk.proc.Syscall syscall
-		= task.getSyscallEventInfo().getSyscall(task);
+		= task.getSyscallTable().getSyscall(task);
 	    String name = syscall.getName();
 	    if (syscall.isNoReturn())
 		reporter.eventSingle(task, "syscall " + name,
diff --git a/frysk-core/frysk/ftrace/MappingGuard.java b/frysk-core/frysk/ftrace/MappingGuard.java
index 8236237..adc5516 100644
--- a/frysk-core/frysk/ftrace/MappingGuard.java
+++ b/frysk-core/frysk/ftrace/MappingGuard.java
@@ -289,9 +289,9 @@ class MappingGuard
 	    task.requestAddSyscallObserver(this);
 	}
 
-	public Action updateSyscallEnter (Task task)
-	{
-	    frysk.proc.Syscall syscall = task.getSyscallEventInfo().getSyscall(task);
+	public Action updateSyscallEnter(Task task) {
+	    frysk.proc.Syscall syscall
+		= task.getSyscallTable().getSyscall(task);
 	    syscallCache = syscall;
 	    return Action.CONTINUE;
 	}
diff --git a/frysk-core/frysk/proc/ChangeLog b/frysk-core/frysk/proc/ChangeLog
index c877298..f77d4f8 100644
--- a/frysk-core/frysk/proc/ChangeLog
+++ b/frysk-core/frysk/proc/ChangeLog
@@ -1,5 +1,45 @@
 2007-12-27  Andrew Cagney  <cagney@redhat.com>
 
+	* Task.java (getSyscallTable()): New.
+	(getSyscallEventInfo()): Delete.
+	* TestTaskSyscallObserver.java: Update.
+	* TestSyscallRunning.java: Update.
+	* TestSyscallSignal.java: Update.
+
+	* SyscallTable.java (getSyscall(String)): Rename
+	syscallByName(String).
+	* TestTaskSyscallObserver.java: Update.
+	* TestSyscallsWithAudit.java: Update.
+	* TestSyscallSignal.java: Update.
+	* TestSyscallRunning.java: Update.
+	* LinuxPPC32Syscall.java: Update.
+	* LinuxIa32Syscall.java: Update.
+	* LinuxPPC64Syscall.java: Update.
+	* LinuxX8664Syscall.java: Update.
+
+	* SyscallTable.java (getSyscall(Task)): Declare.
+	(getSyscall(long)): New.
+	(unknownSyscall(long)): Replace unknownSyscall(int).
+	* LinuxX8664Syscall.java (getSyscall(Task)): New.
+	* LinuxPPC32Syscall.java (getSyscall(Task)): New.
+	* LinuxIa32Syscall.java (getSyscall(Task)): New.
+	* LinuxPPC64Syscall.java (getSyscall(Task)): New.
+
+	* Isa.java (getSyscallEventInfo()): Declare.
+	* SyscallEventDecoder.java: Delete.
+	* Task.java (getSyscallEventInfo): Update.
+	* LinuxIa32.java: Do not implement SyscallEventDecoder.
+	* LinuxPPC64.java: Ditto.
+	* LinuxPPC32.java: Ditto.
+	* LinuxX8664.java: Ditto.
+
+	* SyscallTable.java (getUnknownSyscalls()): Delete.
+	(unknownSyscall(int)): New.
+	* LinuxIa32Syscall.java (getUnknownSyscalls()): Delete.
+	* LinuxPPC32Syscall.java: Ditto.
+	* LinuxX8664Syscall.java: Ditto.
+	* Syscall.java: Update.
+
 	* Syscall.java (INVALID): New.
 	* SyscallEventInfo.java (number(Task)): Delete.
 	(ENTER, EXIT, UNKNOWN): Delete.
diff --git a/frysk-core/frysk/proc/Isa.java b/frysk-core/frysk/proc/Isa.java
index 814a4bf..a22f9f9 100644
--- a/frysk-core/frysk/proc/Isa.java
+++ b/frysk-core/frysk/proc/Isa.java
@@ -117,4 +117,6 @@ public interface Isa
    * the sig return system call.
    */
   boolean isAtSyscallSigReturn(Task task);
+
+    SyscallEventInfo getSyscallEventInfo ();
 }
diff --git a/frysk-core/frysk/proc/LinuxIa32.java b/frysk-core/frysk/proc/LinuxIa32.java
index 695b3db..c069c10 100644
--- a/frysk-core/frysk/proc/LinuxIa32.java
+++ b/frysk-core/frysk/proc/LinuxIa32.java
@@ -44,7 +44,7 @@ import inua.eio.ByteBuffer;
 import java.util.List;
 import java.util.LinkedList;
 
-class LinuxIa32 implements SyscallEventDecoder, Isa {
+class LinuxIa32 implements Isa {
 
     private static final Instruction IA32Breakpoint
 	= new Instruction(new byte[] { (byte)0xcc }, false);
diff --git a/frysk-core/frysk/proc/LinuxIa32Syscall.java b/frysk-core/frysk/proc/LinuxIa32Syscall.java
index 121eb00..b0087e3 100644
--- a/frysk-core/frysk/proc/LinuxIa32Syscall.java
+++ b/frysk-core/frysk/proc/LinuxIa32Syscall.java
@@ -39,20 +39,12 @@
 
 package frysk.proc;
 
-import java.util.HashMap;
 import frysk.isa.IA32Registers;
 
 public class LinuxIa32Syscall extends SyscallTable {
     static final int SOCKET_NUM = 102;
     static final int IPC_NUM = 117;
 
-    // This is used to keep track of syscalls whose number we do not
-    // know.
-    static HashMap unknownSyscalls = new HashMap();
-    public HashMap getUnknownSyscalls() {
-	return unknownSyscalls;
-    }
-
     static class Ia32Syscall extends Syscall {
 	Ia32Syscall(String name, int number, int numArgs, 
 		    String argList, boolean noreturn) {
@@ -538,7 +530,29 @@ public class LinuxIa32Syscall extends SyscallTable {
 	}
     }
 
-    public Syscall syscallByName(String name) {
+    public Syscall getSyscall(Task task) {
+	long number = task.getRegister(IA32Registers.ORIG_EAX);
+	if (number != SOCKET_NUM && number != IPC_NUM)
+	    return getSyscall(number);
+	else {
+	    /** sub syscall number is in %ebx.  */
+	    int subSyscallNumber = (int) task.getRegister(IA32Registers.EBX);
+	
+	    if (number == SOCKET_NUM) {
+		if (subSyscallNumber < socketSubcallList.length)
+		    return socketSubcallList[subSyscallNumber];
+		else
+		    return unknownSocketSubSyscall;
+	    } else {
+		if (subSyscallNumber < ipcSubcallList.length)
+		    return ipcSubcallList[subSyscallNumber];
+		else
+		    return unknownIpcSubSyscall;
+	    }
+	}
+    }
+
+    public Syscall getSyscall(String name) {
 	Syscall syscall;
 	syscall = iterateSyscallByName(name, LinuxIa32Syscall.syscallList);
 	if (syscall != null)
diff --git a/frysk-core/frysk/proc/LinuxPPC32.java b/frysk-core/frysk/proc/LinuxPPC32.java
index 83f6836..212c8e7 100644
--- a/frysk-core/frysk/proc/LinuxPPC32.java
+++ b/frysk-core/frysk/proc/LinuxPPC32.java
@@ -45,7 +45,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import frysk.isa.PPC32Registers;
 
-class LinuxPPC32 extends IsaPowerPC implements SyscallEventDecoder {
+class LinuxPPC32 extends IsaPowerPC {
 
     LinuxPPC32() {
 	//In Power32 the PC will be in Link Register
diff --git a/frysk-core/frysk/proc/LinuxPPC32Syscall.java b/frysk-core/frysk/proc/LinuxPPC32Syscall.java
index c467326..81610eb 100644
--- a/frysk-core/frysk/proc/LinuxPPC32Syscall.java
+++ b/frysk-core/frysk/proc/LinuxPPC32Syscall.java
@@ -40,7 +40,6 @@
 
 package frysk.proc;
 
-import java.util.HashMap;
 import frysk.isa.PPC32Registers;
 
 /**
@@ -53,13 +52,6 @@ public class LinuxPPC32Syscall extends SyscallTable {
     private static final int SOCKET_NUM = 102;
     private static final int IPC_NUM = 117;
 
-    // This is used to keep track of syscalls whose number we do not
-    // know.
-    static final HashMap unknownSyscalls = new HashMap();
-    public HashMap getUnknownSyscalls() {
-	return unknownSyscalls;
-    }
-
     static private class PowerPCSyscall extends Syscall {
 	PowerPCSyscall(String name, int number, int numArgs, 
 		       String argList, boolean noreturn) {
@@ -526,7 +518,7 @@ public class LinuxPPC32Syscall extends SyscallTable {
 	}
     }
 
-    public Syscall syscallByName(String name) {
+    public Syscall getSyscall(String name) {
 	Syscall syscall;
 	syscall = iterateSyscallByName(name, LinuxPPC32Syscall.syscallList);
 	if (syscall != null)
@@ -540,4 +532,20 @@ public class LinuxPPC32Syscall extends SyscallTable {
 	return null;
     }
 
+    public Syscall getSyscall(Task task) {
+	long number = task.getRegister(PPC32Registers.GPR0);
+	if (number != SOCKET_NUM && number != IPC_NUM)
+	    return getSyscall(number);
+	else {
+	    /** sub syscall number is in .  */
+	    int subSyscallNumber = 0;
+	    subSyscallNumber = (int) task.getRegister(PPC32Registers.ORIGR3);
+	    if (number == SOCKET_NUM) {
+		return socketSubcallList[subSyscallNumber];
+	    } else {
+		return ipcSubcallList[subSyscallNumber];
+	    }
+	}
+    }
+
 }
diff --git a/frysk-core/frysk/proc/LinuxPPC64.java b/frysk-core/frysk/proc/LinuxPPC64.java
index e793660..f082ea6 100644
--- a/frysk-core/frysk/proc/LinuxPPC64.java
+++ b/frysk-core/frysk/proc/LinuxPPC64.java
@@ -44,8 +44,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import frysk.isa.PPC64Registers;
 
-class LinuxPPC64 extends IsaPowerPC implements SyscallEventDecoder
-{
+class LinuxPPC64 extends IsaPowerPC {
     LinuxPPC64() {
 	super(PPC64Registers.NIP);
     }
diff --git a/frysk-core/frysk/proc/LinuxPPC64Syscall.java b/frysk-core/frysk/proc/LinuxPPC64Syscall.java
index f9507c1..76072c8 100644
--- a/frysk-core/frysk/proc/LinuxPPC64Syscall.java
+++ b/frysk-core/frysk/proc/LinuxPPC64Syscall.java
@@ -40,7 +40,6 @@
 
 package frysk.proc;
 
-import java.util.HashMap;
 import frysk.isa.PPC64Registers;
 
 /**
@@ -53,13 +52,6 @@ public class LinuxPPC64Syscall extends SyscallTable {
     private static final int SOCKET_NUM = 102;
     private static final int IPC_NUM = 117;
 
-    // This is used to keep track of syscalls whose number we do not
-    // know.
-    static final HashMap unknownSyscalls = new HashMap();
-    public HashMap getUnknownSyscalls() {
-	return unknownSyscalls;
-    }
-
     static private class PowerPCSyscall 
 	extends Syscall
     {
@@ -532,7 +524,7 @@ public class LinuxPPC64Syscall extends SyscallTable {
 	}
     }
 
-    public Syscall syscallByName(String name) {
+    public Syscall getSyscall(String name) {
 	Syscall syscall;
 	syscall = iterateSyscallByName(name, LinuxPPC64Syscall.syscallList);
 	if (syscall != null)
@@ -546,4 +538,20 @@ public class LinuxPPC64Syscall extends SyscallTable {
 	return null;
     }
 
+    public Syscall getSyscall(Task task) {
+	long number = task.getRegister(PPC64Registers.GPR0);
+	if (number != SOCKET_NUM && number != IPC_NUM)
+	    return getSyscall(number);
+	else {
+	    /** sub syscall number is in .  */
+	    int subSyscallNumber = 0;
+	    subSyscallNumber = (int) task.getRegister(PPC64Registers.ORIGR3);
+	    if (number == SOCKET_NUM) {
+		return socketSubcallList[subSyscallNumber];
+	    } else {
+		return ipcSubcallList[subSyscallNumber];
+	    }
+	}
+    }
+
 }
diff --git a/frysk-core/frysk/proc/LinuxX8664.java b/frysk-core/frysk/proc/LinuxX8664.java
index 7bd8ff8..8ab5030 100644
--- a/frysk-core/frysk/proc/LinuxX8664.java
+++ b/frysk-core/frysk/proc/LinuxX8664.java
@@ -45,7 +45,7 @@ import java.util.List;
 import inua.eio.ByteBuffer;
 import frysk.isa.X8664Registers;
 
-class LinuxX8664 implements SyscallEventDecoder, Isa {
+class LinuxX8664 implements Isa {
     private static final Instruction X8664Breakpoint
 	= new Instruction(new byte[] { (byte)0xcc }, false);
   
diff --git a/frysk-core/frysk/proc/LinuxX8664Syscall.java b/frysk-core/frysk/proc/LinuxX8664Syscall.java
index 3f8e825..17039d0 100644
--- a/frysk-core/frysk/proc/LinuxX8664Syscall.java
+++ b/frysk-core/frysk/proc/LinuxX8664Syscall.java
@@ -39,18 +39,10 @@
 
 package frysk.proc;
 
-import java.util.HashMap;
 import frysk.isa.X8664Registers;
 
 public class LinuxX8664Syscall extends SyscallTable {
 
-    // This is used to keep track of syscalls whose number we do not
-    // know.
-    static HashMap unknownSyscalls = new HashMap();
-    public HashMap getUnknownSyscalls() {
-	return unknownSyscalls;
-    }
-
     static class X8664Syscall extends Syscall {
 	X8664Syscall(String name, int number, int numArgs, 
 		     String argList, boolean noreturn) {
@@ -388,7 +380,12 @@ public class LinuxX8664Syscall extends SyscallTable {
 	return Syscall.syscallByNum(number, task);
     }
 
-    public Syscall syscallByName (String name) {
+    public Syscall getSyscall(String name) {
 	return iterateSyscallByName(name, LinuxX8664Syscall.syscallList);
     }
+
+    public Syscall getSyscall(Task task) {
+	long number = task.getRegister(X8664Registers.ORIG_RAX);
+	return getSyscall(number);
+    }
 }
diff --git a/frysk-core/frysk/proc/Syscall.java b/frysk-core/frysk/proc/Syscall.java
index ac012da..902e721 100644
--- a/frysk-core/frysk/proc/Syscall.java
+++ b/frysk-core/frysk/proc/Syscall.java
@@ -40,7 +40,6 @@
 package frysk.proc;
 
 import inua.util.PrintWriter;
-import java.util.HashMap;
 
 /**
  * A class that holds static information about a system call.  It is
@@ -258,39 +257,15 @@ public abstract class Syscall {
      */
     public static Syscall syscallByNum(int num, Task task) {
 	Syscall[] syscallList;
-	HashMap unknownSyscalls;
 
 	SyscallTable syscallTable
 	    = SyscallTableFactory.getSyscallTable(task.getISA());
 	syscallList = syscallTable.getSyscallList();
-	unknownSyscalls = syscallTable.getUnknownSyscalls();
 
 	if (num < 0) {
 	    return INVALID;
 	} else if (num >= syscallList.length) {
-	    synchronized (unknownSyscalls) {
-		Integer key = new Integer(num);
-		if (unknownSyscalls.containsKey(key))
-		    return (Syscall) unknownSyscalls.get(key);
-	    
-		class UnknownSyscall extends Syscall {
-		    UnknownSyscall (String name, int number) {
-			super (name, number);
-		    }
-	      
-		    public long getArguments (Task task, int n) {
-			return 0;
-		    }
-		    public long getReturnCode (Task task) {
-			return 0;
-		    }
-		}
-		Syscall result = new UnknownSyscall("UNKNOWN SYSCALL " + num, num);
-
-		unknownSyscalls.put(key, result);
-	    
-		return result;
-	    }
+	    return syscallTable.unknownSyscall(num);
 	} else {
 	    return syscallList[num];
 	}
diff --git a/frysk-core/frysk/proc/SyscallEventDecoder.java b/frysk-core/frysk/proc/SyscallEventDecoder.java
deleted file mode 100644
index 0edfad8..0000000
--- a/frysk-core/frysk/proc/SyscallEventDecoder.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// This file is part of the program FRYSK.
-//
-// Copyright 2006, Red Hat Inc.
-//
-// FRYSK is free software; you can redistribute it and/or modify it
-// under the terms of the GNU General Public License as published by
-// the Free Software Foundation; version 2 of the License.
-//
-// FRYSK is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with FRYSK; if not, write to the Free Software Foundation,
-// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-// 
-// In addition, as a special exception, Red Hat, Inc. gives You the
-// additional right to link the code of FRYSK with code not covered
-// under the GNU General Public License ("Non-GPL Code") and to
-// distribute linked combinations including the two, subject to the
-// limitations in this paragraph. Non-GPL Code permitted under this
-// exception must only link to the code of FRYSK through those well
-// defined interfaces identified in the file named EXCEPTION found in
-// the source code files (the "Approved Interfaces"). The files of
-// Non-GPL Code may instantiate templates or use macros or inline
-// functions from the Approved Interfaces without causing the
-// resulting work to be covered by the GNU General Public
-// License. Only Red Hat, Inc. may make changes or additions to the
-// list of Approved Interfaces. You must obey the GNU General Public
-// License in all respects for all of the FRYSK code and other code
-// used in conjunction with FRYSK except the Non-GPL Code covered by
-// this exception. If you modify this file, you may extend this
-// exception to your version of the file, but you are not obligated to
-// do so. If you do not wish to provide this exception without
-// modification, you must delete this exception statement from your
-// version and license this file solely under the GPL without
-// exception.
-
-package frysk.proc;
-
-interface SyscallEventDecoder
-{
-    SyscallEventInfo getSyscallEventInfo ();
-}
diff --git a/frysk-core/frysk/proc/SyscallTable.java b/frysk-core/frysk/proc/SyscallTable.java
index 245fb42..51c70a3 100644
--- a/frysk-core/frysk/proc/SyscallTable.java
+++ b/frysk-core/frysk/proc/SyscallTable.java
@@ -55,13 +55,31 @@ public abstract class SyscallTable {
     /**
      * @return HashMap return a HashMap for unknown system calls.
      */
-    public abstract HashMap getUnknownSyscalls ();
+    public Syscall unknownSyscall(long num) {
+	synchronized (unknownSyscalls) {
+	    Long key = new Long(num);
+	    Syscall syscall = (Syscall)unknownSyscalls.get(key);
+	    if (syscall == null) {
+		syscall = new Syscall("UNKNOWN SYSCALL " + num, (int)num) {
+			public long getArguments (Task task, int n) {
+			    return 0;
+			}
+			public long getReturnCode (Task task) {
+			    return 0;
+			}
+		    };
+		unknownSyscalls.put(key, syscall);
+	    }
+	    return syscall;
+	}
+    }
+    private HashMap unknownSyscalls = new HashMap();
 
     /**
      * @return Syscall return system call object if the name could be 
      * found in syscallList, otherwise return null.
      */
-    public abstract Syscall syscallByName (String Name);


hooks/post-receive
--
frysk system monitor/debugger



More information about the Frysk-cvs mailing list