* linux-m68k-low.c: Include <asm/ptrace.h>
authorMaxim Kuvyrkov <maxim@kugelworks.com>
Wed, 19 May 2010 14:07:08 +0000 (14:07 +0000)
committerMaxim Kuvyrkov <maxim@kugelworks.com>
Wed, 19 May 2010 14:07:08 +0000 (14:07 +0000)
(ps_get_thread_area): Implement.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-m68k-low.c

index eb82920b2eb3a80f31be64793541f95f39221682..8c81fb01e0f7b9cef28b864256774cd4603b3842 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       * linux-m68k-low.c: Include <asm/ptrace.h>
+       (ps_get_thread_area): Implement.
+
 2010-05-03  Doug Evans  <dje@google.com>
 
        * event-loop.c (struct callback_event): New struct.
index 6c98bb17eebba0895f53473cbb1e4ce41f243ba0..1caac741a81c2c148741d03fb7baecb9a77ae073 100644 (file)
@@ -154,6 +154,25 @@ m68k_breakpoint_at (CORE_ADDR pc)
   return 0;
 }
 
+#include <asm/ptrace.h>
+
+/* Fetch the thread-local storage pointer for libthread_db.  */
+
+ps_err_e
+ps_get_thread_area (const struct ps_prochandle *ph,
+                   lwpid_t lwpid, int idx, void **base)
+{
+  if (ptrace (PTRACE_GET_THREAD_AREA, lwpid, NULL, base) != 0)
+    return PS_ERR;
+
+  /* IDX is the bias from the thread pointer to the beginning of the
+     thread descriptor.  It has to be subtracted due to implementation
+     quirks in libthread_db.  */
+  *base = (void *) ((char *)*base - idx);
+
+  return PS_OK;
+}
+
 struct linux_target_ops the_low_target = {
   init_registers_m68k,
   m68k_num_regs,