This is the mail archive of the
frysk@sources.redhat.com
mailing list for the frysk project.
Replacing sys.SyscallNum with proc.Syscall in TestSyscallSignal
- From: Mark Wielaard <mark at klomp dot org>
- To: frysk at sourceware dot org
- Date: Tue, 26 Sep 2006 12:21:09 +0200
- Subject: 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++;
}