static td_err_e enable_thread_event (int event, CORE_ADDR *bp) { td_notify_t notify; td_err_e err; struct thread_db_info *info; info = get_thread_db_info (GET_PID (inferior_ptid)); /* Access an lwp we know is stopped. */ info->proc_handle.ptid = inferior_ptid; /* Get the breakpoint address for thread EVENT. */ err = info->td_ta_event_addr_p (info->thread_agent, event, ¬ify); if (err != TD_OK) return err; /* Set up the breakpoint. */ gdb_assert (exec_bfd); (*bp) = (gdbarch_convert_from_func_ptr_addr (target_gdbarch, /* Do proper sign extension for the target. */ (bfd_get_sign_extend_vma (exec_bfd) > 0 ? (CORE_ADDR) (intptr_t) notify.u.bptaddr : (CORE_ADDR) (uintptr_t) notify.u.bptaddr), ¤t_target)); create_thread_event_breakpoint (target_gdbarch, *bp); return TD_OK; }
static td_err_e enable_thread_event (td_thragent_t *thread_agent, int event, CORE_ADDR *bp) { td_notify_t notify; td_err_e err; /* Get the breakpoint address for thread EVENT. */ err = td_ta_event_addr_p (thread_agent, event, ¬ify); if (err != TD_OK) return err; /* Set up the breakpoint. */ (*bp) = gdbarch_convert_from_func_ptr_addr (current_gdbarch, extract_typed_address(¬ify.u.bptaddr, builtin_type_void_func_ptr), ¤t_target); create_thread_event_breakpoint ((*bp)); return TD_OK; }