* configure.srv (x86_64-*-linux*): Turn on thread_db support.
authorDaniel Jacobowitz <drow@false.org>
Wed, 2 Nov 2005 19:54:44 +0000 (19:54 +0000)
committerDaniel Jacobowitz <drow@false.org>
Wed, 2 Nov 2005 19:54:44 +0000 (19:54 +0000)
* linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len)
(x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New.
(the_low_target): Update.

gdb/gdbserver/ChangeLog
gdb/gdbserver/configure.srv
gdb/gdbserver/linux-x86-64-low.c

index bdf99aeddb3bbdc198d09b06f2b59f4ea5a72ce7..0c9a47c828357544eae3cf6bab6a3c612d03af41 100644 (file)
@@ -1,3 +1,10 @@
+2005-11-02  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * configure.srv (x86_64-*-linux*): Turn on thread_db support.
+       * linux-x86-64-low.c (x86_64_breakpoint, x86_64_breakpoint_len)
+       (x86_64_get_pc, x86_64_set_pc, x86_64_breakpoint_at): New.
+       (the_low_target): Update.
+
 2005-10-25  Andreas Schwab  <schwab@suse.de>
 
        * server.c (main): Allocate mem_buf with PBUFSIZ bytes.
index f0e4dd368b9680489e9b6724724ed059b955db0c..e2d52c09e75089522109c18b79599c01e973fd19 100644 (file)
@@ -87,6 +87,7 @@ case "${target}" in
   x86_64-*-linux*)     srv_regobj=reg-x86-64.o
                        srv_tgtobj="linux-low.o linux-x86-64-low.o i387-fp.o"
                        srv_linux_regsets=yes
+                       srv_linux_thread_db=yes
                        ;;
   xscale*-*-linux*)    srv_regobj=reg-arm.o
                        srv_tgtobj="linux-low.o linux-arm-low.o"
index fa7440dbd2afca531cd150c52a648bec7dc1e5ed..fdf5ee10e99a3db68be7fb4ee85841367fb58b27 100644 (file)
@@ -1,6 +1,6 @@
 /* GNU/Linux/x86-64 specific low level interface, for the remote server
    for GDB.
-   Copyright 2002, 2004
+   Copyright 2002, 2004, 2005
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -129,9 +129,53 @@ struct regset_info target_regsets[] = {
   { 0, 0, -1, -1, NULL, NULL }
 };
 
+static const unsigned char x86_64_breakpoint[] = { 0xCC };
+#define x86_64_breakpoint_len 1
+                
+extern int debug_threads;
+
+static CORE_ADDR
+x86_64_get_pc ()
+{
+  unsigned long pc;
+
+  collect_register_by_name ("rip", &pc);
+
+  if (debug_threads)
+    fprintf (stderr, "stop pc (before any decrement) is %08lx\n", pc);
+  return pc;
+}
+
+static void
+x86_64_set_pc (CORE_ADDR newpc)
+{
+  if (debug_threads)
+    fprintf (stderr, "set pc to %08lx\n", (long) newpc);
+  supply_register_by_name ("rip", &newpc);
+}
+
+static int
+x86_64_breakpoint_at (CORE_ADDR pc)
+{
+  unsigned char c;
+
+  read_inferior_memory (pc, &c, 1);
+  if (c == 0xCC)
+    return 1;
+
+  return 0;
+}
+
 struct linux_target_ops the_low_target = {
   -1,
   NULL,
   NULL,
   NULL,
+  x86_64_get_pc,
+  x86_64_set_pc,
+  x86_64_breakpoint,  
+  x86_64_breakpoint_len,
+  NULL,                                 
+  1,
+  x86_64_breakpoint_at,
 };