]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2003-08-26 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Tue, 26 Aug 2003 20:39:24 +0000 (20:39 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 26 Aug 2003 20:39:24 +0000 (20:39 +0000)
* i386-linux-nat.c (ps_get_thread_area): Make "desc" four "int"s
in size.  Add comments.

gdb/ChangeLog
gdb/i386-linux-nat.c

index dfb57e54cb618baa2c34893903e29fa67b8ade4a..e1491aca1ff88d0c5de7fcc7730da1ff29e79e8f 100644 (file)
@@ -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-25  Chris Demetriou  <cgd@broadcom.com>
 
        * configure.tgt: Document need for special "mipsisa64" handling.
index 4549b37ad1d676bfe4828735614d0d25713809c9..0da4613cb02edd111482cbc786a024adaf6e95ef 100644 (file)
@@ -687,11 +687,31 @@ i386_linux_dr_set (int regnum, unsigned long value)
     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
 ps_get_thread_area(const struct ps_prochandle *ph, 
                   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
 
   if  (ptrace (PTRACE_GET_THREAD_AREA,