This is the mail archive of the frysk@sourceware.org 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]

Re: TaskState handleTrappedEvent


Hi Phil,

On Wed, 2007-10-24 at 16:09 +0100, Phil Muldoon wrote:
> I noticed that this state is getting a little more crowded and will be 
> even more crowded soon with watchpoints.

Yes, this comes from ptrace/wait translating all events into trap
signals. I tried to split things a little by having a separate stepping
state, but it is better to split up the trapped events into separate
(synthetic) events (see below) and then cross-checking with Chris and
Roland to make sure a future utrace layer gives us similar, but truly
separate events, with the same semantics.

> Before I add my own patches 
> here, some questions:
> 
> 1) Is there an important order precedence here? Must it handle single 
> step over breakpoints over watchpoints in any particular order? I can't 
> think of why the order matters.

Ideally we get an different event for different things. Since we
currently don't we have some (arbitrary) order. Currently we explictly
first check to see if the Task got just started, then whether we are
currently on top of a breakpoint instruction, and finally whether the
Isa indicates the current trapped event is a stepepd event. See
Isa.isTaskStepped(Task), Task.steppingBreakpoint and Task.just_started
in handleTrappedEvent. It might make sense to push these checks into
LinuxWaitBuilder.stopped() where we already split out events for
Stopped, Trapped and Signaled. There are also two other checks at the
end to see whether or not the trapped event is an actual trap signal or
something else (that we discard). See Isa.hasExecutedSpuriousTrap(Task)
and task.syscall_sigret.

> 2) I'm a little fuzzy on if there were will be an opportunity for 
> multiple events to happen on a single sigtrap (ie breakpoint and 
> watchpoint). I cannot think of any  right now other than single step 
> writing something to a memory address that the watchpoint is monitoring, 
> but that should be caught on as another later sigtrap. Are there 
> opportunities for multiple events? If so, are there any precedence issues?

Yes, at the moment stepping just assumes every trap event is an
important event for an Instruction observer, so we just report them all
(and this seems necessary since stepping onto a trapping instruction,
like a breakpoint, or receiving a signal, seem to trump the actual
stepping trap event). It is up to the actual Instruction observer to
check whether the event was really important as a "step", we could in
theory do this by checking the pc value between trap events, but that
quickly becomes messy when taking instructions into account that jump to
the same pc location. So in practise an TaskObserver.Instruction
updateHit() means something, most likely an instruction step, happened
that changed the state of the Task under observation.

Cheers,

Mark

Attachment: signature.asc
Description: This is a digitally signed message part


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