From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22012 invoked by alias); 28 Dec 2007 01:31:01 -0000 Received: (qmail 21983 invoked by uid 367); 28 Dec 2007 01:31:00 -0000 Date: Fri, 28 Dec 2007 01:31:00 -0000 Message-ID: <20071228013059.21968.qmail@sourceware.org> From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Replace Task.getSyscallEventInfo() with .getSyscallTable(). X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 90b3799ab0d02de462524c4d60a66a9b3e51fa0c X-Git-Newrev: e68f1caacd4cd7353ae700ca964e3127f6512975 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: 2007-q4/txt/msg00630.txt.bz2 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 Date: Thu Dec 27 20:29:00 2007 -0500 Replace Task.getSyscallEventInfo() with .getSyscallTable(). frysk-core/frysk/ftrace/ChangeLog 2007-12-27 Andrew Cagney * Ftrace.java: Update; use Task.getSyscallTable(). * MappingGuard.java: Ditto. frysk-core/frysk/proc/ChangeLog 2007-12-27 Andrew Cagney * 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 * observers/SysCallUtilyInfo.java: Update; use Task.getSyscallTable(). commit 372d1faf476e5dcdd31d26bccf8f0cdb8d628aea Author: Andrew Cagney 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 * 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 Date: Thu Dec 27 18:50:36 2007 -0500 Add SyscallTable.getSyscall(Task). frysk-core/frysk/proc/ChangeLog 2007-12-27 Andrew Cagney * 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 Date: Thu Dec 27 18:10:55 2007 -0500 Delete SyscallEventDecoder. frysk-core/frysk/proc/ChangeLog 2007-12-27 Andrew Cagney * 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 Date: Thu Dec 27 18:02:15 2007 -0500 Replace getUnknownSyscalls() with unknownSyscall(int). frysk-core/frysk/proc/ChangeLog 2007-12-27 Andrew Cagney * 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 + + * Ftrace.java: Update; use Task.getSyscallTable(). + * MappingGuard.java: Ditto. + 2007-12-21 Andrew Cagney * 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 + * 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