void sol_thread_new_objfile (struct objfile *objfile) { td_err_e val; if (!objfile) { sol_thread_active = 0; goto quit; } /* don't do anything if init failed to resolve the libthread_db library */ if (!procfs_suppress_run) goto quit; /* Now, initialize the thread debugging library. This needs to be done after the shared libraries are located because it needs information from the user's thread library. */ val = p_td_init (); if (val != TD_OK) { warning ("sol_thread_new_objfile: td_init: %s", td_err_string (val)); goto quit; } val = p_td_ta_new (&main_ph, &main_ta); if (val == TD_NOLIBTHREAD) goto quit; else if (val != TD_OK) { warning ("sol_thread_new_objfile: td_ta_new: %s", td_err_string (val)); goto quit; } sol_thread_active = 1; quit: /* Call predecessor on chain, if any. */ if (target_new_objfile_chain) target_new_objfile_chain (objfile); }
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); }