* Makefile.in (arm-linux-nat.o): Update dependencies.
	* arm-linux-nat.c: Include "gdb_proc_service.h".
	(PTRACE_GET_THREAD_AREA): Define.
	(ps_get_thread_area): New function.
gdb/gdbserver/
	* Makefile.in (linux-arm-low.o): Update dependencies.
	* linux-arm-low.c: Include "../gdb_proc_service.h".
	(PTRACE_GET_THREAD_AREA): Define.
	(ps_get_thread_area): New function.
This commit is contained in:
Daniel Jacobowitz 2006-05-30 15:57:09 +00:00
parent eebf07fbf5
commit 9308fc88e7
6 changed files with 68 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2006-05-30 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (arm-linux-nat.o): Update dependencies.
* arm-linux-nat.c: Include "gdb_proc_service.h".
(PTRACE_GET_THREAD_AREA): Define.
(ps_get_thread_area): New function.
2006-05-28 Alexandre Oliva <aoliva@redhat.com>
* dwarf2-frame.h (enum dwarf2_frame_reg_rule): Add

View File

@ -1769,7 +1769,7 @@ arch-utils.o: arch-utils.c $(defs_h) $(arch_utils_h) $(buildsym_h) \
$(floatformat_h)
arm-linux-nat.o: arm-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
$(gdb_string_h) $(regcache_h) $(arm_tdep_h) $(gregset_h) \
$(target_h) $(linux_nat_h)
$(target_h) $(linux_nat_h) $(gdb_proc_service_h)
arm-linux-tdep.o: arm-linux-tdep.c $(defs_h) $(target_h) $(value_h) \
$(gdbtypes_h) $(floatformat_h) $(gdbcore_h) $(frame_h) $(regcache_h) \
$(doublest_h) $(solib_svr4_h) $(osabi_h) $(arm_tdep_h) \

View File

@ -37,6 +37,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 22
#endif
extern int arm_apcs_32;
#define typeNone 0x00
@ -694,6 +701,23 @@ arm_linux_kernel_u_size (void)
return (sizeof (struct user));
}
/* 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;
}
static unsigned int
get_linux_version (unsigned int *vmajor,
unsigned int *vminor,

View File

@ -1,3 +1,10 @@
2006-05-30 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (linux-arm-low.o): Update dependencies.
* linux-arm-low.c: Include "../gdb_proc_service.h".
(PTRACE_GET_THREAD_AREA): Define.
(ps_get_thread_area): New function.
2006-05-09 Nathan Sidwell <nathan@codesourcery.com>
* configure.srv (m68k*-*-uclinux*): New target.

View File

@ -269,7 +269,8 @@ linux_low_h = $(srcdir)/linux-low.h
linux-low.o: linux-low.c $(linux_low_h) $(server_h)
$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< @USE_THREAD_DB@
linux-arm-low.o: linux-arm-low.c $(linux_low_h) $(server_h)
linux-arm-low.o: linux-arm-low.c $(linux_low_h) $(server_h) \
$(gdb_proc_service_h)
linux-cris-low.o: linux-cris-low.c $(linux_low_h) $(server_h)
linux-crisv32-low.o: linux-crisv32-low.c $(linux_low_h) $(server_h)
linux-i386-low.o: linux-i386-low.c $(linux_low_h) $(server_h) \

View File

@ -1,5 +1,6 @@
/* GNU/Linux/ARM specific low level interface, for the remote server for GDB.
Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006
Free Software Foundation, Inc.
This file is part of GDB.
@ -22,6 +23,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 22
#endif
#ifdef HAVE_SYS_REG_H
#include <sys/reg.h>
#endif
@ -105,6 +114,23 @@ arm_reinsert_addr ()
return pc;
}
/* 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 = {
arm_num_regs,
arm_regmap,