Browse Source

2003-08-26 Andrew Cagney <cagney@redhat.com>

* i386-linux-nat.c (ps_get_thread_area): Make "desc" four "int"s
	in size.  Add comments.
ezannoni_pie-20030916-branch
Andrew Cagney 23 years ago
parent
commit
cc7ad3eab3
  1. 5
      gdb/ChangeLog
  2. 22
      gdb/i386-linux-nat.c

5
gdb/ChangeLog

@ -1,3 +1,8 @@
2003-08-26 Andrew Cagney <cagney@redhat.com>
* i386-linux-nat.c (ps_get_thread_area): Make "desc" four "int"s
in size. Add comments.
2003-08-26 Jeff Johnston <jjohnstn@redhat.com> 2003-08-26 Jeff Johnston <jjohnstn@redhat.com>
* ia64-tdep.c (ia64_convert_from_func_addr): New function. * ia64-tdep.c (ia64_convert_from_func_addr): New function.

22
gdb/i386-linux-nat.c

@ -687,11 +687,31 @@ i386_linux_dr_set (int regnum, unsigned long value)
perror_with_name ("Couldn't write debug register"); perror_with_name ("Couldn't write debug register");
} }
/* Called by libthread_db. Return's a pointer to the thread local
storage (or it's descriptor). */
extern ps_err_e extern ps_err_e
ps_get_thread_area(const struct ps_prochandle *ph, ps_get_thread_area(const struct ps_prochandle *ph,
lwpid_t lwpid, int idx, void **base) lwpid_t lwpid, int idx, void **base)
{ {
unsigned long int desc[3]; /* NOTE: cagney/2003-08-26: The definition of this buffer is found
in the kernel header <asm-i386/ldt.h>. It, after padding, is 4 x
4 byte integers in size: "entry_number", "base_addr", "limit",
and a bunch of status bits.
The values returned by this ptrace call should be part of the
regcache buffer, and ps_get_thread_area should channel its
request through the regcache. That way remote targets could
provide the value using the remote protocol and not this direct
call.
Is this function needed? I'm guessing that the "base" is the
address of a a descriptor that libthread_db uses to find the
thread local address base that GDB needs. Perhaphs that
descriptor is defined by the ABI. Anyway, given that
libthread_db calls this function without prompting (gdb
requesting tls base) I guess it needs info in there anyway. */
unsigned int desc[4];
gdb_assert (sizeof (int) == 4);
#define PTRACE_GET_THREAD_AREA 25 #define PTRACE_GET_THREAD_AREA 25
if (ptrace (PTRACE_GET_THREAD_AREA, if (ptrace (PTRACE_GET_THREAD_AREA,

Loading…
Cancel
Save