static void fbsd_thread_deactivate (void) { if (target_has_execution) disable_thread_event_reporting(); td_ta_delete_p (thread_agent); inferior_ptid = pid_to_ptid (proc_handle.pid); proc_handle.pid = 0; fbsd_thread_active = 0; fbsd_thread_present = 0; }
static void fbsd_thread_deactivate (void) { if (fbsd_thread_core == 0) disable_thread_event_reporting(); td_ta_delete_p (thread_agent); inferior_ptid = pid_to_ptid (proc_handle.pid); proc_handle.pid = 0; fbsd_thread_active = 0; fbsd_thread_present = 0; init_thread_list (); }
static void fbsd_thread_new_objfile (struct objfile *objfile) { td_err_e err; if (objfile == NULL) { /* All symbols have been discarded. If the thread_db target is active, deactivate it now. */ if (fbsd_thread_active) { gdb_assert (proc_handle.pid == 0); fbsd_thread_active = 0; } goto quit; } if (!child_suppress_run) goto quit; /* Nothing to do. The thread library was already detected and the target vector was already activated. */ if (fbsd_thread_active) goto quit; /* Initialize the structure that identifies the child process. Note that at this point there is no guarantee that we actually have a child process. */ proc_handle.pid = GET_PID (inferior_ptid); /* Now attempt to open a connection to the thread library. */ err = td_ta_new_p (&proc_handle, &thread_agent); switch (err) { case TD_NOLIBTHREAD: /* No thread library was detected. */ break; case TD_OK: /* The thread library was detected. Activate the thread_db target. */ fbsd_thread_present = 1; /* We can only poke around if there actually is a child process. If there is no child process alive, postpone the steps below until one has been created. */ if (fbsd_thread_core == 0 && proc_handle.pid != 0) { push_target(&fbsd_thread_ops); fbsd_thread_activate(); } else { td_ta_delete_p(thread_agent); thread_agent = NULL; } break; default: warning ("Cannot initialize thread debugging library: %s", thread_db_err_str (err)); break; } quit: if (target_new_objfile_chain) target_new_objfile_chain (objfile); }