* remote.c (remote_start_remote): If the solib list is global,

fetch libraries and insert breakpoints after connecting.
	* infcmd.c (post_create_inferior): If the solist is shared between
	inferiors, no need to refetch it on every new inferior.
	(detach_command): If the shared library list is shared between
	inferiors, then don't clear it on every inferior detach.
	* gdbarch.sh (has_global_solist): New.
	* i386-dicos-tdep.c (i386_dicos_init_abi): Set
	gdbarch_has_global_solist.
	* target.c (target_pre_inferior): If the shared library list is
	shared between inferiors, then don't clear it here, neither
	invalidate the memory regions or clear the target description.
	(target_detach): If the shared library list is shared between
	inferiors, then don't remove breakpoints from the target here.
	(target_disconnect): Comment.
	* solib.c (update_solib_list): Check for null_ptid.
	* breakpoint.c (insert_breakpoints, update_global_location_list):
	If the shared library list is shared between inferiors, insert
	breakpoints even if there's no execution.
	(breakpoint_init_inferior): If the shared library list is shared
	between inferiors, don't delete breakpoints or mark them
	uninserted here.

	* gdbarch.c, gdbarch.h: Regenerate.
This commit is contained in:
Pedro Alves 2008-11-03 14:01:27 +00:00
parent e03c1da340
commit 50c71eaf0e
10 changed files with 121 additions and 15 deletions

View file

@ -1263,7 +1263,10 @@ insert_breakpoints (void)
update_global_location_list (1);
if (!breakpoints_always_inserted_mode () && target_has_execution)
if (!breakpoints_always_inserted_mode ()
&& (target_has_execution
|| (gdbarch_has_global_solist (target_gdbarch)
&& target_supports_multi_process ())))
/* update_global_location_list does not insert breakpoints
when always_inserted_mode is not enabled. Explicitly
insert them now. */
@ -1707,6 +1710,11 @@ breakpoint_init_inferior (enum inf_context context)
struct bp_location *bpt;
int ix;
/* If breakpoint locations are shared across processes, then there's
nothing to do. */
if (gdbarch_has_global_solist (target_gdbarch))
return;
ALL_BP_LOCATIONS (bpt)
if (bpt->owner->enable_state != bp_permanent)
bpt->inserted = 0;
@ -7259,9 +7267,10 @@ update_global_location_list (int should_insert)
check_duplicates (b);
}
if (breakpoints_always_inserted_mode ()
&& should_insert
&& target_has_execution)
if (breakpoints_always_inserted_mode () && should_insert
&& (target_has_execution
|| (gdbarch_has_global_solist (target_gdbarch)
&& target_supports_multi_process ())))
insert_breakpoint_locations ();
}