diff options
author | Pedro Alves <palves@redhat.com> | 2008-11-03 14:01:27 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2008-11-03 14:01:27 +0000 |
commit | 50c71eaf0e6a7026633818a76f14b6ab4efec73c (patch) | |
tree | c557ce9f49f0b31ac7b45a3f6af8cac9dcf92bf4 /gdb/breakpoint.c | |
parent | e03c1da340f2622b6fb1293fb0449f5ab85992c7 (diff) | |
download | gdb-50c71eaf0e6a7026633818a76f14b6ab4efec73c.zip gdb-50c71eaf0e6a7026633818a76f14b6ab4efec73c.tar.gz gdb-50c71eaf0e6a7026633818a76f14b6ab4efec73c.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/breakpoint.c')
-rw-r--r-- | gdb/breakpoint.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 0076ff8..912d7ea 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -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 (); } |