summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog15
-rw-r--r--gdb/breakpoint.c118
-rw-r--r--gdb/infrun.c23
3 files changed, 110 insertions, 46 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 568b6d7e31e..f6479c20af8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,15 @@
+2002-08-23 Grace Sainsbury <graces@redhat.com>
+
+ * 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 <drow@mvista.com>
* 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 <vinschen@redhat.com
* aix-thread.c (aix_thread_detach): Disable thread debugging on
@@ -95,6 +108,7 @@
* config/mips/tm-mips.h (DEFAULT_MIPS_TYPE): Delete unused macro.
* config/mips/tm-embed.h (DEFAULT_MIPS_TYPE): Delete unused macro.
+>>>>>>> 1.3134
2002-08-21 Jim Blandy <jimb@redhat.com>
* 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 <msnyder@redhat.com>
* mips-tdep.c (mips_frame_num_args): New function.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 30b878d9d67..0f498af9957 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 70fa5343c18..0777bdebc05 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 ())