Issue with Latest GDB on AIX with GCC-6.12

Pedro Alves palves@redhat.com
Tue Jan 31 13:09:00 GMT 2017


On 01/29/2017 01:11 AM, David Edelsohn wrote:

> Note that std::terminate() is called specifically because there was an
> unwind failure and no handler was found in eh_throw.cc in libsupc++
> (part of libstdc++).

Right, that's what makes it look like either an runtime unwinder,
or unwind info bug.

> Is this code trying to propagate an exception through a signal
> handler, in which case GCC MD_FALLBACK_FRAME_STATE_FOR needs to be
> tweaked to find more AIX kernel signal handler signatures.

Nope, it's just normal C++ frames all the way from the throw to
the "catch" that should catch the exception.

(GDB stopped throwing from signal handlers before we flipped
the C++ switch, with:
 [PATCH 00/30] Stop throwing exceptions from signal handlers
 https://sourceware.org/ml/gdb-patches/2016-03/msg00351.html
)

I'd suggest progressively hacking in "catches" to frames
closer to the throw in question helps identify the frame that
can't be unwound.  Like, sprinkling in a few:

try
  {
    ...
  }
catch (...)
  {
    printf ("%s:%d: got here\n", __FILE__, __LINE__)
    throw;
  }

Thanks,
Pedro Alves



More information about the Gdb mailing list