This is the mail archive of the frysk@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Replacing sys.SyscallNum with proc.Syscall in TestSyscallSignal


Hi,

Tim was testing out x86_64 "32on64" tracing and found an issue with
TestSyscallSignal since this is using SyscallNum for finding the system
call numbers. Since SyscallNum uses hardcoded numbers for the
architecture it was build on that fails for things like "32on64". This
patch makes sure the test uses Syscall and looks up the syscalls by
name. We should probably deprecate and remove SyscallNum everywhere.

2006-09-26  Mark Wielaard  <mark@klomp.org>

    * TestSyscallSignal.java: Replace usage of sys.SyscallNum
    with proc.Syscall.

Committed,

Mark
Index: frysk-core/frysk/proc/TestSyscallSignal.java
===================================================================
RCS file: /cvs/frysk/frysk-core/frysk/proc/TestSyscallSignal.java,v
retrieving revision 1.1
diff -u -r1.1 TestSyscallSignal.java
--- frysk-core/frysk/proc/TestSyscallSignal.java	7 Sep 2006 11:01:47 -0000	1.1
+++ frysk-core/frysk/proc/TestSyscallSignal.java	26 Sep 2006 09:23:47 -0000
@@ -43,7 +43,6 @@
 
 import frysk.sys.Sig;
 import frysk.sys.Signal;
-import frysk.sys.SyscallNum;
 
 public class TestSyscallSignal
   extends TestLib
@@ -130,7 +129,7 @@
 
     final SignalObserver sigo = new SignalObserver(Sig.HUP_);
     task.requestAddSignaledObserver(sigo);
-    final SyscallObserver syso = new SyscallObserver(42);
+    final SyscallObserver syso = new SyscallObserver(42, task);
     task.requestAddSyscallObserver(syso);
 
     // Make sure the observers are properly installed.
@@ -294,17 +293,21 @@
     private boolean added;
     private boolean removed;
 
-    SyscallObserver(int stophits)
+    private final frysk.proc.Syscall opensys;
+    private final frysk.proc.Syscall closesys;
+
+    SyscallObserver(int stophits, Task task)
     {
       this.stophits = stophits;
+      this.opensys = frysk.proc.Syscall.syscallByName("open", task);
+      this.closesys = frysk.proc.Syscall.syscallByName("close", task);
     }
 
     public Action updateSyscallEnter(Task task)
     {
       SyscallEventInfo syscallEventInfo = getSyscallEventInfo(task);
-      int syscallNum = syscallEventInfo.number (task);
-      if (syscallNum == SyscallNum.SYSopen
-	  || syscallNum == SyscallNum.SYSclose)
+      frysk.proc.Syscall syscall = syscallEventInfo.getSyscall(task);
+      if (opensys.equals(syscall) || closesys.equals(syscall))
 	{
 	  entered++;
 	  if (entered == stophits)
@@ -322,9 +325,11 @@
     public Action updateSyscallExit(Task task)
     {
       SyscallEventInfo syscallEventInfo = getSyscallEventInfo(task);
-      int syscallNum = syscallEventInfo.number (task);
-      if (syscallNum == SyscallNum.SYSopen
-	  || syscallNum == SyscallNum.SYSclose)
+      // XXX - workaround for broken syscall detection on exit
+      if (syscallEventInfo.number(task) == -1)
+	return Action.CONTINUE;
+      frysk.proc.Syscall syscall = syscallEventInfo.getSyscall(task);
+      if (opensys.equals(syscall) || closesys.equals(syscall))
 	{
 	  exited++;
 	}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]