Package: guile;
Reported by: Peter TB Brett <peter <at> peter-b.co.uk>
Date: Tue, 19 Jan 2016 13:51:01 UTC
Severity: normal
Tags: patch
Merged with 19019
To reply to this bug, email your comments to 22406 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-guile <at> gnu.org
:bug#22406
; Package guile
.
(Tue, 19 Jan 2016 13:51:02 GMT) Full text and rfc822 format available.Peter TB Brett <peter <at> peter-b.co.uk>
:bug-guile <at> gnu.org
.
(Tue, 19 Jan 2016 13:51:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Peter TB Brett <peter <at> peter-b.co.uk> To: bug-guile <at> gnu.org Subject: Cannot compile for Windows x64 due to LLP64 model Date: Tue, 19 Jan 2016 13:50:17 +0000
It is not currently possible to compile Guile 2.0.11 for Windows x64 (in particular 64-bit Windows running on the x86-64 arch). Most operating systems' C libraries for x86-64 use an "LP64" model, where sizeof(long int) == sizeof(void *) == 8. However, for backwards-compatibility reasons, Windows uses an "LLP64" model, where sizeof(long long int) == sizeof(void *) == 8 and sizeof(long int) == 4. Guile 2.0.11 can't cope with this; the libguile build fails due to this code: > static SCM > scm_i_inum2big (scm_t_inum x) > { > /* Return a newly created bignum initialized to X. */ > SCM z = make_bignum (); > #if SIZEOF_VOID_P == SIZEOF_LONG > mpz_init_set_si (SCM_I_BIG_MPZ (z), x); > #else > /* Note that in this case, you'll also have to check all mpz_*_ui and > mpz_*_si invocations in Guile. */ > #error creation of mpz not implemented for this inum size > #endif > return z; > } http://git.savannah.gnu.org/cgit/guile.git/tree/libguile/numbers.c?id=v2.0.11#n272 Some work appears to be required before using 64-bit Guile on Windows x64 is possible. -- Dr Peter Brett <peter <at> peter-b.co.uk>
bug-guile <at> gnu.org
:bug#22406
; Package guile
.
(Tue, 26 Jan 2016 16:03:01 GMT) Full text and rfc822 format available.Message #8 received at 22406 <at> debbugs.gnu.org (full text, mbox):
From: Mark H Weaver <mhw <at> netris.org> To: Peter TB Brett <peter <at> peter-b.co.uk> Cc: 22406 <at> debbugs.gnu.org Subject: Re: bug#22406: Cannot compile for Windows x64 due to LLP64 model Date: Tue, 26 Jan 2016 11:02:17 -0500
[Message part 1 (text/plain, inline)]
Hi Peter, Peter TB Brett <peter <at> peter-b.co.uk> writes: > It is not currently possible to compile Guile 2.0.11 for Windows x64 > (in particular 64-bit Windows running on the x86-64 arch). > > Most operating systems' C libraries for x86-64 use an "LP64" model, > where sizeof(long int) == sizeof(void *) == 8. > > However, for backwards-compatibility reasons, Windows uses an "LLP64" > model, where sizeof(long long int) == sizeof(void *) == 8 and > sizeof(long int) == 4. > > Guile 2.0.11 can't cope with this; the libguile build fails due to > this code: I've attached a patch that attempts to address this issue by using 'long' as the scm_t_inum type. So, fixnums will be limited to 30 bits on LLP64 systems. We can't easily avoid this while using GMP's mpz API, since the mpz_*_si functions except longs and there are no analogous functions that accept larger C integer types. Can you test this patch and report back? Thanks, Mark
[0001-PRELIMINARY-fixes-for-LLP64.patch (text/x-patch, inline)]
From 4a923816c9814b07556fdcc53b74b3e1ca2a0f41 Mon Sep 17 00:00:00 2001 From: Mark H Weaver <mhw <at> netris.org> Date: Tue, 26 Jan 2016 03:42:18 -0500 Subject: [PATCH] PRELIMINARY fixes for LLP64. --- libguile/numbers.c | 19 ++++++++++--------- libguile/numbers.h | 29 ++++++++++++++--------------- libguile/vm-i-scheme.c | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/libguile/numbers.c b/libguile/numbers.c index 1e3fc30..7d32c20 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2015 Free Software Foundation, Inc. +/* Copyright (C) 1995-2016 Free Software Foundation, Inc. * * Portions Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories * and Bellcore. See scm_divide. @@ -87,7 +87,14 @@ /* FIXME: We assume that FLT_RADIX is 2 */ verify (FLT_RADIX == 2); -typedef scm_t_signed_bits scm_t_inum; +/* We assume that a long fits within a SCM value. */ +verify (SCM_SIZEOF_LONG <= SIZEOF_SCM_T_BITS); + +/* We use 'long' as the type for Inums, because that's the type accepted + by GMP's mpz_*_si functions. Above, we checked that a long fits + within an SCM. */ +typedef long scm_t_inum; + #define scm_from_inum(x) (scm_from_signed_integer (x)) /* Test an inum to see if it can be converted to a double without loss @@ -272,13 +279,7 @@ scm_i_inum2big (scm_t_inum x) { /* Return a newly created bignum initialized to X. */ SCM z = make_bignum (); -#if SIZEOF_VOID_P == SIZEOF_LONG mpz_init_set_si (SCM_I_BIG_MPZ (z), x); -#else - /* Note that in this case, you'll also have to check all mpz_*_ui and - mpz_*_si invocations in Guile. */ -#error creation of mpz not implemented for this inum size -#endif return z; } @@ -4966,7 +4967,7 @@ left_shift_exact_integer (SCM n, long count) if (nn == 0) return n; else if (count < SCM_I_FIXNUM_BIT-1 && - ((scm_t_bits) (SCM_SRS (nn, (SCM_I_FIXNUM_BIT-1 - count)) + 1) + ((unsigned long) (SCM_SRS (nn, (SCM_I_FIXNUM_BIT-1 - count)) + 1) <= 1)) return SCM_I_MAKINUM (nn < 0 ? -(-nn << count) : (nn << count)); else diff --git a/libguile/numbers.h b/libguile/numbers.h index b929b7a..d5e4f2b 100644 --- a/libguile/numbers.h +++ b/libguile/numbers.h @@ -3,8 +3,8 @@ #ifndef SCM_NUMBERS_H #define SCM_NUMBERS_H -/* Copyright (C) 1995,1996,1998,2000,2001,2002,2003,2004,2005, 2006, - * 2008, 2009, 2010, 2011, 2013, 2014 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1998, 2000-2006, 2008-2011, 2013, 2014, + * 2016 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -38,16 +38,15 @@ typedef scm_t_int32 scm_t_wchar; /* Immediate Numbers, also known as fixnums * - * Inums are exact integer data that fits within an SCM word. */ - -/* SCM_T_SIGNED_MAX is (- (expt 2 n) 1), - * SCM_MOST_POSITIVE_FIXNUM should be (- (expt 2 (- n 2)) 1) - * which is the same as (/ (- (expt 2 n) 4) 4) - */ - + * Inums are exact integers that fit within an SCM word + * (along with two tagging bits). + * + * In the current implementation, Inums must also fit within a long + * because that's what GMP's mpz_*_si functions accept. We assume that + * a long fits in a SCM value (this is checked in numbers.c). */ #define SCM_I_FIXNUM_BIT (SCM_LONG_BIT - 2) -#define SCM_MOST_POSITIVE_FIXNUM ((SCM_T_SIGNED_BITS_MAX-3)/4) -#define SCM_MOST_NEGATIVE_FIXNUM (-SCM_MOST_POSITIVE_FIXNUM-1) +#define SCM_MOST_NEGATIVE_FIXNUM (-1L << (SCM_I_FIXNUM_BIT - 1)) +#define SCM_MOST_POSITIVE_FIXNUM (- (SCM_MOST_NEGATIVE_FIXNUM + 1)) /* SCM_SRS (X, Y) is signed right shift, defined as floor (X / 2^Y), where Y must be non-negative and less than the width in bits of X. @@ -60,7 +59,7 @@ typedef scm_t_int32 scm_t_wchar; #else # define SCM_SRS(x, y) \ ((x) < 0 \ - ? -1 - (scm_t_signed_bits) (~(scm_t_bits)(x) >> (y)) \ + ? -1 - (long) (~(unsigned long)(x) >> (y)) \ : ((x) >> (y))) #endif @@ -74,12 +73,12 @@ typedef scm_t_int32 scm_t_wchar; NOTE: X must not perform side effects. */ #ifdef __GNUC__ -# define SCM_I_INUM(x) (SCM_SRS ((scm_t_signed_bits) SCM_UNPACK (x), 2)) +# define SCM_I_INUM(x) (SCM_SRS ((long) SCM_UNPACK (x), 2)) #else # define SCM_I_INUM(x) \ (SCM_UNPACK (x) > LONG_MAX \ - ? -1 - (scm_t_signed_bits) (~SCM_UNPACK (x) >> 2) \ - : (scm_t_signed_bits) (SCM_UNPACK (x) >> 2)) + ? -1 - (long) (~SCM_UNPACK (x) >> 2) \ + : (long) (SCM_UNPACK (x) >> 2)) #endif #define SCM_I_INUMP(x) (2 & SCM_UNPACK (x)) diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index 162efab..249b835 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -360,7 +360,7 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2) # define ASM_MUL(x, y) \ if (SCM_LIKELY (SCM_I_INUMP (x) && SCM_I_INUMP (y))) \ { \ - scm_t_signed_bits rlo, rhi; \ + long rlo, rhi; \ asm ("smull %0, %1, %2, %3\n" \ : "=&r" (rlo), "=&r" (rhi) \ : "r" (SCM_UNPACK (x) - scm_tc2_int), \ -- 2.6.3
bug-guile <at> gnu.org
:bug#22406
; Package guile
.
(Tue, 26 Jan 2016 17:39:01 GMT) Full text and rfc822 format available.Message #11 received at 22406 <at> debbugs.gnu.org (full text, mbox):
From: Mark H Weaver <mhw <at> netris.org> To: Peter TB Brett <peter <at> peter-b.co.uk> Cc: 22406 <at> debbugs.gnu.org Subject: Re: bug#22406: Cannot compile for Windows x64 due to LLP64 model Date: Tue, 26 Jan 2016 12:38:04 -0500
[Message part 1 (text/plain, inline)]
Mark H Weaver <mhw <at> netris.org> writes: > Peter TB Brett <peter <at> peter-b.co.uk> writes: > >> It is not currently possible to compile Guile 2.0.11 for Windows x64 >> (in particular 64-bit Windows running on the x86-64 arch). >> >> Most operating systems' C libraries for x86-64 use an "LP64" model, >> where sizeof(long int) == sizeof(void *) == 8. >> >> However, for backwards-compatibility reasons, Windows uses an "LLP64" >> model, where sizeof(long long int) == sizeof(void *) == 8 and >> sizeof(long int) == 4. >> >> Guile 2.0.11 can't cope with this; the libguile build fails due to >> this code: > > I've attached a patch that attempts to address this issue by using > 'long' as the scm_t_inum type. So, fixnums will be limited to 30 bits > on LLP64 systems. We can't easily avoid this while using GMP's mpz API, > since the mpz_*_si functions except longs and there are no analogous > functions that accept larger C integer types. > > Can you test this patch and report back? Disregard my first patch, as it missed a few important changes. Please try this one instead. Thanks, Mark
[0001-PRELIMINARY-fixes-for-LLP64.patch (text/x-patch, inline)]
From 333ec4fd35c5625cd090e216a77842a5e1ca9941 Mon Sep 17 00:00:00 2001 From: Mark H Weaver <mhw <at> netris.org> Date: Tue, 26 Jan 2016 03:42:18 -0500 Subject: [PATCH] PRELIMINARY fixes for LLP64. --- libguile/numbers.c | 12 ++++-------- libguile/numbers.h | 37 ++++++++++++++++++------------------- libguile/vm-i-scheme.c | 28 ++++++++++++++-------------- 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/libguile/numbers.c b/libguile/numbers.c index 1e3fc30..205548d 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2015 Free Software Foundation, Inc. +/* Copyright (C) 1995-2016 Free Software Foundation, Inc. * * Portions Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories * and Bellcore. See scm_divide. @@ -87,7 +87,9 @@ /* FIXME: We assume that FLT_RADIX is 2 */ verify (FLT_RADIX == 2); -typedef scm_t_signed_bits scm_t_inum; +/* Make sure that scm_t_inum fits within a SCM value. */ +verify (sizeof (scm_t_inum) <= sizeof (scm_t_bits)); + #define scm_from_inum(x) (scm_from_signed_integer (x)) /* Test an inum to see if it can be converted to a double without loss @@ -272,13 +274,7 @@ scm_i_inum2big (scm_t_inum x) { /* Return a newly created bignum initialized to X. */ SCM z = make_bignum (); -#if SIZEOF_VOID_P == SIZEOF_LONG mpz_init_set_si (SCM_I_BIG_MPZ (z), x); -#else - /* Note that in this case, you'll also have to check all mpz_*_ui and - mpz_*_si invocations in Guile. */ -#error creation of mpz not implemented for this inum size -#endif return z; } diff --git a/libguile/numbers.h b/libguile/numbers.h index b929b7a..9f7dd3c 100644 --- a/libguile/numbers.h +++ b/libguile/numbers.h @@ -3,8 +3,8 @@ #ifndef SCM_NUMBERS_H #define SCM_NUMBERS_H -/* Copyright (C) 1995,1996,1998,2000,2001,2002,2003,2004,2005, 2006, - * 2008, 2009, 2010, 2011, 2013, 2014 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1998, 2000-2006, 2008-2011, 2013, 2014, + * 2016 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -38,16 +38,15 @@ typedef scm_t_int32 scm_t_wchar; /* Immediate Numbers, also known as fixnums * - * Inums are exact integer data that fits within an SCM word. */ - -/* SCM_T_SIGNED_MAX is (- (expt 2 n) 1), - * SCM_MOST_POSITIVE_FIXNUM should be (- (expt 2 (- n 2)) 1) - * which is the same as (/ (- (expt 2 n) 4) 4) - */ - + * Inums are exact integers that fit within an SCM word + * (along with two tagging bits). + * + * In the current implementation, Inums must also fit within a long + * because that's what GMP's mpz_*_si functions accept. */ +typedef long scm_t_inum; #define SCM_I_FIXNUM_BIT (SCM_LONG_BIT - 2) -#define SCM_MOST_POSITIVE_FIXNUM ((SCM_T_SIGNED_BITS_MAX-3)/4) -#define SCM_MOST_NEGATIVE_FIXNUM (-SCM_MOST_POSITIVE_FIXNUM-1) +#define SCM_MOST_NEGATIVE_FIXNUM (-1L << (SCM_I_FIXNUM_BIT - 1)) +#define SCM_MOST_POSITIVE_FIXNUM (- (SCM_MOST_NEGATIVE_FIXNUM + 1)) /* SCM_SRS (X, Y) is signed right shift, defined as floor (X / 2^Y), where Y must be non-negative and less than the width in bits of X. @@ -58,9 +57,9 @@ typedef scm_t_int32 scm_t_wchar; #if (-1 >> 2 == -1) && (-4 >> 2 == -1) && (-5 >> 2 == -2) && (-8 >> 2 == -2) # define SCM_SRS(x, y) ((x) >> (y)) #else -# define SCM_SRS(x, y) \ - ((x) < 0 \ - ? -1 - (scm_t_signed_bits) (~(scm_t_bits)(x) >> (y)) \ +# define SCM_SRS(x, y) \ + ((x) < 0 \ + ? -1 - (long) (~(unsigned long)(x) >> (y)) \ : ((x) >> (y))) #endif @@ -74,12 +73,12 @@ typedef scm_t_int32 scm_t_wchar; NOTE: X must not perform side effects. */ #ifdef __GNUC__ -# define SCM_I_INUM(x) (SCM_SRS ((scm_t_signed_bits) SCM_UNPACK (x), 2)) +# define SCM_I_INUM(x) (SCM_SRS ((scm_t_inum) SCM_UNPACK (x), 2)) #else -# define SCM_I_INUM(x) \ - (SCM_UNPACK (x) > LONG_MAX \ - ? -1 - (scm_t_signed_bits) (~SCM_UNPACK (x) >> 2) \ - : (scm_t_signed_bits) (SCM_UNPACK (x) >> 2)) +# define SCM_I_INUM(x) \ + (SCM_UNPACK (x) > SCM_T_SIGNED_BITS_MAX \ + ? -1 - (scm_t_inum) (~SCM_UNPACK (x) >> 2) \ + : (scm_t_inum) (SCM_UNPACK (x) >> 2)) #endif #define SCM_I_INUMP(x) (2 & SCM_UNPACK (x)) diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index 162efab..452a459 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2009-2014 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009-2014, 2016 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -236,9 +236,9 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2) #if SCM_GNUC_PREREQ (4, 5) && (defined __x86_64__ || defined __i386__) # undef _CX -# if SIZEOF_VOID_P == 8 +# if SCM_I_FIXNUM_BIT == 62 # define _CX "rcx" -# elif SIZEOF_VOID_P == 4 +# elif SCM_I_FIXNUM_BIT == 30 # define _CX "ecx" # else # error unsupported word size @@ -291,7 +291,7 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2) # define ASM_MUL(x, y) \ { \ - scm_t_signed_bits xx = SCM_I_INUM (x); \ + scm_t_inum xx = SCM_I_INUM (x); \ asm volatile goto ("mov %1, %%"_CX"; " \ "test %[tag], %%cl; je %l[slow_mul]; " \ "sub %[tag], %%"_CX"; " \ @@ -360,7 +360,7 @@ VM_DEFINE_FUNCTION (149, ge, "ge?", 2) # define ASM_MUL(x, y) \ if (SCM_LIKELY (SCM_I_INUMP (x) && SCM_I_INUMP (y))) \ { \ - scm_t_signed_bits rlo, rhi; \ + scm_t_inum rlo, rhi; \ asm ("smull %0, %1, %2, %3\n" \ : "=&r" (rlo), "=&r" (rhi) \ : "r" (SCM_UNPACK (x) - scm_tc2_int), \ @@ -496,7 +496,7 @@ VM_DEFINE_FUNCTION (159, ash, "ash", 2) else /* Left shift. See comments in scm_ash. */ { - scm_t_signed_bits nn, bits_to_shift; + scm_t_inum nn, bits_to_shift; nn = SCM_I_INUM (x); bits_to_shift = SCM_I_INUM (y); @@ -552,7 +552,7 @@ VM_DEFINE_FUNCTION (162, logxor, "logxor", 2) VM_DEFINE_FUNCTION (163, vector_ref, "vector-ref", 2) { - scm_t_signed_bits i = 0; + scm_t_inum i = 0; ARGS2 (vect, idx); if (SCM_LIKELY (SCM_I_IS_NONWEAK_VECTOR (vect) && SCM_I_INUMP (idx) @@ -568,7 +568,7 @@ VM_DEFINE_FUNCTION (163, vector_ref, "vector-ref", 2) VM_DEFINE_INSTRUCTION (164, vector_set, "vector-set", 0, 3, 0) { - scm_t_signed_bits i = 0; + scm_t_inum i = 0; SCM vect, idx, val; POP3 (val, idx, vect); if (SCM_LIKELY (SCM_I_IS_NONWEAK_VECTOR (vect) @@ -792,7 +792,7 @@ BV_REF_WITH_ENDIANNESS (f64, ieee_double) #define BV_FIXABLE_INT_REF(stem, fn_stem, type, size) \ { \ - scm_t_signed_bits i; \ + scm_t_inum i; \ const scm_t_ ## type *int_ptr; \ ARGS2 (bv, idx); \ \ @@ -814,7 +814,7 @@ BV_REF_WITH_ENDIANNESS (f64, ieee_double) #define BV_INT_REF(stem, type, size) \ { \ - scm_t_signed_bits i; \ + scm_t_inum i; \ const scm_t_ ## type *int_ptr; \ ARGS2 (bv, idx); \ \ @@ -845,7 +845,7 @@ BV_REF_WITH_ENDIANNESS (f64, ieee_double) #define BV_FLOAT_REF(stem, fn_stem, type, size) \ { \ - scm_t_signed_bits i; \ + scm_t_inum i; \ const type *float_ptr; \ ARGS2 (bv, idx); \ \ @@ -933,7 +933,7 @@ BV_SET_WITH_ENDIANNESS (f64, ieee_double) #define BV_FIXABLE_INT_SET(stem, fn_stem, type, min, max, size) \ { \ - scm_t_signed_bits i, j = 0; \ + scm_t_inum i, j = 0; \ SCM bv, idx, val; \ scm_t_ ## type *int_ptr; \ \ @@ -960,7 +960,7 @@ BV_SET_WITH_ENDIANNESS (f64, ieee_double) #define BV_INT_SET(stem, type, size) \ { \ - scm_t_signed_bits i = 0; \ + scm_t_inum i = 0; \ SCM bv, idx, val; \ scm_t_ ## type *int_ptr; \ \ @@ -984,7 +984,7 @@ BV_SET_WITH_ENDIANNESS (f64, ieee_double) #define BV_FLOAT_SET(stem, fn_stem, type, size) \ { \ - scm_t_signed_bits i = 0; \ + scm_t_inum i = 0; \ SCM bv, idx, val; \ type *float_ptr; \ \ -- 2.6.3
bug-guile <at> gnu.org
:bug#22406
; Package guile
.
(Mon, 20 Jun 2016 20:02:01 GMT) Full text and rfc822 format available.Message #14 received at 22406 <at> debbugs.gnu.org (full text, mbox):
From: Mark H Weaver <mhw <at> netris.org> To: Peter TB Brett <peter <at> peter-b.co.uk> Cc: 22406 <at> debbugs.gnu.org Subject: Re: bug#22406: Cannot compile for Windows x64 due to LLP64 model Date: Mon, 20 Jun 2016 16:01:13 -0400
Peter TB Brett <peter <at> peter-b.co.uk> writes: > It is not currently possible to compile Guile 2.0.11 for Windows x64 > (in particular 64-bit Windows running on the x86-64 arch). > > Most operating systems' C libraries for x86-64 use an "LP64" model, > where sizeof(long int) == sizeof(void *) == 8. > > However, for backwards-compatibility reasons, Windows uses an "LLP64" > model, where sizeof(long long int) == sizeof(void *) == 8 and > sizeof(long int) == 4. I pushed commit b0a702d7733e02cb68ea2331bd632e25a3127c75 to stable-2.0 which should, I hope, fix the specific issues raised in this bug report. However, there are likely to be other places in guile where similar assumptions are made. If you'd like to test current 'stable-2.0' on LLP64, we can proceed. Thanks! Mark
Andy Wingo <wingo <at> pobox.com>
to control <at> debbugs.gnu.org
.
(Wed, 22 Jun 2016 13:39:02 GMT) Full text and rfc822 format available.Taylan Kammer <taylan.kammer <at> gmail.com>
to control <at> debbugs.gnu.org
.
(Mon, 17 May 2021 21:00:02 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.