@ -2375,9 +2375,12 @@ static int
insert_bp_location ( struct bp_location * bl ,
struct ui_file * tmp_error_stream ,
int * disabled_breaks ,
int * hw_breakpoint_error )
int * hw_breakpoint_error ,
int * hw_bp_error_explained_already )
{
int val = 0 ;
char * hw_bp_err_string = NULL ;
struct gdb_exception e ;
if ( ! should_be_inserted ( bl ) | | ( bl - > inserted & & ! bl - > needs_update ) )
return 0 ;
@ -2474,8 +2477,15 @@ insert_bp_location (struct bp_location *bl,
| | ! ( section_is_overlay ( bl - > section ) ) )
{
/* No overlay handling: just set the breakpoint. */
val = bl - > owner - > ops - > insert_location ( bl ) ;
TRY_CATCH ( e , RETURN_MASK_ALL )
{
val = bl - > owner - > ops - > insert_location ( bl ) ;
}
if ( e . reason < 0 )
{
val = 1 ;
hw_bp_err_string = ( char * ) e . message ;
}
}
else
{
@ -2509,7 +2519,15 @@ insert_bp_location (struct bp_location *bl,
if ( section_is_mapped ( bl - > section ) )
{
/* Yes. This overlay section is mapped into memory. */
val = bl - > owner - > ops - > insert_location ( bl ) ;
TRY_CATCH ( e , RETURN_MASK_ALL )
{
val = bl - > owner - > ops - > insert_location ( bl ) ;
}
if ( e . reason < 0 )
{
val = 1 ;
hw_bp_err_string = ( char * ) e . message ;
}
}
else
{
@ -2545,11 +2563,13 @@ insert_bp_location (struct bp_location *bl,
{
if ( bl - > loc_type = = bp_loc_hardware_breakpoint )
{
* hw_breakpoint_error = 1 ;
fprintf_unfiltered ( tmp_error_stream ,
" Cannot insert hardware "
" breakpoint %d. \n " ,
bl - > owner - > number ) ;
* hw_breakpoint_error = 1 ;
* hw_bp_error_explained_already = hw_bp_err_string ! = NULL ;
fprintf_unfiltered ( tmp_error_stream ,
" Cannot insert hardware breakpoint %d%s " ,
bl - > owner - > number , hw_bp_err_string ? " : " : " . \n " ) ;
if ( hw_bp_err_string )
fprintf_unfiltered ( tmp_error_stream , " %s. \n " , hw_bp_err_string ) ;
}
else
{
@ -2741,6 +2761,7 @@ update_inserted_breakpoint_locations (void)
int val = 0 ;
int disabled_breaks = 0 ;
int hw_breakpoint_error = 0 ;
int hw_bp_details_reported = 0 ;
struct ui_file * tmp_error_stream = mem_fileopen ( ) ;
struct cleanup * cleanups = make_cleanup_ui_file_delete ( tmp_error_stream ) ;
@ -2775,7 +2796,7 @@ update_inserted_breakpoint_locations (void)
continue ;
val = insert_bp_location ( bl , tmp_error_stream , & disabled_breaks ,
& hw_breakpoint_error ) ;
& hw_breakpoint_error , & hw_bp_details_reported ) ;
if ( val )
error_flag = val ;
}
@ -2800,6 +2821,7 @@ insert_breakpoint_locations (void)
int val = 0 ;
int disabled_breaks = 0 ;
int hw_breakpoint_error = 0 ;
int hw_bp_error_explained_already = 0 ;
struct ui_file * tmp_error_stream = mem_fileopen ( ) ;
struct cleanup * cleanups = make_cleanup_ui_file_delete ( tmp_error_stream ) ;
@ -2833,7 +2855,7 @@ insert_breakpoint_locations (void)
continue ;
val = insert_bp_location ( bl , tmp_error_stream , & disabled_breaks ,
& hw_breakpoint_error ) ;
& hw_breakpoint_error , & hw_bp_error_explained_already ) ;
if ( val )
error_flag = val ;
}
@ -2878,7 +2900,7 @@ insert_breakpoint_locations (void)
{
/* If a hardware breakpoint or watchpoint was inserted, add a
message about possibly exhausted resources . */
if ( hw_breakpoint_error )
if ( hw_breakpoint_error & & ! hw_bp_error_explained_already )
{
fprintf_unfiltered ( tmp_error_stream ,
" Could not insert hardware breakpoints: \n \
@ -2943,7 +2965,7 @@ reattach_breakpoints (int pid)
struct bp_location * bl , * * blp_tmp ;
int val ;
struct ui_file * tmp_error_stream ;
int dummy1 = 0 , dummy2 = 0 ;
int dummy1 = 0 , dummy2 = 0 , dummy3 = 0 ;
struct inferior * inf ;
struct thread_info * tp ;
@ -2967,7 +2989,7 @@ reattach_breakpoints (int pid)
if ( bl - > inserted )
{
bl - > inserted = 0 ;
val = insert_bp_location ( bl , tmp_error_stream , & dummy1 , & dummy2 ) ;
val = insert_bp_location ( bl , tmp_error_stream , & dummy1 , & dummy2 , & dummy3 ) ;
if ( val ! = 0 )
{
do_cleanups ( old_chain ) ;