This is the mail archive of the gdb-prs@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

tdep/1586: GDB doesn't support remote debug of ARM pic code


>Number:         1586
>Category:       tdep
>Synopsis:       GDB doesn't support remote debug of ARM pic code
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun Mar 14 21:48:00 UTC 2004
>Closed-Date:
>Last-Modified:
>Originator:     rschmitt@bluepeach.com
>Release:        GDB 6.1
>Organization:
>Environment:
I use cygwin with a GDB built for xscale-elf.  I also use connect to a remote target
>Description:
When stepping into an ARM subroutine in position independent code (-fpic), gdb will get confused and set the routine's entry breakpoint at the wrong place.

As I see it, there are two problems.  First, when using remote debug, gdb will not relocate the .plt section in the symbol table.  I've added code to relocate the .plt section with the same offset that is used for the .text section (see attached dif).  The second issue is that arm-tdep does not recognize the .plt trampolines.  I've added code to recognize the trampoline and correctly calculate the true offset. (see attachment)
>How-To-Repeat:
Build an application for the arm using -fpic.  Use gdb and remotely connect to the target.  Set a breakpoint within the pic code at a call to a subroutine and start the app using whatever mechanism is appropriate for the target.  When the breakpoint is hit, single step into the subroutine.  The breakpoint will be inserted at the wrong location and the target will not stop when entering into the routine.
>Fix:
Index: arm-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-tdep.c,v
retrieving revision 1.164.4.3
diff -c -r1.164.4.3 arm-tdep.c
*** arm-tdep.c	9 Mar 2004 17:10:19 -0000	1.164.4.3
--- arm-tdep.c	14 Mar 2004 21:22:46 -0000
***************
*** 24,29 ****
--- 24,30 ----
  #include "defs.h"
  #include "frame.h"
  #include "inferior.h"
+ #include "objfiles.h"
  #include "gdbcmd.h"
  #include "gdbcore.h"
  #include "gdb_string.h"
***************
*** 2372,2377 ****
--- 2373,2381 ----
  {
    CORE_ADDR start_addr;
  
+   if (in_plt_section (pc, name))
+     return (1) ;
+ 
    /* Find the starting address of the function containing the PC.  If
       the caller didn't give us a name, look it up at the same time.  */
    if (0 == find_pc_partial_function (pc, name ? NULL : &name, 
***************
*** 2381,2386 ****
--- 2385,2429 ----
    return strncmp (name, "_call_via_r", 11) == 0;
  }
  
+ CORE_ADDR
+ find_ddl_trampoline_target (CORE_ADDR pc)
+ {
+   CORE_ADDR ret_addr ;
+   CORE_ADDR rel_offset ;
+   char buf[4];
+ 
+   if (IN_SOLIB_CALL_TRAMPOLINE (pc, NULL))
+     {
+       /*
+        * Read .GOT offset (it's always at offset 6)
+        */
+       if (target_read_memory (pc + 12, buf, INT_REGISTER_RAW_SIZE))
+ 	{
+ 	  ret_addr = 0 ;
+ 	}
+       else
+ 	{
+ 	  rel_offset = extract_unsigned_integer (buf, INT_REGISTER_RAW_SIZE) ;
+ 	  /*
+ 	   * Now read function address
+ 	   */
+ 	  if (target_read_memory (pc + 12 + rel_offset, buf, 
+ 				  INT_REGISTER_RAW_SIZE))
+ 	    {
+ 	      ret_addr = 0 ;
+ 	    }
+ 	  else
+ 	    {
+ 	      ret_addr = extract_unsigned_integer (buf, INT_REGISTER_RAW_SIZE) ;
+ 	    }
+ 	}
+     }
+   else
+     ret_addr = 0 ;
+ 
+   return (ret_addr) ;
+ }
+ 
  /* If PC is in a Thumb call or return stub, return the address of the
     target PC, which is in a register.  The thunk functions are called
     _called_via_xx, where x is the register name.  The possible names
***************
*** 2391,2396 ****
--- 2434,2443 ----
  {
    char *name;
    CORE_ADDR start_addr;
+ 
+   start_addr = find_ddl_trampoline_target (pc) ;
+   if (start_addr != 0)
+     return (start_addr) ;
  
    /* Find the starting address and name of the function containing the PC.  */
    if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
Index: objfiles.h
===================================================================
RCS file: /cvs/src/src/gdb/objfiles.h,v
retrieving revision 1.35
diff -c -r1.35 objfiles.h
*** objfiles.h	14 Feb 2004 15:46:33 -0000	1.35
--- objfiles.h	14 Mar 2004 21:22:47 -0000
***************
*** 409,414 ****
--- 409,415 ----
         SOM version. */
  
      int sect_index_text;
+     int sect_index_plt;
      int sect_index_data;
      int sect_index_bss;
      int sect_index_rodata;
***************
*** 654,659 ****
--- 655,665 ----
       ((objfile->sect_index_text == -1) \
        ? (internal_error (__FILE__, __LINE__, "sect_index_text not initialized"), -1) \
        : objfile->sect_index_text)
+ 
+ #define SECT_OFF_PLT(objfile) \
+      ((objfile->sect_index_plt == -1) \
+       ? (internal_error (__FILE__, __LINE__, "sect_index_plt not initialized"), -1) \
+       : objfile->sect_index_plt)
  
  /* Sometimes the .bss section is missing from the objfile, so we don't
     want to die here. Let the users of SECT_OFF_BSS deal with an
Index: remote.c
===================================================================
RCS file: /cvs/src/src/gdb/remote.c,v
retrieving revision 1.130
diff -c -r1.130 remote.c
*** remote.c	25 Feb 2004 20:41:00 -0000	1.130
--- remote.c	14 Mar 2004 21:22:50 -0000
***************
*** 1992,1997 ****
--- 1992,1998 ----
  	  SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
  
    offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
+   offs->offsets[SECT_OFF_PLT (symfile_objfile)] = text_addr;
  
    /* This is a temporary kludge to force data and bss to use the same offsets
       because that's what nlmconv does now.  The real solution requires changes
***************
*** 1999,2005 ****
  
    offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
    offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
- 
    objfile_relocate (symfile_objfile, offs);
  }
  
--- 2000,2005 ----
Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.124
diff -c -r1.124 symfile.c
*** symfile.c	28 Feb 2004 18:04:37 -0000	1.124
--- symfile.c	14 Mar 2004 21:22:52 -0000
***************
*** 393,398 ****
--- 393,402 ----
    if (sect) 
      objfile->sect_index_text = sect->index;
  
+   sect = bfd_get_section_by_name (objfile->obfd, ".plt");
+   if (sect) 
+     objfile->sect_index_plt = sect->index;
+ 
    sect = bfd_get_section_by_name (objfile->obfd, ".data");
    if (sect) 
      objfile->sect_index_data = sect->index;
***************
*** 426,431 ****
--- 430,437 ----
      {
        if (objfile->sect_index_text == -1)
  	objfile->sect_index_text = 0;
+       if (objfile->sect_index_plt == -1)
+ 	objfile->sect_index_plt = 0;
        if (objfile->sect_index_data == -1)
  	objfile->sect_index_data = 0;
        if (objfile->sect_index_bss == -1)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: video/x-dv; name="gdbddl.dif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gdbddl.dif"

SW5kZXg6IGFybS10ZGVwLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri
L2FybS10ZGVwLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NC40LjMNCmRpZmYgLWMgLXIx
LjE2NC40LjMgYXJtLXRkZXAuYw0KKioqIGFybS10ZGVwLmMJOSBNYXIgMjAwNCAxNzoxMDoxOSAt
MDAwMAkxLjE2NC40LjMNCi0tLSBhcm0tdGRlcC5jCTE0IE1hciAyMDA0IDIxOjIyOjQ2IC0wMDAw
DQoqKioqKioqKioqKioqKioNCioqKiAyNCwyOSAqKioqDQotLS0gMjQsMzAgLS0tLQ0KICAjaW5j
bHVkZSAiZGVmcy5oIg0KICAjaW5jbHVkZSAiZnJhbWUuaCINCiAgI2luY2x1ZGUgImluZmVyaW9y
LmgiDQorICNpbmNsdWRlICJvYmpmaWxlcy5oIg0KICAjaW5jbHVkZSAiZ2RiY21kLmgiDQogICNp
bmNsdWRlICJnZGJjb3JlLmgiDQogICNpbmNsdWRlICJnZGJfc3RyaW5nLmgiDQoqKioqKioqKioq
KioqKioNCioqKiAyMzcyLDIzNzcgKioqKg0KLS0tIDIzNzMsMjM4MSAtLS0tDQogIHsNCiAgICBD
T1JFX0FERFIgc3RhcnRfYWRkcjsNCiAgDQorICAgaWYgKGluX3BsdF9zZWN0aW9uIChwYywgbmFt
ZSkpDQorICAgICByZXR1cm4gKDEpIDsNCisgDQogICAgLyogRmluZCB0aGUgc3RhcnRpbmcgYWRk
cmVzcyBvZiB0aGUgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgUEMuICBJZg0KICAgICAgIHRoZSBj
YWxsZXIgZGlkbid0IGdpdmUgdXMgYSBuYW1lLCBsb29rIGl0IHVwIGF0IHRoZSBzYW1lIHRpbWUu
ICAqLw0KICAgIGlmICgwID09IGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsIG5hbWUgPyBO
VUxMIDogJm5hbWUsIA0KKioqKioqKioqKioqKioqDQoqKiogMjM4MSwyMzg2ICoqKioNCi0tLSAy
Mzg1LDI0MjkgLS0tLQ0KICAgIHJldHVybiBzdHJuY21wIChuYW1lLCAiX2NhbGxfdmlhX3IiLCAx
MSkgPT0gMDsNCiAgfQ0KICANCisgQ09SRV9BRERSDQorIGZpbmRfZGRsX3RyYW1wb2xpbmVfdGFy
Z2V0IChDT1JFX0FERFIgcGMpDQorIHsNCisgICBDT1JFX0FERFIgcmV0X2FkZHIgOw0KKyAgIENP
UkVfQUREUiByZWxfb2Zmc2V0IDsNCisgICBjaGFyIGJ1Zls0XTsNCisgDQorICAgaWYgKElOX1NP
TElCX0NBTExfVFJBTVBPTElORSAocGMsIE5VTEwpKQ0KKyAgICAgew0KKyAgICAgICAvKg0KKyAg
ICAgICAgKiBSZWFkIC5HT1Qgb2Zmc2V0IChpdCdzIGFsd2F5cyBhdCBvZmZzZXQgNikNCisgICAg
ICAgICovDQorICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHBjICsgMTIsIGJ1ZiwgSU5U
X1JFR0lTVEVSX1JBV19TSVpFKSkNCisgCXsNCisgCSAgcmV0X2FkZHIgPSAwIDsNCisgCX0NCisg
ICAgICAgZWxzZQ0KKyAJew0KKyAJICByZWxfb2Zmc2V0ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRl
Z2VyIChidWYsIElOVF9SRUdJU1RFUl9SQVdfU0laRSkgOw0KKyAJICAvKg0KKyAJICAgKiBOb3cg
cmVhZCBmdW5jdGlvbiBhZGRyZXNzDQorIAkgICAqLw0KKyAJICBpZiAodGFyZ2V0X3JlYWRfbWVt
b3J5IChwYyArIDEyICsgcmVsX29mZnNldCwgYnVmLCANCisgCQkJCSAgSU5UX1JFR0lTVEVSX1JB
V19TSVpFKSkNCisgCSAgICB7DQorIAkgICAgICByZXRfYWRkciA9IDAgOw0KKyAJICAgIH0NCisg
CSAgZWxzZQ0KKyAJICAgIHsNCisgCSAgICAgIHJldF9hZGRyID0gZXh0cmFjdF91bnNpZ25lZF9p
bnRlZ2VyIChidWYsIElOVF9SRUdJU1RFUl9SQVdfU0laRSkgOw0KKyAJICAgIH0NCisgCX0NCisg
ICAgIH0NCisgICBlbHNlDQorICAgICByZXRfYWRkciA9IDAgOw0KKyANCisgICByZXR1cm4gKHJl
dF9hZGRyKSA7DQorIH0NCisgDQogIC8qIElmIFBDIGlzIGluIGEgVGh1bWIgY2FsbCBvciByZXR1
cm4gc3R1YiwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZQ0KICAgICB0YXJnZXQgUEMsIHdoaWNo
IGlzIGluIGEgcmVnaXN0ZXIuICBUaGUgdGh1bmsgZnVuY3Rpb25zIGFyZSBjYWxsZWQNCiAgICAg
X2NhbGxlZF92aWFfeHgsIHdoZXJlIHggaXMgdGhlIHJlZ2lzdGVyIG5hbWUuICBUaGUgcG9zc2li
bGUgbmFtZXMNCioqKioqKioqKioqKioqKg0KKioqIDIzOTEsMjM5NiAqKioqDQotLS0gMjQzNCwy
NDQzIC0tLS0NCiAgew0KICAgIGNoYXIgKm5hbWU7DQogICAgQ09SRV9BRERSIHN0YXJ0X2FkZHI7
DQorIA0KKyAgIHN0YXJ0X2FkZHIgPSBmaW5kX2RkbF90cmFtcG9saW5lX3RhcmdldCAocGMpIDsN
CisgICBpZiAoc3RhcnRfYWRkciAhPSAwKQ0KKyAgICAgcmV0dXJuIChzdGFydF9hZGRyKSA7DQog
IA0KICAgIC8qIEZpbmQgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIG5hbWUgb2YgdGhlIGZ1bmN0
aW9uIGNvbnRhaW5pbmcgdGhlIFBDLiAgKi8NCiAgICBpZiAoZmluZF9wY19wYXJ0aWFsX2Z1bmN0
aW9uIChwYywgJm5hbWUsICZzdGFydF9hZGRyLCBOVUxMKSA9PSAwKQ0KSW5kZXg6IG9iamZpbGVz
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL29iamZpbGVzLmgsdg0K
cmV0cmlldmluZyByZXZpc2lvbiAxLjM1DQpkaWZmIC1jIC1yMS4zNSBvYmpmaWxlcy5oDQoqKiog
b2JqZmlsZXMuaAkxNCBGZWIgMjAwNCAxNTo0NjozMyAtMDAwMAkxLjM1DQotLS0gb2JqZmlsZXMu
aAkxNCBNYXIgMjAwNCAyMToyMjo0NyAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogNDA5LDQx
NCAqKioqDQotLS0gNDA5LDQxNSAtLS0tDQogICAgICAgICBTT00gdmVyc2lvbi4gKi8NCiAgDQog
ICAgICBpbnQgc2VjdF9pbmRleF90ZXh0Ow0KKyAgICAgaW50IHNlY3RfaW5kZXhfcGx0Ow0KICAg
ICAgaW50IHNlY3RfaW5kZXhfZGF0YTsNCiAgICAgIGludCBzZWN0X2luZGV4X2JzczsNCiAgICAg
IGludCBzZWN0X2luZGV4X3JvZGF0YTsNCioqKioqKioqKioqKioqKg0KKioqIDY1NCw2NTkgKioq
Kg0KLS0tIDY1NSw2NjUgLS0tLQ0KICAgICAgICgob2JqZmlsZS0+c2VjdF9pbmRleF90ZXh0ID09
IC0xKSBcDQogICAgICAgID8gKGludGVybmFsX2Vycm9yIChfX0ZJTEVfXywgX19MSU5FX18sICJz
ZWN0X2luZGV4X3RleHQgbm90IGluaXRpYWxpemVkIiksIC0xKSBcDQogICAgICAgIDogb2JqZmls
ZS0+c2VjdF9pbmRleF90ZXh0KQ0KKyANCisgI2RlZmluZSBTRUNUX09GRl9QTFQob2JqZmlsZSkg
XA0KKyAgICAgICgob2JqZmlsZS0+c2VjdF9pbmRleF9wbHQgPT0gLTEpIFwNCisgICAgICAgPyAo
aW50ZXJuYWxfZXJyb3IgKF9fRklMRV9fLCBfX0xJTkVfXywgInNlY3RfaW5kZXhfcGx0IG5vdCBp
bml0aWFsaXplZCIpLCAtMSkgXA0KKyAgICAgICA6IG9iamZpbGUtPnNlY3RfaW5kZXhfcGx0KQ0K
ICANCiAgLyogU29tZXRpbWVzIHRoZSAuYnNzIHNlY3Rpb24gaXMgbWlzc2luZyBmcm9tIHRoZSBv
YmpmaWxlLCBzbyB3ZSBkb24ndA0KICAgICB3YW50IHRvIGRpZSBoZXJlLiBMZXQgdGhlIHVzZXJz
IG9mIFNFQ1RfT0ZGX0JTUyBkZWFsIHdpdGggYW4NCkluZGV4OiByZW1vdGUuYw0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvcmVtb3RlLmMsdg0KcmV0cmlldmluZyByZXZp
c2lvbiAxLjEzMA0KZGlmZiAtYyAtcjEuMTMwIHJlbW90ZS5jDQoqKiogcmVtb3RlLmMJMjUgRmVi
IDIwMDQgMjA6NDE6MDAgLTAwMDAJMS4xMzANCi0tLSByZW1vdGUuYwkxNCBNYXIgMjAwNCAyMToy
Mjo1MCAtMDAwMA0KKioqKioqKioqKioqKioqDQoqKiogMTk5MiwxOTk3ICoqKioNCi0tLSAxOTky
LDE5OTggLS0tLQ0KICAJICBTSVpFT0ZfTl9TRUNUSU9OX09GRlNFVFMgKHN5bWZpbGVfb2JqZmls
ZS0+bnVtX3NlY3Rpb25zKSk7DQogIA0KICAgIG9mZnMtPm9mZnNldHNbU0VDVF9PRkZfVEVYVCAo
c3ltZmlsZV9vYmpmaWxlKV0gPSB0ZXh0X2FkZHI7DQorICAgb2Zmcy0+b2Zmc2V0c1tTRUNUX09G
Rl9QTFQgKHN5bWZpbGVfb2JqZmlsZSldID0gdGV4dF9hZGRyOw0KICANCiAgICAvKiBUaGlzIGlz
IGEgdGVtcG9yYXJ5IGtsdWRnZSB0byBmb3JjZSBkYXRhIGFuZCBic3MgdG8gdXNlIHRoZSBzYW1l
IG9mZnNldHMNCiAgICAgICBiZWNhdXNlIHRoYXQncyB3aGF0IG5sbWNvbnYgZG9lcyBub3cuICBU
aGUgcmVhbCBzb2x1dGlvbiByZXF1aXJlcyBjaGFuZ2VzDQoqKioqKioqKioqKioqKioNCioqKiAx
OTk5LDIwMDUgKioqKg0KICANCiAgICBvZmZzLT5vZmZzZXRzW1NFQ1RfT0ZGX0RBVEEgKHN5bWZp
bGVfb2JqZmlsZSldID0gZGF0YV9hZGRyOw0KICAgIG9mZnMtPm9mZnNldHNbU0VDVF9PRkZfQlNT
IChzeW1maWxlX29iamZpbGUpXSA9IGRhdGFfYWRkcjsNCi0gDQogICAgb2JqZmlsZV9yZWxvY2F0
ZSAoc3ltZmlsZV9vYmpmaWxlLCBvZmZzKTsNCiAgfQ0KICANCi0tLSAyMDAwLDIwMDUgLS0tLQ0K
SW5kZXg6IHN5bWZpbGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIv
c3ltZmlsZS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjQNCmRpZmYgLWMgLXIxLjEyNCBz
eW1maWxlLmMNCioqKiBzeW1maWxlLmMJMjggRmViIDIwMDQgMTg6MDQ6MzcgLTAwMDAJMS4xMjQN
Ci0tLSBzeW1maWxlLmMJMTQgTWFyIDIwMDQgMjE6MjI6NTIgLTAwMDANCioqKioqKioqKioqKioq
Kg0KKioqIDM5MywzOTggKioqKg0KLS0tIDM5Myw0MDIgLS0tLQ0KICAgIGlmIChzZWN0KSANCiAg
ICAgIG9iamZpbGUtPnNlY3RfaW5kZXhfdGV4dCA9IHNlY3QtPmluZGV4Ow0KICANCisgICBzZWN0
ID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKG9iamZpbGUtPm9iZmQsICIucGx0Iik7DQorICAg
aWYgKHNlY3QpIA0KKyAgICAgb2JqZmlsZS0+c2VjdF9pbmRleF9wbHQgPSBzZWN0LT5pbmRleDsN
CisgDQogICAgc2VjdCA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChvYmpmaWxlLT5vYmZkLCAi
LmRhdGEiKTsNCiAgICBpZiAoc2VjdCkgDQogICAgICBvYmpmaWxlLT5zZWN0X2luZGV4X2RhdGEg
PSBzZWN0LT5pbmRleDsNCioqKioqKioqKioqKioqKg0KKioqIDQyNiw0MzEgKioqKg0KLS0tIDQz
MCw0MzcgLS0tLQ0KICAgICAgew0KICAgICAgICBpZiAob2JqZmlsZS0+c2VjdF9pbmRleF90ZXh0
ID09IC0xKQ0KICAJb2JqZmlsZS0+c2VjdF9pbmRleF90ZXh0ID0gMDsNCisgICAgICAgaWYgKG9i
amZpbGUtPnNlY3RfaW5kZXhfcGx0ID09IC0xKQ0KKyAJb2JqZmlsZS0+c2VjdF9pbmRleF9wbHQg
PSAwOw0KICAgICAgICBpZiAob2JqZmlsZS0+c2VjdF9pbmRleF9kYXRhID09IC0xKQ0KICAJb2Jq
ZmlsZS0+c2VjdF9pbmRleF9kYXRhID0gMDsNCiAgICAgICAgaWYgKG9iamZpbGUtPnNlY3RfaW5k
ZXhfYnNzID09IC0xKQ0K


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]