diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/ada-lang.c | 23 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/catch_ex.exp | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.ada/mi_catch_ex.exp | 2 |
5 files changed, 35 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cbd770b..31397e0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2011-12-11 Joel Brobecker <brobecker@adacore.com> + * 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. + +2011-12-11 Joel Brobecker <brobecker@adacore.com> + * ada-lang.c (ada_has_this_exception_support): New function, extracted out of ada_exception_sal and ada_exception_sal. (ada_exception_support_info_sniffer): Simplify by using diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 66d7420..1a3a975 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -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. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1a02cf9..f95ac4d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-11 Joel Brobecker <brobecker@adacore.com> + + * gdb.ada/catch_ex.exp, gdb.ada/mi_catch_ex.exp: Adjust + expected output for unsupported case. + 2011-12-10 Jan Kratochvil <jan.kratochvil@redhat.com> PR testsuite/12649 diff --git a/gdb/testsuite/gdb.ada/catch_ex.exp b/gdb/testsuite/gdb.ada/catch_ex.exp index 0ea3256..0cb8874 100644 --- a/gdb/testsuite/gdb.ada/catch_ex.exp +++ b/gdb/testsuite/gdb.ada/catch_ex.exp @@ -56,7 +56,7 @@ gdb_test_multiple "catch exception" $msg { -re "Catchpoint $any_nb: all Ada exceptions$eol$gdb_prompt $" { pass $msg } - -re "Cannot (insert catchpoints|break on __gnat_raise_nodefer_with_msg) in this configuration\.$eol$gdb_prompt $" { + -re "Your Ada runtime appears to be missing some debugging information.*$eol$gdb_prompt $" { # If the runtime was not built with enough debug information, # or if it was stripped, we can not test exception # catchpoints. diff --git a/gdb/testsuite/gdb.ada/mi_catch_ex.exp b/gdb/testsuite/gdb.ada/mi_catch_ex.exp index 4be1cad..584cc00 100644 --- a/gdb/testsuite/gdb.ada/mi_catch_ex.exp +++ b/gdb/testsuite/gdb.ada/mi_catch_ex.exp @@ -46,7 +46,7 @@ gdb_test_multiple "catch exception" $msg { -re "Catchpoint $any_nb: all Ada exceptions$eol$gdb_prompt $" { pass $msg } - -re "Cannot (insert catchpoints|break on __gnat_raise_nodefer_with_msg) in this configuration\.\[\r\n\]+$gdb_prompt $" { + -re "Your Ada runtime appears to be missing some debugging information.*\[\r\n\]+$gdb_prompt $" { # If the runtime was not built with enough debug information, # or if it was stripped, we can not test exception # catchpoints. |