From 5e5c80e9f8fb065f4c04892daf628978ca66b49b Mon Sep 17 00:00:00 2001 From: Grace Sainsbury Date: Fri, 23 Aug 2002 20:49:38 +0000 Subject: [PATCH] * infrun.c (normal_stop, proceed): Remove call to print_sys_errmsg when breakpoints fail. Move general breakpoint error messages to insert_breakpoints. * breakpoint.c (insert_breakpoints): Change warnings when breakpoints are nto inserted to specify the type. Remove call to memory_error when hardware breakpoints can't be inserted. Remove multiple calls to warning so all messages are sent to the user at once. (delete_breakpoints): Make insert error messsages more explicit. --- gdb/ChangeLog | 15 +++++++ gdb/breakpoint.c | 118 +++++++++++++++++++++++++++++++++++++++++++------------ gdb/infrun.c | 23 ++--------- 3 files changed, 110 insertions(+), 46 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 568b6d7e31..f6479c20af 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2002-08-23 Grace Sainsbury + + * infrun.c (normal_stop, proceed): Remove call to print_sys_errmsg + when breakpoints fail. Move general breakpoint error messages to + insert_breakpoints. + * breakpoint.c (insert_breakpoints): Change warnings when + breakpoints are nto inserted to specify the type. Remove call to + memory_error when hardware breakpoints can't be inserted. Remove + multiple calls to warning so all messages are sent to the user at + once. + (delete_breakpoints): Make insert error messsages more explicit. + 2002-08-23 Daniel Jacobowitz * ChangeLog: Move gdbserver entries after GDB 5.2 to @@ -65,6 +77,7 @@ i960-*-vxworks* obsolete. * MAINTAINERS: Note that the i960 is obsolete. +>>>>>>> 1.3141 2002-08-21 Corinna Vinschen >>>>>> 1.3134 2002-08-21 Jim Blandy * valops.c (value_cast): Simplify and correct logic for doing a @@ -257,6 +271,7 @@ mips_push_dummy_frame, mips_pop_frame, mips_skip_prologue, mips_breakpoint_from_pc, mips_call_dummy_address): Make static. +>>>>>>> 1.3128 2002-08-19 Michael Snyder * mips-tdep.c (mips_frame_num_args): New function. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 30b878d9d6..0f498af995 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -715,10 +715,22 @@ insert_breakpoints (void) int return_val = 0; /* return success code. */ int val = 0; int disabled_breaks = 0; + int hw_breakpoint_error = 0; + int process_warning = 0; static char message1[] = "Error inserting catchpoint %d:\n"; static char message[sizeof (message1) + 30]; +#ifdef ONE_PROCESS_WRITETEXT + process_warning = 1; +#endif + + struct ui_file *tmp_error_stream = mem_fileopen (); + make_cleanup_ui_file_delete (tmp_error_stream); + + /* Explicitly mark the warning -- this will only be printed if + there was an error. */ + fprintf_unfiltered (tmp_error_stream, "Warning:\n"); ALL_BREAKPOINTS_SAFE (b, temp) { @@ -776,8 +788,9 @@ insert_breakpoints (void) /* Set a software (trap) breakpoint at the LMA. */ val = target_insert_breakpoint (addr, b->shadow_contents); if (val != 0) - warning ("overlay breakpoint %d failed: in ROM?", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Overlay breakpoint %d failed: in ROM?", + b->number); } } /* Shall we set a breakpoint at the VMA? */ @@ -810,22 +823,34 @@ insert_breakpoints (void) b->enable_state = bp_shlib_disabled; if (!disabled_breaks) { - target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); - warning ("Temporarily disabling shared library breakpoints:"); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert breakpoint %d.\n", b->number); + fprintf_unfiltered (tmp_error_stream, + "Temporarily disabling shared library breakpoints:\n"); } disabled_breaks = 1; - warning ("breakpoint #%d ", b->number); + fprintf_unfiltered (tmp_error_stream, "breakpoint #%d\n", b->number); } else #endif { - target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); -#ifdef ONE_PROCESS_WRITETEXT - warning ("The same program may be running in another process."); -#endif - memory_error (val, b->address); /* which bombs us out */ + process_warning = 1; + if (b->type == bp_hardware_breakpoint) + { + hw_breakpoint_error = 1; + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware breakpoint %d.\n", + b->number); + } + else + { + fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); + } + } } else @@ -852,9 +877,13 @@ insert_breakpoints (void) if (val) { /* Couldn't set breakpoint for some reason */ - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d; disabling it.", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert catchpoint %d; disabling it.\n", + b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); b->enable_state = bp_disabled; } else @@ -876,9 +905,9 @@ insert_breakpoints (void) if (val == -1) { /* something went wrong */ - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d; disabling it.", - b->number); + fprintf_unfiltered (tmp_error_stream, + "Cannot insert catchpoint %d; disabling it.\n", + b->number); b->enable_state = bp_disabled; } } @@ -955,7 +984,7 @@ insert_breakpoints (void) addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v); len = TYPE_LENGTH (VALUE_TYPE (v)); - type = hw_write; + type = hw_write; if (b->type == bp_read_watchpoint) type = hw_read; else if (b->type == bp_access_watchpoint) @@ -980,9 +1009,11 @@ insert_breakpoints (void) value chain brings us here. */ if (!b->inserted) { + process_warning = 1; remove_breakpoint (b, mark_uninserted); - warning ("Could not insert hardware watchpoint %d.", - b->number); + hw_breakpoint_error = 1; + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware watchpoint %d.\n", b->number); val = -1; } } @@ -1029,8 +1060,7 @@ insert_breakpoints (void) } if (val < 0) { - target_terminal_ours_for_output (); - warning ("Cannot insert catchpoint %d.", b->number); + fprintf_unfiltered (tmp_error_stream, "Cannot insert catchpoint %d.", b->number); } else b->inserted = 1; @@ -1039,11 +1069,26 @@ insert_breakpoints (void) return_val = val; /* remember failure */ } } + + if (return_val) + { + /* If a hardware breakpoint or watchpoint was inserted, add a + message about possibly exhausted resources. */ + if (hw_breakpoint_error) + { + fprintf_unfiltered (tmp_error_stream, "Could not insert hardware breakpoints:\n" + "You may have requested too many hardware breakpoints/watchpoints.\n"); + } + if (process_warning) + fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process."); + + target_terminal_ours_for_output (); + error_stream (tmp_error_stream); + } return return_val; } - int remove_breakpoints (void) { @@ -6681,11 +6726,32 @@ delete_breakpoint (struct breakpoint *bpt) else val = target_insert_breakpoint (b->address, b->shadow_contents); + /* If there was an error in the insert, print a message, then stop execution. */ if (val != 0) { + struct ui_file *tmp_error_stream = mem_fileopen (); + make_cleanup_ui_file_delete (tmp_error_stream); + + + if (b->type == bp_hardware_breakpoint) + { + fprintf_unfiltered (tmp_error_stream, + "Cannot insert hardware breakpoint %d.\n" + "You may have requested too many hardware breakpoints.\n", + b->number); + } + else + { + fprintf_unfiltered (tmp_error_stream, "Cannot insert breakpoint %d.\n", b->number); + fprintf_filtered (tmp_error_stream, "Error accessing memory address "); + print_address_numeric (b->address, 1, tmp_error_stream); + fprintf_filtered (tmp_error_stream, ": %s.\n", + safe_strerror (val)); + } + + fprintf_unfiltered (tmp_error_stream,"The same program may be running in another process."); target_terminal_ours_for_output (); - warning ("Cannot insert breakpoint %d:", b->number); - memory_error (val, b->address); /* which bombs us out */ + error_stream(tmp_error_stream); } else b->inserted = 1; diff --git a/gdb/infrun.c b/gdb/infrun.c index 70fa5343c1..0777bdebc0 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -990,16 +990,9 @@ proceed (CORE_ADDR addr, enum target_signal siggnal, int step) trap_expected = 1; else { - int temp = insert_breakpoints (); - if (temp) - { - print_sys_errmsg ("insert_breakpoints", temp); - error ("Cannot insert breakpoints.\n\ -The same program may be running in another process,\n\ -or you may have requested too many hardware\n\ -breakpoints and/or watchpoints.\n"); - } - + insert_breakpoints (); + /* If we get here there was no call to error() in + insert breakpoints -- so they were inserted. */ breakpoints_inserted = 1; } @@ -3379,16 +3372,6 @@ normal_stop (void) if (target_has_execution && get_current_frame ()) (get_current_frame ())->pc = read_pc (); - if (breakpoints_failed) - { - target_terminal_ours_for_output (); - print_sys_errmsg ("While inserting breakpoints", breakpoints_failed); - printf_filtered ("Stopped; cannot insert breakpoints.\n\ -The same program may be running in another process,\n\ -or you may have requested too many hardware breakpoints\n\ -and/or watchpoints.\n"); - } - if (target_has_execution && breakpoints_inserted) { if (remove_breakpoints ()) -- 2.11.0