merge from gcc

This commit is contained in:
DJ Delorie 2009-07-25 00:01:58 +00:00
parent a331e0d9db
commit 6e88169156
6 changed files with 225 additions and 18 deletions

View file

@ -1,3 +1,7 @@
2009-07-24 Ian Lance Taylor <iant@google.com>
* libiberty.h (crc32): Declare.
2009-07-20 Cary Coutant <ccoutant@google.com> 2009-07-20 Cary Coutant <ccoutant@google.com>
Doug Evans <dje@google.com> Doug Evans <dje@google.com>

View file

@ -1,6 +1,7 @@
/* Function declarations for libiberty. /* Function declarations for libiberty.
Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
Note - certain prototypes declared in this header file are for Note - certain prototypes declared in this header file are for
functions whoes implementation copyright does not belong to the functions whoes implementation copyright does not belong to the
@ -311,6 +312,8 @@ extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC;
extern double physmem_total (void); extern double physmem_total (void);
extern double physmem_available (void); extern double physmem_available (void);
/* Compute the 32-bit CRC of a block of memory. */
extern unsigned int crc32 (const unsigned char *, int, unsigned int);
/* These macros provide a K&R/C89/C++-friendly way of allocating structures /* These macros provide a K&R/C89/C++-friendly way of allocating structures
with nice encapsulation. The XDELETE*() macros are technically with nice encapsulation. The XDELETE*() macros are technically

View file

@ -1,3 +1,11 @@
2009-07-24 Ian Lance Taylor <iant@google.com>
* crc32.c: New file.
* Makefile.in: Rebuild dependencies.
(CFILES): Add crc32.c.
(REQUIRED_OFILES): Add ./crc32.o.
* functions.texi: Rebuild.
2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com> 2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com>
* cp-demangle.c (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>) * cp-demangle.c (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
@ -92,7 +100,7 @@
* libiberty/configure.ac: Fix Linux/MIPS matching rule. * libiberty/configure.ac: Fix Linux/MIPS matching rule.
* libiberty/configure: Regenerate. * libiberty/configure: Regenerate.
2008-03-27 Ian Lance Taylor <iant@google.com> 2009-03-27 Ian Lance Taylor <iant@google.com>
* memmem.c: New file, from gnulib. * memmem.c: New file, from gnulib.
* configure.ac: Add memmem to list of functions provided if they * configure.ac: Add memmem to list of functions provided if they

View file

@ -124,7 +124,7 @@ COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) @a
CFILES = alloca.c argv.c asprintf.c atexit.c \ CFILES = alloca.c argv.c asprintf.c atexit.c \
basename.c bcmp.c bcopy.c bsearch.c bzero.c \ basename.c bcmp.c bcopy.c bsearch.c bzero.c \
calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ calloc.c choose-temp.c clock.c concat.c cp-demangle.c \
cp-demint.c cplus-dem.c \ cp-demint.c cplus-dem.c crc32.c \
dyn-string.c \ dyn-string.c \
fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \ fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \
fnmatch.c fopen_unlocked.c \ fnmatch.c fopen_unlocked.c \
@ -160,7 +160,7 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \
REQUIRED_OFILES = \ REQUIRED_OFILES = \
./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o \ ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o \
./alloca.o ./argv.o \ ./alloca.o ./argv.o \
./choose-temp.o ./concat.o ./cp-demint.o \ ./choose-temp.o ./concat.o ./cp-demint.o ./crc32.o \
./dyn-string.o \ ./dyn-string.o \
./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o \ ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o \
./fnmatch.o ./fopen_unlocked.o \ ./fnmatch.o ./fopen_unlocked.o \
@ -603,6 +603,12 @@ $(CONFIGURED_OFILES): stamp-picdir
else true; fi else true; fi
$(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION) $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
./crc32.o: $(srcdir)/crc32.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
if [ x"$(PICFLAG)" != x ]; then \
$(COMPILE.c) $(PICFLAG) $(srcdir)/crc32.c -o pic/$@; \
else true; fi
$(COMPILE.c) $(srcdir)/crc32.c $(OUTPUT_OPTION)
./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \ ./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
if [ x"$(PICFLAG)" != x ]; then \ if [ x"$(PICFLAG)" != x ]; then \

167
libiberty/crc32.c Normal file
View file

@ -0,0 +1,167 @@
/* crc32.c
Copyright (C) 2009 Free Software Foundation, Inc.
This file is part of the libiberty library.
This file is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
compiled version of this file into combinations with other programs,
and to distribute those combinations without any restriction coming
from the use of this file. (The General Public License restrictions
do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combined
executable.)
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "libiberty.h"
/* This table was generated by the following program. This matches
what gdb does.
#include <stdio.h>
int
main ()
{
int i, j;
unsigned int c;
int table[256];
for (i = 0; i < 256; i++)
{
for (c = i << 24, j = 8; j > 0; --j)
c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
table[i] = c;
}
printf ("static const unsigned int crc32_table[] =\n{\n");
for (i = 0; i < 256; i += 4)
{
printf (" 0x%08x, 0x%08x, 0x%08x, 0x%08x",
table[i + 0], table[i + 1], table[i + 2], table[i + 3]);
if (i + 4 < 256)
putchar (',');
putchar ('\n');
}
printf ("};\n");
return 0;
}
For more information on CRC, see, e.g.,
http://www.ross.net/crc/download/crc_v3.txt. */
static const unsigned int crc32_table[] =
{
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
};
/*
@deftypefn Extension unsigned int crc32 (const unsigned char *@var{buf}, int @var{len}, unsigned int @var{init})
Compute the 32-bit CRC of @var{buf} which has length @var{len}. The
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}.
@end deftypefn
*/
unsigned int
crc32 (const unsigned char *buf, int len, unsigned int init)
{
unsigned int crc = init;
while (len--)
{
crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
buf++;
}
return crc;
}

View file

@ -185,6 +185,21 @@ pointer encountered. Pointers to empty strings are ignored.
@end deftypefn @end deftypefn
@c crc32.c:141
@deftypefn Extension unsigned int crc32 (const unsigned char *@var{buf}, int @var{len}, unsigned int @var{init})
Compute the 32-bit CRC of @var{buf} which has length @var{len}. The
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}.
@end deftypefn
@c argv.c:52 @c argv.c:52
@deftypefn Extension char** dupargv (char **@var{vector}) @deftypefn Extension char** dupargv (char **@var{vector})
@ -1111,13 +1126,15 @@ be the value @code{1}).
@c snprintf.c:28 @c snprintf.c:28
@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...) @deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, ...)
This function is similar to sprintf, but it will print at most @var{n} This function is similar to @code{sprintf}, but it will write to
characters. On error the return value is -1, otherwise it returns the @var{buf} at most @code{@var{n}-1} bytes of text, followed by a
number of characters that would have been printed had @var{n} been terminating null byte, for a total of @var{n} bytes.
sufficiently large, regardless of the actual value of @var{n}. Note On error the return value is -1, otherwise it returns the number of
some pre-C99 system libraries do not implement this correctly so users bytes, not including the terminating null byte, that would have been
cannot generally rely on the return value if the system version of written had @var{n} been sufficiently large, regardless of the actual
this function is used. value of @var{n}. Note some pre-C99 system libraries do not implement
this correctly so users cannot generally rely on the return value if
the system version of this function is used.
@end deftypefn @end deftypefn
@ -1464,13 +1481,15 @@ nonstandard but common function @code{_doprnt}.
@c vsnprintf.c:28 @c vsnprintf.c:28
@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap}) @deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, const char *@var{format}, va_list @var{ap})
This function is similar to vsprintf, but it will print at most This function is similar to @code{vsprintf}, but it will write to
@var{n} characters. On error the return value is -1, otherwise it @var{buf} at most @code{@var{n}-1} bytes of text, followed by a
returns the number of characters that would have been printed had terminating null byte, for a total of @var{n} bytes. On error the
@var{n} been sufficiently large, regardless of the actual value of return value is -1, otherwise it returns the number of characters that
@var{n}. Note some pre-C99 system libraries do not implement this would have been printed had @var{n} been sufficiently large,
correctly so users cannot generally rely on the return value if the regardless of the actual value of @var{n}. Note some pre-C99 system
system version of this function is used. libraries do not implement this correctly so users cannot generally
rely on the return value if the system version of this function is
used.
@end deftypefn @end deftypefn