public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [RFA] gprof static call support for MIPS
@ 2002-01-20 15:54 Jason R Thorpe
  2002-01-20 15:59 ` Daniel Jacobowitz
  2002-01-26  2:28 ` Nick Clifton
  0 siblings, 2 replies; 7+ messages in thread
From: Jason R Thorpe @ 2002-01-20 15:54 UTC (permalink / raw)
  To: binutils

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

The following adds support for the gprof -c option (static call
graph by hueristic) on the MIPS.  It was derived from similar code
for the Alpha.

OK to commit?

	* mips.c: New file.
	* Makefile.am (sources): Add mips.c.
	(mips.o): New rule.
	* Makefile.in: Regenerate.
	* corefile.c: Update copyright years.
	(find_call): Call mips_find_call for bfd_arch_mips.

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>

[-- Attachment #2: gprof-mips-patch --]
[-- Type: text/plain, Size: 9333 bytes --]

Index: Makefile.am
===================================================================
RCS file: /cvs/src/src/gprof/Makefile.am,v
retrieving revision 1.11
diff -c -r1.11 Makefile.am
*** Makefile.am	2001/10/02 06:03:15	1.11
--- Makefile.am	2002/01/20 23:04:07
***************
*** 23,29 ****
  sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
  	cg_print.c corefile.c gmon_io.c gprof.c hertz.c hist.c source.c \
  	search_list.c symtab.c sym_ids.c utils.c \
! 	i386.c alpha.c vax.c tahoe.c sparc.c
  gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
  gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
  gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLLIBS)
--- 23,29 ----
  sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
  	cg_print.c corefile.c gmon_io.c gprof.c hertz.c hist.c source.c \
  	search_list.c symtab.c sym_ids.c utils.c \
! 	i386.c alpha.c vax.c tahoe.c sparc.c mips.c
  gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
  gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
  gprof_LDADD = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLLIBS)
***************
*** 216,221 ****
--- 216,226 ----
    $(INCDIR)/symcat.h source.h search_list.h corefile.h \
    hist.h
  sparc.o: sparc.c gprof.h $(INCDIR)/ansidecl.h $(BFDDIR)/sysdep.h \
+   ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+   gconfig.h $(INCDIR)/bin-bugs.h cg_arcs.h symtab.h ../bfd/bfd.h \
+   $(INCDIR)/symcat.h source.h search_list.h corefile.h \
+   hist.h
+ mips.o: mips.c gprof.h $(INCDIR)/ansidecl.h $(BFDDIR)/sysdep.h \
    ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
    gconfig.h $(INCDIR)/bin-bugs.h cg_arcs.h symtab.h ../bfd/bfd.h \
    $(INCDIR)/symcat.h source.h search_list.h corefile.h \
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gprof/Makefile.in,v
retrieving revision 1.16
diff -c -r1.16 Makefile.in
*** Makefile.in	2001/10/02 06:03:15	1.16
--- Makefile.in	2002/01/20 23:04:07
***************
*** 123,129 ****
  sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
  	cg_print.c corefile.c gmon_io.c gprof.c hertz.c hist.c source.c \
  	search_list.c symtab.c sym_ids.c utils.c \
! 	i386.c alpha.c vax.c tahoe.c sparc.c
  
  gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
  gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
--- 123,129 ----
  sources = basic_blocks.c call_graph.c cg_arcs.c cg_dfn.c \
  	cg_print.c corefile.c gmon_io.c gprof.c hertz.c hist.c source.c \
  	search_list.c symtab.c sym_ids.c utils.c \
! 	i386.c alpha.c vax.c tahoe.c sparc.c mips.c
  
  gprof_SOURCES = $(sources) flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
  gprof_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a $(INTLDEPS)
***************
*** 167,174 ****
  corefile.$(OBJEXT) gmon_io.$(OBJEXT) gprof.$(OBJEXT) hertz.$(OBJEXT) \
  hist.$(OBJEXT) source.$(OBJEXT) search_list.$(OBJEXT) symtab.$(OBJEXT) \
  sym_ids.$(OBJEXT) utils.$(OBJEXT) i386.$(OBJEXT) alpha.$(OBJEXT) \
! vax.$(OBJEXT) tahoe.$(OBJEXT) sparc.$(OBJEXT) flat_bl.$(OBJEXT) \
! bsd_callg_bl.$(OBJEXT) fsf_callg_bl.$(OBJEXT)
  gprof_LDFLAGS = 
  CFLAGS = @CFLAGS@
  COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
--- 167,174 ----
  corefile.$(OBJEXT) gmon_io.$(OBJEXT) gprof.$(OBJEXT) hertz.$(OBJEXT) \
  hist.$(OBJEXT) source.$(OBJEXT) search_list.$(OBJEXT) symtab.$(OBJEXT) \
  sym_ids.$(OBJEXT) utils.$(OBJEXT) i386.$(OBJEXT) alpha.$(OBJEXT) \
! vax.$(OBJEXT) tahoe.$(OBJEXT) sparc.$(OBJEXT) mips.$(OBJEXT) \
! flat_bl.$(OBJEXT) bsd_callg_bl.$(OBJEXT) fsf_callg_bl.$(OBJEXT)
  gprof_LDFLAGS = 
  CFLAGS = @CFLAGS@
  COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
***************
*** 879,884 ****
--- 879,889 ----
    $(INCDIR)/symcat.h source.h search_list.h corefile.h \
    hist.h
  sparc.o: sparc.c gprof.h $(INCDIR)/ansidecl.h $(BFDDIR)/sysdep.h \
+   ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
+   gconfig.h $(INCDIR)/bin-bugs.h cg_arcs.h symtab.h ../bfd/bfd.h \
+   $(INCDIR)/symcat.h source.h search_list.h corefile.h \
+   hist.h
+ mips.o: mips.c gprof.h $(INCDIR)/ansidecl.h $(BFDDIR)/sysdep.h \
    ../bfd/config.h $(INCDIR)/fopen-same.h $(INCDIR)/filenames.h \
    gconfig.h $(INCDIR)/bin-bugs.h cg_arcs.h symtab.h ../bfd/bfd.h \
    $(INCDIR)/symcat.h source.h search_list.h corefile.h \
Index: corefile.c
===================================================================
RCS file: /cvs/src/src/gprof/corefile.c,v
retrieving revision 1.7
diff -c -r1.7 corefile.c
*** corefile.c	2001/03/14 03:14:56	1.7
--- corefile.c	2002/01/20 23:04:08
***************
*** 1,6 ****
  /* corefile.c
  
!    Copyright 2000, 2001 Free Software Foundation, Inc.
  
     This file is part of GNU Binutils.
  
--- 1,6 ----
  /* corefile.c
  
!    Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
  
     This file is part of GNU Binutils.
  
***************
*** 48,53 ****
--- 48,54 ----
  extern void vax_find_call   PARAMS ((Sym *, bfd_vma, bfd_vma));
  extern void tahoe_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
  extern void sparc_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+ extern void mips_find_call  PARAMS ((Sym *, bfd_vma, bfd_vma));
  
  static void
  DEFUN (read_function_mappings, (filename), const char *filename)
***************
*** 259,264 ****
--- 260,269 ----
  
      case bfd_arch_tahoe:
        tahoe_find_call (parent, p_lowpc, p_highpc);
+       break;
+ 
+     case bfd_arch_mips:
+       mips_find_call (parent, p_lowpc, p_highpc);
        break;
  
      default:
Index: mips.c
===================================================================
RCS file: mips.c
diff -N mips.c
*** /dev/null	Tue May  5 13:32:27 1998
--- mips.c	Sun Jan 20 15:04:08 2002
***************
*** 0 ****
--- 1,102 ----
+ /*
+  * Copyright (c) 1983, 1998 Regents of the University of California.
+  * All rights reserved.
+  *
+  * Redistribution and use in source and binary forms are permitted
+  * provided that: (1) source distributions retain this entire copyright
+  * notice and comment, and (2) distributions including binaries display
+  * the following acknowledgement:  ``This product includes software
+  * developed by the University of California, Berkeley and its contributors''
+  * in the documentation or other materials provided with the distribution
+  * and in all advertising materials mentioning features or use of this
+  * software. Neither the name of the University nor the names of its
+  * contributors may be used to endorse or promote products derived
+  * from this software without specific prior written permission.
+  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+  */
+ #include "gprof.h"
+ #include "cg_arcs.h"
+ #include "corefile.h"
+ #include "hist.h"
+ #include "symtab.h"
+ 
+ static Sym indirect_child;
+ 
+ void mips_find_call PARAMS ((Sym *, bfd_vma, bfd_vma));
+ 
+ void
+ mips_find_call (parent, p_lowpc, p_highpc)
+      Sym *parent;
+      bfd_vma p_lowpc;
+      bfd_vma p_highpc;
+ {
+   bfd_vma pc, dest_pc;
+   unsigned int op;
+   int offset;
+   Sym *child;
+   static bool inited = FALSE;
+ 
+   if (!inited)
+     {
+       inited = TRUE;
+       sym_init (&indirect_child);
+       indirect_child.name = _("<indirect child>");
+       indirect_child.cg.prop.fract = 1.0;
+       indirect_child.cg.cyc.head = &indirect_child;
+     }
+ 
+   if (!core_text_space)
+     {
+       return;
+     }
+   if (p_lowpc < s_lowpc)
+     {
+       p_lowpc = s_lowpc;
+     }
+   if (p_highpc > s_highpc)
+     {
+       p_highpc = s_highpc;
+     }
+   DBG (CALLDEBUG, printf (_("[find_call] %s: 0x%lx to 0x%lx\n"),
+ 			  parent->name, (unsigned long) p_lowpc,
+ 			  (unsigned long) p_highpc));
+   for (pc = p_lowpc; pc < p_highpc; pc += 4)
+     {
+       op = bfd_get_32 (core_bfd, &((char *)core_text_space)[pc - s_lowpc]);
+       if ((op & 0xfc000000) == 0x0c000000)
+ 	{
+ 	  /* This is a "jal" instruction.  Check that the destination
+ 	     is the address of a function.  */
+ 	  DBG (CALLDEBUG,
+ 	       printf (_("[find_call] 0x%lx: jal"), (unsigned long) pc));
+           offset = (op & 0x03ffffff) << 2;
+ 	  dest_pc = (pc & ~0xfffffff) | offset;
+ 	  if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
+ 	    {
+ 	      child = sym_lookup (&symtab, dest_pc);
+ 	      DBG (CALLDEBUG,
+ 		   printf (" 0x%lx\t; name=%s, addr=0x%lx",
+ 			   (unsigned long) dest_pc, child->name,
+ 			   (unsigned long) child->addr));
+ 	      if (child->addr == dest_pc)
+ 		{
+ 		  DBG (CALLDEBUG, printf ("\n"));
+ 		  /* a hit:  */
+ 		  arc_add (parent, child, (unsigned long) 0);
+ 		  continue;
+ 		}
+ 	    }
+ 	  /* Something funny going on.  */
+ 	  DBG (CALLDEBUG, printf ("\tbut it's a botch\n"));
+ 	}
+       else if ((op & 0xfc00f83f) == 0x0000f809)
+ 	{
+ 	  /* This is a "jalr" instruction (indirect call).  */
+ 	  DBG (CALLDEBUG,
+ 	       printf (_("[find_call] 0x%lx: jalr\n"), (unsigned long) pc));
+ 	  arc_add (parent, &indirect_child, (unsigned long) 0);
+ 	}
+     }
+ }

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-20 15:54 [RFA] gprof static call support for MIPS Jason R Thorpe
@ 2002-01-20 15:59 ` Daniel Jacobowitz
  2002-01-20 16:12   ` Jason R Thorpe
  2002-01-26  2:28 ` Nick Clifton
  1 sibling, 1 reply; 7+ messages in thread
From: Daniel Jacobowitz @ 2002-01-20 15:59 UTC (permalink / raw)
  To: binutils; +Cc: Jason R Thorpe

On Sun, Jan 20, 2002 at 03:08:22PM -0800, Jason R Thorpe wrote:
> The following adds support for the gprof -c option (static call
> graph by hueristic) on the MIPS.  It was derived from similar code
> for the Alpha.
> 
> OK to commit?
> 
> 	* mips.c: New file.
> 	* Makefile.am (sources): Add mips.c.
> 	(mips.o): New rule.
> 	* Makefile.in: Regenerate.
> 	* corefile.c: Update copyright years.
> 	(find_call): Call mips_find_call for bfd_arch_mips.
> 
> -- 
>         -- Jason R. Thorpe <thorpej@wasabisystems.com>

> +   for (pc = p_lowpc; pc < p_highpc; pc += 4)
> +     {
> +       op = bfd_get_32 (core_bfd, &((char *)core_text_space)[pc - s_lowpc]);
> +       if ((op & 0xfc000000) == 0x0c000000)
> + 	{
> + 	  /* This is a "jal" instruction.  Check that the destination
> + 	     is the address of a function.  */
> + 	  DBG (CALLDEBUG,
> + 	       printf (_("[find_call] 0x%lx: jal"), (unsigned long) pc));
> +           offset = (op & 0x03ffffff) << 2;
> + 	  dest_pc = (pc & ~0xfffffff) | offset;
> + 	  if (dest_pc >= s_lowpc && dest_pc <= s_highpc)
> + 	    {
> + 	      child = sym_lookup (&symtab, dest_pc);
> + 	      DBG (CALLDEBUG,
> + 		   printf (" 0x%lx\t; name=%s, addr=0x%lx",
> + 			   (unsigned long) dest_pc, child->name,
> + 			   (unsigned long) child->addr));
> + 	      if (child->addr == dest_pc)
> + 		{
> + 		  DBG (CALLDEBUG, printf ("\n"));
> + 		  /* a hit:  */
> + 		  arc_add (parent, child, (unsigned long) 0);
> + 		  continue;
> + 		}
> + 	    }
> + 	  /* Something funny going on.  */
> + 	  DBG (CALLDEBUG, printf ("\tbut it's a botch\n"));
> + 	}
> +       else if ((op & 0xfc00f83f) == 0x0000f809)
> + 	{
> + 	  /* This is a "jalr" instruction (indirect call).  */
> + 	  DBG (CALLDEBUG,
> + 	       printf (_("[find_call] 0x%lx: jalr\n"), (unsigned long) pc));
> + 	  arc_add (parent, &indirect_child, (unsigned long) 0);
> + 	}
> +     }
> + }

Is this going to do any good for NetBSD?  I thought I remembered you
saying that NetBSD/MIPS used -mabicalls, when you posted the profiling
patch.  In that case all interesting calls are indirect!

Then again I don't see abicalls set for netbsd in the community GCC
tree.
-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-20 15:59 ` Daniel Jacobowitz
@ 2002-01-20 16:12   ` Jason R Thorpe
  2002-01-20 16:22     ` Daniel Jacobowitz
  0 siblings, 1 reply; 7+ messages in thread
From: Jason R Thorpe @ 2002-01-20 16:12 UTC (permalink / raw)
  To: binutils

On Sun, Jan 20, 2002 at 06:26:05PM -0500, Daniel Jacobowitz wrote:

 > Is this going to do any good for NetBSD?  I thought I remembered you
 > saying that NetBSD/MIPS used -mabicalls, when you posted the profiling
 > patch.  In that case all interesting calls are indirect!

The kernel does not use abicalls.  We use gprof on kernels, too.

 > Then again I don't see abicalls set for netbsd in the community GCC
 > tree.

I have a new NetBSD/mips configuration for GCC that is approved, but
I'm waiting for the other bits of my patch to be approved so I can
commit it (the MIPS portion depends on changes to the shared NetBSD ELF
configuration bits).  But, in any case, yes, abicalls is the default
for userland code.

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-20 16:12   ` Jason R Thorpe
@ 2002-01-20 16:22     ` Daniel Jacobowitz
  2002-01-25  9:03       ` Jason R Thorpe
  0 siblings, 1 reply; 7+ messages in thread
From: Daniel Jacobowitz @ 2002-01-20 16:22 UTC (permalink / raw)
  To: Jason R Thorpe, binutils

On Sun, Jan 20, 2002 at 03:54:41PM -0800, Jason R Thorpe wrote:
> On Sun, Jan 20, 2002 at 06:26:05PM -0500, Daniel Jacobowitz wrote:
> 
>  > Is this going to do any good for NetBSD?  I thought I remembered you
>  > saying that NetBSD/MIPS used -mabicalls, when you posted the profiling
>  > patch.  In that case all interesting calls are indirect!
> 
> The kernel does not use abicalls.  We use gprof on kernels, too.

Ah, yes.  Ditto for the Linux kernel.

>  > Then again I don't see abicalls set for netbsd in the community GCC
>  > tree.
> 
> I have a new NetBSD/mips configuration for GCC that is approved, but
> I'm waiting for the other bits of my patch to be approved so I can
> commit it (the MIPS portion depends on changes to the shared NetBSD ELF
> configuration bits).  But, in any case, yes, abicalls is the default
> for userland code.

OK, that makes sense.  I don't know if it's possible to reconstitute
some of the GOT-based calls in the callgraph, but it may be... I'll
have to think about it.

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-20 16:22     ` Daniel Jacobowitz
@ 2002-01-25  9:03       ` Jason R Thorpe
  2002-01-25 11:59         ` Daniel Jacobowitz
  0 siblings, 1 reply; 7+ messages in thread
From: Jason R Thorpe @ 2002-01-25  9:03 UTC (permalink / raw)
  To: binutils

On Sun, Jan 20, 2002 at 06:59:32PM -0500, Daniel Jacobowitz wrote:

 > On Sun, Jan 20, 2002 at 03:54:41PM -0800, Jason R Thorpe wrote:
 > > On Sun, Jan 20, 2002 at 06:26:05PM -0500, Daniel Jacobowitz wrote:
 > > 
 > >  > Is this going to do any good for NetBSD?  I thought I remembered you
 > >  > saying that NetBSD/MIPS used -mabicalls, when you posted the profiling
 > >  > patch.  In that case all interesting calls are indirect!
 > > 
 > > The kernel does not use abicalls.  We use gprof on kernels, too.
 > 
 > Ah, yes.  Ditto for the Linux kernel.

So, have we come to the conclusion that, while not perfect, it does
provide a useful feature for certain applications?

And, if so, can I have formal approval for the patch so that I may
commit it?  :-)

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-25  9:03       ` Jason R Thorpe
@ 2002-01-25 11:59         ` Daniel Jacobowitz
  0 siblings, 0 replies; 7+ messages in thread
From: Daniel Jacobowitz @ 2002-01-25 11:59 UTC (permalink / raw)
  To: binutils; +Cc: Jason R Thorpe

On Fri, Jan 25, 2002 at 08:46:16AM -0800, Jason R Thorpe wrote:
> On Sun, Jan 20, 2002 at 06:59:32PM -0500, Daniel Jacobowitz wrote:
> 
>  > On Sun, Jan 20, 2002 at 03:54:41PM -0800, Jason R Thorpe wrote:
>  > > On Sun, Jan 20, 2002 at 06:26:05PM -0500, Daniel Jacobowitz wrote:
>  > > 
>  > >  > Is this going to do any good for NetBSD?  I thought I remembered you
>  > >  > saying that NetBSD/MIPS used -mabicalls, when you posted the profiling
>  > >  > patch.  In that case all interesting calls are indirect!
>  > > 
>  > > The kernel does not use abicalls.  We use gprof on kernels, too.
>  > 
>  > Ah, yes.  Ditto for the Linux kernel.
> 
> So, have we come to the conclusion that, while not perfect, it does
> provide a useful feature for certain applications?
> 
> And, if so, can I have formal approval for the patch so that I may
> commit it?  :-)

To answer your questions, yes, and ask someone else :)

-- 
Daniel Jacobowitz                           Carnegie Mellon University
MontaVista Software                         Debian GNU/Linux Developer

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

* Re: [RFA] gprof static call support for MIPS
  2002-01-20 15:54 [RFA] gprof static call support for MIPS Jason R Thorpe
  2002-01-20 15:59 ` Daniel Jacobowitz
@ 2002-01-26  2:28 ` Nick Clifton
  1 sibling, 0 replies; 7+ messages in thread
From: Nick Clifton @ 2002-01-26  2:28 UTC (permalink / raw)
  To: thorpej; +Cc: binutils

Hi Jason,

> 	* mips.c: New file.
> 	* Makefile.am (sources): Add mips.c.
> 	(mips.o): New rule.
> 	* Makefile.in: Regenerate.
> 	* corefile.c: Update copyright years.
> 	(find_call): Call mips_find_call for bfd_arch_mips.

Approved - please apply

Cheers
        Nick

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

end of thread, other threads:[~2002-01-26 10:25 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-20 15:54 [RFA] gprof static call support for MIPS Jason R Thorpe
2002-01-20 15:59 ` Daniel Jacobowitz
2002-01-20 16:12   ` Jason R Thorpe
2002-01-20 16:22     ` Daniel Jacobowitz
2002-01-25  9:03       ` Jason R Thorpe
2002-01-25 11:59         ` Daniel Jacobowitz
2002-01-26  2:28 ` Nick Clifton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).