From: Andreas Schwab Date: Thu, 8 Mar 2012 13:35:41 +0000 (+0000) Subject: * m68klinux-nat.c: Include "gdb_proc_service.h". X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7b8b6d6d0d48c23ec36080b7d190c830a73c499e;p=binutils-gdb.git * m68klinux-nat.c: Include "gdb_proc_service.h". (PTRACE_GET_THREAD_AREA): Define. (ps_get_thread_area): New function. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a824d2d6666..0680f00d69e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-03-08 Andreas Schwab + + * m68klinux-nat.c: Include "gdb_proc_service.h". + (PTRACE_GET_THREAD_AREA): Define. + (ps_get_thread_area): New function. + 2012-03-08 Yao Qi * remote.c (remote_get_noisy_reply): Replace `sprintf' with diff --git a/gdb/m68klinux-nat.c b/gdb/m68klinux-nat.c index c7137c0414b..d4410e68034 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. */