|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* GNU/Linux/MIPS specific low level interface, for the remote server for GDB.
|
|
|
|
Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2005 |
|
|
|
Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2005, 2006 |
|
|
|
Free Software Foundation, Inc. |
|
|
|
|
|
|
|
This file is part of GDB. |
|
|
|
@ -22,6 +22,14 @@ |
|
|
|
#include "server.h" |
|
|
|
#include "linux-low.h" |
|
|
|
|
|
|
|
#include <sys/ptrace.h> |
|
|
|
|
|
|
|
#include "gdb_proc_service.h" |
|
|
|
|
|
|
|
#ifndef PTRACE_GET_THREAD_AREA |
|
|
|
#define PTRACE_GET_THREAD_AREA 25 |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef HAVE_SYS_REG_H |
|
|
|
#include <sys/reg.h> |
|
|
|
#endif |
|
|
|
@ -140,6 +148,23 @@ mips_breakpoint_at (CORE_ADDR where) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* 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 = { |
|
|
|
mips_num_regs, |
|
|
|
mips_regmap, |
|
|
|
|