diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2012-03-08 13:35:41 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2012-03-08 13:35:41 +0000 |
commit | 7b8b6d6d0d48c23ec36080b7d190c830a73c499e (patch) | |
tree | 54d34a62d7a19e817cd253131a24a8c6bb7cd9ec /gdb/m68klinux-nat.c | |
parent | bba74b36f00976564d8bf209834b3c528d361ade (diff) | |
download | gdb-7b8b6d6d0d48c23ec36080b7d190c830a73c499e.zip gdb-7b8b6d6d0d48c23ec36080b7d190c830a73c499e.tar.gz gdb-7b8b6d6d0d48c23ec36080b7d190c830a73c499e.tar.bz2 |
* m68klinux-nat.c: Include "gdb_proc_service.h".
(PTRACE_GET_THREAD_AREA): Define.
(ps_get_thread_area): New function.
Diffstat (limited to 'gdb/m68klinux-nat.c')
-rw-r--r-- | gdb/m68klinux-nat.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/gdb/m68klinux-nat.c b/gdb/m68klinux-nat.c index c7137c0..d4410e6 100644 --- a/gdb/m68klinux-nat.c +++ b/gdb/m68klinux-nat.c @@ -51,6 +51,13 @@ /* Prototypes for supply_gregset etc. */ #include "gregset.h" + +/* Defines ps_err_e, struct ps_prochandle. */ +#include "gdb_proc_service.h" + +#ifndef PTRACE_GET_THREAD_AREA +#define PTRACE_GET_THREAD_AREA 25 +#endif /* This table must line up with gdbarch_register_name in "m68k-tdep.c". */ static const int regmap[] = @@ -556,6 +563,24 @@ fetch_core_registers (struct regcache *regcache, } +/* 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 = (char *) *base - idx; + + return PS_OK; +} + + /* Register that we are able to handle GNU/Linux ELF core file formats. */ |