mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 01:28:46 +00:00
* 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.
This commit is contained in:
118
gdb/breakpoint.c
118
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;
|
||||
|
||||
Reference in New Issue
Block a user