Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: [rfa:threads] Report when using libthread_db
@ 2003-09-08  2:28 Michael Elizabeth Chastain
  2003-09-08  3:01 ` Daniel Jacobowitz
  2003-09-09 14:29 ` Elena Zannoni
  0 siblings, 2 replies; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-09-08  2:28 UTC (permalink / raw)
  To: ezannoni; +Cc: ac131313, cgd, gdb-patches, kettenis, msnyder

Somebody's mailer expanded the tabs to spaces, which made me
do a little more work.  No big deal.  And it needs a ChangeLog.

Other than that, this patch works fine in my test bed.  It fixes the
problem all right.

I would write it differently, with the "Reading symbols ..." as a common
part and then a "(|Using host libthread_db ...)".  But I'd like to just
get it done and move on to the next problem.

Recommended for approval, on HEAD only, not the branch.
The new message is not on the branch so this is not needed
on the branch.

Michael C

===

--- gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp.1   Fri Aug 15 11:20:44 2003
+++ gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp     Fri Aug 15 11:23:31 2003
@@ -67,7 +67,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 
 # Load the object file.
 gdb_test "add-symbol-file ${binfile} 0" \
-       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
+       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
        "add-symbol-file ${testfile}.o 0" \
        "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x0\[\r\n\]+\\(y or n\\) " \
        "y"
@@ -116,7 +116,7 @@ gdb_test "set \$offset = 0x10000" ""
 
 # Load the object file.
 gdb_test "add-symbol-file ${binfile} \$offset" \
-       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
+       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
        "add-symbol-file ${testfile}.o \$offset" \
        "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x10000\[\r\n\]+\\(y or n\\) " \
        "y"


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-09-08  2:28 [rfa:threads] Report when using libthread_db Michael Elizabeth Chastain
@ 2003-09-08  3:01 ` Daniel Jacobowitz
  2003-09-09 14:29 ` Elena Zannoni
  1 sibling, 0 replies; 18+ messages in thread
From: Daniel Jacobowitz @ 2003-09-08  3:01 UTC (permalink / raw)
  To: Michael Elizabeth Chastain
  Cc: ezannoni, ac131313, cgd, gdb-patches, kettenis, msnyder

On Sun, Sep 07, 2003 at 10:28:46PM -0400, Michael Elizabeth Chastain wrote:
> Somebody's mailer expanded the tabs to spaces, which made me
> do a little more work.  No big deal.  And it needs a ChangeLog.
> 
> Other than that, this patch works fine in my test bed.  It fixes the
> problem all right.
> 
> I would write it differently, with the "Reading symbols ..." as a common
> part and then a "(|Using host libthread_db ...)".  But I'd like to just
> get it done and move on to the next problem.
> 
> Recommended for approval, on HEAD only, not the branch.
> The new message is not on the branch so this is not needed
> on the branch.

Before we go ahead with this, I'd like to point out that the new
message looks pretty ugly, IMVHO.  Before we add it into the test
scripts as-is can we get it printed on a separate line?

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-09-08  2:28 [rfa:threads] Report when using libthread_db Michael Elizabeth Chastain
  2003-09-08  3:01 ` Daniel Jacobowitz
@ 2003-09-09 14:29 ` Elena Zannoni
  1 sibling, 0 replies; 18+ messages in thread
From: Elena Zannoni @ 2003-09-09 14:29 UTC (permalink / raw)
  To: Michael Elizabeth Chastain
  Cc: ezannoni, ac131313, cgd, gdb-patches, kettenis, msnyder

Michael Elizabeth Chastain writes:
 > Somebody's mailer expanded the tabs to spaces, which made me
 > do a little more work.  No big deal.  And it needs a ChangeLog.
 > 

I know it needs a CL, this was just something I had laying around to
see if it would help. I'll post a proper patch now. Not sure what
happened with the spaces.

 > Other than that, this patch works fine in my test bed.  It fixes the
 > problem all right.
 > 

thanks for testing it.

 > I would write it differently, with the "Reading symbols ..." as a common
 > part and then a "(|Using host libthread_db ...)".  But I'd like to just
 > get it done and move on to the next problem.
 > 

I can change that, it would shorten the pattern.

 > Recommended for approval, on HEAD only, not the branch.
 > The new message is not on the branch so this is not needed
 > on the branch.
 > 

ok
elena


 > Michael C
 > 
 > ===
 > 
 > --- gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp.1   Fri Aug 15 11:20:44 2003
 > +++ gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp     Fri Aug 15 11:23:31 2003
 > @@ -67,7 +67,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 >  
 >  # Load the object file.
 >  gdb_test "add-symbol-file ${binfile} 0" \
 > -       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
 > +       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
 >         "add-symbol-file ${testfile}.o 0" \
 >         "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x0\[\r\n\]+\\(y or n\\) " \
 >         "y"
 > @@ -116,7 +116,7 @@ gdb_test "set \$offset = 0x10000" ""
 >  
 >  # Load the object file.
 >  gdb_test "add-symbol-file ${binfile} \$offset" \
 > -       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
 > +       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
 >         "add-symbol-file ${testfile}.o \$offset" \
 >         "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x10000\[\r\n\]+\\(y or n\\) " \
 >         "y"


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-09-08  3:05 Michael Elizabeth Chastain
@ 2003-09-08 13:21 ` Andrew Cagney
  0 siblings, 0 replies; 18+ messages in thread
From: Andrew Cagney @ 2003-09-08 13:21 UTC (permalink / raw)
  To: Michael Elizabeth Chastain
  Cc: drow, cgd, ezannoni, gdb-patches, kettenis, msnyder

> The new message is printed on a separate line:
> 
>   (gdb) file object.o^M
>   Reading symbols from object.o...done.^M
>   Using host libthread_db library "/lib/libthread_db.so.1".^M
>   (gdb) FAIL: gdb.stabs/weird.exp: Errors reading weirdx.o
> 
> Or am I missing something?

It depends.  Try 'gdb object.o'. If it gets mixed in with outer library 
loading info then it can end up on the same line as something else.

Andrew



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
@ 2003-09-08  3:05 Michael Elizabeth Chastain
  2003-09-08 13:21 ` Andrew Cagney
  0 siblings, 1 reply; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-09-08  3:05 UTC (permalink / raw)
  To: drow; +Cc: ac131313, cgd, ezannoni, gdb-patches, kettenis, msnyder

The new message is printed on a separate line:

  (gdb) file object.o^M
  Reading symbols from object.o...done.^M
  Using host libthread_db library "/lib/libthread_db.so.1".^M
  (gdb) FAIL: gdb.stabs/weird.exp: Errors reading weirdx.o

Or am I missing something?

Michael C


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-23  1:49 Michael Elizabeth Chastain
  2003-09-04 17:24 ` Andrew Cagney
@ 2003-09-05 15:42 ` Elena Zannoni
  1 sibling, 0 replies; 18+ messages in thread
From: Elena Zannoni @ 2003-09-05 15:42 UTC (permalink / raw)
  To: Michael Elizabeth Chastain
  Cc: ac131313, kettenis, msnyder, cgd, ezannoni, gdb-patches

Michael Elizabeth Chastain writes:
 > Tested on native i686-pc-linux-gnu, red hat linux 8,
 > gcc v2 and v3, dwarf-2 and stabs+.
 > 
 > The extra messages cause regressions in three tests:
 > 
 >   gdb.base/relocate.exp: add-symbol-file relocate.o $offset
 >   gdb.base/relocate.exp: add-symbol-file relocate.o 0
 >   gdb.stabs/weird.exp: Errors reading weirdx.o
 > 
 > The relocate.exp FAILs happened in every configuration,
 > and the weird.exp FAILs happened with -gstabs+.
 > 
 > Looking at gdb.log there doesn't appear to be an actual semantic
 > problem.  Still I would be nervous about sliding this into the release.
 > How about HEAD only, and then fix up the affected tests?
 > 
 > Michael C
 > 
 >   2003-08-05  Andrew Cagney  <cagney@redhat.com>
 > 
 > 	* thread-db.c (verbose_dlsym): New function.
 > 	(thread_db_load): Use verbose_dlsym
 > 	(thread_db_new_objfile): Print that libthread_db was loaded, and
 > 	that thread debugging was enabled.


Here is a patch which I added to the RH gdb, to deal with the
relocate.exp errors. Let me know if it works in your testbed.

I didn't notice the weird.exp one because we don't test with stabs.

elena


--- gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp.1   Fri Aug 15 11:20:44 2003
+++ gdb+dejagnu-5.3.90_20030710/gdb/testsuite/gdb.base/relocate.exp     Fri Aug 15 11:23:31 2003
@@ -67,7 +67,7 @@ gdb_reinitialize_dir $srcdir/$subdir
 
 # Load the object file.
 gdb_test "add-symbol-file ${binfile} 0" \
-       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
+       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
        "add-symbol-file ${testfile}.o 0" \
        "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x0\[\r\n\]+\\(y or n\\) " \
        "y"
@@ -116,7 +116,7 @@ gdb_test "set \$offset = 0x10000" ""
 
 # Load the object file.
 gdb_test "add-symbol-file ${binfile} \$offset" \
-       "Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\." \
+       "(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\.)|(Reading symbols from .*${testfile}\\.o\\.\\.\\.done\\..*Using host libthread_db library .*libthread_db.so.*\\.)" \
        "add-symbol-file ${testfile}.o \$offset" \
        "add symbol table from file \".*${testfile}\\.o\" at\[ \t\r\n\]+\.text_addr = 0x10000\[\r\n\]+\\(y or n\\) " \
        "y"


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-23  1:49 Michael Elizabeth Chastain
@ 2003-09-04 17:24 ` Andrew Cagney
  2003-09-05 15:42 ` Elena Zannoni
  1 sibling, 0 replies; 18+ messages in thread
From: Andrew Cagney @ 2003-09-04 17:24 UTC (permalink / raw)
  To: Michael Elizabeth Chastain; +Cc: kettenis, msnyder, cgd, ezannoni, gdb-patches

> Tested on native i686-pc-linux-gnu, red hat linux 8,
> gcc v2 and v3, dwarf-2 and stabs+.
> 
> The extra messages cause regressions in three tests:
> 
>   gdb.base/relocate.exp: add-symbol-file relocate.o $offset
>   gdb.base/relocate.exp: add-symbol-file relocate.o 0
>   gdb.stabs/weird.exp: Errors reading weirdx.o
> 
> The relocate.exp FAILs happened in every configuration,
> and the weird.exp FAILs happened with -gstabs+.
> 
> Looking at gdb.log there doesn't appear to be an actual semantic
> problem.  Still I would be nervous about sliding this into the release.
> How about HEAD only, and then fix up the affected tests?

Good idea.  I've committed it to head.  Now to find a m/c with the problems.

Andrew



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
@ 2003-08-23  1:49 Michael Elizabeth Chastain
  2003-09-04 17:24 ` Andrew Cagney
  2003-09-05 15:42 ` Elena Zannoni
  0 siblings, 2 replies; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-08-23  1:49 UTC (permalink / raw)
  To: ac131313, kettenis, msnyder; +Cc: cgd, ezannoni, gdb-patches

Tested on native i686-pc-linux-gnu, red hat linux 8,
gcc v2 and v3, dwarf-2 and stabs+.

The extra messages cause regressions in three tests:

  gdb.base/relocate.exp: add-symbol-file relocate.o $offset
  gdb.base/relocate.exp: add-symbol-file relocate.o 0
  gdb.stabs/weird.exp: Errors reading weirdx.o

The relocate.exp FAILs happened in every configuration,
and the weird.exp FAILs happened with -gstabs+.

Looking at gdb.log there doesn't appear to be an actual semantic
problem.  Still I would be nervous about sliding this into the release.
How about HEAD only, and then fix up the affected tests?

Michael C

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

	* thread-db.c (verbose_dlsym): New function.
	(thread_db_load): Use verbose_dlsym
	(thread_db_new_objfile): Print that libthread_db was loaded, and
	that thread debugging was enabled.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
@ 2003-08-22 19:40 Michael Elizabeth Chastain
  0 siblings, 0 replies; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-08-22 19:40 UTC (permalink / raw)
  To: ac131313, kettenis, msnyder; +Cc: cgd, ezannoni, gdb-patches

Crap.  I'm having test bed troubles here.  My test bed says that
there are regressions in gdb.base/relocate.exp, but it turns out
that I have extra crap in my versions of gdb, so my before/after
property is dirty.  Then I re-ran it and borked up the commands.

I gotta forget about other stuff and focus on getting a clean
test of this patch.

Michael C

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

	  * thread-db.c (verbose_dlsym): New function.
	  (thread_db_load): Use verbose_dlsym
	  (thread_db_new_objfile): Print that libthread_db was loaded, and
	  that thread debugging was enabled.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-21 22:10         ` Andrew Cagney
@ 2003-08-21 22:47           ` Mark Kettenis
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Kettenis @ 2003-08-21 22:47 UTC (permalink / raw)
  To: ac131313; +Cc: msnyder, cgd, ezannoni, gdb-patches, mec

   Date: Thu, 21 Aug 2003 18:10:42 -0400
   From: Andrew Cagney <ac131313@redhat.com>

   [I've committed this to cagney_x86i386-20030821-branch, debugging 
   threads without this is a pain]

[Probably highly dependent on what version of SCO Un^H^H^H^H^H^H
Linux, you're using.]

   Michael,  Mark,
   OK for 6.0 branch (probably a bit late) and/or mainline?

Doesn't seem too risky to me.  Threads debugging has its quirks, and
probably isn't working flawlessly for most people anyway.

Mark


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-08 14:51       ` Andrew Cagney
@ 2003-08-21 22:10         ` Andrew Cagney
  2003-08-21 22:47           ` Mark Kettenis
  0 siblings, 1 reply; 18+ messages in thread
From: Andrew Cagney @ 2003-08-21 22:10 UTC (permalink / raw)
  To: Michael Snyder, Mark Kettenis
  Cc: cgd, Elena Zannoni, gdb-patches, Michael Elizabeth Chastain

[-- Attachment #1: Type: text/plain, Size: 181 bytes --]

[I've committed this to cagney_x86i386-20030821-branch, debugging 
threads without this is a pain]

Michael,  Mark,
OK for 6.0 branch (probably a bit late) and/or mainline?

Andrew

[-- Attachment #2: mailbox-message://ac131313@movemail/fsf/gdb/patches#989141 --]
[-- Type: message/rfc822, Size: 8144 bytes --]

[-- Attachment #2.1.1: Type: text/plain, Size: 697 bytes --]

> At Thu, 7 Aug 2003 19:58:06 +0000 (UTC), "Andrew Cagney" wrote:
> 
>> Anyone know how to get a version number from libthread_db, or it's
>> absolute path?
> 
> 
> looks like there are two ways one can do this:
> 
> dlinfo() on Solaris (and other systems that have it -- but it doesn't
> appear common).
> 
> dladdr() on systems that have it and this one is more widespread (incl
> solaris, linux at least with -D_GNU_SOURCE, and it looks like NetBSD
> has it as well).

Works for me!

...
Using host libthread_db library "/lib64/tls/libthread_db.so.1".
...

now if only there was also some sort of embedded revision/build string :-(

Michael, Mark, ok for mainline?  Too risky for 6.0?

Andrew


[-- Attachment #2.1.2: diffs --]
[-- Type: text/plain, Size: 4081 bytes --]

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

	* thread-db.c (verbose_dlsym): New function.
	(thread_db_load): Use verbose_dlsym
	(thread_db_new_objfile): Print that libthread_db was loaded, and
	that thread debugging was enabled.

Index: ./gdb/thread-db.c
===================================================================
RCS file: /cvs/src/src/gdb/thread-db.c,v
retrieving revision 1.33
diff -u -r1.33 thread-db.c
--- ./gdb/thread-db.c	5 Jun 2003 18:22:02 -0000	1.33
+++ ./gdb/thread-db.c	8 Aug 2003 14:42:47 -0000
@@ -375,6 +375,15 @@
   target_beneath = target;
 }
 
+static void *
+verbose_dlsym (void *handle, const char *name)
+{
+  void *sym = dlsym (handle, name);
+  if (sym == NULL)
+    warning ("Symbol \"%s\" not found in libthread_db: %s", name, dlerror ());
+  return sym;
+}
+
 static int
 thread_db_load (void)
 {
@@ -394,47 +403,47 @@
   /* Initialize pointers to the dynamic library functions we will use.
      Essential functions first.  */
 
-  td_init_p = dlsym (handle, "td_init");
+  td_init_p = verbose_dlsym (handle, "td_init");
   if (td_init_p == NULL)
     return 0;
 
-  td_ta_new_p = dlsym (handle, "td_ta_new");
+  td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
   if (td_ta_new_p == NULL)
     return 0;
 
-  td_ta_map_id2thr_p = dlsym (handle, "td_ta_map_id2thr");
+  td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
   if (td_ta_map_id2thr_p == NULL)
     return 0;
 
-  td_ta_map_lwp2thr_p = dlsym (handle, "td_ta_map_lwp2thr");
+  td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
   if (td_ta_map_lwp2thr_p == NULL)
     return 0;
 
-  td_ta_thr_iter_p = dlsym (handle, "td_ta_thr_iter");
+  td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
   if (td_ta_thr_iter_p == NULL)
     return 0;
 
-  td_thr_validate_p = dlsym (handle, "td_thr_validate");
+  td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
   if (td_thr_validate_p == NULL)
     return 0;
 
-  td_thr_get_info_p = dlsym (handle, "td_thr_get_info");
+  td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
   if (td_thr_get_info_p == NULL)
     return 0;
 
-  td_thr_getfpregs_p = dlsym (handle, "td_thr_getfpregs");
+  td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
   if (td_thr_getfpregs_p == NULL)
     return 0;
 
-  td_thr_getgregs_p = dlsym (handle, "td_thr_getgregs");
+  td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
   if (td_thr_getgregs_p == NULL)
     return 0;
 
-  td_thr_setfpregs_p = dlsym (handle, "td_thr_setfpregs");
+  td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
   if (td_thr_setfpregs_p == NULL)
     return 0;
 
-  td_thr_setgregs_p = dlsym (handle, "td_thr_setgregs");
+  td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
   if (td_thr_setgregs_p == NULL)
     return 0;
 
@@ -587,6 +596,30 @@
 {
   td_err_e err;
 
+  /* First time through, report that libthread_db was successfuly
+     loaded.  Can't print this in in thread_db_load as, at that stage,
+     the interpreter and it's console haven't started.  The real
+     problem here is that libthread_db is loaded too early - it should
+     only be loaded when there is a program to debug.  */
+  {
+    static int dejavu;
+    if (!dejavu)
+      {
+	Dl_info info;
+	const char *library = NULL;
+	/* Try dladdr.  */
+	if (dladdr ((*td_ta_new_p), &info) != 0)
+	  library = info.dli_fname;
+	/* Try dlinfo?  */
+	if (library == NULL)
+	  /* Paranoid - don't let a NULL path slip through.  */
+	  library = LIBTHREAD_DB_SO;
+	printf_unfiltered ("Using host libthread_db library \"%s\".\n",
+			   library);
+	dejavu = 1;
+      }
+  }
+
   /* Don't attempt to use thread_db on targets which can not run
      (core files).  */
   if (objfile == NULL || !target_has_execution)
@@ -624,6 +657,8 @@
       break;
 
     case TD_OK:
+      printf_unfiltered ("[Thread debugging using libthread_db enabled]\n");
+
       /* The thread library was detected.  Activate the thread_db target.  */
       push_target (&thread_db_ops);
       using_thread_db = 1;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
@ 2003-08-08 15:51 Michael Elizabeth Chastain
  0 siblings, 0 replies; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-08-08 15:51 UTC (permalink / raw)
  To: ac131313, cgd; +Cc: ezannoni, gdb-patches

> Michael, Mark, ok for mainline?  Too risky for 6.0?

Proofread, but not tested.

I would say, throw it on mainline and see if it bounces.
But keep it out of 6.0.  It doesn't fix a regression or a serious bug.

Michael C


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-07 20:31     ` cgd
@ 2003-08-08 14:51       ` Andrew Cagney
  2003-08-21 22:10         ` Andrew Cagney
  0 siblings, 1 reply; 18+ messages in thread
From: Andrew Cagney @ 2003-08-08 14:51 UTC (permalink / raw)
  To: cgd; +Cc: Elena Zannoni, gdb-patches, Michael Elizabeth Chastain

[-- Attachment #1: Type: text/plain, Size: 697 bytes --]

> At Thu, 7 Aug 2003 19:58:06 +0000 (UTC), "Andrew Cagney" wrote:
> 
>> Anyone know how to get a version number from libthread_db, or it's
>> absolute path?
> 
> 
> looks like there are two ways one can do this:
> 
> dlinfo() on Solaris (and other systems that have it -- but it doesn't
> appear common).
> 
> dladdr() on systems that have it and this one is more widespread (incl
> solaris, linux at least with -D_GNU_SOURCE, and it looks like NetBSD
> has it as well).

Works for me!

...
Using host libthread_db library "/lib64/tls/libthread_db.so.1".
...

now if only there was also some sort of embedded revision/build string :-(

Michael, Mark, ok for mainline?  Too risky for 6.0?

Andrew


[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 4081 bytes --]

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

	* thread-db.c (verbose_dlsym): New function.
	(thread_db_load): Use verbose_dlsym
	(thread_db_new_objfile): Print that libthread_db was loaded, and
	that thread debugging was enabled.

Index: ./gdb/thread-db.c
===================================================================
RCS file: /cvs/src/src/gdb/thread-db.c,v
retrieving revision 1.33
diff -u -r1.33 thread-db.c
--- ./gdb/thread-db.c	5 Jun 2003 18:22:02 -0000	1.33
+++ ./gdb/thread-db.c	8 Aug 2003 14:42:47 -0000
@@ -375,6 +375,15 @@
   target_beneath = target;
 }
 
+static void *
+verbose_dlsym (void *handle, const char *name)
+{
+  void *sym = dlsym (handle, name);
+  if (sym == NULL)
+    warning ("Symbol \"%s\" not found in libthread_db: %s", name, dlerror ());
+  return sym;
+}
+
 static int
 thread_db_load (void)
 {
@@ -394,47 +403,47 @@
   /* Initialize pointers to the dynamic library functions we will use.
      Essential functions first.  */
 
-  td_init_p = dlsym (handle, "td_init");
+  td_init_p = verbose_dlsym (handle, "td_init");
   if (td_init_p == NULL)
     return 0;
 
-  td_ta_new_p = dlsym (handle, "td_ta_new");
+  td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
   if (td_ta_new_p == NULL)
     return 0;
 
-  td_ta_map_id2thr_p = dlsym (handle, "td_ta_map_id2thr");
+  td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
   if (td_ta_map_id2thr_p == NULL)
     return 0;
 
-  td_ta_map_lwp2thr_p = dlsym (handle, "td_ta_map_lwp2thr");
+  td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
   if (td_ta_map_lwp2thr_p == NULL)
     return 0;
 
-  td_ta_thr_iter_p = dlsym (handle, "td_ta_thr_iter");
+  td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
   if (td_ta_thr_iter_p == NULL)
     return 0;
 
-  td_thr_validate_p = dlsym (handle, "td_thr_validate");
+  td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
   if (td_thr_validate_p == NULL)
     return 0;
 
-  td_thr_get_info_p = dlsym (handle, "td_thr_get_info");
+  td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
   if (td_thr_get_info_p == NULL)
     return 0;
 
-  td_thr_getfpregs_p = dlsym (handle, "td_thr_getfpregs");
+  td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
   if (td_thr_getfpregs_p == NULL)
     return 0;
 
-  td_thr_getgregs_p = dlsym (handle, "td_thr_getgregs");
+  td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
   if (td_thr_getgregs_p == NULL)
     return 0;
 
-  td_thr_setfpregs_p = dlsym (handle, "td_thr_setfpregs");
+  td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
   if (td_thr_setfpregs_p == NULL)
     return 0;
 
-  td_thr_setgregs_p = dlsym (handle, "td_thr_setgregs");
+  td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
   if (td_thr_setgregs_p == NULL)
     return 0;
 
@@ -587,6 +596,30 @@
 {
   td_err_e err;
 
+  /* First time through, report that libthread_db was successfuly
+     loaded.  Can't print this in in thread_db_load as, at that stage,
+     the interpreter and it's console haven't started.  The real
+     problem here is that libthread_db is loaded too early - it should
+     only be loaded when there is a program to debug.  */
+  {
+    static int dejavu;
+    if (!dejavu)
+      {
+	Dl_info info;
+	const char *library = NULL;
+	/* Try dladdr.  */
+	if (dladdr ((*td_ta_new_p), &info) != 0)
+	  library = info.dli_fname;
+	/* Try dlinfo?  */
+	if (library == NULL)
+	  /* Paranoid - don't let a NULL path slip through.  */
+	  library = LIBTHREAD_DB_SO;
+	printf_unfiltered ("Using host libthread_db library \"%s\".\n",
+			   library);
+	dejavu = 1;
+      }
+  }
+
   /* Don't attempt to use thread_db on targets which can not run
      (core files).  */
   if (objfile == NULL || !target_has_execution)
@@ -624,6 +657,8 @@
       break;
 
     case TD_OK:
+      printf_unfiltered ("[Thread debugging using libthread_db enabled]\n");
+
       /* The thread library was detected.  Activate the thread_db target.  */
       push_target (&thread_db_ops);
       using_thread_db = 1;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
       [not found]   ` <mailpost.1060286286.1556@news-sj1-1>
@ 2003-08-07 20:31     ` cgd
  2003-08-08 14:51       ` Andrew Cagney
  0 siblings, 1 reply; 18+ messages in thread
From: cgd @ 2003-08-07 20:31 UTC (permalink / raw)
  To: ac131313; +Cc: Elena Zannoni, gdb-patches, Michael Elizabeth Chastain

At Thu, 7 Aug 2003 19:58:06 +0000 (UTC), "Andrew Cagney" wrote:
> Anyone know how to get a version number from libthread_db, or it's
> absolute path?

looks like there are two ways one can do this:

dlinfo() on Solaris (and other systems that have it -- but it doesn't
appear common).

dladdr() on systems that have it and this one is more widespread (incl
solaris, linux at least with -D_GNU_SOURCE, and it looks like NetBSD
has it as well).

Use dladdr like:

{
    int rv;
    Dl_info dli;
    rv = dladdr(cosine, &dli);
    printf ("rv = %d\n", rv);
    printf ("name = %s\n", dli.dli_fname);
}

(that example should drop into example provided in the RH 7.3 x86
'dlopen' manual page.  I'm not sure the original source of that manual
page, though...  8-)

(works for dlsym'd addresses, but doesn't necessarily work as one
would naively expect for symbols needed directly by the main program,
of course...)



cgd


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-05 19:26 Andrew Cagney
@ 2003-08-07 19:57 ` Andrew Cagney
       [not found]   ` <mailpost.1060286286.1556@news-sj1-1>
  0 siblings, 1 reply; 18+ messages in thread
From: Andrew Cagney @ 2003-08-07 19:57 UTC (permalink / raw)
  To: Elena Zannoni, gdb-patches, Michael Elizabeth Chastain

[-- Attachment #1: Type: text/plain, Size: 863 bytes --]

Here's a revised patch.  The `Using ...' message now appears after the 
copyright.

GNU gdb 2003-08-05-cvs
...
This GDB was configured as "x86_64-unknown-linux-gnu".
(gdb) file 
/home/cagney/PENDING/2003-08-05-warn-thread-db/N-x86_64-unknown-linux
-gnu/gdb/testsuite/gdb.threads/pthreads
Reading symbols from 
/home/cagney/PENDING/2003-08-05-warn-thread-db/N-x86_64-unk
nown-linux-gnu/gdb/testsuite/gdb.threads/pthreads...done.
Using host libthread_db library "libthread_db.so.1"
(gdb) ...
(gdb) run
Starting program: 
/home/cagney/PENDING/2003-08-05-warn-thread-db/N-x86_64-unknow
n-linux-gnu/gdb/testsuite/gdb.threads/pthreads
[Thread debugging using libthread_db enabled]
[New Thread 182894192832 (LWP 28501)]
[Switching to Thread 182894192832 (LWP 28501)]

Thoughts?

Anyone know how to get a version number from libthread_db, or it's 
absolute path?

Andrew

[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 3806 bytes --]

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

	* thread-db.c (verbose_dlsym): New function.
	(thread_db_load): Use verbose_dlsym
	(thread_db_new_objfile): Print that libthread_db was loaded, and
	that thread debugging was enabled.

Index: thread-db.c
===================================================================
RCS file: /cvs/src/src/gdb/thread-db.c,v
retrieving revision 1.33
diff -u -r1.33 thread-db.c
--- thread-db.c	5 Jun 2003 18:22:02 -0000	1.33
+++ thread-db.c	7 Aug 2003 18:58:40 -0000
@@ -375,6 +375,15 @@
   target_beneath = target;
 }
 
+static void *
+verbose_dlsym (void *handle, const char *name)
+{
+  void *sym = dlsym (handle, name);
+  if (sym == NULL)
+    warning ("Symbol \"%s\" not found in libthread_db: %s", name, dlerror ());
+  return sym;
+}
+
 static int
 thread_db_load (void)
 {
@@ -394,47 +403,47 @@
   /* Initialize pointers to the dynamic library functions we will use.
      Essential functions first.  */
 
-  td_init_p = dlsym (handle, "td_init");
+  td_init_p = verbose_dlsym (handle, "td_init");
   if (td_init_p == NULL)
     return 0;
 
-  td_ta_new_p = dlsym (handle, "td_ta_new");
+  td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
   if (td_ta_new_p == NULL)
     return 0;
 
-  td_ta_map_id2thr_p = dlsym (handle, "td_ta_map_id2thr");
+  td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
   if (td_ta_map_id2thr_p == NULL)
     return 0;
 
-  td_ta_map_lwp2thr_p = dlsym (handle, "td_ta_map_lwp2thr");
+  td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
   if (td_ta_map_lwp2thr_p == NULL)
     return 0;
 
-  td_ta_thr_iter_p = dlsym (handle, "td_ta_thr_iter");
+  td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
   if (td_ta_thr_iter_p == NULL)
     return 0;
 
-  td_thr_validate_p = dlsym (handle, "td_thr_validate");
+  td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
   if (td_thr_validate_p == NULL)
     return 0;
 
-  td_thr_get_info_p = dlsym (handle, "td_thr_get_info");
+  td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
   if (td_thr_get_info_p == NULL)
     return 0;
 
-  td_thr_getfpregs_p = dlsym (handle, "td_thr_getfpregs");
+  td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
   if (td_thr_getfpregs_p == NULL)
     return 0;
 
-  td_thr_getgregs_p = dlsym (handle, "td_thr_getgregs");
+  td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
   if (td_thr_getgregs_p == NULL)
     return 0;
 
-  td_thr_setfpregs_p = dlsym (handle, "td_thr_setfpregs");
+  td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
   if (td_thr_setfpregs_p == NULL)
     return 0;
 
-  td_thr_setgregs_p = dlsym (handle, "td_thr_setgregs");
+  td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
   if (td_thr_setgregs_p == NULL)
     return 0;
 
@@ -587,6 +596,21 @@
 {
   td_err_e err;
 
+  /* First time through, report that libthread_db was successfuly
+     loaded.  Can't print this in in thread_db_load as, at that stage,
+     the interpreter and it's console haven't started.  The real
+     problem here is probably that libthread_db is loaded too early -
+     should it only be loaded when there is a program to debug?  */
+  {
+    static int dejavu;
+    if (!dejavu)
+      {
+	printf_unfiltered ("Using host libthread_db library \"%s\"\n",
+			   LIBTHREAD_DB_SO);
+	dejavu = 1;
+      }
+  }
+
   /* Don't attempt to use thread_db on targets which can not run
      (core files).  */
   if (objfile == NULL || !target_has_execution)
@@ -624,6 +648,8 @@
       break;
 
     case TD_OK:
+      printf_unfiltered ("[Thread debugging using libthread_db enabled]\n");
+
       /* The thread library was detected.  Activate the thread_db target.  */
       push_target (&thread_db_ops);
       using_thread_db = 1;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
  2003-08-05 19:51 Michael Elizabeth Chastain
@ 2003-08-05 20:10 ` Elena Zannoni
  0 siblings, 0 replies; 18+ messages in thread
From: Elena Zannoni @ 2003-08-05 20:10 UTC (permalink / raw)
  To: Michael Elizabeth Chastain; +Cc: ac131313, gdb-patches

Michael Elizabeth Chastain writes:
 > > Should the "Loading" message come after the (C) notice, or the (C) put 
 > > before the modules are initialized?
 > 
 > I am not a lawyer, but ... the legal requirement is that copyright
 > notices appear in a prominent place.  I don't think it has to be the
 > very first thing printed, it just has to be prominent.  I think the idea
 > is that if someone copies it without your permission, and then they
 > claim "I didn't notice that you copyrighted it!", then you would say
 > "any half-awake person would have seen my copyright notice WHILE THEY
 > WERE COPYING THE REST OF MY WORK!"
 > 
 > If you look at a book, the copyright notice isn't on the cover.
 > But it's close to the front.
 > 
 > There might be a GNU coding standard about it though.
 > 
 > Michael C


I tend not to notice anything printed before the (C), because I
just don't expect anything to be there. I barely notice stuff written
after the copyright notice too, unless it is somehow highlighted,
i.e. surrounded by white lines, or it has '...' at the end, etc.,
basically something that catches my attention. So whatever we do,
let's make sure it's noticeable. 

elena


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [rfa:threads] Report when using libthread_db
@ 2003-08-05 19:51 Michael Elizabeth Chastain
  2003-08-05 20:10 ` Elena Zannoni
  0 siblings, 1 reply; 18+ messages in thread
From: Michael Elizabeth Chastain @ 2003-08-05 19:51 UTC (permalink / raw)
  To: ac131313, gdb-patches

> Should the "Loading" message come after the (C) notice, or the (C) put 
> before the modules are initialized?

I am not a lawyer, but ... the legal requirement is that copyright
notices appear in a prominent place.  I don't think it has to be the
very first thing printed, it just has to be prominent.  I think the idea
is that if someone copies it without your permission, and then they
claim "I didn't notice that you copyrighted it!", then you would say
"any half-awake person would have seen my copyright notice WHILE THEY
WERE COPYING THE REST OF MY WORK!"

If you look at a book, the copyright notice isn't on the cover.
But it's close to the front.

There might be a GNU coding standard about it though.

Michael C


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [rfa:threads] Report when using libthread_db
@ 2003-08-05 19:26 Andrew Cagney
  2003-08-07 19:57 ` Andrew Cagney
  0 siblings, 1 reply; 18+ messages in thread
From: Andrew Cagney @ 2003-08-05 19:26 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 908 bytes --]

Hello,

This modifies thread-db.c so that reports when libthread_db has been 
loaded and when it is being used vis:

The load ...

Loading libthread_db library "libthread_db.so.1"
GNU gdb 2003-08-05-cvs
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU ....
(gdb)

The use ...

(gdb) run
Starting program: 
/home/cagney/PENDING/2003-08-05-warn-thread-db/N-x86_64-unknow
n-linux-gnu/gdb/testsuite/gdb.threads/pthreads
Threaded debugging using libthread_db enabled.
[New Thread 182894192832 (LWP 23928)]
[Switching to Thread 182894192832 (LWP 23928)]

Thoughts?

Perhaphs the enabled message should be in []?
Should the "Loading" message come after the (C) notice, or the (C) put 
before the modules are initialized?
Anyone know of a way of finding the exact actual libthread_db version so 
that can be printed as well?

If that's resolved, ok for 6.0 or mainline?

Andrew

[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 3341 bytes --]

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

	* thread-db.c (verbose_dlsym): New function.
	(thread_db_load): Use verbose_dlsym.  Print that the libthread-db
	is being loaded.
	(thread_db_new_objfile): Print that thread debugging was enabled.

Index: thread-db.c
===================================================================
RCS file: /cvs/src/src/gdb/thread-db.c,v
retrieving revision 1.33
diff -u -r1.33 thread-db.c
--- thread-db.c	5 Jun 2003 18:22:02 -0000	1.33
+++ thread-db.c	5 Aug 2003 19:16:02 -0000
@@ -375,6 +375,15 @@
   target_beneath = target;
 }
 
+static void *
+verbose_dlsym (void *handle, const char *name)
+{
+  void *sym = dlsym (handle, name);
+  if (sym == NULL)
+    warning ("Symbol \"%s\" not found in libthread_db: %s", name, dlerror ());
+  return sym;
+}
+
 static int
 thread_db_load (void)
 {
@@ -390,51 +399,57 @@
 			"GDB will not be able to debug pthreads.\n\n");
       return 0;
     }
+  else
+    {
+      fprintf_unfiltered (gdb_stdlog, "Loading libthread_db library \"%s\"\n",
+			  LIBTHREAD_DB_SO);
+			  
+    }
 
   /* Initialize pointers to the dynamic library functions we will use.
      Essential functions first.  */
 
-  td_init_p = dlsym (handle, "td_init");
+  td_init_p = verbose_dlsym (handle, "td_init");
   if (td_init_p == NULL)
     return 0;
 
-  td_ta_new_p = dlsym (handle, "td_ta_new");
+  td_ta_new_p = verbose_dlsym (handle, "td_ta_new");
   if (td_ta_new_p == NULL)
     return 0;
 
-  td_ta_map_id2thr_p = dlsym (handle, "td_ta_map_id2thr");
+  td_ta_map_id2thr_p = verbose_dlsym (handle, "td_ta_map_id2thr");
   if (td_ta_map_id2thr_p == NULL)
     return 0;
 
-  td_ta_map_lwp2thr_p = dlsym (handle, "td_ta_map_lwp2thr");
+  td_ta_map_lwp2thr_p = verbose_dlsym (handle, "td_ta_map_lwp2thr");
   if (td_ta_map_lwp2thr_p == NULL)
     return 0;
 
-  td_ta_thr_iter_p = dlsym (handle, "td_ta_thr_iter");
+  td_ta_thr_iter_p = verbose_dlsym (handle, "td_ta_thr_iter");
   if (td_ta_thr_iter_p == NULL)
     return 0;
 
-  td_thr_validate_p = dlsym (handle, "td_thr_validate");
+  td_thr_validate_p = verbose_dlsym (handle, "td_thr_validate");
   if (td_thr_validate_p == NULL)
     return 0;
 
-  td_thr_get_info_p = dlsym (handle, "td_thr_get_info");
+  td_thr_get_info_p = verbose_dlsym (handle, "td_thr_get_info");
   if (td_thr_get_info_p == NULL)
     return 0;
 
-  td_thr_getfpregs_p = dlsym (handle, "td_thr_getfpregs");
+  td_thr_getfpregs_p = verbose_dlsym (handle, "td_thr_getfpregs");
   if (td_thr_getfpregs_p == NULL)
     return 0;
 
-  td_thr_getgregs_p = dlsym (handle, "td_thr_getgregs");
+  td_thr_getgregs_p = verbose_dlsym (handle, "td_thr_getgregs");
   if (td_thr_getgregs_p == NULL)
     return 0;
 
-  td_thr_setfpregs_p = dlsym (handle, "td_thr_setfpregs");
+  td_thr_setfpregs_p = verbose_dlsym (handle, "td_thr_setfpregs");
   if (td_thr_setfpregs_p == NULL)
     return 0;
 
-  td_thr_setgregs_p = dlsym (handle, "td_thr_setgregs");
+  td_thr_setgregs_p = verbose_dlsym (handle, "td_thr_setgregs");
   if (td_thr_setgregs_p == NULL)
     return 0;
 
@@ -624,6 +639,8 @@
       break;
 
     case TD_OK:
+      fprintf_unfiltered (gdb_stdlog, "Threaded debugging using libthread_db enabled.\n");
+
       /* The thread library was detected.  Activate the thread_db target.  */
       push_target (&thread_db_ops);
       using_thread_db = 1;

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2003-09-09 14:29 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-08  2:28 [rfa:threads] Report when using libthread_db Michael Elizabeth Chastain
2003-09-08  3:01 ` Daniel Jacobowitz
2003-09-09 14:29 ` Elena Zannoni
  -- strict thread matches above, loose matches on Subject: below --
2003-09-08  3:05 Michael Elizabeth Chastain
2003-09-08 13:21 ` Andrew Cagney
2003-08-23  1:49 Michael Elizabeth Chastain
2003-09-04 17:24 ` Andrew Cagney
2003-09-05 15:42 ` Elena Zannoni
2003-08-22 19:40 Michael Elizabeth Chastain
2003-08-08 15:51 Michael Elizabeth Chastain
2003-08-05 19:51 Michael Elizabeth Chastain
2003-08-05 20:10 ` Elena Zannoni
2003-08-05 19:26 Andrew Cagney
2003-08-07 19:57 ` Andrew Cagney
     [not found]   ` <mailpost.1060286286.1556@news-sj1-1>
2003-08-07 20:31     ` cgd
2003-08-08 14:51       ` Andrew Cagney
2003-08-21 22:10         ` Andrew Cagney
2003-08-21 22:47           ` Mark Kettenis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox