public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: PR 6212
@ 2002-05-07  5:32 Richard Kenner
  2002-05-07  9:20 ` Richard Henderson
  2002-05-07 10:26 ` Mark Mitchell
  0 siblings, 2 replies; 59+ messages in thread
From: Richard Kenner @ 2002-05-07  5:32 UTC (permalink / raw)
  To: rth; +Cc: gcc

    I think the following will do the job.  It adds the alignment
    based on the type of the dereference, not based on the form of
    the index.

That's somewhat of a change in strategy from the way it's been done,
but I agree it's best we can do now.  For 3.2, I'd like to do all the
computations based on expressions, not types, but this seems like a
good compromise for now.

    Bar one, the other uses of highest_pow2_factor are simple field
    offsets, and so do not need adjustment.  

You have the issue of nestings of field and array references and the
tracking of the alignments through all that.  I can't prove it, but I
think what you are doing will catch most of the common case.

    but it's for sure better to guess low than high when talking about
    alignment.

Agreed.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-08 21:50 Richard Kenner
  2002-05-08 22:30 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-08 21:50 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Actually, if you'll read Neil's response elsewhere in this thread,
    you'd know that we *must* for bitfields.

I saw the claim, but not the explanation of why.

I really think this idea of making bogus types to reflect differences
between types and object is very bad.  We do this in GNAT and it's been the
source of a huge number of bugs and kludges.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-08  7:56 Robert Dewar
  0 siblings, 0 replies; 59+ messages in thread
From: Robert Dewar @ 2002-05-08  7:56 UTC (permalink / raw)
  To: dewar, kenner, mark; +Cc: gcc

> 
> The point is that a minimal constraint on many type systems is that two
> things with the same type support the same operations. 

Yes, exactly I agree with this entirely.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-08  7:35 Robert Dewar
  2002-05-08  7:54 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Robert Dewar @ 2002-05-08  7:35 UTC (permalink / raw)
  To: kenner, mark; +Cc: gcc

> The type of a pointer is -- in your average type system -- purely
> dependent on the type pointed to by the pointer.  To say it points to
> one kind of type, but another kind of object, is to have substantially
> enrichened your type system in a way that is not clearly beneficial.

I think you mean something like "representation of a pointer and allowable
operations". Obviously the statement you gave is not true in any language
with name equivalence of types. For example in Ada

   type A is access Integer;
   type B is access Integer;

describe two quite different types (and indeed in Ada you cannot even 
assign one to the other, since these might be separate storage pools).
Even if you force interconvertability

   type A is access all Integer;
   type B is access all Integer;

they are still quite different types.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-08  4:49 Richard Kenner
  2002-05-08  7:35 ` Mark Mitchell
  2002-05-08 13:23 ` Richard Henderson
  0 siblings, 2 replies; 59+ messages in thread
From: Richard Kenner @ 2002-05-08  4:49 UTC (permalink / raw)
  To: mark; +Cc: gcc

    > 3 bytes long and byte-aligned, I can make an object that's 4-byte-aligned
    > (and hence 4 bytes long).  If I make a pointer to that object, that's a
    > pointer to a 3-byte type, not a 4-byte type.  I don't see how you can do

    No, it's a pointer to a 4-byte type.  

I disagree.  It's a pointer to a 3-byte type, but a 4-byte *object*.

    > Moreover, what do you do about bitfields?  Do we now have types with
    > sizes that are not multiples of bytes?

    Bitfields, at least in C, are not addressable, so this doesn't matter.
    The only thing you can do with a bitfield lvalue is write to it, and
    then you know just where you're writing.  Reading from it yields a
    promotion to the appropriate integer type.

But if you eliminate DECL_SIZE, how to you know the size of a bitfield?
The issue is why make different types in just some cases, since we know we
can't for bitfields.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 21:02 Richard Kenner
  2002-05-07 21:38 ` Mark Mitchell
  2002-05-08  0:14 ` Neil Booth
  0 siblings, 2 replies; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 21:02 UTC (permalink / raw)
  To: mark; +Cc: gcc

    This is a language question as much as an implementation question.  If
    these things have different types, then you have to decide what all the
    conversion rules are.  On the other hand, saying that two things that
    have the same type have different sizes is just plain wrong.

I must say that when we did the initial Ada implementation, we took that
approach: I wanted to be sure that the size (and alignment) of each object
was the same as its size.

That needed a tremendous amount of code and it has been the most tricky part
of the entire interface between the Ada front end and GCC.  One of my
next projects was to eliminate that entire mess and take advantage of the
separate fields in a decl.

    DECL_SIZE/DECL_ALIGN are just plain wrong, and should be eliminated.

Well, it's also DECL_SIZE_UNIT and DECL_MODE.

    Using types gives you a way to provide feedback about possibly invalid
    conversions, like converting a pointer to a byte-aligned int to a pointer
    to a word-aligned int.  The usual type theoretic rules would imply
    you cannot go that way, but you can go the other way.  This is the
    whole point of a type system.

I don't follow.  Objects still have types, but those types are more generic
than the object.  In other words, if I have a record type that's 3 bytes long
and byte-aligned, I can make an object that's 4-byte-aligned (and hence 4
bytes long).  If I make a pointer to that object, that's a pointer to a 3-byte
type, not a 4-byte type.  I don't see how you can do things consistently
if you don't take that approach.

Moreover, what do you do about bitfields?  Do we now have types with sizes that
are not multiples of bytes?

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 15:48 Richard Kenner
  2002-05-07 20:39 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 15:48 UTC (permalink / raw)
  To: rth; +Cc: gcc

    > Say you have an object whose type is 1-byte integer
    > with a user-specifed alignment of 32 bits.  What do you do?

	new = build_type_copy (char_type_node);
	TYPE_ALIGN (new) = 32;

I don't believe we support such a thing.

    Why are you creating a record type?  Surely that's the pain
    you're saying you'll have converting to and from the new type.

Why create *any* extra type?  Even if the above can be made to work, why
have the conversions?

And what about if the type is a record type and the object is that record type
with a different alignment?   You can't simply build a copy of that type
since DECL_CONTEXT will be wrong on the (now shared) fields.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 15:37 Richard Kenner
  2002-05-07 15:40 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 15:37 UTC (permalink / raw)
  To: rth; +Cc: gcc

    > I'd like to move more toward a situation where we are allowed
    > to have these different from that of the type even more than we do now.

    Why?  I can think of no valid use for this.  It's just confusing.

Otherwise you make bogus types that end up having to be converted from 
and to and it's a pain.

Suppose you have an object with an alignment stricter than its type.
What do you do?  Say you have an object whose type is 1-byte integer
with a user-specifed alignment of 32 bits.  What do you do?  If you
say that DECL_ALIGN must equal TYPE_ALIGN, you end up constructing a
record type containing the character as a field and have to deal with
converting to and from it.

It's far simpler just to say that DECL_TYPE is char_type_node,
DECL_ALIGN and DECL_SIZE are 32, and DECL_SIZE_UNIT is 4.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 15:02 Richard Kenner
  2002-05-07 15:04 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 15:02 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Grr.  I think this is a serious mistake.  The type should
    hold all of this information so that it would be possible
    in principal to have a pointer to a packed int.

Packed fields aren't necessarily even on a byte boundary.

    It also means my alignment patch yesterday is probably
    wrong for packed fields at the moment.

I think you could construct such a case, yes.  But it's also unlikely
because you are only specifying the alignment *of the offset*.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 15:02 Richard Kenner
  2002-05-07 15:13 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 15:02 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Grr.  I think this is a serious mistake.  The type should
    hold all of this information so that it would be possible
    in principal to have a pointer to a packed int.

Also, in general, I don't think that we should make a separate type for
a decl that has different layout.  If so, why do we have DECL_SIZE,
DECL_MODE, etc.   I'd like to move more toward a situation where we are allowed
to have these different from that of the type even more than we do now.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 14:54 Richard Kenner
  2002-05-07 14:58 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 14:54 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Err, no, that is not true.  A packed field has a type with
    TYPE_PACKED set and TYPE_ALIGN set to the minimum.

No, you are thinking of DECL_PACKED and DECL_ALIGN.  TYPE_PACKED applies
to a record type and says the record type is packed.  The types of packed
and unpacked fields are the same and should be.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 14:02 Richard Kenner
  2002-05-07 14:43 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 14:02 UTC (permalink / raw)
  To: rth; +Cc: gcc

    > Consider x[j].y.  OFFSET is J*C and BITPOS is that for Y.  TYPE here
    > is that of field Y, but OFFSET's alignment corresponds to the type
    > of X[J].

    Are you suggesting that the outer object X[J] may have
    smaller alignment than the inner object Y?

I don't see how what I'm saying implies I'm suggesting that, but what's *is*
true is that the alignment of the *type* of X[J} may be smaller than that
of the *type* of Y.  Think of a bitfield or a packed field.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 11:09 Richard Kenner
  2002-05-07 13:15 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 11:09 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Huh?  The type of the accessed object is always visible.  It's
    TREE_TYPE (to).

Yes, but OFFSET is not to the accessed object: you have to add BITPOS
to get there.

Consider x[j].y.  OFFSET is J*C and BITPOS is that for Y.  TYPE here is
that of field Y, but OFFSET's alignment corresponds to the type of X[J].

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07 10:29 Richard Kenner
  2002-05-07 11:05 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07 10:29 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Why?  We're being given information in the form of a type
    and you're going to ignore it?

No, not at all.  But consider that, in general, you have a nesting of
field and array references.  The alignment of the offset is that of
the type of the array element, but you can't see that type if there is
a an outer field reference.

The idea of NOP_WITH_ASSERT_EXPR is that get_inner_reference can use it
to encode what it knows about alignment other than from the form of the
expression (the biggest loss now is not being able to do anything with
DECL_OFFSET_ALIGN).

My point is just that information of this nature has to be encoded in the
value returned by get_inner_reference.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07  6:40 Robert Dewar
  2002-05-07  7:45 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Robert Dewar @ 2002-05-07  6:40 UTC (permalink / raw)
  To: kenner, mark; +Cc: gcc

I am confused, why can't we just back out the patch that caused this
problem in the first place if Richard cannot figure out how to fix it?

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07  5:19 Richard Kenner
  0 siblings, 0 replies; 59+ messages in thread
From: Richard Kenner @ 2002-05-07  5:19 UTC (permalink / raw)
  To: mark; +Cc: gcc

    Kenner, you're going to have to come up with a better patch.

    Yesterday would be a good time.

I don't know of any, short of the major surgery to add the
NOP_WITH_ASSERT_EXPR, which we clearly can't do for 3.1.

Right now, what we have is a peformance issue, with no broken code.
With this patch, we have obscure cases (which had to be generated
specifically to make it fail) where the alignment is set wrong, but
where it actually doesn't matter in that particular case.

For 3.1, I think we're going to be stuck with this choice.  My
recommendation is to go ahead with the patch since the cases where it
sets the wrong alignment are far less frequent than the cases when the
current code does so.

(The only other way is to disable fold's merging of MULT and DIV, but that
will cause far worse performance problems than this bug.)

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-07  5:11 Richard Kenner
  2002-05-07  9:09 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-07  5:11 UTC (permalink / raw)
  To: rth; +Cc: gcc

    Consider

	int foo(int *p)
	{
	  return *((char *)p);
	}

	char c[2] __attribute__((aligned));

	int bar()
	{
	  return foo((int *)&c[1]);
	}

    Since we recurse all the way down to the PARM_DECL, we decide that P
    is 4-byte aligned.  We already discussed cases with pointers having
    strange values (so long as they weren't dereferenced) and declared
    them acceptable in gcc.

I'm missing something: I don't see a variable offset here, so why is
highest_pow2_factor called at all in this case?

And you are also assuming tree inlining here, right?

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-06  8:48 Richard Kenner
  2002-05-06  8:56 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-06  8:48 UTC (permalink / raw)
  To: mark; +Cc: gcc

    Seems like it would be nice if "fold" would just give us back the original
    thing, there, but that's hardly a general solution.

It does and that's indeed the problem: if it didn't fold it, things would
work OK.

    Good, I like this patch.  Please run the complete set of tests and then
    check it in.

I get some strange error messages when I try to run the G++ testsuite,
most likely because there's something I haven't fully recovered from backups
yet.  But it bootstraps and the C test are fine.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-06  3:46 Richard Kenner
  2002-05-06  8:00 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-06  3:46 UTC (permalink / raw)
  To: mark; +Cc: gcc

    How did it work before?  I know these things changed a lot, but still it
    would be useful to know how we got it right in the past.

We didn't try to track the alignment of objects, but relied just on the
types, so there's really no comparison.

    I think what you're saying is that we could assume that the value stored
    in a T*, considered as an integer, is divisible by the alignment of T.
    Is that right?

Yes.

    That is a safe assumption only when the pointer is being dereferenced.
    The C standard guarantees this property; you can't use a T* to access
    something that is not a T, and a T must, by definition, be aligned as
    required for a T.

    If the pointer value is merely being read, the assumption does not hold,

Well, it's not "merely being read", but not being dereferenced either.

The relevant part of the testcase is:

void
fde_split (fde **probe, struct fde_vector *linear, struct fde_vector *erratic)
{
  erratic->array[probe - linear->array] = 0;
}

To do this index computation, we do the subtraction, divide by the size 
of the object being pointed to (POINTER_SIZE), then multiply by the size
of the element of ARRAY, also POINTER_SIZE.  So we lose the fact that there
was the multiplication.  However, both things being subtracted are known to
be multiples of POINTER_SIZE / BITS_PER_UNIT if we look at the type.

    For example, we must not optimize:

      (int)(T*)x % alignof(T)

    to 0.

Since this is just in highest_pow2_factor, we wouldn't be.

    It depends on the patch.  I will have to make a judgement call.

    It would be helpful if you post and begin testing a patch.  Since it's
    easy, please do this soon.

Well, what I tested was the following, plus the change to make that
function unsigned:

*** expr.c	16 Apr 2002 06:03:36 -0000	1.423.2.18
--- expr.c	6 May 2002 10:43:38 -0000
*************** highest_pow2_factor (exp)
*** 5903,5906 ****
--- 5903,5912 ----
        c1 = highest_pow2_factor (TREE_OPERAND (exp, 2));
        return MIN (c0, c1);
+ 
+     case PARM_DECL:  case VAR_DECL:  case RESULT_DECL:
+       /* If this is an object that is a pointer type, assume it is
+ 	 properly aligned.  */
+       if (POINTER_TYPE_P (TREE_TYPE (exp)))
+ 	return TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp)));
  
      default:

    You should, in any case, fix this on the mainline quickly.  There, you
    can of course use a more invasive technique if you like.  

Right, but the new tree node will be a lot of work to add, so I don't want
to rush into it.  The above should work there too.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re: PR 6212
@ 2002-05-05 20:05 Richard Kenner
  2002-05-05 22:45 ` Mark Mitchell
  2002-05-05 23:24 ` Richard Henderson
  0 siblings, 2 replies; 59+ messages in thread
From: Richard Kenner @ 2002-05-05 20:05 UTC (permalink / raw)
  To: rth; +Cc: gcc, mark

    The mips thing has been fixed.

Good.

    But the alignment issue is still a serious performance regression.
    That is why the PR is still open and high priority.

Well, not quite as high as something being broken ...

Fixing it without major work is tricky.  The problem is that we are
removing a divide/multiply combination, so we lose the info that
there's an aligned value here.

My idea for GCC 3.2 is to add a NOP_WITH_ASSERT tree node that can be used
to record the alignment information.

The first few times I looked at this, that's the only solution I saw.
But now I just realized that one way of doing this may be saying that
a POINTER_TYPE variable has the alignment of the underlying type.
That's an easy change, but one that has the potential of causing
regressions.  What's the thought here?

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re:  PR 6212
@ 2002-05-05 17:16 Richard Kenner
  2002-05-05 17:43 ` Richard Henderson
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-05 17:16 UTC (permalink / raw)
  To: mark; +Cc: gcc, rth

    You should have asked for help earlier.

    There was a link in the PR audit trail to this message:

      http://gcc.gnu.org/ml/gcc/2002-04/msg01220.html

    which contains the small test case.

Now I remember.  I was going forward on messages the other day and hadn't
gotten to that one.

What I concluded from that is that we can't fix the alignment issue here
easily (it needs a mechanism that I already plan to do for 3.2), but the
bug can be fixed by fix mentioned here by RTH:

    So there is in fact a secondary bug in the mips backend.  Namely,
    the movsi_usw and movdi_usd patterns are identical if the argument
    is the constant zero.  Patch for that pending.

So I assumed it had been fixed and closed.

RTH?

^ permalink raw reply	[flat|nested] 59+ messages in thread
* Re:  PR 6212
@ 2002-05-05 11:50 Richard Kenner
  2002-05-05 11:58 ` Mark Mitchell
  0 siblings, 1 reply; 59+ messages in thread
From: Richard Kenner @ 2002-05-05 11:50 UTC (permalink / raw)
  To: mark; +Cc: gcc

Do you have the message where the nature of the miscompilation was
discussed?  Each time I look for it, I can't find it.

Thanks.

^ permalink raw reply	[flat|nested] 59+ messages in thread
* PR 6212
@ 2002-05-05 11:29 Mark Mitchell
  0 siblings, 0 replies; 59+ messages in thread
From: Mark Mitchell @ 2002-05-05 11:29 UTC (permalink / raw)
  To: kenner; +Cc: gcc

Kenner --

At this point, the *only* release-critical bug in the compiler proper
open in GNATS is PR 6212.

I have asked you several times to help with this bug.  Richard Henderson
was kind enough to extract a small test case for this bug, that can be
easily replicated with a cross compiler.  I reminded you of this fact
several days ago.

Please let us know ASAP what progress you have made towards fixing this
bug.  If, for some reason, you are not going to fix it, please let us
know that as well, so that I, or someone else, to fix it.

If, by chance, you have already fixed it and I have not noticed, please
close the PR.  It is your obligation to close PRs for bugs that you have
fixed.

I am not happy about this situation, for the following reasons:

1. The bug was reported months ago, and traced to a patch of yours.

2. Richard Henderson factored out a small test case some time ago, and
   the bug was still not fixed.

3. I notified you that this was a release-critical bug several days ago,
   and the bug is still not fixed.

--
Mark Mitchell                   mark@codesourcery.com
CodeSourcery, LLC               http://www.codesourcery.com

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

end of thread, other threads:[~2002-05-09  6:54 UTC | newest]

Thread overview: 59+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-05-07  5:32 PR 6212 Richard Kenner
2002-05-07  9:20 ` Richard Henderson
2002-05-07 10:26 ` Mark Mitchell
  -- strict thread matches above, loose matches on Subject: below --
2002-05-08 21:50 Richard Kenner
2002-05-08 22:30 ` Richard Henderson
2002-05-09  1:35   ` Neil Booth
2002-05-08  7:56 Robert Dewar
2002-05-08  7:35 Robert Dewar
2002-05-08  7:54 ` Mark Mitchell
2002-05-08  4:49 Richard Kenner
2002-05-08  7:35 ` Mark Mitchell
2002-05-08 13:23 ` Richard Henderson
2002-05-07 21:02 Richard Kenner
2002-05-07 21:38 ` Mark Mitchell
2002-05-08  0:14 ` Neil Booth
2002-05-07 15:48 Richard Kenner
2002-05-07 20:39 ` Mark Mitchell
2002-05-07 15:37 Richard Kenner
2002-05-07 15:40 ` Richard Henderson
2002-05-07 15:02 Richard Kenner
2002-05-07 15:04 ` Richard Henderson
2002-05-07 15:02 Richard Kenner
2002-05-07 15:13 ` Richard Henderson
2002-05-07 14:54 Richard Kenner
2002-05-07 14:58 ` Richard Henderson
2002-05-07 14:02 Richard Kenner
2002-05-07 14:43 ` Richard Henderson
2002-05-07 11:09 Richard Kenner
2002-05-07 13:15 ` Richard Henderson
2002-05-07 10:29 Richard Kenner
2002-05-07 11:05 ` Richard Henderson
2002-05-07  6:40 Robert Dewar
2002-05-07  7:45 ` Mark Mitchell
2002-05-07  5:19 Richard Kenner
2002-05-07  5:11 Richard Kenner
2002-05-07  9:09 ` Richard Henderson
2002-05-06  8:48 Richard Kenner
2002-05-06  8:56 ` Mark Mitchell
2002-05-06 14:49   ` Daniel Jacobowitz
2002-05-06 14:51     ` David S. Miller
2002-05-06 15:00     ` Mark Mitchell
2002-05-06 15:50       ` Richard Henderson
2002-05-06 16:01         ` Mark Mitchell
2002-05-06 16:56           ` Richard Henderson
2002-05-06 17:03             ` Mark Mitchell
2002-05-06 17:11               ` Richard Henderson
2002-05-06 17:18                 ` Mark Mitchell
2002-05-06 22:59                   ` Richard Henderson
2002-05-06  3:46 Richard Kenner
2002-05-06  8:00 ` Mark Mitchell
2002-05-05 20:05 Richard Kenner
2002-05-05 22:45 ` Mark Mitchell
2002-05-05 23:26   ` Richard Henderson
2002-05-05 23:24 ` Richard Henderson
2002-05-05 17:16 Richard Kenner
2002-05-05 17:43 ` Richard Henderson
2002-05-05 11:50 Richard Kenner
2002-05-05 11:58 ` Mark Mitchell
2002-05-05 11:29 Mark Mitchell

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).