Re: [DynInst_API:] DYNINSTuserMessage() in a function called with oneTimeCode()


Date: Mon, 11 Feb 2013 13:47:14 -0800 (PST)
From: Matthew LeGendre <legendre1@xxxxxxxx>
Subject: Re: [DynInst_API:] DYNINSTuserMessage() in a function called with oneTimeCode()


On Mon, 11 Feb 2013, David Smith wrote:

On 02/11/2013 01:11 PM, Matthew LeGendre wrote:

I've got an educated guess as to what's happening.  It has to do with
the assumptions Dyninst 8.0 makes about when/whether OneTimeCodes can be
interrupted by other events.

If you turn on the environment variable DYNINST_DEBUG_PROCCONTROL and
re-run it'll produce some debug output.  That'll be useful in confirming
what's happening.

I've attached a file containing the DYNINST_DEBUG_PROCCONTROL debug output.

The problem is what I suspected. Dyninst 8.0 introduced some restrictions on events happening inside OneTimeCodes, which are being triggered by the DYNINSTUserMessage.

Thanks for looking into this.

It'll actually be up to one of the Dyninst team to officially support this and decide if/how to fix it--this was just a case where I'm familiar with the code and recognized the cause from your description. I'll send Bill/Drew a technical summary and they can decide where to go.


Also, your earlier message implied that you use DYNINSTUserMessage in all of your probes. As an FYI, DYNINSTUserMessage is fairly expensive and involves pausing the mutatee and two context-switches. It's not something you'd ever want to put into an app's inner loop. If you see any performance problems you may want to consider replacing it with a named pipe/socket or shared memory.

-Matt
[← Prev in Thread] Current Thread [Next in Thread→]