aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Palka <patrick@parcs.ath.cx>2015-12-28 22:00:14 +0000
committerMike Frysinger <vapier@gentoo.org>2016-01-05 15:01:28 -0500
commit4bec0ef03e91506caf60d8842786b29c2d2ff049 (patch)
tree09d0f407174fa9e41d6765ca423a5cbd948e906b
parent13b356b2b5c1857490b7911dbbb48e17a3a92b04 (diff)
downloadfsf-binutils-gdb-4bec0ef03e91506caf60d8842786b29c2d2ff049.zip
fsf-binutils-gdb-4bec0ef03e91506caf60d8842786b29c2d2ff049.tar.gz
fsf-binutils-gdb-4bec0ef03e91506caf60d8842786b29c2d2ff049.tar.bz2
libiberty: Tweak the documentation of libiberty's xcrc32 function
In some places the xcrc32 documentation refers to GDB's own crc32 implementation, but GDB no longer has its own crc32 implementation. It now uses libiberty's xcrc32 throughout. So this patch removes these references to GDB's now-nonexistent crc32 implementation. Also, there appears to be a bug in the table-generation program embedded within the documentation. When the variable "int i" is >= 128, the computation "i << 24" shifts a one bit into the sign bit (assuming a 32-bit int), which is UB. To avoid this UB, I think it is sufficient to make the induction variables i and j have type unsigned int. This bug seems latent, however. I ran the program before and after this change and the table output is the same.
-rw-r--r--libiberty/ChangeLog8
-rw-r--r--libiberty/crc32.c12
2 files changed, 13 insertions, 7 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index e8fc96a..aa598f2 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,11 @@
+2015-12-28 Patrick Palka <ppalka@gcc.gnu.org>
+
+ * crc32.c: In the documentation, don't refer to GDB's
+ now-nonexistent crc32 implementation. In the table-generation
+ program embedded within the documentation, change the type of
+ the induction variables i and j from int to unsigned int, to
+ avoid undefined behavior.
+
2015-12-21 Nick Clifton <nickc@redhat.com>
PR 66827
diff --git a/libiberty/crc32.c b/libiberty/crc32.c
index 12d9be0..52c982f 100644
--- a/libiberty/crc32.c
+++ b/libiberty/crc32.c
@@ -33,15 +33,14 @@
#include "libiberty.h"
-/* This table was generated by the following program. This matches
- what gdb does.
+/* This table was generated by the following program.
#include <stdio.h>
int
main ()
{
- int i, j;
+ unsigned int i, j;
unsigned int c;
int table[256];
@@ -146,10 +145,9 @@ starting value is @var{init}; this may be used to compute the CRC of
data split across multiple buffers by passing the return value of each
call as the @var{init} parameter of the next.
-This is intended to match the CRC used by the @command{gdb} remote
-protocol for the @samp{qCRC} command. In order to get the same
-results as gdb for a block of data, you must pass the first CRC
-parameter as @code{0xffffffff}.
+This is used by the @command{gdb} remote protocol for the @samp{qCRC}
+command. In order to get the same results as gdb for a block of data,
+you must pass the first CRC parameter as @code{0xffffffff}.
This CRC can be specified as: