void _initialize_thread_db (void) { init_fbsd_thread_ops (); if (thread_db_load ()) { add_target (&fbsd_thread_ops); /* "thread tsd" command */ add_cmd ("tsd", class_run, fbsd_thread_tsd_cmd, "Show the thread-specific data keys and destructors " "for the process.\n", &thread_cmd_list); add_cmd ("signal", class_run, fbsd_thread_signal_cmd, "Show the thread signal info.\n", &thread_cmd_list); /* Hook into new_objfile notification. */ observer_attach_new_objfile (fbsd_thread_new_objfile); } else { fprintf_unfiltered (gdb_stderr, "[GDB will not be able to debug user-mode threads: %s]\n", dlerror()); } }
void _initialize_thread_db (void) { if (fbsdcoreops_suppress_target) return; init_fbsd_thread_ops (); init_fbsd_core_ops (); if (thread_db_load ()) { add_target (&fbsd_thread_ops); /* "thread tsd" command */ add_cmd ("tsd", class_run, fbsd_thread_tsd_cmd, "Show the thread-specific data keys and destructors " "for the process.\n", &thread_cmd_list); add_cmd ("signal", class_run, fbsd_thread_signal_cmd, "Show the thread signal info.\n", &thread_cmd_list); memcpy (&orig_core_ops, &core_ops, sizeof (struct target_ops)); memcpy (&core_ops, &fbsd_core_ops, sizeof (struct target_ops)); add_target (&core_ops); /* Add ourselves to objfile event chain. */ target_new_objfile_chain = target_new_objfile_hook; target_new_objfile_hook = fbsd_thread_new_objfile; child_suppress_run = 1; } else { fprintf_unfiltered (gdb_stderr, "[GDB will not be able to debug user-mode threads: %s]\n", dlerror()); /* allow the user to debug non-threaded core files */ add_target (&core_ops); } }