diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cd3eaa1bc4c..8ed469f5df6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2015-09-01 Sergio Durigan Junior + + * solib-svr4.c (solib_event_probe_action): Call + get_probe_argument_count using TRY...CATCH. + (svr4_handle_solib_event): Likewise, for evaluate_probe_argument. + 2015-09-01 Sergio Durigan Junior * probe.h (struct probe_ops) probe, frame); + TRY + { + probe_argc = get_probe_argument_count (pa->probe, frame); + } + CATCH (ex, RETURN_MASK_ERROR) + { + exception_print (gdb_stderr, ex); + probe_argc = 0; + } + END_CATCH + + /* If get_probe_argument_count throws an exception, probe_argc will + be set to zero. However, if pa->probe does not have arguments, + then get_probe_argument_count will succeed but probe_argc will + also be zero. Both cases happen because of different things, but + they are treated equally here: action will be set to + PROBES_INTERFACE_FAILED. */ if (probe_argc == 2) action = FULL_RELOAD; else if (probe_argc < 2) @@ -1940,7 +1956,17 @@ svr4_handle_solib_event (void) usm_chain = make_cleanup (resume_section_map_updates_cleanup, current_program_space); - val = evaluate_probe_argument (pa->probe, 1, frame); + TRY + { + val = evaluate_probe_argument (pa->probe, 1, frame); + } + CATCH (ex, RETURN_MASK_ERROR) + { + exception_print (gdb_stderr, ex); + val = NULL; + } + END_CATCH + if (val == NULL) { do_cleanups (old_chain); @@ -1971,7 +1997,18 @@ svr4_handle_solib_event (void) if (action == UPDATE_OR_RELOAD) { - val = evaluate_probe_argument (pa->probe, 2, frame); + TRY + { + val = evaluate_probe_argument (pa->probe, 2, frame); + } + CATCH (ex, RETURN_MASK_ERROR) + { + exception_print (gdb_stderr, ex); + do_cleanups (old_chain); + return; + } + END_CATCH + if (val != NULL) lm = value_as_address (val);