Re: Issue with Latest GDB on AIX with GCC-6.12

Nitish Kumar Mishra <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CACC+hkgZxWgCC-4KR9M_c1=EU5GE4tagV61keSfYnDASXhN2EA@mail.gmail.com>
Hi All !

As Pedro suggested to have some print statements in "catches" blocks
to identify the frame that can't be unwound, I did try that.
Most of the functions didn't have the try-catch except,
gdb_rl_callback_handler ()
gdb_rl_callback_read_char_wrapper ()
gdb_rl_callback_read_char_wrapper_noexcept (),
where I put the print statements but during execution none of these
print statements get executed.

In the function:
static void
 gdb_rl_callback_handler (char *rl) noexcept
 {
   struct gdb_exception gdb_rl_expt = exception_none;
   struct ui *ui = current_ui;

   TRY
     {
       ui->input_handler (rl);
     }
   CATCH (ex, RETURN_MASK_ALL)
     {
       gdb_rl_expt = ex;
     }
   END_CATCH

I tried calling command_line_handler () without function pointer (as
it seems that it is a known issue with AIX and function pointers), but
again it didn't help.

Thanks,
Nitish


On Tue, Jan 31, 2017 at 6:38 PM, Pedro Alves <[email protected]> wrote:
> 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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.