public inbox for
 help / color / mirror / Atom feed
From: Mark Wielaard <>
To: Phil Muldoon <>
Cc: Frysk Hackers <>
Subject: Re: TaskState handleTrappedEvent
Date: Mon, 05 Nov 2007 22:20:00 -0000	[thread overview]
Message-ID: <> (raw)
In-Reply-To: <>

Hi Phil,

On Tue, 2007-10-30 at 15:47 +0000, Phil Muldoon wrote:
> Mark Wielaard wrote:
> > 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.
> >   
> What's a synthetic event?

A 'frysk core' generated event, unlike a ptrace generated event.
See for example LinuxWaitBuilder.stopped() and
saveFsckedOrderedKernelStoppedEvent() where we either transform the
original event into a different one or reschedule the events a little
before delivering to the next layer.

> > Ideally we get an different event for different things. Since we
> > currently don't we have some (arbitrary) order. 
> So to be clear several events can occur, that will only result in one 
> sigtrap operation? So it becomes a pass-along affair; each little 
> sub-system lints their respective status areas and if not for them, 
> "passes" the trap along.

Yes, in handleTrappedEvent() we currently do this by checking some extra
state (if isa.isTaskStepped() returns true or the pc is right at a
software breakpoint instruction which we inserted ourselves and we are
currently stepping that instruction, we assume it is a real step and
call task.notifyInstruction(), else we assume it is a breakpoint event
and call task.notifyCodeObserver() if that return -1 (no breakpoint
inserted here by us) then we assume it is a trap signal event and call
handleSignaledEvent(). As you said, it would be better to abstract this
logic out a bit instead of having this if-then-else chain.

> I suppose what worries me is precedence and preservation. Say two events 
> occurs but one sigtrap is generated. The first consumers see that it is 
> for them, does it then continue to pass that along? Does this existing 
> code do this now? All all sigtraps always passed along to the task at 
> the end? Should they?

On x86/x86_64 you should be able to detect the right variant through the
debug status register, that then gives you the precedence order to
check. But till now we have only dealt with one case (the step flag) and
assumed it isn't set if any other reason for the trap event triggers. So
you are entering new territory.

If in doubt I am afraid you need to write some testcases simulating
different events that all generate a trap event at the same time and
look at which get through (and what debug flags are set).



      reply	other threads:[~2007-11-05 22:20 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-24 15:10 Phil Muldoon
2007-10-29 10:58 ` Mark Wielaard
2007-10-30 15:48   ` Phil Muldoon
2007-11-05 22:20     ` Mark Wielaard [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).