2003-11-25 Andrew Cagney * thread-db.c (enable_thread_event): New function. Ensure that BP is a code address. (enable_thread_event_reporting): Use enable_thread_event. Index: ./gdb/thread-db.c =================================================================== RCS file: /cvs/src/src/gdb/thread-db.c,v retrieving revision 1.34 diff -u -r1.34 thread-db.c --- ./gdb/thread-db.c 4 Sep 2003 21:03:37 -0000 1.34 +++ ./gdb/thread-db.c 25 Nov 2003 23:28:49 -0000 @@ -465,6 +465,26 @@ return 1; } +static int +enable_thread_event (td_thragent_t *thread_agent, int event, CORE_ADDR *bp) +{ + td_notify_t notify; + int err; + + /* Get the breakpoint address for thread EVENT. */ + err = td_ta_event_addr_p (thread_agent, event, ¬ify); + if (err != TD_OK) + return 0; + + /* Set up the breakpoint. */ + (*bp) = gdbarch_convert_from_func_ptr_addr (current_gdbarch, + (CORE_ADDR) notify.u.bptaddr, + ¤t_target); + create_thread_event_breakpoint ((*bp)); + + return 1; +} + static void enable_thread_event_reporting (void) { @@ -498,32 +518,24 @@ /* Delete previous thread event breakpoints, if any. */ remove_thread_event_breakpoints (); + td_create_bp_addr = 0; + td_death_bp_addr = 0; - /* Get address for thread creation breakpoint. */ - err = td_ta_event_addr_p (thread_agent, TD_CREATE, ¬ify); - if (err != TD_OK) + /* Set up the thread creation event. */ + if (!enable_thread_event (thread_agent, TD_CREATE, &td_create_bp_addr)) { warning ("Unable to get location for thread creation breakpoint: %s", thread_db_err_str (err)); return; } - /* Set up the breakpoint. */ - td_create_bp_addr = (CORE_ADDR) notify.u.bptaddr; - create_thread_event_breakpoint (td_create_bp_addr); - - /* Get address for thread death breakpoint. */ - err = td_ta_event_addr_p (thread_agent, TD_DEATH, ¬ify); - if (err != TD_OK) + /* Set up the thread death event. */ + if (!enable_thread_event (thread_agent, TD_DEATH, &td_death_bp_addr)) { warning ("Unable to get location for thread death breakpoint: %s", thread_db_err_str (err)); return; } - - /* Set up the breakpoint. */ - td_death_bp_addr = (CORE_ADDR) notify.u.bptaddr; - create_thread_event_breakpoint (td_death_bp_addr); } static void