diff options
author | Daniel Jacobowitz <drow@false.org> | 2005-11-02 19:54:44 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2005-11-02 19:54:44 +0000 |
commit | 011a70c2eabce3b9cecb285e975c1e8cba67ed8c (patch) | |
tree | 70a1459797932452542523dd97878721477edf2c /gdb | |
parent | a92e0d0a05994802735c51f6eda8d922597b5c13 (diff) | |
download | gdb-011a70c2eabce3b9cecb285e975c1e8cba67ed8c.zip gdb-011a70c2eabce3b9cecb285e975c1e8cba67ed8c.tar.gz gdb-011a70c2eabce3b9cecb285e975c1e8cba67ed8c.tar.bz2 |
* 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/gdbserver/configure.srv | 1 | ||||
-rw-r--r-- | gdb/gdbserver/linux-x86-64-low.c | 46 |
3 files changed, 53 insertions, 1 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index bdf99ae..0c9a47c 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -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. diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index f0e4dd3..e2d52c0 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -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" diff --git a/gdb/gdbserver/linux-x86-64-low.c b/gdb/gdbserver/linux-x86-64-low.c index fa7440d..fdf5ee1 100644 --- a/gdb/gdbserver/linux-x86-64-low.c +++ b/gdb/gdbserver/linux-x86-64-low.c @@ -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, }; |