GNU bug report logs -
#38369
Guile 2.9.5 miscompiles crc32 procedure
Previous Next
Reported by: Ludovic Courtès <ludo <at> gnu.org>
Date: Mon, 25 Nov 2019 21:33:40 UTC
Severity: normal
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#38369: Guile 2.9.5 miscompiles crc32 procedure
which was filed against the guile package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 38369 <at> debbugs.gnu.org.
--
38369: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=38369
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Ludovic Courtès <ludo <at> gnu.org> skribis:
> The valid result is:
>
> scheme@(guix build debug-link)> (debuglink-crc32 (open-input-string "a"))
> $5 = 3904355907
> scheme@(guix build debug-link)> (version)
> $6 = "2.2.6"
>
>
> The incorrect result is:
>
> scheme@(guix build debug-link)> (debuglink-crc32 (open-input-string "a"))
> $9 = 397917763
> scheme@(guix build debug-link)> (version)
> $10 = "2.9.5"
This was fixed in 08bd2f0dcb42a281596cacc714ad476e872d441d (in 2.9.7).
Ludo’.
[Message part 3 (message/rfc822, inline)]
The (guix build debug-link) module has this function:
--8<---------------cut here---------------start------------->8---
(define %crc32-table
;; CRC table taken from "(gdb) Separate Debug Files".
;; TODO: Wouldn't it be nice to generate it "from source" with a macro?
#(#x00000000 #x77073096 #xee0e612c #x990951ba #x076dc419
#x706af48f #xe963a535 #x9e6495a3 #x0edb8832 #x79dcb8a4
#xe0d5e91e #x97d2d988 #x09b64c2b #x7eb17cbd #xe7b82d07
#x90bf1d91 #x1db71064 #x6ab020f2 #xf3b97148 #x84be41de
#x1adad47d #x6ddde4eb #xf4d4b551 #x83d385c7 #x136c9856
#x646ba8c0 #xfd62f97a #x8a65c9ec #x14015c4f #x63066cd9
#xfa0f3d63 #x8d080df5 #x3b6e20c8 #x4c69105e #xd56041e4
#xa2677172 #x3c03e4d1 #x4b04d447 #xd20d85fd #xa50ab56b
#x35b5a8fa #x42b2986c #xdbbbc9d6 #xacbcf940 #x32d86ce3
#x45df5c75 #xdcd60dcf #xabd13d59 #x26d930ac #x51de003a
#xc8d75180 #xbfd06116 #x21b4f4b5 #x56b3c423 #xcfba9599
#xb8bda50f #x2802b89e #x5f058808 #xc60cd9b2 #xb10be924
#x2f6f7c87 #x58684c11 #xc1611dab #xb6662d3d #x76dc4190
#x01db7106 #x98d220bc #xefd5102a #x71b18589 #x06b6b51f
#x9fbfe4a5 #xe8b8d433 #x7807c9a2 #x0f00f934 #x9609a88e
#xe10e9818 #x7f6a0dbb #x086d3d2d #x91646c97 #xe6635c01
#x6b6b51f4 #x1c6c6162 #x856530d8 #xf262004e #x6c0695ed
#x1b01a57b #x8208f4c1 #xf50fc457 #x65b0d9c6 #x12b7e950
#x8bbeb8ea #xfcb9887c #x62dd1ddf #x15da2d49 #x8cd37cf3
#xfbd44c65 #x4db26158 #x3ab551ce #xa3bc0074 #xd4bb30e2
#x4adfa541 #x3dd895d7 #xa4d1c46d #xd3d6f4fb #x4369e96a
#x346ed9fc #xad678846 #xda60b8d0 #x44042d73 #x33031de5
#xaa0a4c5f #xdd0d7cc9 #x5005713c #x270241aa #xbe0b1010
#xc90c2086 #x5768b525 #x206f85b3 #xb966d409 #xce61e49f
#x5edef90e #x29d9c998 #xb0d09822 #xc7d7a8b4 #x59b33d17
#x2eb40d81 #xb7bd5c3b #xc0ba6cad #xedb88320 #x9abfb3b6
#x03b6e20c #x74b1d29a #xead54739 #x9dd277af #x04db2615
#x73dc1683 #xe3630b12 #x94643b84 #x0d6d6a3e #x7a6a5aa8
#xe40ecf0b #x9309ff9d #x0a00ae27 #x7d079eb1 #xf00f9344
#x8708a3d2 #x1e01f268 #x6906c2fe #xf762575d #x806567cb
#x196c3671 #x6e6b06e7 #xfed41b76 #x89d32be0 #x10da7a5a
#x67dd4acc #xf9b9df6f #x8ebeeff9 #x17b7be43 #x60b08ed5
#xd6d6a3e8 #xa1d1937e #x38d8c2c4 #x4fdff252 #xd1bb67f1
#xa6bc5767 #x3fb506dd #x48b2364b #xd80d2bda #xaf0a1b4c
#x36034af6 #x41047a60 #xdf60efc3 #xa867df55 #x316e8eef
#x4669be79 #xcb61b38c #xbc66831a #x256fd2a0 #x5268e236
#xcc0c7795 #xbb0b4703 #x220216b9 #x5505262f #xc5ba3bbe
#xb2bd0b28 #x2bb45a92 #x5cb36a04 #xc2d7ffa7 #xb5d0cf31
#x2cd99e8b #x5bdeae1d #x9b64c2b0 #xec63f226 #x756aa39c
#x026d930a #x9c0906a9 #xeb0e363f #x72076785 #x05005713
#x95bf4a82 #xe2b87a14 #x7bb12bae #x0cb61b38 #x92d28e9b
#xe5d5be0d #x7cdcefb7 #x0bdbdf21 #x86d3d2d4 #xf1d4e242
#x68ddb3f8 #x1fda836e #x81be16cd #xf6b9265b #x6fb077e1
#x18b74777 #x88085ae6 #xff0f6a70 #x66063bca #x11010b5c
#x8f659eff #xf862ae69 #x616bffd3 #x166ccf45 #xa00ae278
#xd70dd2ee #x4e048354 #x3903b3c2 #xa7672661 #xd06016f7
#x4969474d #x3e6e77db #xaed16a4a #xd9d65adc #x40df0b66
#x37d83bf0 #xa9bcae53 #xdebb9ec5 #x47b2cf7f #x30b5ffe9
#xbdbdf21c #xcabac28a #x53b39330 #x24b4a3a6 #xbad03605
#xcdd70693 #x54de5729 #x23d967bf #xb3667a2e #xc4614ab8
#x5d681b02 #x2a6f2b94 #xb40bbe37 #xc30c8ea1 #x5a05df1b
#x2d02ef8d))
(define (debuglink-crc32 port)
"Compute the 32-bit CRC used in in '.gnu_debuglink' over the data read from
PORT and return it." ;(info "(gdb) Separate Debug Files")
(let loop ((crc #xffffffff))
(let ((byte (get-u8 port)))
(if (eof-object? byte)
(logand (lognot crc) #xffffffff)
(let* ((index (logand (logxor crc byte) #xff))
(lhs (vector-ref %crc32-table index)))
(loop (logxor lhs (ash crc -8))))))))
--8<---------------cut here---------------end--------------->8---
The valid result is:
--8<---------------cut here---------------start------------->8---
scheme@(guix build debug-link)> (debuglink-crc32 (open-input-string "a"))
$5 = 3904355907
scheme@(guix build debug-link)> (version)
$6 = "2.2.6"
--8<---------------cut here---------------end--------------->8---
The incorrect result is:
--8<---------------cut here---------------start------------->8---
scheme@(guix build debug-link)> (debuglink-crc32 (open-input-string "a"))
$9 = 397917763
scheme@(guix build debug-link)> (version)
$10 = "2.9.5"
--8<---------------cut here---------------end--------------->8---
When adding ‘pk’ calls, I see that (ash crc -8) returns crc as-is.
Thoughts?
The interpreter gets it right:
--8<---------------cut here---------------start------------->8---
scheme@(guix build debug-link)> ,o interp #t
scheme@(guix build debug-link)> (define (debuglink-crc32 port)
"Compute the 32-bit CRC used in in '.gnu_debuglink' over the data read from
PORT and return it." ;(info "(gdb) Separate Debug Files")
(let loop ((crc #xffffffff))
(let ((byte (get-u8 port)))
(if (eof-object? byte)
(logand (lognot crc) #xffffffff)
(let* ((index (logand (logxor crc byte) #xff))
(lhs (vector-ref %crc32-table index)))
(loop (logxor lhs (ash crc -8))))))))
scheme@(guix build debug-link)> (debuglink-crc32 (open-input-string "a"))
$13 = 3904355907
scheme@(guix build debug-link)> (version)
$14 = "2.9.5"
--8<---------------cut here---------------end--------------->8---
Ludo’.
This bug report was last modified 5 years and 176 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.