2003-11-25 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Tue, 25 Nov 2003 23:31:40 +0000 (23:31 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 25 Nov 2003 23:31:40 +0000 (23:31 +0000)
* thread-db.c (enable_thread_event): New function.  Ensure that BP
is a code address.
(enable_thread_event_reporting): Use enable_thread_event.

gdb/ChangeLog
gdb/thread-db.c

index 4356b148a4392935fa02b55b7283a703c4aa6995..402c5cae3ccb0f0b4121a0e7f961949c7b8f8653 100644 (file)
@@ -1,3 +1,9 @@
+2003-11-25  Andrew Cagney  <cagney@redhat.com>
+
+       * thread-db.c (enable_thread_event): New function.  Ensure that BP
+       is a code address.
+       (enable_thread_event_reporting): Use enable_thread_event.
+       
 2003-11-25  Michael Snyder  <msnyder@redhat.com>
 
        * mips-tdep.c (mips_o64_extract_return_value): Correct for
index efd0d33b45f66c096d232fbc3d524adcffd5be50..d1fb452817369fa63cb43adc1dda834696a9b243 100644 (file)
@@ -465,6 +465,26 @@ thread_db_load (void)
   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, &notify);
+  if (err != TD_OK)
+    return 0;
+
+  /* Set up the breakpoint.  */
+  (*bp) = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
+                                             (CORE_ADDR) notify.u.bptaddr,
+                                             &current_target);
+  create_thread_event_breakpoint ((*bp));
+
+  return 1;
+}
+
 static void
 enable_thread_event_reporting (void)
 {
@@ -498,32 +518,24 @@ enable_thread_event_reporting (void)
 
   /* 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, &notify);
-  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, &notify);
-  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