* [RS6000] libffi little-endian
@ 2013-06-07 1:34 Alan Modra
2013-06-07 4:12 ` David Edelsohn
0 siblings, 1 reply; 6+ messages in thread
From: Alan Modra @ 2013-06-07 1:34 UTC (permalink / raw)
To: gcc-patches; +Cc: David Edelsohn
Bootstrapped and regression tested powerpc64-linux. OK to apply?
* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Support
little-endian.
* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
Index: libffi/src/powerpc/linux64_closure.S
===================================================================
--- libffi/src/powerpc/linux64_closure.S (revision 199718)
+++ libffi/src/powerpc/linux64_closure.S (working copy)
@@ -132,7 +132,11 @@
blr
nop
# case FFI_TYPE_INT
+#ifdef __LITTLE_ENDIAN__
+ lwa %r3, 112+0(%r1)
+#else
lwa %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
@@ -152,33 +156,57 @@
lfd %f2, 112+8(%r1)
b .Lfinish
# case FFI_TYPE_UINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3, 112+0(%r1)
+#else
lbz %r3, 112+7(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3, 112+0(%r1)
+#else
lbz %r3, 112+7(%r1)
+#endif
extsb %r3,%r3
mtlr %r0
b .Lfinish
# case FFI_TYPE_UINT16
+#ifdef __LITTLE_ENDIAN__
+ lhz %r3, 112+0(%r1)
+#else
lhz %r3, 112+6(%r1)
+#endif
mtlr %r0
.Lfinish:
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT16
+#ifdef __LITTLE_ENDIAN__
+ lha %r3, 112+0(%r1)
+#else
lha %r3, 112+6(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_UINT32
+#ifdef __LITTLE_ENDIAN__
+ lwz %r3, 112+0(%r1)
+#else
lwz %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT32
+#ifdef __LITTLE_ENDIAN__
+ lwa %r3, 112+0(%r1)
+#else
lwa %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
Index: libffi/src/powerpc/ppc_closure.S
===================================================================
--- libffi/src/powerpc/ppc_closure.S (revision 199718)
+++ libffi/src/powerpc/ppc_closure.S (working copy)
@@ -159,25 +159,41 @@
#endif
# case FFI_TYPE_UINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3,112+0(%r1)
+#else
lbz %r3,112+3(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
# case FFI_TYPE_SINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3,112+0(%r1)
+#else
lbz %r3,112+3(%r1)
+#endif
extsb %r3,%r3
mtlr %r0
b .Lfinish
# case FFI_TYPE_UINT16
+#ifdef __LITTLE_ENDIAN__
+ lhz %r3,112+0(%r1)
+#else
lhz %r3,112+2(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
# case FFI_TYPE_SINT16
+#ifdef __LITTLE_ENDIAN__
+ lha %r3,112+0(%r1)
+#else
lha %r3,112+2(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
@@ -239,9 +255,15 @@
# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
lwz %r3,112+0(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ addi %r1,%r1,144
+ blr
+#else
srwi %r3,%r3,8
mtlr %r0
b .Lfinish
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
lwz %r3,112+0(%r1)
@@ -252,20 +274,35 @@
# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,24
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,16
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,8
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
lwz %r3,112+0(%r1)
@@ -273,6 +310,7 @@
mtlr %r0
b .Lfinish
+#ifndef __LITTLE_ENDIAN__
.Lstruct567:
subfic %r6,%r5,32
srw %r4,%r4,%r5
@@ -282,6 +320,7 @@
mtlr %r0
addi %r1,%r1,144
blr
+#endif
.Luint128:
lwz %r6,112+12(%r1)
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RS6000] libffi little-endian
2013-06-07 1:34 [RS6000] libffi little-endian Alan Modra
@ 2013-06-07 4:12 ` David Edelsohn
2013-06-24 0:26 ` Alan Modra
0 siblings, 1 reply; 6+ messages in thread
From: David Edelsohn @ 2013-06-07 4:12 UTC (permalink / raw)
To: GCC Patches, David Edelsohn
On Thu, Jun 6, 2013 at 9:34 PM, Alan Modra <amodra@gmail.com> wrote:
> Bootstrapped and regression tested powerpc64-linux. OK to apply?
>
> * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Support
> little-endian.
> * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
This patch needs to be applied upstream in the libffi repository.
All of the handling of structs in ffi.c and ffi_darwin.c doesn't need
any changes? Cool. I thought there might be a padding issue.
- David
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RS6000] libffi little-endian
2013-06-07 4:12 ` David Edelsohn
@ 2013-06-24 0:26 ` Alan Modra
2013-06-24 2:32 ` David Edelsohn
0 siblings, 1 reply; 6+ messages in thread
From: Alan Modra @ 2013-06-24 0:26 UTC (permalink / raw)
To: David Edelsohn; +Cc: GCC Patches, libffi-discuss
On Fri, Jun 07, 2013 at 12:12:17AM -0400, David Edelsohn wrote:
> On Thu, Jun 6, 2013 at 9:34 PM, Alan Modra <amodra@gmail.com> wrote:
> > Bootstrapped and regression tested powerpc64-linux. OK to apply?
> >
> > * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Support
> > little-endian.
> > * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
>
> This patch needs to be applied upstream in the libffi repository.
>
> All of the handling of structs in ffi.c and ffi_darwin.c doesn't need
> any changes? Cool. I thought there might be a padding issue.
You were right, of course. When we finally got around to running an
all languages bootstrap on powerpc64le, we discovered some missing
pieces in libffi. The following adds some ffi.c changes to the
previous patch (closure.S patches are unchanged). I haven't tackled
ffi_darwin.c.
Bootstrapped and regression tested powerpc64-linux. This one passes
the libffi testsuite on powerpc64le-linux. OK mainline and 4.8?
* src/powerpc/ffi.c (ffi_prep_args_SYSV): Move var declaration
before statements.
(ffi_prep_args64): Support little-endian.
(ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Likewise.
* src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Likewise.
* src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
Index: libffi/src/powerpc/ffi.c
===================================================================
--- libffi/src/powerpc/ffi.c (revision 200159)
+++ libffi/src/powerpc/ffi.c (working copy)
@@ -127,6 +127,9 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *
int i;
ffi_type **ptr;
+#ifndef __NO_FPRS__
+ double double_tmp;
+#endif
union {
void **v;
char **c;
@@ -146,7 +149,6 @@ ffi_prep_args_SYSV (extended_cif *ecif, unsigned *
gpr_base.u = stacktop.u - ASM_NEEDS_REGISTERS - NUM_GPR_ARG_REGISTERS;
intarg_count = 0;
#ifndef __NO_FPRS__
- double double_tmp;
fpr_base.d = gpr_base.d - NUM_FPR_ARG_REGISTERS;
fparg_count = 0;
copy_space.c = ((flags & FLAG_FP_ARGUMENTS) ? fpr_base.c : gpr_base.c);
@@ -542,11 +544,12 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long
{
char *where = next_arg.c;
+#ifndef __LITTLE_ENDIAN__
/* Structures with size less than eight bytes are passed
left-padded. */
if ((*ptr)->size < 8)
where += 8 - (*ptr)->size;
-
+#endif
memcpy (where, *p_argv.c, (*ptr)->size);
next_arg.ul += words;
if (next_arg.ul == gpr_end.ul)
@@ -1208,6 +1211,7 @@ ffi_closure_helper_SYSV (ffi_closure *closure, voi
case FFI_TYPE_SINT8:
case FFI_TYPE_UINT8:
+#ifndef __LITTLE_ENDIAN__
/* there are 8 gpr registers used to pass values */
if (ng < 8)
{
@@ -1221,9 +1225,10 @@ ffi_closure_helper_SYSV (ffi_closure *closure, voi
pst++;
}
break;
-
+#endif
case FFI_TYPE_SINT16:
case FFI_TYPE_UINT16:
+#ifndef __LITTLE_ENDIAN__
/* there are 8 gpr registers used to pass values */
if (ng < 8)
{
@@ -1237,7 +1242,7 @@ ffi_closure_helper_SYSV (ffi_closure *closure, voi
pst++;
}
break;
-
+#endif
case FFI_TYPE_SINT32:
case FFI_TYPE_UINT32:
case FFI_TYPE_POINTER:
@@ -1367,22 +1372,25 @@ ffi_closure_helper_LINUX64 (ffi_closure *closure,
{
case FFI_TYPE_SINT8:
case FFI_TYPE_UINT8:
+#ifndef __LITTLE_ENDIAN__
avalue[i] = (char *) pst + 7;
pst++;
break;
-
+#endif
case FFI_TYPE_SINT16:
case FFI_TYPE_UINT16:
+#ifndef __LITTLE_ENDIAN__
avalue[i] = (char *) pst + 6;
pst++;
break;
-
+#endif
case FFI_TYPE_SINT32:
case FFI_TYPE_UINT32:
+#ifndef __LITTLE_ENDIAN__
avalue[i] = (char *) pst + 4;
pst++;
break;
-
+#endif
case FFI_TYPE_SINT64:
case FFI_TYPE_UINT64:
case FFI_TYPE_POINTER:
@@ -1391,11 +1399,13 @@ ffi_closure_helper_LINUX64 (ffi_closure *closure,
break;
case FFI_TYPE_STRUCT:
+#ifndef __LITTLE_ENDIAN__
/* Structures with size less than eight bytes are passed
left-padded. */
if (arg_types[i]->size < 8)
avalue[i] = (char *) pst + 8 - arg_types[i]->size;
else
+#endif
avalue[i] = pst;
pst += (arg_types[i]->size + 7) / 8;
break;
Index: libffi/src/powerpc/linux64_closure.S
===================================================================
--- libffi/src/powerpc/linux64_closure.S (revision 200159)
+++ libffi/src/powerpc/linux64_closure.S (working copy)
@@ -132,7 +132,11 @@ ffi_closure_LINUX64:
blr
nop
# case FFI_TYPE_INT
+#ifdef __LITTLE_ENDIAN__
+ lwa %r3, 112+0(%r1)
+#else
lwa %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
@@ -152,33 +156,57 @@ ffi_closure_LINUX64:
lfd %f2, 112+8(%r1)
b .Lfinish
# case FFI_TYPE_UINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3, 112+0(%r1)
+#else
lbz %r3, 112+7(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3, 112+0(%r1)
+#else
lbz %r3, 112+7(%r1)
+#endif
extsb %r3,%r3
mtlr %r0
b .Lfinish
# case FFI_TYPE_UINT16
+#ifdef __LITTLE_ENDIAN__
+ lhz %r3, 112+0(%r1)
+#else
lhz %r3, 112+6(%r1)
+#endif
mtlr %r0
.Lfinish:
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT16
+#ifdef __LITTLE_ENDIAN__
+ lha %r3, 112+0(%r1)
+#else
lha %r3, 112+6(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_UINT32
+#ifdef __LITTLE_ENDIAN__
+ lwz %r3, 112+0(%r1)
+#else
lwz %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
# case FFI_TYPE_SINT32
+#ifdef __LITTLE_ENDIAN__
+ lwa %r3, 112+0(%r1)
+#else
lwa %r3, 112+4(%r1)
+#endif
mtlr %r0
addi %r1, %r1, 240
blr
Index: libffi/src/powerpc/ppc_closure.S
===================================================================
--- libffi/src/powerpc/ppc_closure.S (revision 200159)
+++ libffi/src/powerpc/ppc_closure.S (working copy)
@@ -159,25 +159,41 @@ ENTRY(ffi_closure_SYSV)
#endif
# case FFI_TYPE_UINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3,112+0(%r1)
+#else
lbz %r3,112+3(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
# case FFI_TYPE_SINT8
+#ifdef __LITTLE_ENDIAN__
+ lbz %r3,112+0(%r1)
+#else
lbz %r3,112+3(%r1)
+#endif
extsb %r3,%r3
mtlr %r0
b .Lfinish
# case FFI_TYPE_UINT16
+#ifdef __LITTLE_ENDIAN__
+ lhz %r3,112+0(%r1)
+#else
lhz %r3,112+2(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
# case FFI_TYPE_SINT16
+#ifdef __LITTLE_ENDIAN__
+ lha %r3,112+0(%r1)
+#else
lha %r3,112+2(%r1)
+#endif
mtlr %r0
addi %r1,%r1,144
blr
@@ -239,9 +255,15 @@ ENTRY(ffi_closure_SYSV)
# case FFI_SYSV_TYPE_SMALL_STRUCT + 3. Three byte struct.
lwz %r3,112+0(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ addi %r1,%r1,144
+ blr
+#else
srwi %r3,%r3,8
mtlr %r0
b .Lfinish
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 4. Four byte struct.
lwz %r3,112+0(%r1)
@@ -252,20 +274,35 @@ ENTRY(ffi_closure_SYSV)
# case FFI_SYSV_TYPE_SMALL_STRUCT + 5. Five byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,24
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 6. Six byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,16
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 7. Seven byte struct.
lwz %r3,112+0(%r1)
lwz %r4,112+4(%r1)
+#ifdef __LITTLE_ENDIAN__
+ mtlr %r0
+ b .Lfinish
+#else
li %r5,8
b .Lstruct567
+#endif
# case FFI_SYSV_TYPE_SMALL_STRUCT + 8. Eight byte struct.
lwz %r3,112+0(%r1)
@@ -273,6 +310,7 @@ ENTRY(ffi_closure_SYSV)
mtlr %r0
b .Lfinish
+#ifndef __LITTLE_ENDIAN__
.Lstruct567:
subfic %r6,%r5,32
srw %r4,%r4,%r5
@@ -282,6 +320,7 @@ ENTRY(ffi_closure_SYSV)
mtlr %r0
addi %r1,%r1,144
blr
+#endif
.Luint128:
lwz %r6,112+12(%r1)
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RS6000] libffi little-endian
2013-06-24 0:26 ` Alan Modra
@ 2013-06-24 2:32 ` David Edelsohn
2013-06-24 15:12 ` Anthony Green
0 siblings, 1 reply; 6+ messages in thread
From: David Edelsohn @ 2013-06-24 2:32 UTC (permalink / raw)
To: GCC Patches, libffi-discuss, Alan Modra
On Sun, Jun 23, 2013 at 8:26 PM, Alan Modra <amodra@gmail.com> wrote:
> On Fri, Jun 07, 2013 at 12:12:17AM -0400, David Edelsohn wrote:
>> On Thu, Jun 6, 2013 at 9:34 PM, Alan Modra <amodra@gmail.com> wrote:
>> > Bootstrapped and regression tested powerpc64-linux. OK to apply?
>> >
>> > * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Support
>> > little-endian.
>> > * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
>>
>> This patch needs to be applied upstream in the libffi repository.
>>
>> All of the handling of structs in ffi.c and ffi_darwin.c doesn't need
>> any changes? Cool. I thought there might be a padding issue.
>
> You were right, of course. When we finally got around to running an
> all languages bootstrap on powerpc64le, we discovered some missing
> pieces in libffi. The following adds some ffi.c changes to the
> previous patch (closure.S patches are unchanged). I haven't tackled
> ffi_darwin.c.
>
> Bootstrapped and regression tested powerpc64-linux. This one passes
> the libffi testsuite on powerpc64le-linux. OK mainline and 4.8?
>
> * src/powerpc/ffi.c (ffi_prep_args_SYSV): Move var declaration
> before statements.
> (ffi_prep_args64): Support little-endian.
> (ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Likewise.
> * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Likewise.
> * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
This looks okay to me and more like the changes I expected. Assuming
Anthony accepts it upstream.
Thanks, David
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RS6000] libffi little-endian
2013-06-24 2:32 ` David Edelsohn
@ 2013-06-24 15:12 ` Anthony Green
2013-06-25 0:11 ` Alan Modra
0 siblings, 1 reply; 6+ messages in thread
From: Anthony Green @ 2013-06-24 15:12 UTC (permalink / raw)
To: David Edelsohn; +Cc: GCC Patches, libffi-discuss, Alan Modra
It's fine with me. Please commit it directly to GCC and I'll put it in the upstream.
Thanks!
AG
----- Original Message -----
From: "David Edelsohn" <dje.gcc@gmail.com>
To: "GCC Patches" <gcc-patches@gcc.gnu.org>, libffi-discuss@sourceware.org, "Alan Modra" <amodra@gmail.com>
Sent: Sunday, June 23, 2013 10:32:44 PM
Subject: Re: [RS6000] libffi little-endian
On Sun, Jun 23, 2013 at 8:26 PM, Alan Modra <amodra@gmail.com> wrote:
> On Fri, Jun 07, 2013 at 12:12:17AM -0400, David Edelsohn wrote:
>> On Thu, Jun 6, 2013 at 9:34 PM, Alan Modra <amodra@gmail.com> wrote:
>> > Bootstrapped and regression tested powerpc64-linux. OK to apply?
>> >
>> > * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Support
>> > little-endian.
>> > * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
>>
>> This patch needs to be applied upstream in the libffi repository.
>>
>> All of the handling of structs in ffi.c and ffi_darwin.c doesn't need
>> any changes? Cool. I thought there might be a padding issue.
>
> You were right, of course. When we finally got around to running an
> all languages bootstrap on powerpc64le, we discovered some missing
> pieces in libffi. The following adds some ffi.c changes to the
> previous patch (closure.S patches are unchanged). I haven't tackled
> ffi_darwin.c.
>
> Bootstrapped and regression tested powerpc64-linux. This one passes
> the libffi testsuite on powerpc64le-linux. OK mainline and 4.8?
>
> * src/powerpc/ffi.c (ffi_prep_args_SYSV): Move var declaration
> before statements.
> (ffi_prep_args64): Support little-endian.
> (ffi_closure_helper_SYSV, ffi_closure_helper_LINUX64): Likewise.
> * src/powerpc/linux64_closure.S (ffi_closure_LINUX64): Likewise.
> * src/powerpc/ppc_closure.S (ffi_closure_SYSV): Likewise.
This looks okay to me and more like the changes I expected. Assuming
Anthony accepts it upstream.
Thanks, David
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RS6000] libffi little-endian
2013-06-24 15:12 ` Anthony Green
@ 2013-06-25 0:11 ` Alan Modra
0 siblings, 0 replies; 6+ messages in thread
From: Alan Modra @ 2013-06-25 0:11 UTC (permalink / raw)
To: Anthony Green; +Cc: David Edelsohn, GCC Patches, libffi-discuss
On Mon, Jun 24, 2013 at 11:12:03AM -0400, Anthony Green wrote:
> It's fine with me. Please commit it directly to GCC and I'll put it in the upstream.
Thanks! Committed revision 200383. (and 200384 to 4.8 branch.)
--
Alan Modra
Australia Development Lab, IBM
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-06-25 0:11 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-07 1:34 [RS6000] libffi little-endian Alan Modra
2013-06-07 4:12 ` David Edelsohn
2013-06-24 0:26 ` Alan Modra
2013-06-24 2:32 ` David Edelsohn
2013-06-24 15:12 ` Anthony Green
2013-06-25 0:11 ` Alan Modra
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).