Re: [DynInst_API:] Building a local struct for a funcCall parameter


Date: Wed, 3 Oct 2012 14:24:48 -0500
From: Andrew Bernat <bernat@xxxxxxxxxxx>
Subject: Re: [DynInst_API:] Building a local struct for a funcCall parameter
On Oct 2, 2012, at 5:04 PM, Josh Stone <jistone@xxxxxxxxxx> wrote:

On 10/01/2012 06:36 PM, Josh Stone wrote:
As a fallback, I'm considering passing all of those register values as
individual parameters, but I'm hoping there's a better way.

I tried to do this, but got an assertion failure.  I can reproduce it
with the simple attached mutator, processMainRegs.cc, like:

$ ./processMainRegs /bin/true
Error: tried to allocate register 9 and failed!
processMainRegs: ../../dyninstAPI/src/emit-x86.C:1758: virtual Register
EmitterAMD64::emitCall(opCode, codeGen&, const
std::vector<boost::shared_ptr<AstNode> >&, bool, func_instance*):
Assertion `0' failed.
Aborted

Yes, you would have. We haven't implemented that many arguments to a function. It's not hard, just ... tricky. I'll add it to the list. 

To mitigate... not really. It shouldn't be that hard a fix though. 

Drew


I also ran it with env DYNINST_DEBUG_REGALLOC=1 and got a big log that
I've also attached.  The last additional info that gives is:
 [UI]: Error: register currently in use!

This seems to be not really related to the fact that I'm using all of
the BPatch_registerExpr, just that there are so many arguments.  Even
replacing that part with all BPatch_constExpr((unsigned long)i) still
triggers this assertion failure.

Is there anything I can do to mitigate this?

Josh
<processMainRegs.cc><processMainRegs.log.bz2>_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api




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