Summary: | Error with testSyscallInterrupt on ppc64: Read exit before enter exception | ||
---|---|---|---|
Product: | frysk | Reporter: | Wu Zhou <woodzltc> |
Component: | general | Assignee: | Yao Qi <qiyaoltc> |
Status: | WAITING --- | ||
Severity: | normal | CC: | qiyaoltc, zhengyzy |
Priority: | P2 | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Host: | ppc64-redhat-linux | Target: | ppc64-redhat-linux |
Build: | ppc64-redhat-linux | Last reconfirmed: | |
Bug Depends on: | |||
Bug Blocks: | 2188 |
Description
Wu Zhou
2006-08-08 04:08:29 UTC
In the frysk core log, we find that readExit is hit two times, but readEnter is hit only one time. Any hints about this kind of exception? We are investigating the source code right now. Any quick hints are highly appreciated. Here is the relevant FINE log: {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} handleSyscalledEvent {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} sendrecIsa frysk.proc.IsaFactory@41652d0 getIsa Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} notifySyscallEnter 3 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 frysk.proc.TestTaskSyscallObserver$TestSyscallInterruptInternals$SyscallInterruptObserver@4fb4a30 updateSyscallEnter READ +---------------------+ {frysk.proc.TestTaskSyscallObserver$TestSyscallInterruptInternals$PausedReadTimerEvent@4edce90,timeMillis=1155022869997,periodMillis=0} new long {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} handleSyscalledEvent Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} notifySyscallExit 3 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 frysk.proc.TestTaskSyscallObserver$TestSyscallInterruptInternals$SyscallInterruptObserver@4fb4a30 updateSyscallExit READ +---------------------+ {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0xa7f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} stopped {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} handleSignaledEvent {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} notifySignaled(int) {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} handleSyscalledEvent Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} notifySyscallEnter 208 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} handleSyscalledEvent Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} notifySyscallExit 208 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} handleSyscalledEvent Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} notifySyscallEnter 172 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=syscallRunning} sendSyscallContinue {frysk.proc.LinuxHost$PollWaitOnSigChld@4d8d260,sig=Sig_CHLD} execute frysk.sys.Wait pid 15940 status 0x857f frysk.sys.Wait pid 0 errno 0 {TaskId,15940} syscallEvent {frysk.proc.LinuxHost@4d90760,state=running} get TaskId {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} handleSyscalledEvent Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 {frysk.proc.LinuxTask@4efdbc0,pid=15940,tid=15940,state=runningInSyscall} notifySyscallExit 3 Get GPR0 frysk.proc.IsaPPC64$PPC64Register@417d820 frysk.proc.TestTaskSyscallObserver$TestSyscallInterruptInternals$SyscallInterruptObserver@4fb4a30 updateSyscallExit READ +---------------------+ testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) >>>>>>>>>>>>>>>> start tearDown testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) kill -KILL 15940 testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) kill -CONT 15940 testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) detach -KILL 15940 frysk.sys.Wait pid -1 errno 10 testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) >>>>>>>>>>>>>>>> end tearDown testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) --- addError ---- ERROR: java.lang.RuntimeException: Read exit before enter testSyscallInterrupt(frysk.proc.TestTaskSyscallObserver) ---- endTest ---- On X86, the sequence of these syscalls in funit-syscallint is, read tkill sig_return read gettid colse gettid write exit But on PPC64, the sequence is, read tkill rt_sigreturn [Enter] read [exit] gettid colse .... .... Here are two points we should check, 1 Why kernel (or other thing, gcc?) produce rt_sigreturn on PPC64, while produce sig_return on X86? In linux-2.6.12/arch/ppc64/kernel/signal.c, Only setup_rt_frame could be found.(All the signals are treated as RT signal?) 2 Where is rt_sigreturn [exit] and read[Enter]? We are re-visiting all the bugs we opened and owned. Since Yao posted a patch for this (http://sources.redhat.com/ml/frysk/2006-q4/msg00169.html), I am mark this as waiting for feedback. Please feedback if you can. Thanks. |