[DynInst_API:] assertion failed in Dyninst::StackAnalysis::handleAddSub


Date: Tue, 12 Mar 2013 14:00:29 -0700
From: Josh Stone <jistone@xxxxxxxxxx>
Subject: [DynInst_API:] assertion failed in Dyninst::StackAnalysis::handleAddSub
Hi,

In 8.1 Dyninst::StackAnalysis::handleAddSub(), I'm hitting a new
assertion failure that I never encountered with 8.0.  From git, that
code doesn't appear to have changed since 8.0, but apparently something
else is different.

The failure is somewhat sporadic, but I can reproduce it pretty often
with a thread-busy mutatee, my own benchmark toy that spins on an
instrumented point many times in several threads.  This is with
SystemTap, and I'm not sure I could easily reproduce it standalone, but
I'm happy to provide whatever info is useful for debugging.

In 8.0, I don't see the mutator ever entering handleAddSub() at all.

In 8.1, successful runs never enter handleAddSub() either.  But when it
does enter handleAddSub(), it always computes a Result "res" with
size()==8, which triggers the assertion.  In gdb I can see res.type is
Dyninst::InstructionAPI::u64, and res.val.u64val is 0x7b3d00000000108.
The upper bits actually vary from run to run, but it's always something
like 0x7???00000000108.

A backtrace is pasted below -- any other info I can provide?

Thanks,
Josh


> Breakpoint 1, Dyninst::StackAnalysis::handleAddSub (this=this@entry=0x7fffffffccb0, insn=..., sign=<optimized out>, xferFuncs=
>     empty std::list) at ../../dataflowAPI/src/stackanalysis.C:639
> 639	       assert(0);
> (gdb) bt
> Python Exception <type 'exceptions.IndexError'> list index out of range: 
> #0  Dyninst::StackAnalysis::handleAddSub (this=this@entry=0x7fffffffccb0, insn=..., sign=<optimized out>, xferFuncs=empty std::list)
>     at ../../dataflowAPI/src/stackanalysis.C:639
> #1  0x00007ffff6d650b3 in Dyninst::StackAnalysis::computeInsnEffects (this=this@entry=0x7fffffffccb0, block=block@entry=0xf33c9c0, 
> Python Exception <type 'exceptions.IndexError'> list index out of range: 
>     insn=..., off=16448, xferFuncs=empty std::list) at ../../dataflowAPI/src/stackanalysis.C:334
> #2  0x00007ffff6d65f8f in Dyninst::StackAnalysis::summarizeBlocks (this=this@entry=0x7fffffffccb0)
>     at ../../dataflowAPI/src/stackanalysis.C:158
> #3  0x00007ffff6d67964 in Dyninst::StackAnalysis::analyze (this=this@entry=0x7fffffffccb0) at ../../dataflowAPI/src/stackanalysis.C:83
> #4  0x00007ffff6d67ba0 in Dyninst::StackAnalysis::find (this=this@entry=0x7fffffffccb0, b=b@entry=0xf337fc0, addr=addr@entry=16602, 
>     reg=...) at ../../dataflowAPI/src/stackanalysis.C:505
> #5  0x00007ffff6d67c21 in Dyninst::StackAnalysis::findFP (this=0x7fffffffccb0, b=0xf337fc0, addr=16602)
>     at ../../dataflowAPI/src/stackanalysis.C:543
> #6  0x00007ffff7697591 in Dyninst::Stackwalker::AnalysisStepperImpl::analyzeFunction(std::string, unsigned long) ()
>    from /home/jistone/paradyn/root/lib/libstackwalk.so.8.1
> #7  0x00007ffff769873f in Dyninst::Stackwalker::AnalysisStepperImpl::getCallerFrame(Dyninst::Stackwalker::Frame const&, Dyninst::Stackwalker::Frame&) () from /home/jistone/paradyn/root/lib/libstackwalk.so.8.1
> #8  0x00007ffff768408c in Dyninst::Stackwalker::Walker::walkSingleFrame(Dyninst::Stackwalker::Frame const&, Dyninst::Stackwalker::Frame&) () from /home/jistone/paradyn/root/lib/libstackwalk.so.8.1
> #9  0x00007ffff768532d in Dyninst::Stackwalker::Walker::walkStackFromFrame(std::vector<Dyninst::Stackwalker::Frame, std::allocator<Dyninst::Stackwalker::Frame> >&, Dyninst::Stackwalker::Frame const&) () from /home/jistone/paradyn/root/lib/libstackwalk.so.8.1
> #10 0x00007ffff7685732 in Dyninst::Stackwalker::Walker::walkStack(std::vector<Dyninst::Stackwalker::Frame, std::allocator<Dyninst::Stackwalker::Frame> >&, long) () from /home/jistone/paradyn/root/lib/libstackwalk.so.8.1
> #11 0x00007ffff7d0a5c1 in PCProcess::walkStack (this=0x1037710, stackWalk=std::vector of length 0, capacity 0, thread=0xf353910)
>     at ../../dyninstAPI/src/dynProcess.C:2961
> #12 0x00007ffff7d10dbf in PCThread::walkStack (this=this@entry=0xf353910, stackWalk=std::vector of length 0, capacity 0)
>     at ../../dyninstAPI/src/dynThread.C:163
> #13 0x00007ffff7d10e28 in PCThread::findSingleThreadInfo (this=this@entry=0xf353910) at ../../dyninstAPI/src/dynThread.C:94
> #14 0x00007ffff7d110a9 in PCThread::findStackTop (this=this@entry=0xf353910) at ../../dyninstAPI/src/dynThread.C:142
> #15 0x00007ffff7d111da in PCThread::PCThread (this=0xf353910, parent=<optimized out>, ind=<optimized out>, thr=...)
>     at ../../dyninstAPI/src/dynThread.C:54
> #16 0x00007ffff7d11271 in PCThread::createPCThread (parent=0x1037710, thr=...) at ../../dyninstAPI/src/dynThread.C:59
> #17 0x00007ffff7d11e64 in PCEventHandler::handleThreadCreate (this=this@entry=0x7ffff7fcc6dc <PCEventHandler::handler_>, ev=..., 
>     evProc=evProc@entry=0x1037710) at ../../dyninstAPI/src/pcEventHandler.C:396
> #18 0x00007ffff7d16087 in PCEventHandler::handle_internal (this=this@entry=0x7ffff7fcc6dc <PCEventHandler::handler_>, ev=...)
>     at ../../dyninstAPI/src/pcEventHandler.C:156
> #19 0x00007ffff7d167d1 in PCEventHandler::handle (ev=...) at ../../dyninstAPI/src/pcEventHandler.C:59
> #20 0x00007ffff7d177fa in PCEventMuxer::handle (this=this@entry=0x7ffff7fcc700 <PCEventMuxer::muxer_>, ev=...)
>     at ../../dyninstAPI/src/pcEventMuxer.C:139
> #21 0x00007ffff7d184b8 in PCEventMuxer::handle_internal (this=this@entry=0x7ffff7fcc700 <PCEventMuxer::muxer_>, proc=proc@entry=0x0)
>     at ../../dyninstAPI/src/pcEventMuxer.C:127
> #22 0x00007ffff7d185cf in PCEventMuxer::handle (proc=proc@entry=0x0) at ../../dyninstAPI/src/pcEventMuxer.C:78
> #23 0x00007ffff7d186e1 in PCEventMuxer::wait_internal (this=0x7ffff7fcc700 <PCEventMuxer::muxer_>, block=<optimized out>)
>     at ../../dyninstAPI/src/pcEventMuxer.C:88
> #24 0x00007ffff7c42110 in BPatch::pollForStatusChange (this=<optimized out>) at ../../dyninstAPI/src/BPatch.C:1302
> #25 0x000000000040aa30 in mutator::run (this=0x64dd80) at ../../stapdyn/mutator.cxx:441
> #26 0x000000000040777c in main (argc=<optimized out>, argv=<optimized out>) at ../../stapdyn/stapdyn.cxx:119
[← Prev in Thread] Current Thread [Next in Thread→]
  • [DynInst_API:] assertion failed in Dyninst::StackAnalysis::handleAddSub, Josh Stone <=