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.
This commit is contained in:
parent
af8b88dd22
commit
cc7ad3eab3
|
@ -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.
|
||||||
|
|
|
@ -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…
Reference in New Issue