Warn if missing debug info for Ada exception catchpoints

This patch should help the user understand why the debugger is not
able to insert Ada exception catchpoints when the Ada runtime was
stripped of debugging info, as is often the case on many GNU/Linux
distros:

    (gdb) catch exception
    Your Ada runtime appears to be missing some debugging information.
    Cannot insert Ada exception catchpoint in this configuration.

gdb/ChangeLog:

        * ada-lang.c (ada_has_this_exception_support): Raise an error
        if we could find the Ada exception hook in the Ada runtime,
        but no debugging info for that hook.

gdb/testsuite/ChangeLog:

        * gdb.ada/catch_ex.exp, gdb.ada/mi_catch_ex.exp: Adjust
        expected output for unsupported case.
This commit is contained in:
Joel Brobecker
2011-12-11 17:36:10 +00:00
parent f17011e0cd
commit a6af7abe5d
5 changed files with 35 additions and 3 deletions

View File

@@ -10659,7 +10659,28 @@ ada_has_this_exception_support (const struct exception_support_info *einfo)
sym = standard_lookup (einfo->catch_exception_sym, NULL, VAR_DOMAIN);
if (sym == NULL)
return 0;
{
/* Perhaps we did not find our symbol because the Ada runtime was
compiled without debugging info, or simply stripped of it.
It happens on some GNU/Linux distributions for instance, where
users have to install a separate debug package in order to get
the runtime's debugging info. In that situation, let the user
know why we cannot insert an Ada exception catchpoint.
Note: Just for the purpose of inserting our Ada exception
catchpoint, we could rely purely on the associated minimal symbol.
But we would be operating in degraded mode anyway, since we are
still lacking the debugging info needed later on to extract
the name of the exception being raised (this name is printed in
the catchpoint message, and is also used when trying to catch
a specific exception). We do not handle this case for now. */
if (lookup_minimal_symbol (einfo->catch_exception_sym, NULL, NULL))
error (_("Your Ada runtime appears to be missing some debugging "
"information.\nCannot insert Ada exception catchpoint "
"in this configuration."));
return 0;
}
/* Make sure that the symbol we found corresponds to a function. */