import libiberty from egcs

This commit is contained in:
Ian Lance Taylor 2000-02-22 15:59:20 +00:00
parent 252b5132c7
commit e2eaf47799
33 changed files with 4434 additions and 381 deletions

View File

@ -1,3 +1,286 @@
2000-01-04 Mumit Khan <khan@xraylith.wisc.edu>
* pexecute.c: Conditionally include string.h.
(fix_argv): Handle embedded whitespace in args for Mingw32.
2000-01-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* configure.in (ac_libiberty_warn_cflags): Turn on warnings if
we're using gcc.
* Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@
1999-12-27 Geoff Keating <geoffk@cygnus.com>
* vasprintf.c (int_vasprintf): Don't re-read the format character
as this mishandles strings like '%%s'.
1999-12-05 Mark Mitchell <mark@codesourcery.com>
* splay-tree.c (splay_tree_new): Use struct splay_tree_node_s
rather than struct splay_tree_node.
(splay_tree_insert): Use struct splay_tree_s rather than struct
splay_tree.
Sun Nov 28 00:59:39 1999 Philippe De Muyter <phdm@macqel.be>
* hashtab.c (sys/types.h): File included.
1999-11-22 Jason Merrill <jason@casey.cygnus.com>
* strtoul.c, strtol.c, random.c: Remove advertising clause from
BSD license, pursuant with
ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com)
* hashtab.c: Include stdio.h.
Mon Nov 8 09:23:41 1999 Jeffrey A Law (law@cygnus.com)
* hashtab.c (traverse_hash_table): Protect prototype with PARAMS.
Tue Nov 2 03:23:13 1999 Philippe De Muyter <phdm@macqel.be>
* xstrdup (sys/types.h): Include this file.
1999-10-28 Nathan Sidwell <nathan@acm.org>
* Makefile.in (SUBDIRS): New macro.
(mostlyclean, clean, distclean, maintainer-clean): Adjust to
avoid multiple subdirectory cleaning.
(*-subdir): Use SUBDIRS.
1999-10-25 Jim Kingdon <http://developer.redhat.com/>
* cplus-dem.c: Move declarations of standard_symbol_characters and
hp_symbol_characters inside #ifdef MAIN to avoid compiler
warnings.
1999-10-23 08:51 -0700 Zack Weinberg <zack@bitmover.com>
* hashtab.c (find_hash_table_entry): When returning a
DELETED_ENTRY slot, change it to EMPTY_ENTRY first.
(clear_hash_table_slot): New function which deletes an entry
by its position in the table, not its value.
(traverse_hash_table): New function which calls a hook
function for every live entry in the table.
1999-10-19 Mark Mitchell <mark@codesourcery.com>
* cplus-dem.c (INTBUF_SIZE): New macro.
(string_append_template_idx): New function.
(demangle_expression): Likewise.
(demangle_integral_value): Use it.
(demangle_real_value): New function, split out from ...
(demangle_template_value_parm): ... here. Use
string_append_template_idx. Use demangle_real_value.
(demangle_template): Use string_append_template_idx.
(demangle_qualified): Use consume_count_with_underscores.
(get_count): Tweak formatting.
(do_type): Use string_append_template_idx.
1999-10-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* calloc.c: Add a public domain notice.
Mon Oct 18 02:30:47 1999 Philippe De Muyter <phdm@macqel.be>
* setenv.c (sys/types.h, stdio.h): Include those files unconditionaly.
Fri Oct 15 01:47:51 1999 Vladimir Makarov <vmakarov@loony.cygnus.com>
* Makefile.in (CFILES): Add hashtab.c
(REQUIRED_OFILES): Add hashtab.o
(hashtab.o): Add dependencies.
* hashtab.c: New file
Wed Oct 13 01:16:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
* basename.c (DIR_SEPARATOR): New macro.
(DIR_SEPARATOR_2): Likewise.
(HAVE_DOS_BASED_FILESYSTEM): Likewise.
(IS_DIR_SEPARATOR): Likewise.
(main): Handle MSDOS style pathname.
1999-10-11 Mark Mitchell <mark@codesourcery.com>
* cplus-dem.c (do_type): Handle pointer to member types whose
enclosing classes have namespace scope.
Sun Oct 10 01:23:50 1999 Marc Espie <espie@cvs.openbsd.org>
* config.table: Provide a backup shell for executing move-if-change.
1999-10-02 Mark Mitchell <mark@codesourcery.com>
* xmalloc.c (xmalloc): Fix spelling error.
(xcalloc, xrealloc): Likewise.
1999-10-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cplus-dem.c (fancy_abort, demangle_integral_value,
demangle_arm_hp_template, recursively_demangle,
standard_symbol_characters, hp_symbol_characters, main): Add prototype.
(program_name, program_version, fatal): Constify a char*.
(usage, fatal): Mark with ATTRIBUTE_NORETURN.
(main): Call return, not exit.
1999-09-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* choose-temp.c: Remove obsolete comment about gcc.
(make_temp_file): Constify a char*.
Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* xmemdup.c: Include sys/types.h.
1999-09-07 Jeff Garzik <jgarzik@pobox.com>
* xmemdup.c: New xmemdup function.
* Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co].
Tue Sep 7 23:32:18 1999 Linas Vepstas <linas@linas.org>
* config.table: Add openedition target.
* config/mh-openedition: New file.
Thu Sep 2 01:36:12 1999 Marc Espie <espie@cvs.openbsd.org>
* pexecute.c (pexecute): Fill in temp_base when needed.
1999-08-31 Richard Henderson <rth@cygnus.com>
* getpwd.c: Check HAVE_GETCWD before defining it away.
1999-08-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (CFILES): Add calloc.c and getpwd.c.
(REQUIRED_OFILES): Add getpwd.o.
(getpwd.o): Add target.
* configure.in (AC_PREREQ): Bump to 2.13.
(AC_CHECK_HEADERS): Add check for <sys/stat.h>.
* getpwd.c: New file, moved here from gcc.
1999-08-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cplus-dem.c (gnu_special): Cast a `size_t' to `long' when
comparing against a signed quantity.
(arm_special): Likewise.
(demangle_fund_type): Likewise.
(do_hpacc_template_const_value): Mark parameter `work' with
ATTRIBUTE_UNUSED.
(main): Constify variable `valid_symbols'.
Tue Aug 24 02:50:45 1999 Philippe De Muyter <phdm@macqel.be>
* strtoul.c (strtoul): Add parentheses around && within ||.
Fri Aug 6 23:32:29 1999 Daniel Jacobowitz <drow@drow.them.org>
* Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix,
libdir, libsubdir and tooldir.
1999-08-01 Mark Mitchell <mark@codesourcery.com>
* splay-tree.c (splay_tree_insert): Return the new node.
1999-07-14 Richard Henderson <rth@cygnus.com>
* argv.c: Include stdlib.h and string.h instead of
prototyping directly.
* choose-temp.c: Conditionally include string.h.
1999-07-12 Jason Merrill <jason@yorick.cygnus.com>
* Makefile.in (NEEDED): Add bcmp, bcopy, bzero.
1999-07-11 Ian Lance Taylor <ian@zembu.com>
* splay-tree.c (splay_tree_insert): Add initialization to avoid
warning.
1999-07-07 Jason Merrill <jason@yorick.cygnus.com>
* Makefile.in (needed-list): Only include stuff we actually need
for libstdc++.
1999-06-21 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* configure.in (checkfuncs): Add gettimeofday.
* config.in, configure: Regenerated.
Mon Jun 21 05:56:01 1999 Mumit Khan <khan@xraylith.wisc.edu>
* configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if
the test fails.
* configure: Regenerate.
1999-06-10 Mike Stump <mrs@wrs.com>
* Makefile.in (setenv.o): Add config.h dep for setenv.o to fix
parallel builds.
1999-05-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* putenv.c: Include ansidecl.h to define `const'.
* setenv.c: Likewise.
Wed May 26 03:58:20 1999 "Melissa O'Neill" <oneill@cs.sfu.ca>
* Makefile.in (CFILES): Add putenv.c and setenv.c.
* configure.in (funcs): Add putenv and setenv.
(AC_CHECK_FUNCS): Check for putenv and setenv.
* configure: Rebuilt.
* putenv.c setenv.c: New files.
* getcwd.c (getcwd): If pathname is NULL, then obtain SIZE
bytes of space using malloc.
Mon May 17 01:42:34 1999 Stu Grossman <grossman@babylon-5.cygnus.com>
* cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance
the *mangled pointer beyond the end of the string. Clean up code to
match prevailing coding style.
1999-05-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* tmpnam.c (L_tmpnam): Fix typo.
Thu May 13 01:14:46 1999 Marc Espie <espie@cvs.openbsd.org>
* cplus-dem.c (standard_symbol_characters): Renamed from
standard_symbol_alphabet. No longer modify TABLE.
(hp_symbol_characters): Renamed from hp_symbol_alphabet. No longer
modify TABLE.
(main): Corresponding changes. Use strchr to determine if a
character is valid.
1999-05-11 Jim Blandy <jimb@zwingli.cygnus.com>
* cplus-dem.c (main): Use table lookup to distinguish identifier
characters from non-identifier characters.
(standard_symbol_alphabet, hp_symbol_alphabet): New functions.
Thu May 6 20:34:42 1999 Fred Fish <fnf@be.com>
* configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list.
* getruntime.c: Only attempt to include sys/resource.h and
use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H
are defined.
Mon Apr 26 01:36:06 1999 Donn Terry (donn@interix.com)
* configure.in (alloca detection): Handle alloca directly for interix.
* configure: Rebuilt.
Sun Apr 25 01:18:21 1999 Mumit Khan <khan@xraylith.wisc.edu>
* choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32.
1999-04-20 Jim Blandy <jimb@zwingli.cygnus.com>
Fix from Dale Hawkins:
@ -7,10 +290,26 @@
* cplus-dem.c (demangle_fund_type): Check for buffer overrun. Be
stricter about syntax. Always null-terminate string.
Thu Apr 15 23:00:55 1999 Mumit Khan <khan@xraylith.wisc.edu>
* configure.in (checkfuncs): Check for sbrk.
* config.in: Rebuilt.
* configure: Likewise.
* xmalloc.c: Use HAVE_SBRK instead of the host specific definitions.
1999-04-12 Jim Blandy <jimb@zwingli.cygnus.com>
Fix from Marcus Daniels:
* cplus-dem.c (demangle_fund_type): Don't run off the end of the
identifier looking for another underscore.
Sun Apr 11 23:20:59 1999 Mumit Khan <khan@xraylith.wisc.edu>
* pexecute.c: Change all references to __UWIN__ to _UWIN.
* xmalloc.c: Likewise.
(xcalloc): UWIN has sbrk.
(xrealloc): Fix guard macro.
1999-04-11 Richard Henderson <rth@cygnus.com>
* alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin
@ -22,6 +321,12 @@
* config.table: Use mh-beos.
* config/mh-beos: New file.
1999-04-11 Mark Mitchell <mark@codesourcery.com>
* cplus-dem.c (demangle_template_value_parm): Handle
pointers-to-members.
(do_type): Handle template parameters as qualifiers.
1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com>
* cplus-dem.c: Attempt to handle overflows in counts with some
@ -31,10 +336,22 @@
(demangle_template_value_parm, demangle_template): Handle change
to consume_count's return convention.
Thu Apr 8 14:43:28 1999 Andrew Cagney <cagney@b1.cygnus.com>
1999-04-05 Tom Tromey <tromey@cygnus.com>
* xmalloc.c, pexecute.c: Define __CYGWIN__ when being compiled
with old __CYGWIN32__ compiler.
* testsuite/regress-demangle: New file.
* testsuite/demangle-expected: New file.
* Makefile.in (all, check, installcheck, info, install-info,
clean-info, dvi, install, etags, tags, mostlyclean, clean,
distclean, maintainer-clean, realclean): Depend on corresponding
`-subdir' target.
(all-subdir check-subdir installcheck-subdir info-subdir
install-info-subdir clean-info-subdir dvi-subdir
install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
distclean-subdir maintainer-clean-subdir): New target.
* testsuite/Makefile.in: New file.
* configure: Rebuilt.
* configure.in: Create testsuite/Makefile.
1999-04-02 Mark Mitchell <mark@codesourcery.com>

View File

@ -1,6 +1,6 @@
#
# Makefile
# Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 1998
# Copyright (C) 1990, 91 - 99, 2000
# Free Software Foundation
#
# This file is part of the libiberty library.
@ -85,25 +85,37 @@ FLAGS_TO_PASS = \
"LDFLAGS=$(LDFLAGS)" \
"LOADLIBES=$(LOADLIBES)" \
"RANLIB=$(RANLIB)" \
"SHELL=$(SHELL)"
"SHELL=$(SHELL)" \
"prefix=$(prefix)" \
"exec_prefix=$(exec_prefix)" \
"libdir=$(libdir)" \
"libsubdir=$(libsubdir)" \
"tooldir=$(tooldir)"
all: stamp-picdir $(TARGETLIB) needed-list required-list
# Subdirectories to recurse into. We need to override this during cleaning
SUBDIRS = testsuite
all: stamp-picdir $(TARGETLIB) needed-list required-list all-subdir
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
.PHONY: check installcheck
check installcheck:
check: check-subdir
installcheck: installcheck-subdir
@host_makefile_frag@
INCDIR=$(srcdir)/$(MULTISRCTOP)../include
COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES)
COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
.c.o:
test x"$(enable_shared)" != xyes || \
$(COMPILE.c) $(PICFLAG) $< -o pic/$@
$(COMPILE.c) $<
info install-info clean-info dvi:
info: info-subdir
install-info: install-info-subdir
clean-info: clean-info-subdir
dvi: dvi-subdir
# Include files that are in this directory.
HFILES = alloca-conf.h
@ -112,22 +124,22 @@ HFILES = alloca-conf.h
# (alphabetical), and add them to REQUIRED_OFILES or funcs in
# configure.in.
CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c \
bzero.c choose-temp.c clock.c concat.c cplus-dem.c fdmatch.c \
fnmatch.c getcwd.c getopt.c getopt1.c getpagesize.c \
getruntime.c floatformat.c hex.c index.c insque.c memchr.c \
bzero.c calloc.c choose-temp.c clock.c concat.c cplus-dem.c fdmatch.c \
fnmatch.c getcwd.c getpwd.c getopt.c getopt1.c getpagesize.c \
getruntime.c floatformat.c hashtab.c hex.c index.c insque.c memchr.c \
memcmp.c memcpy.c memmove.c memset.c mkstemps.c objalloc.c obstack.c \
pexecute.c random.c rename.c rindex.c sigsetmask.c spaces.c \
splay-tree.c strcasecmp.c strncasecmp.c strchr.c strdup.c strerror.c \
strrchr.c strsignal.c strstr.c strtod.c strtol.c strtoul.c \
pexecute.c putenv.c random.c rename.c rindex.c setenv.c sigsetmask.c \
spaces.c splay-tree.c strcasecmp.c strncasecmp.c strchr.c strdup.c \
strerror.c strrchr.c strsignal.c strstr.c strtod.c strtol.c strtoul.c \
tmpnam.c vasprintf.c vfork.c vfprintf.c vprintf.c vsprintf.c \
waitpid.c xatexit.c xexit.c xmalloc.c xstrdup.c xstrerror.c
waitpid.c xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c
# These are always included in the library.
REQUIRED_OFILES = argv.o choose-temp.o concat.o cplus-dem.o \
fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o \
floatformat.o objalloc.o obstack.o pexecute.o spaces.o \
fdmatch.o fnmatch.o getopt.o getopt1.o getpwd.o getruntime.o hashtab.o \
hex.o floatformat.o objalloc.o obstack.o pexecute.o spaces.o \
splay-tree.o strerror.o strsignal.o xatexit.o xexit.o xmalloc.o \
xstrdup.o xstrerror.o
xmemdup.o xstrdup.o xstrerror.o
$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA)
rm -f $(TARGETLIB)
@ -136,7 +148,7 @@ $(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA)
$(RANLIB) $(TARGETLIB)
INSTALL_DEST = @INSTALL_DEST@
install: install_to_$(INSTALL_DEST)
install: install_to_$(INSTALL_DEST) install-subdir
install_to_libdir: all
$(INSTALL_DATA) $(TARGETLIB) $(libdir)$(MULTISUBDIR)/$(TARGETLIB).n
@ -150,13 +162,21 @@ install_to_tooldir: all
mv -f $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB).n $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
# needed-list is used by libstdc++.
# needed-list is used by libstdc++. NEEDED is the list of functions
# to include there. Do not add anything LGPL to this list; libstdc++
# can't use anything encumbering.
NEEDED = atexit calloc memchr memcmp memcpy memmove memset rename strchr \
strerror strrchr strstr strtol strtoul tmpnam vfprintf vprintf \
vfork waitpid bcmp bcopy bzero
needed-list: Makefile
f="$(LIBOBJS) $(ALLOCA) $(EXTRA_OFILES)"; \
case $$f in \
*alloca.o*) f="$$f xmalloc.o xexit.o" ;; \
esac; \
echo $$f > needed-list
rm -f needed-list; touch needed-list; \
for f in $(NEEDED); do \
for g in $(LIBOBJS) $(EXTRA_OFILES); do \
case "$$g" in \
*$$f*) echo $$g >> needed-list ;; \
esac; \
done; \
done
# required-list was used when building a shared bfd/opcodes/libiberty
# library. I don't know if it used by anything currently.
@ -171,7 +191,7 @@ stamp-picdir:
.PHONY: all etags tags ls clean stage1 stage2
etags tags: TAGS
etags tags: TAGS etags-subdir
TAGS: $(CFILES) $(HFILES)
etags `for i in $(HFILES) $(CFILES); do echo $(srcdir)/$$i ; done`
@ -187,19 +207,24 @@ ls:
# Need to deal with profiled libraries, too.
mostlyclean:
# Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
# multiple times, hence our explicit recursion with an empty SUBDIRS.
mostlyclean: mostlyclean-subdir
rm -rf *.o pic core errs \#* *.E a.out
rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
@$(MULTICLEAN) multi-clean DO=mostlyclean
clean: mostlyclean
clean: clean-subdir
$(MAKE) SUBDIRS="" mostlyclean
rm -f *.a required-list tmpmulti.out
@$(MULTICLEAN) multi-clean DO=clean
distclean: clean
distclean: distclean-subdir
$(MAKE) SUBDIRS="" clean
@$(MULTICLEAN) multi-clean DO=distclean
rm -f *~ Makefile config.status xhost-mkfrag TAGS multilib.out
rm -f config.log
maintainer-clean realclean: distclean
maintainer-clean realclean: maintainer-clean-subdir
$(MAKE) SUBDIRS="" distclean
force:
@ -213,6 +238,16 @@ stamp-h: config.in config.status
config.status: $(srcdir)/configure $(srcdir)/config.table
$(SHELL) ./config.status --recheck
all-subdir check-subdir installcheck-subdir info-subdir \
install-info-subdir clean-info-subdir dvi-subdir install-subdir \
etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \
maintainer-clean-subdir:
@target=`echo $@ | sed -e 's/-subdir//'`; \
for dir in . $(SUBDIRS) ; do \
test $$dir = . || (cd $$dir && $(MAKE) $$target) || exit 1; \
done
$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA): stamp-picdir
alloca.o: config.h
@ -229,6 +264,7 @@ getcwd.o: config.h
getopt.o: config.h $(INCDIR)/getopt.h
getopt1.o: config.h $(INCDIR)/getopt.h
getpagesize.o: config.h
getpwd.o: config.h $(INCDIR)/libiberty.h
getruntime.o: config.h $(INCDIR)/libiberty.h
hex.o: $(INCDIR)/libiberty.h
floatformat.o: $(INCDIR)/floatformat.h
@ -236,6 +272,7 @@ mkstemps.o: config.h
objalloc.o: $(INCDIR)/objalloc.h
obstack.o: config.h $(INCDIR)/obstack.h
pexecute.o: config.h $(INCDIR)/libiberty.h
setenv.o: config.h
spaces.o: $(INCDIR)/libiberty.h
splay-tree.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h $(INCDIR)/ansidecl.h
strerror.o: config.h $(INCDIR)/libiberty.h
@ -243,5 +280,7 @@ strsignal.o: config.h $(INCDIR)/libiberty.h
xatexit.o: $(INCDIR)/libiberty.h
xexit.o: $(INCDIR)/libiberty.h
xmalloc.o: $(INCDIR)/libiberty.h
xmemdup.o: config.h $(INCDIR)/libiberty.h
xstrdup.o: config.h $(INCDIR)/libiberty.h
xstrerror.o: config.h $(INCDIR)/libiberty.h
hashtab.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h $(INCDIR)/ansidecl.h

View File

@ -35,12 +35,8 @@ Boston, MA 02111-1307, USA. */
#ifdef __STDC__
#include <stddef.h>
extern void *memcpy (void *s1, const void *s2, size_t n); /* 4.11.2.1 */
extern size_t strlen (const char *s); /* 4.11.6.3 */
extern void *malloc (size_t size); /* 4.10.3.3 */
extern void *realloc (void *ptr, size_t size); /* 4.10.3.4 */
extern void free (void *ptr); /* 4.10.3.2 */
extern char *strdup (const char *s); /* Non-ANSI */
#include <string.h>
#include <stdlib.h>
#else /* !__STDC__ */

View File

@ -14,24 +14,53 @@ DESCRIPTION
last component of the pathname ("ls.c" in this case).
BUGS
Presumes a UNIX style path with UNIX style separators.
Presumes a UNIX or DOS/Windows style path with UNIX or DOS/Windows
style separators.
*/
#include "ansidecl.h"
#include "libiberty.h"
#include <ctype.h>
#ifndef DIR_SEPARATOR
#define DIR_SEPARATOR '/'
#endif
#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
defined (__OS2__)
#define HAVE_DOS_BASED_FILE_SYSTEM
#ifndef DIR_SEPARATOR_2
#define DIR_SEPARATOR_2 '\\'
#endif
#endif
/* Define IS_DIR_SEPARATOR. */
#ifndef DIR_SEPARATOR_2
# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
#else /* DIR_SEPARATOR_2 */
# define IS_DIR_SEPARATOR(ch) \
(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
#endif /* DIR_SEPARATOR_2 */
char *
basename (name)
const char *name;
{
const char *base = name;
const char *base;
while (*name)
#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
/* Skip over the disk name in MSDOS pathnames. */
if (isalpha (name[0]) && name[1] == ':')
name += 2;
#endif
for (base = name; *name; name++)
{
if (*name++ == '/')
if (IS_DIR_SEPARATOR (*name))
{
base = name;
base = name + 1;
}
}
return (char *) base;
}

View File

@ -1,3 +1,6 @@
/* calloc -- allocate memory which has been initialized to zero.
This function is in the public domain. */
#include "ansidecl.h"
#include "libiberty.h"

View File

@ -19,9 +19,6 @@ Boston, MA 02111-1307, USA. */
/* This file exports two functions: choose_temp_base and make_temp_file. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@ -34,6 +31,9 @@ Boston, MA 02111-1307, USA. */
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_SYS_FILE_H
#include <sys/file.h> /* May get R_OK, etc. on some systems. */
#endif
@ -48,7 +48,7 @@ Boston, MA 02111-1307, USA. */
extern int mkstemps ();
#ifndef IN_GCC
#if defined (__MSDOS__) || defined (_WIN32)
#if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN__) && ! defined (_UWIN))
#define DIR_SEPARATOR '\\'
#endif
#endif
@ -145,7 +145,7 @@ choose_temp_base ()
char *
make_temp_file (suffix)
char *suffix;
const char *suffix;
{
char *base = 0;
char *temp_filename;

View File

@ -85,6 +85,9 @@
/* Define if you have the getrusage function. */
#undef HAVE_GETRUSAGE
/* Define if you have the gettimeofday function. */
#undef HAVE_GETTIMEOFDAY
/* Define if you have the index function. */
#undef HAVE_INDEX
@ -106,12 +109,18 @@
/* Define if you have the memset function. */
#undef HAVE_MEMSET
/* Define if you have the mkstemps function. */
#undef HAVE_MKSTEMPS
/* Define if you have the on_exit function. */
#undef HAVE_ON_EXIT
/* Define if you have the psignal function. */
#undef HAVE_PSIGNAL
/* Define if you have the putenv function. */
#undef HAVE_PUTENV
/* Define if you have the random function. */
#undef HAVE_RANDOM
@ -121,6 +130,12 @@
/* Define if you have the rindex function. */
#undef HAVE_RINDEX
/* Define if you have the sbrk function. */
#undef HAVE_SBRK
/* Define if you have the setenv function. */
#undef HAVE_SETENV
/* Define if you have the sigsetmask function. */
#undef HAVE_SIGSETMASK
@ -196,6 +211,12 @@
/* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/resource.h> header file. */
#undef HAVE_SYS_RESOURCE_H
/* Define if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H

View File

@ -4,6 +4,7 @@ case "${host}" in
*-*-cxux7*) frag=mh-cxux7 ;;
*-*-freebsd2.1.*) frag=mh-fbsd21 ;;
*-*-freebsd2.2.[012]) frag=mh-fbsd21 ;;
i370-*-opened*) frag=mh-openedition ;;
i[345]86-*-windows*) frag=mh-windows ;;
*-*-beos*) frag=mh-beos ;;
esac
@ -57,4 +58,4 @@ else
fi
frag=xhost-mkfrag
${CONFIG_SHELL} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag
${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag

View File

@ -0,0 +1,3 @@
HDEFINES = -D_ALL_SOURCE
CC=c89

283
libiberty/configure vendored
View File

@ -742,10 +742,11 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:749: checking for $ac_word" >&5
echo "configure:750: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -775,7 +776,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:779: checking for $ac_word" >&5
echo "configure:780: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -824,7 +825,7 @@ fi
fi
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:828: checking whether we are using GNU C" >&5
echo "configure:829: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -833,7 +834,7 @@ else
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@ -844,11 +845,12 @@ echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
ac_libiberty_warn_cflags='-W -Wall -Wtraditional'
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:852: checking whether ${CC-cc} accepts -g" >&5
echo "configure:854: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -872,12 +874,13 @@ echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
fi
else
GCC=
ac_libiberty_warn_cflags=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
echo "configure:881: checking for POSIXized ISC" >&5
echo "configure:884: checking for POSIXized ISC" >&5
if test -d /etc/conf/kconfig.d &&
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
then
@ -915,7 +918,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:919: checking for a BSD compatible install" >&5
echo "configure:922: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@ -976,7 +979,7 @@ host_makefile_frag=${frag}
# able to link anything, it had better be able to at least compile
# something.
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:980: checking how to run the C preprocessor" >&5
echo "configure:983: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@ -991,13 +994,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 995 "configure"
#line 998 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1004: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1008,13 +1011,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1012 "configure"
#line 1015 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1021: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1025,13 +1028,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
#line 1029 "configure"
#line 1032 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1035: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@ -1055,21 +1058,21 @@ else
fi
echo "$ac_t""$CPP" 1>&6
for ac_hdr in sys/file.h sys/param.h stdlib.h string.h unistd.h strings.h sys/time.h
for ac_hdr in sys/file.h sys/param.h stdlib.h string.h unistd.h strings.h sys/time.h sys/resource.h sys/stat.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:1063: checking for $ac_hdr" >&5
echo "configure:1066: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1068 "configure"
#line 1071 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1073: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:1076: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -1096,12 +1099,12 @@ fi
done
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
echo "configure:1100: checking for sys/wait.h that is POSIX.1 compatible" >&5
echo "configure:1103: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1105 "configure"
#line 1108 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@ -1117,7 +1120,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
if { (eval echo configure:1121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:1124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@ -1159,9 +1162,11 @@ funcs="$funcs memcpy"
funcs="$funcs memmove"
funcs="$funcs memset"
funcs="$funcs mkstemps"
funcs="$funcs putenv"
funcs="$funcs random"
funcs="$funcs rename"
funcs="$funcs rindex"
funcs="$funcs setenv"
funcs="$funcs sigsetmask"
funcs="$funcs strcasecmp"
funcs="$funcs strchr"
@ -1183,7 +1188,7 @@ funcs="$funcs waitpid"
vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
# These are neither executed nor required, but they help keep
# autoheader happy without adding a bunch of text to acconfig.h.
@ -1191,12 +1196,12 @@ if test "x" = "y"; then
for ac_func in asprintf atexit basename bcmp bcopy bzero calloc clock getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1195: checking for $ac_func" >&5
echo "configure:1200: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1200 "configure"
#line 1205 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1219,7 +1224,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1246,12 +1251,12 @@ done
for ac_func in getpagesize index insque mkstemps memchr memcmp memcpy memmove
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1250: checking for $ac_func" >&5
echo "configure:1255: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1255 "configure"
#line 1260 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1274,7 +1279,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1298,15 +1303,15 @@ else
fi
done
for ac_func in memset random rename rindex sigsetmask strcasecmp
for ac_func in memset putenv random rename rindex sigsetmask strcasecmp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1305: checking for $ac_func" >&5
echo "configure:1310: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1310 "configure"
#line 1315 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1329,7 +1334,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1353,15 +1358,15 @@ else
fi
done
for ac_func in strchr strdup strncasecmp strrchr strstr strtod strtol
for ac_func in setenv strchr strdup strncasecmp strrchr strstr strtod strtol
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1360: checking for $ac_func" >&5
echo "configure:1365: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1365 "configure"
#line 1370 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1384,7 +1389,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1388: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1411,12 +1416,12 @@ done
for ac_func in strtoul tmpnam vasprintf vfprintf vprintf vsprintf waitpid
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1415: checking for $ac_func" >&5
echo "configure:1420: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1420 "configure"
#line 1425 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1439,7 +1444,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1478,12 +1483,12 @@ EOF
for ac_func in getrusage on_exit psignal strerror strsignal sysconf times
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1482: checking for $ac_func" >&5
echo "configure:1487: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1487 "configure"
#line 1492 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1506,7 +1511,62 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in sbrk gettimeofday
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1542: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1547 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1538,6 +1598,7 @@ fi
# if the host does not provide alloca, we set ALLOCA to alloca.o
setobjs=
CHECK=
if test -n "${with_target_subdir}"; then
# We are being configured as a target library. AC_REPLACE_FUNCS
@ -1578,8 +1639,16 @@ EOF
setobjs=yes
fi
else
# Not a target library, so we set things up to run the test suite.
CHECK=check-cplus-dem
fi
if test -z "${setobjs}"; then
case "${host}" in
@ -1661,6 +1730,17 @@ EOF
# can hang configure; on other versions, vfork exists just as a stub.
# FIXME: This should be removed once vfork in uwin's runtime is fixed.
ac_cv_func_vfork_works=no
# Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
# macros (actually, these are imported from a DLL, but the end effect
# is the same), so the test below won't find them.
cat >> confdefs.h <<\EOF
#define HAVE_SYS_NERR 1
EOF
cat >> confdefs.h <<\EOF
#define HAVE_SYS_ERRLIST 1
EOF
;;
esac
@ -1668,7 +1748,7 @@ EOF
# We haven't set the list of objects yet. Use the standard autoconf
# tests. This will only work if the compiler works.
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1672: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
echo "configure:1752: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@ -1679,12 +1759,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
#line 1683 "configure"
#line 1763 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@ -1710,19 +1790,19 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1714: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "configure:1794: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
for ac_func in $funcs
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1721: checking for $ac_func" >&5
echo "configure:1801: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1726 "configure"
#line 1806 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1745,7 +1825,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1771,22 +1851,40 @@ fi
done
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
case "${host}" in
*-*-interix)
# On Interix, it wrongly concludes that the MSVC compiler supports alloca.
# (MSVC does on Win32, not on Interix.)
# This should be temporary.
ac_cv_header_alloca_h=no
ac_cv_func_alloca_works=no
ALLOCA=alloca.o
cat >> confdefs.h <<\EOF
#define C_ALLOCA 1
EOF
cat >> confdefs.h <<EOF
#define STACK_DIRECTION -1
EOF
;;
*)
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
echo "configure:1778: checking for working alloca.h" >&5
echo "configure:1876: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1783 "configure"
#line 1881 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
if { (eval echo configure:1790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@ -1807,12 +1905,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
echo "configure:1811: checking for alloca" >&5
echo "configure:1909: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1816 "configure"
#line 1914 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@ -1840,7 +1938,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
if { (eval echo configure:1844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:1942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@ -1872,12 +1970,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
echo "configure:1876: checking whether alloca needs Cray hooks" >&5
echo "configure:1974: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1881 "configure"
#line 1979 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@ -1902,12 +2000,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1906: checking for $ac_func" >&5
echo "configure:2004: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1911 "configure"
#line 2009 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -1930,7 +2028,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -1957,7 +2055,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
echo "configure:1961: checking stack direction for C alloca" >&5
echo "configure:2059: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -1965,7 +2063,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
#line 1969 "configure"
#line 2067 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@ -1984,7 +2082,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
if { (eval echo configure:1988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:2086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@ -2005,13 +2103,16 @@ EOF
fi
;;
esac
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:2010: checking for ANSI C header files" >&5
echo "configure:2111: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2015 "configure"
#line 2116 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@ -2019,7 +2120,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -2036,7 +2137,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 2040 "configure"
#line 2141 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@ -2054,7 +2155,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 2058 "configure"
#line 2159 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@ -2075,7 +2176,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
#line 2079 "configure"
#line 2180 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@ -2086,7 +2187,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
if { (eval echo configure:2090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:2191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@ -2110,12 +2211,12 @@ EOF
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
echo "configure:2114: checking for pid_t" >&5
echo "configure:2215: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2119 "configure"
#line 2220 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@ -2144,17 +2245,17 @@ fi
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
echo "configure:2148: checking for vfork.h" >&5
echo "configure:2249: checking for vfork.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2153 "configure"
#line 2254 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2158: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -2179,18 +2280,18 @@ else
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
echo "configure:2183: checking for working vfork" >&5
echo "configure:2284: checking for working vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
echo $ac_n "checking for vfork""... $ac_c" 1>&6
echo "configure:2189: checking for vfork" >&5
echo "configure:2290: checking for vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2194 "configure"
#line 2295 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
@ -2213,7 +2314,7 @@ vfork();
; return 0; }
EOF
if { (eval echo configure:2217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
@ -2235,7 +2336,7 @@ fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
#line 2239 "configure"
#line 2340 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
@ -2330,7 +2431,7 @@ main() {
}
}
EOF
if { (eval echo configure:2334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:2435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
@ -2357,19 +2458,19 @@ fi
fi
for v in $vars; do
echo $ac_n "checking for $v""... $ac_c" 1>&6
echo "configure:2361: checking for $v" >&5
echo "configure:2462: checking for $v" >&5
if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2366 "configure"
#line 2467 "configure"
#include "confdefs.h"
int *p;
int main() {
extern int $v; p = &$v;
; return 0; }
EOF
if { (eval echo configure:2373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "libiberty_cv_var_$v=yes"
else
@ -2395,12 +2496,12 @@ EOF
for ac_func in $checkfuncs
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2399: checking for $ac_func" >&5
echo "configure:2500: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2404 "configure"
#line 2505 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -2423,7 +2524,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:2427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -2560,7 +2661,7 @@ done
ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"
trap 'rm -fr `echo "Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
trap 'rm -fr `echo "Makefile testsuite/Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@ -2604,6 +2705,7 @@ s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
s%@AR@%$AR%g
s%@RANLIB@%$RANLIB%g
s%@ac_libiberty_warn_cflags@%$ac_libiberty_warn_cflags%g
s%@CC@%$CC%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
@ -2611,6 +2713,7 @@ s%@INSTALL_DATA@%$INSTALL_DATA%g
/@host_makefile_frag@/r $host_makefile_frag
s%@host_makefile_frag@%%g
s%@CPP@%$CPP%g
s%@CHECK@%$CHECK%g
s%@LIBOBJS@%$LIBOBJS%g
s%@ALLOCA@%$ALLOCA%g
s%@INSTALL_DEST@%$INSTALL_DEST%g
@ -2655,7 +2758,7 @@ EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
CONFIG_FILES=\${CONFIG_FILES-"Makefile testsuite/Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then

View File

@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script
AC_PREREQ(2.12.1)
AC_PREREQ(2.13)
AC_INIT(pexecute.c)
dnl We use these options to decide which functions to include.
@ -55,6 +55,7 @@ AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
ac_libiberty_warn_cflags='-W -Wall -Wtraditional'
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
@ -71,9 +72,11 @@ dnl normal versions of a library), tasteless as that idea is.
fi
else
GCC=
ac_libiberty_warn_cflags=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
AC_SUBST(ac_libiberty_warn_cflags)
LIB_AC_PROG_CC
@ -106,7 +109,7 @@ AC_SUBST_FILE(host_makefile_frag)
# It's OK to check for header files. Although the compiler may not be
# able to link anything, it had better be able to at least compile
# something.
AC_CHECK_HEADERS(sys/file.h sys/param.h stdlib.h string.h unistd.h strings.h sys/time.h)
AC_CHECK_HEADERS(sys/file.h sys/param.h stdlib.h string.h unistd.h strings.h sys/time.h sys/resource.h sys/stat.h)
AC_HEADER_SYS_WAIT
# This is the list of functions which libiberty will provide if they
@ -130,9 +133,11 @@ funcs="$funcs memcpy"
funcs="$funcs memmove"
funcs="$funcs memset"
funcs="$funcs mkstemps"
funcs="$funcs putenv"
funcs="$funcs random"
funcs="$funcs rename"
funcs="$funcs rindex"
funcs="$funcs setenv"
funcs="$funcs sigsetmask"
funcs="$funcs strcasecmp"
funcs="$funcs strchr"
@ -154,20 +159,21 @@ funcs="$funcs waitpid"
vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday"
# These are neither executed nor required, but they help keep
# autoheader happy without adding a bunch of text to acconfig.h.
if test "x" = "y"; then
AC_CHECK_FUNCS(asprintf atexit basename bcmp bcopy bzero calloc clock getcwd)
AC_CHECK_FUNCS(getpagesize index insque mkstemps memchr memcmp memcpy memmove)
AC_CHECK_FUNCS(memset random rename rindex sigsetmask strcasecmp)
AC_CHECK_FUNCS(strchr strdup strncasecmp strrchr strstr strtod strtol)
AC_CHECK_FUNCS(memset putenv random rename rindex sigsetmask strcasecmp)
AC_CHECK_FUNCS(setenv strchr strdup strncasecmp strrchr strstr strtod strtol)
AC_CHECK_FUNCS(strtoul tmpnam vasprintf vfprintf vprintf vsprintf waitpid)
AC_DEFINE(HAVE_SYS_ERRLIST)
AC_DEFINE(HAVE_SYS_NERR)
AC_DEFINE(HAVE_SYS_SIGLIST)
AC_CHECK_FUNCS(getrusage on_exit psignal strerror strsignal sysconf times)
AC_CHECK_FUNCS(sbrk gettimeofday)
fi
# For each of these functions, if the host does not provide the
@ -176,6 +182,7 @@ fi
# if the host does not provide alloca, we set ALLOCA to alloca.o
setobjs=
CHECK=
if test -n "${with_target_subdir}"; then
# We are being configured as a target library. AC_REPLACE_FUNCS
@ -210,8 +217,16 @@ if test -n "${with_target_subdir}"; then
setobjs=yes
fi
else
# Not a target library, so we set things up to run the test suite.
CHECK=check-cplus-dem
fi
AC_SUBST(CHECK)
if test -z "${setobjs}"; then
case "${host}" in
@ -281,6 +296,11 @@ if test -z "${setobjs}"; then
# can hang configure; on other versions, vfork exists just as a stub.
# FIXME: This should be removed once vfork in uwin's runtime is fixed.
ac_cv_func_vfork_works=no
# Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
# macros (actually, these are imported from a DLL, but the end effect
# is the same), so the test below won't find them.
AC_DEFINE(HAVE_SYS_NERR)
AC_DEFINE(HAVE_SYS_ERRLIST)
;;
esac
@ -289,7 +309,28 @@ if test -z "${setobjs}"; then
# tests. This will only work if the compiler works.
AC_PROG_CC_WORKS
AC_REPLACE_FUNCS($funcs)
AC_FUNC_ALLOCA
case "${host}" in
*-*-interix)
# On Interix, it wrongly concludes that the MSVC compiler supports alloca.
# (MSVC does on Win32, not on Interix.)
# This should be temporary.
ac_cv_header_alloca_h=no
ac_cv_func_alloca_works=no
ALLOCA=alloca.o
cat >> confdefs.h <<\EOF
#define C_ALLOCA 1
EOF
cat >> confdefs.h <<EOF
#define STACK_DIRECTION -1
EOF
;;
*)
AC_FUNC_ALLOCA
;;
esac
AC_FUNC_VFORK
if test $ac_cv_func_vfork_works = no; then
LIBOBJS="$LIBOBJS vfork.o"
@ -321,7 +362,7 @@ fi
AC_SUBST(INSTALL_DEST)
# We need multilib support, but only if configuring for the target.
AC_OUTPUT(Makefile,
AC_OUTPUT(Makefile testsuite/Makefile,
[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
if test -n "$CONFIG_FILES"; then
if test -n "${with_target_subdir}"; then

View File

@ -51,6 +51,14 @@ char * realloc ();
#include "libiberty.h"
#define min(X,Y) (((X) < (Y)) ? (X) : (Y))
/* A value at least one greater than the maximum number of characters
that will be output when using the `%d' format with `printf'. */
#define INTBUF_SIZE 32
extern void fancy_abort PARAMS ((void)) ATTRIBUTE_NORETURN;
static const char *mystrstr PARAMS ((const char *, const char *));
static const char *
@ -343,6 +351,9 @@ string_prepend PARAMS ((string *, const char *));
static void
string_prependn PARAMS ((string *, const char *, int));
static void
string_append_template_idx PARAMS ((string *, int));
static int
get_count PARAMS ((const char **, int *));
@ -420,6 +431,25 @@ qualifier_string PARAMS ((int));
static const char*
demangle_qualifier PARAMS ((int));
static int
demangle_expression PARAMS ((struct work_stuff *, const char **, string *,
type_kind_t));
static int
demangle_integral_value PARAMS ((struct work_stuff *, const char **,
string *));
static int
demangle_real_value PARAMS ((struct work_stuff *, const char **, string *));
static void
demangle_arm_hp_template PARAMS ((struct work_stuff *, const char **, int,
string *));
static void
recursively_demangle PARAMS ((struct work_stuff *, const char **, string *,
int));
/* Translate count to integer, consuming tokens in the process.
Conversion terminates on the first non-digit character.
@ -1325,6 +1355,68 @@ demangle_template_template_parm (work, mangled, tname)
return (success);
}
static int
demangle_expression (work, mangled, s, tk)
struct work_stuff *work;
const char** mangled;
string* s;
type_kind_t tk;
{
int need_operator = 0;
int success;
success = 1;
string_appendn (s, "(", 1);
(*mangled)++;
while (success && **mangled != 'W' && **mangled != '\0')
{
if (need_operator)
{
size_t i;
size_t len;
success = 0;
len = strlen (*mangled);
for (i = 0;
i < sizeof (optable) / sizeof (optable [0]);
++i)
{
size_t l = strlen (optable[i].in);
if (l <= len
&& memcmp (optable[i].in, *mangled, l) == 0)
{
string_appendn (s, " ", 1);
string_append (s, optable[i].out);
string_appendn (s, " ", 1);
success = 1;
(*mangled) += l;
break;
}
}
if (!success)
break;
}
else
need_operator = 1;
success = demangle_template_value_parm (work, mangled, s, tk);
}
if (**mangled != 'W')
success = 0;
else
{
string_appendn (s, ")", 1);
(*mangled)++;
}
return success;
}
static int
demangle_integral_value (work, mangled, s)
struct work_stuff *work;
@ -1334,74 +1426,35 @@ demangle_integral_value (work, mangled, s)
int success;
if (**mangled == 'E')
{
int need_operator = 0;
success = 1;
string_appendn (s, "(", 1);
(*mangled)++;
while (success && **mangled != 'W' && **mangled != '\0')
{
if (need_operator)
{
size_t i;
size_t len;
success = 0;
len = strlen (*mangled);
for (i = 0;
i < sizeof (optable) / sizeof (optable [0]);
++i)
{
size_t l = strlen (optable[i].in);
if (l <= len
&& memcmp (optable[i].in, *mangled, l) == 0)
{
string_appendn (s, " ", 1);
string_append (s, optable[i].out);
string_appendn (s, " ", 1);
success = 1;
(*mangled) += l;
break;
}
}
if (!success)
break;
}
else
need_operator = 1;
success = demangle_template_value_parm (work, mangled, s,
tk_integral);
}
if (**mangled != 'W')
success = 0;
else
{
string_appendn (s, ")", 1);
(*mangled)++;
}
}
success = demangle_expression (work, mangled, s, tk_integral);
else if (**mangled == 'Q' || **mangled == 'K')
success = demangle_qualified (work, mangled, s, 0, 1);
else
{
int value;
success = 0;
/* Negative numbers are indicated with a leading `m'. */
if (**mangled == 'm')
{
string_appendn (s, "-", 1);
(*mangled)++;
}
while (isdigit ((unsigned char)**mangled))
/* Read the rest of the number. */
value = consume_count_with_underscores (mangled);
if (value != -1)
{
string_appendn (s, *mangled, 1);
(*mangled)++;
char buf[INTBUF_SIZE];
sprintf (buf, "%d", value);
string_append (s, buf);
/* If the next character is an underscore, skip it. */
if (**mangled == '_')
(*mangled)++;
/* All is well. */
success = 1;
}
}
@ -1409,6 +1462,51 @@ demangle_integral_value (work, mangled, s)
return success;
}
/* Demangle the real value in MANGLED. */
static int
demangle_real_value (work, mangled, s)
struct work_stuff *work;
const char **mangled;
string* s;
{
if (**mangled == 'E')
return demangle_expression (work, mangled, s, tk_real);
if (**mangled == 'm')
{
string_appendn (s, "-", 1);
(*mangled)++;
}
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
if (**mangled == '.') /* fraction */
{
string_appendn (s, ".", 1);
(*mangled)++;
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
if (**mangled == 'e') /* exponent */
{
string_appendn (s, "e", 1);
(*mangled)++;
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
return 1;
}
static int
demangle_template_value_parm (work, mangled, s, tk)
struct work_stuff *work;
@ -1432,11 +1530,7 @@ demangle_template_value_parm (work, mangled, s, tk)
if (work->tmpl_argvec)
string_append (s, work->tmpl_argvec[idx]);
else
{
char buf[10];
sprintf(buf, "T%d", idx);
string_append (s, buf);
}
string_append_template_idx (s, idx);
}
else if (tk == tk_integral)
success = demangle_integral_value (work, mangled, s);
@ -1472,70 +1566,46 @@ demangle_template_value_parm (work, mangled, s, tk)
success = 0;
}
else if (tk == tk_real)
{
if (**mangled == 'm')
{
string_appendn (s, "-", 1);
(*mangled)++;
}
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
if (**mangled == '.') /* fraction */
{
string_appendn (s, ".", 1);
(*mangled)++;
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
if (**mangled == 'e') /* exponent */
{
string_appendn (s, "e", 1);
(*mangled)++;
while (isdigit ((unsigned char)**mangled))
{
string_appendn (s, *mangled, 1);
(*mangled)++;
}
}
}
success = demangle_real_value (work, mangled, s);
else if (tk == tk_pointer || tk == tk_reference)
{
int symbol_len = consume_count (mangled);
if (symbol_len == -1)
return -1;
if (symbol_len == 0)
string_appendn (s, "0", 1);
if (**mangled == 'Q')
success = demangle_qualified (work, mangled, s,
/*isfuncname=*/0,
/*append=*/1);
else
{
char *p = xmalloc (symbol_len + 1), *q;
strncpy (p, *mangled, symbol_len);
p [symbol_len] = '\0';
/* We use cplus_demangle here, rather than
internal_cplus_demangle, because the name of the entity
mangled here does not make use of any of the squangling
or type-code information we have built up thus far; it is
mangled independently. */
q = cplus_demangle (p, work->options);
if (tk == tk_pointer)
string_appendn (s, "&", 1);
/* FIXME: Pointer-to-member constants should get a
qualifying class name here. */
if (q)
{
string_append (s, q);
free (q);
}
int symbol_len = consume_count (mangled);
if (symbol_len == -1)
return -1;
if (symbol_len == 0)
string_appendn (s, "0", 1);
else
string_append (s, p);
free (p);
{
char *p = xmalloc (symbol_len + 1), *q;
strncpy (p, *mangled, symbol_len);
p [symbol_len] = '\0';
/* We use cplus_demangle here, rather than
internal_cplus_demangle, because the name of the entity
mangled here does not make use of any of the squangling
or type-code information we have built up thus far; it is
mangled independently. */
q = cplus_demangle (p, work->options);
if (tk == tk_pointer)
string_appendn (s, "&", 1);
/* FIXME: Pointer-to-member constants should get a
qualifying class name here. */
if (q)
{
string_append (s, q);
free (q);
}
else
string_append (s, p);
free (p);
}
*mangled += symbol_len;
}
*mangled += symbol_len;
}
return success;
@ -1594,11 +1664,9 @@ demangle_template (work, mangled, tname, trawname, is_type, remember)
}
else
{
char buf[10];
sprintf(buf, "T%d", idx);
string_append (tname, buf);
string_append_template_idx (tname, idx);
if (trawname)
string_append (trawname, buf);
string_append_template_idx (trawname, idx);
}
}
else
@ -2439,7 +2507,7 @@ gnu_special (work, mangled, declp)
break;
default:
n = consume_count (mangled);
if (n < 0 || n > strlen (*mangled))
if (n < 0 || n > (long) strlen (*mangled))
{
success = 0;
break;
@ -2606,7 +2674,7 @@ arm_special (mangled, declp)
{
n = consume_count (mangled);
if (n == -1
|| n > strlen (*mangled))
|| n > (long) strlen (*mangled))
return 0;
string_prependn (declp, *mangled, n);
(*mangled) += n;
@ -2667,7 +2735,6 @@ demangle_qualified (work, mangled, result, isfuncname, append)
{
int qualifiers = 0;
int success = 1;
const char *p;
char num[2];
string temp;
string last_name;
@ -2699,19 +2766,10 @@ demangle_qualified (work, mangled, result, isfuncname, append)
/* GNU mangled name with more than 9 classes. The count is preceded
by an underscore (to distinguish it from the <= 9 case) and followed
by an underscore. */
p = *mangled + 2;
qualifiers = atoi (p);
if (!isdigit ((unsigned char)*p) || *p == '0')
(*mangled)++;
qualifiers = consume_count_with_underscores (mangled);
if (qualifiers == -1)
success = 0;
/* Skip the digits. */
while (isdigit ((unsigned char)*p))
++p;
if (*p != '_')
success = 0;
*mangled = p + 1;
break;
case '1':
@ -2902,9 +2960,7 @@ get_count (type, count)
int n;
if (!isdigit ((unsigned char)**type))
{
return (0);
}
return (0);
else
{
*count = **type - '0';
@ -3041,14 +3097,14 @@ do_type (work, mangled, result)
member = **mangled == 'M';
(*mangled)++;
if (!isdigit ((unsigned char)**mangled) && **mangled != 't')
{
success = 0;
break;
}
string_append (&decl, ")");
string_prepend (&decl, SCOPE_STRING (work));
/* We don't need to prepend `::' for a qualified name;
demangle_qualified will do that for us. */
if (**mangled != 'Q')
string_prepend (&decl, SCOPE_STRING (work));
if (isdigit ((unsigned char)**mangled))
{
n = consume_count (mangled);
@ -3061,7 +3117,13 @@ do_type (work, mangled, result)
string_prependn (&decl, *mangled, n);
*mangled += n;
}
else
else if (**mangled == 'X' || **mangled == 'Y')
{
string temp;
do_type (work, mangled, &temp);
string_prepends (&decl, &temp);
}
else if (**mangled == 't')
{
string temp;
string_init (&temp);
@ -3075,6 +3137,20 @@ do_type (work, mangled, result)
else
break;
}
else if (**mangled == 'Q')
{
success = demangle_qualified (work, mangled, &decl,
/*isfuncnam=*/0,
/*append=*/0);
if (!success)
break;
}
else
{
success = 0;
break;
}
string_prepend (&decl, "(");
if (member)
{
@ -3181,11 +3257,7 @@ do_type (work, mangled, result)
if (work->tmpl_argvec)
string_append (result, work->tmpl_argvec[idx]);
else
{
char buf[10];
sprintf(buf, "T%d", idx);
string_append (result, buf);
}
string_append_template_idx (result, idx);
success = 1;
}
@ -3359,14 +3431,14 @@ demangle_fund_type (work, mangled, result)
break;
}
case 'I':
++(*mangled);
(*mangled)++;
if (**mangled == '_')
{
int i;
++(*mangled);
(*mangled)++;
for (i = 0;
(i < sizeof (buf) - 1 && **mangled && **mangled != '_');
++(*mangled), ++i)
i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_';
(*mangled)++, i++)
buf[i] = **mangled;
if (**mangled != '_')
{
@ -3374,13 +3446,13 @@ demangle_fund_type (work, mangled, result)
break;
}
buf[i] = '\0';
++(*mangled);
(*mangled)++;
}
else
{
strncpy (buf, *mangled, 2);
buf[2] = '\0';
*mangled += 2;
*mangled += min (strlen (*mangled), 2);
}
sscanf (buf, "%x", &dec);
sprintf (buf, "int%i_t", dec);
@ -3434,7 +3506,7 @@ demangle_fund_type (work, mangled, result)
static int
do_hpacc_template_const_value (work, mangled, result)
struct work_stuff *work;
struct work_stuff *work ATTRIBUTE_UNUSED;
const char **mangled;
string *result;
{
@ -4304,6 +4376,16 @@ string_prependn (p, s, n)
}
}
static void
string_append_template_idx (s, idx)
string *s;
int idx;
{
char buf[INTBUF_SIZE + 1 /* 'T' */];
sprintf(buf, "T%d", idx);
string_append (s, buf);
}
/* To generate a standalone demangler program for testing purposes,
just compile and link this file with -DMAIN and libiberty.a. When
run, it demangles each command line arg, or each stdin string, and
@ -4313,13 +4395,13 @@ string_prependn (p, s, n)
#include "getopt.h"
static char *program_name;
static char *program_version = VERSION;
static const char *program_name;
static const char *program_version = VERSION;
static int flags = DMGL_PARAMS | DMGL_ANSI;
static void demangle_it PARAMS ((char *));
static void usage PARAMS ((FILE *, int));
static void fatal PARAMS ((char *));
static void usage PARAMS ((FILE *, int)) ATTRIBUTE_NORETURN;
static void fatal PARAMS ((const char *)) ATTRIBUTE_NORETURN;
static void
demangle_it (mangled_name)
@ -4379,6 +4461,63 @@ fancy_abort ()
fatal ("Internal gcc abort.");
}
static const char *
standard_symbol_characters PARAMS ((void));
static const char *
hp_symbol_characters PARAMS ((void));
/* Return the string of non-alnum characters that may occur
as a valid symbol component, in the standard assembler symbol
syntax. */
static const char *
standard_symbol_characters ()
{
return "_$.";
}
/* Return the string of non-alnum characters that may occur
as a valid symbol name component in an HP object file.
Note that, since HP's compiler generates object code straight from
C++ source, without going through an assembler, its mangled
identifiers can use all sorts of characters that no assembler would
tolerate, so the alphabet this function creates is a little odd.
Here are some sample mangled identifiers offered by HP:
typeid*__XT24AddressIndExpClassMember_
[Vftptr]key:__dt__32OrdinaryCompareIndExpClassMemberFv
__ct__Q2_9Elf64_Dyn18{unnamed.union.#1}Fv
This still seems really weird to me, since nowhere else in this
file is there anything to recognize curly brackets, parens, etc.
I've talked with Srikanth <srikanth@cup.hp.com>, and he assures me
this is right, but I still strongly suspect that there's a
misunderstanding here.
If we decide it's better for c++filt to use HP's assembler syntax
to scrape identifiers out of its input, here's the definition of
the symbol name syntax from the HP assembler manual:
Symbols are composed of uppercase and lowercase letters, decimal
digits, dollar symbol, period (.), ampersand (&), pound sign(#) and
underscore (_). A symbol can begin with a letter, digit underscore or
dollar sign. If a symbol begins with a digit, it must contain a
non-digit character.
So have fun. */
static const char *
hp_symbol_characters ()
{
return "_$.<>#,*&[]:(){}";
}
extern int main PARAMS ((int, char **));
int
main (argc, argv)
int argc;
@ -4386,6 +4525,7 @@ main (argc, argv)
{
char *result;
int c;
const char *valid_symbols;
program_name = argv[0];
@ -4405,7 +4545,7 @@ main (argc, argv)
break;
case 'v':
printf ("GNU %s (C++ demangler), version %s\n", program_name, program_version);
exit (0);
return (0);
case '_':
strip_underscore = 1;
break;
@ -4437,7 +4577,7 @@ main (argc, argv)
{
fprintf (stderr, "%s: unknown demangling style `%s'\n",
program_name, optarg);
exit (1);
return (1);
}
break;
}
@ -4452,16 +4592,30 @@ main (argc, argv)
}
else
{
switch (current_demangling_style)
{
case gnu_demangling:
case lucid_demangling:
case arm_demangling:
case edg_demangling:
valid_symbols = standard_symbol_characters ();
break;
case hp_demangling:
valid_symbols = hp_symbol_characters ();
break;
default:
/* Folks should explicitly indicate the appropriate alphabet for
each demangling. Providing a default would allow the
question to go unconsidered. */
abort ();
}
for (;;)
{
int i = 0;
c = getchar ();
/* Try to read a label. */
while (c != EOF && (isalnum(c) || c == '_' || c == '$' || c == '.' ||
c == '<' || c == '>' || c == '#' || c == ',' || c == '*' || c == '&' ||
c == '[' || c == ']' || c == ':' || c == '(' || c == ')'))
/* the ones in the 2nd & 3rd lines were added to handle
HP aCC template specialization manglings */
while (c != EOF && (isalnum (c) || strchr (valid_symbols, c)))
{
if (i >= MBUF_SIZE-1)
break;
@ -4501,12 +4655,12 @@ main (argc, argv)
}
}
exit (0);
return (0);
}
static void
fatal (str)
char *str;
const char *str;
{
fprintf (stderr, "%s: %s\n", program_name, str);
exit (1);

View File

@ -14,6 +14,9 @@ DESCRIPTION
current directory's path doesn't fit in LEN characters, the result
is NULL and errno is set.
If pathname is a null pointer, getcwd() will obtain size bytes of
space using malloc.
BUGS
Emulated via the getwd() call, which is reasonable for most
systems that do not have getcwd().
@ -48,6 +51,13 @@ getcwd (buf, len)
errno = ERANGE;
return 0;
}
if (!buf) {
buf = (char*)malloc(len);
if (!buf) {
errno = ENOMEM;
return 0;
}
}
strcpy (buf, ourbuf);
}
return buf;

115
libiberty/getpwd.c Normal file
View File

@ -0,0 +1,115 @@
/* getpwd.c - get the working directory */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <sys/types.h>
#include <errno.h>
#ifndef errno
extern int errno;
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
/* Prototype these in case the system headers don't provide them. */
extern char *getpwd ();
extern char *getwd ();
#include "libiberty.h"
/* Virtually every UN*X system now in common use (except for pre-4.3-tahoe
BSD systems) now provides getcwd as called for by POSIX. Allow for
the few exceptions to the general rule here. */
#if !defined(HAVE_GETCWD) && defined(HAVE_GETWD)
#define getcwd(buf,len) getwd(buf)
#endif
#ifdef MAXPATHLEN
#define GUESSPATHLEN (MAXPATHLEN + 1)
#else
#define GUESSPATHLEN 100
#endif
#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN__)))
/* Get the working directory. Use the PWD environment variable if it's
set correctly, since this is faster and gives more uniform answers
to the user. Yield the working directory if successful; otherwise,
yield 0 and set errno. */
char *
getpwd ()
{
static char *pwd;
static int failure_errno;
char *p = pwd;
size_t s;
struct stat dotstat, pwdstat;
if (!p && !(errno = failure_errno))
{
if (! ((p = getenv ("PWD")) != 0
&& *p == '/'
&& stat (p, &pwdstat) == 0
&& stat (".", &dotstat) == 0
&& dotstat.st_ino == pwdstat.st_ino
&& dotstat.st_dev == pwdstat.st_dev))
/* The shortcut didn't work. Try the slow, ``sure'' way. */
for (s = GUESSPATHLEN; ! getcwd (p = xmalloc (s), s); s *= 2)
{
int e = errno;
free (p);
#ifdef ERANGE
if (e != ERANGE)
#endif
{
errno = failure_errno = e;
p = 0;
break;
}
}
/* Cache the result. This assumes that the program does
not invoke chdir between calls to getpwd. */
pwd = p;
}
return p;
}
#else /* VMS || _WIN32 && !__CYGWIN__ */
#ifndef MAXPATHLEN
#define MAXPATHLEN 255
#endif
char *
getpwd ()
{
static char *pwd = 0;
if (!pwd)
pwd = getcwd (xmalloc (MAXPATHLEN + 1), MAXPATHLEN + 1
#ifdef VMS
, 0
#endif
);
return pwd;
}
#endif /* VMS || _WIN32 && !__CYGWIN__ */

View File

@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */
#include <time.h>
#ifdef HAVE_GETRUSAGE
#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
#include <sys/time.h>
#include <sys/resource.h>
#endif
@ -66,7 +66,7 @@ Boston, MA 02111-1307, USA. */
long
get_run_time ()
{
#ifdef HAVE_GETRUSAGE
#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
struct rusage rusage;
getrusage (0, &rusage);

330
libiberty/hashtab.c Normal file
View File

@ -0,0 +1,330 @@
/* An expandable hash tables datatype.
Copyright (C) 1999 Free Software Foundation, Inc.
Contributed by Vladimir Makarov (vmakarov@cygnus.com).
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
Libiberty 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with libiberty; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This package implements basic hash table functionality. It is possible
to search for an entry, create an entry and destroy an entry.
Elements in the table are generic pointers.
The size of the table is not fixed; if the occupancy of the table
grows too high the hash table will be expanded.
The abstract data implementation is based on generalized Algorithm D
from Knuth's book "The art of computer programming". Hash table is
expanded by creation of new hash table and transferring elements from
the old table to the new table. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <sys/types.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#include <stdio.h>
#include "libiberty.h"
#include "hashtab.h"
/* The following variable is used for debugging. Its value is number
of all calls of `find_hash_table_entry' for all hash tables. */
static int all_searches = 0;
/* The following variable is used for debugging. Its value is number
of collisions fixed for time of work with all hash tables. */
static int all_collisions = 0;
/* The following variable is used for debugging. Its value is number
of all table expansions fixed for time of work with all hash
tables. */
static int all_expansions = 0;
/* This macro defines reserved value for empty table entry. */
#define EMPTY_ENTRY NULL
/* This macro defines reserved value for table entry which contained
a deleted element. */
#define DELETED_ENTRY ((void *) 1)
/* The following function returns the nearest prime number which is
greater than given source number. */
static unsigned long
higher_prime_number (number)
unsigned long number;
{
unsigned long i;
for (number = (number / 2) * 2 + 3;; number += 2)
{
for (i = 3; i * i <= number; i += 2)
if (number % i == 0)
break;
if (i * i > number)
return number;
}
}
/* This function creates table with length slightly longer than given
source length. Created hash table is initiated as empty (all the
hash table entries are EMPTY_ENTRY). The function returns the
created hash table. */
hash_table_t
create_hash_table (size, hash_function, eq_function)
size_t size;
unsigned (*hash_function) PARAMS ((hash_table_entry_t));
int (*eq_function) PARAMS ((hash_table_entry_t, hash_table_entry_t));
{
hash_table_t result;
size = higher_prime_number (size);
result = (hash_table_t) xmalloc (sizeof (*result));
result->entries
= (hash_table_entry_t *) xmalloc (size * sizeof (hash_table_entry_t));
result->size = size;
result->hash_function = hash_function;
result->eq_function = eq_function;
result->number_of_elements = 0;
result->number_of_deleted_elements = 0;
result->searches = 0;
result->collisions = 0;
memset (result->entries, 0, size * sizeof (hash_table_entry_t));
return result;
}
/* This function frees all memory allocated for given hash table.
Naturally the hash table must already exist. */
void
delete_hash_table (htab)
hash_table_t htab;
{
free (htab->entries);
free (htab);
}
/* This function clears all entries in the given hash table. */
void
empty_hash_table (htab)
hash_table_t htab;
{
memset (htab->entries, 0, htab->size * sizeof (hash_table_entry_t));
}
/* The following function changes size of memory allocated for the
entries and repeatedly inserts the table elements. The occupancy
of the table after the call will be about 50%. Naturally the hash
table must already exist. Remember also that the place of the
table entries is changed. */
static void
expand_hash_table (htab)
hash_table_t htab;
{
hash_table_t new_htab;
hash_table_entry_t *entry_ptr;
hash_table_entry_t *new_entry_ptr;
new_htab = create_hash_table (htab->number_of_elements * 2,
htab->hash_function, htab->eq_function);
for (entry_ptr = htab->entries; entry_ptr < htab->entries + htab->size;
entry_ptr++)
if (*entry_ptr != EMPTY_ENTRY && *entry_ptr != DELETED_ENTRY)
{
new_entry_ptr = find_hash_table_entry (new_htab, *entry_ptr, 1);
*new_entry_ptr = (*entry_ptr);
}
free (htab->entries);
*htab = (*new_htab);
free (new_htab);
}
/* This function searches for hash table entry which contains element
equal to given value or empty entry in which given value can be
placed (if the element with given value does not exist in the
table). The function works in two regimes. The first regime is
used only for search. The second is used for search and
reservation empty entry for given value. The table is expanded if
occupancy (taking into accout also deleted elements) is more than
75%. Naturally the hash table must already exist. If reservation
flag is TRUE then the element with given value should be inserted
into the table entry before another call of
`find_hash_table_entry'. */
hash_table_entry_t *
find_hash_table_entry (htab, element, reserve)
hash_table_t htab;
hash_table_entry_t element;
int reserve;
{
hash_table_entry_t *entry_ptr;
hash_table_entry_t *first_deleted_entry_ptr;
unsigned index, hash_value, secondary_hash_value;
if (htab->size * 3 <= htab->number_of_elements * 4)
{
all_expansions++;
expand_hash_table (htab);
}
hash_value = (*htab->hash_function) (element);
secondary_hash_value = 1 + hash_value % (htab->size - 2);
index = hash_value % htab->size;
htab->searches++;
all_searches++;
first_deleted_entry_ptr = NULL;
for (;;htab->collisions++, all_collisions++)
{
entry_ptr = htab->entries + index;
if (*entry_ptr == EMPTY_ENTRY)
{
if (reserve)
{
htab->number_of_elements++;
if (first_deleted_entry_ptr != NULL)
{
entry_ptr = first_deleted_entry_ptr;
*entry_ptr = EMPTY_ENTRY;
}
}
break;
}
else if (*entry_ptr != DELETED_ENTRY)
{
if ((*htab->eq_function) (*entry_ptr, element))
break;
}
else if (first_deleted_entry_ptr == NULL)
first_deleted_entry_ptr = entry_ptr;
index += secondary_hash_value;
if (index >= htab->size)
index -= htab->size;
}
return entry_ptr;
}
/* This function deletes element with given value from hash table.
The hash table entry value will be `DELETED_ENTRY' after the
function call. Naturally the hash table must already exist. Hash
table entry for given value should be not empty (or deleted). */
void
remove_element_from_hash_table_entry (htab, element)
hash_table_t htab;
hash_table_entry_t element;
{
hash_table_entry_t *entry_ptr;
entry_ptr = find_hash_table_entry (htab, element, 0);
*entry_ptr = DELETED_ENTRY;
htab->number_of_deleted_elements++;
}
/* This function clears a specified slot in a hash table.
It is useful when you've already done the lookup and don't want to
do it again. */
void
clear_hash_table_slot (htab, slot)
hash_table_t htab;
hash_table_entry_t *slot;
{
if (slot < htab->entries || slot >= htab->entries + htab->size
|| *slot == EMPTY_ENTRY || *slot == DELETED_ENTRY)
abort ();
*slot = DELETED_ENTRY;
htab->number_of_deleted_elements++;
}
/* This function scans over the entire hash table calling
CALLBACK for each live entry. If CALLBACK returns false,
the iteration stops. INFO is passed as CALLBACK's second
argument. */
void
traverse_hash_table (htab, callback, info)
hash_table_t htab;
int (*callback) PARAMS ((hash_table_entry_t, void *));
void *info;
{
hash_table_entry_t *entry_ptr;
for (entry_ptr = htab->entries; entry_ptr < htab->entries + htab->size;
entry_ptr++)
if (*entry_ptr != EMPTY_ENTRY && *entry_ptr != DELETED_ENTRY)
if (!callback (*entry_ptr, info))
break;
}
/* The following function returns current size of given hash table. */
size_t
hash_table_size (htab)
hash_table_t htab;
{
return htab->size;
}
/* The following function returns current number of elements in given
hash table. */
size_t
hash_table_elements_number (htab)
hash_table_t htab;
{
return htab->number_of_elements - htab->number_of_deleted_elements;
}
/* The following function returns number of percents of fixed
collisions during all work with given hash table. */
int
hash_table_collisions (htab)
hash_table_t htab;
{
int searches;
searches = htab->searches;
if (searches == 0)
searches++;
return htab->collisions * 100 / searches;
}
/* The following function returns number of percents of fixed
collisions during all work with all hash tables. */
int
all_hash_table_collisions ()
{
int searches;
searches = all_searches;
if (searches == 0)
searches++;
return all_collisions * 100 / searches;
}

View File

@ -10,7 +10,7 @@
OBJS=bcopy.obj,bcmp.obj,getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\
getopt1.obj,cplus-dem.obj,strncasecmp.obj,strcasecmp.obj,strdup.obj,\
concat.obj,getruntime.obj,getpagesize.obj,alloca.obj,xstrerror.obj,\
xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj
xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj
ifeq ($(CC),gcc)
CFLAGS=/include=([],[-.include])

View File

@ -1,6 +1,6 @@
/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it.
Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Copyright (C) 1996-2000 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
@ -29,6 +29,9 @@ Boston, MA 02111-1307, USA. */
#include <stdio.h>
#include <errno.h>
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@ -52,10 +55,6 @@ Boston, MA 02111-1307, USA. */
#include "libiberty.h"
#if !defined (__CYGWIN__) && defined (__CYGWIN32__)
#define __CYGWIN__ 1
#endif
/* stdin file number. */
#define STDIN_FILE_NO 0
@ -160,6 +159,8 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
FILE *argfile;
int i, el = flags & PEXECUTE_SEARCH ? 4 : 0;
if (temp_base == 0)
temp_base = choose_temp_base ();
scmd = (char *) xmalloc (strlen (program) + strlen (temp_base) + 6 + el);
rf = scmd + strlen(program) + 2 + el;
sprintf (scmd, "%s%s @%s.gp", program,
@ -234,7 +235,7 @@ pwait (pid, status, flags)
#endif /* MSDOS */
#if defined (_WIN32) && ! defined (__UWIN__)
#if defined (_WIN32) && ! defined (_UWIN)
#include <process.h>
@ -281,6 +282,45 @@ fix_argv (argvec)
argvec[i] = temp;
}
for (i = 0; argvec[i] != 0; i++)
{
if (strpbrk (argvec[i], " \t"))
{
int len, trailing_backslash;
char *temp;
len = strlen (argvec[i]);
trailing_backslash = 0;
/* There is an added complication when an arg with embedded white
space ends in a backslash (such as in the case of -iprefix arg
passed to cpp). The resulting quoted strings gets misinterpreted
by the command interpreter -- it thinks that the ending quote
is escaped by the trailing backslash and things get confused.
We handle this case by escaping the trailing backslash, provided
it was not escaped in the first place. */
if (len > 1
&& argvec[i][len-1] == '\\'
&& argvec[i][len-2] != '\\')
{
trailing_backslash = 1;
++len; /* to escape the final backslash. */
}
len += 2; /* and for the enclosing quotes. */
temp = xmalloc (len + 1);
temp[0] = '"';
strcpy (temp + 1, argvec[i]);
if (trailing_backslash)
temp[len-2] = '\\';
temp[len-1] = '"';
temp[len] = '\0';
argvec[i] = temp;
}
}
return (const char * const *) argvec;
}
#endif /* __CYGWIN__ */
@ -423,7 +463,7 @@ pwait (pid, status, flags)
#endif /* __CYGWIN__ */
}
#endif /* _WIN32 && ! __UWIN__ */
#endif /* _WIN32 && ! _UWIN */
#ifdef OS2
@ -606,7 +646,7 @@ pfinish ()
/* include for Unix-like environments but not for Dos-like environments */
#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
&& ! (defined (_WIN32) && ! defined (__UWIN__))
&& ! (defined (_WIN32) && ! defined (_UWIN))
extern int execv ();
extern int execvp ();
@ -735,4 +775,4 @@ pwait (pid, status, flags)
return pid;
}
#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! (_WIN32 && ! __UWIN__) */
#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! (_WIN32 && ! _UWIN) */

68
libiberty/putenv.c Normal file
View File

@ -0,0 +1,68 @@
/* Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc.
This file based on putenv.c in the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#if defined (_AIX) && !defined (__GNUC__)
#pragma alloca
#endif
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include "ansidecl.h"
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#endif
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
#else
# ifndef alloca
# ifdef __GNUC__
# define alloca __builtin_alloca
# else
extern char *alloca ();
# endif /* __GNUC__ */
# endif /* alloca */
#endif /* HAVE_ALLOCA_H */
/* Below this point, it's verbatim code from the glibc-2.0 implementation */
/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
int
putenv (string)
const char *string;
{
const char *const name_end = strchr (string, '=');
if (name_end)
{
char *name = (char *) alloca (name_end - string + 1);
memcpy (name, string, name_end - string);
name[name_end - string] = '\0';
return setenv (name, name_end + 1, 1);
}
unsetenv (string);
return 0;
}

View File

@ -2,17 +2,30 @@
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*

163
libiberty/setenv.c Normal file
View File

@ -0,0 +1,163 @@
/* Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc.
This file based on setenv.c in the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include "ansidecl.h"
#include <sys/types.h> /* For `size_t' */
#include <stdio.h> /* For `NULL' */
#include <errno.h>
#if !defined(errno) && !defined(HAVE_ERRNO_DECL)
extern int errno;
#endif
#define __set_errno(ev) ((errno) = (ev))
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#if HAVE_STRING_H
# include <string.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#define __environ environ
#ifndef HAVE_ENVIRON_DECL
extern char **environ;
#endif
/* LOCK and UNLOCK are defined as no-ops. This makes the libiberty
* implementation MT-Unsafe. */
#define LOCK
#define UNLOCK
/* Below this point, it's verbatim code from the glibc-2.0 implementation */
/* If this variable is not a null pointer we allocated the current
environment. */
static char **last_environ;
int
setenv (name, value, replace)
const char *name;
const char *value;
int replace;
{
register char **ep;
register size_t size;
const size_t namelen = strlen (name);
const size_t vallen = strlen (value) + 1;
LOCK;
size = 0;
if (__environ != NULL)
for (ep = __environ; *ep != NULL; ++ep)
if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
break;
else
++size;
if (__environ == NULL || *ep == NULL)
{
char **new_environ;
if (__environ == last_environ && __environ != NULL)
/* We allocated this space; we can extend it. */
new_environ = (char **) realloc (last_environ,
(size + 2) * sizeof (char *));
else
new_environ = (char **) malloc ((size + 2) * sizeof (char *));
if (new_environ == NULL)
{
UNLOCK;
return -1;
}
new_environ[size] = malloc (namelen + 1 + vallen);
if (new_environ[size] == NULL)
{
free ((char *) new_environ);
__set_errno (ENOMEM);
UNLOCK;
return -1;
}
if (__environ != last_environ)
memcpy ((char *) new_environ, (char *) __environ,
size * sizeof (char *));
memcpy (new_environ[size], name, namelen);
new_environ[size][namelen] = '=';
memcpy (&new_environ[size][namelen + 1], value, vallen);
new_environ[size + 1] = NULL;
last_environ = __environ = new_environ;
}
else if (replace)
{
size_t len = strlen (*ep);
if (len + 1 < namelen + 1 + vallen)
{
/* The existing string is too short; malloc a new one. */
char *new = malloc (namelen + 1 + vallen);
if (new == NULL)
{
UNLOCK;
return -1;
}
*ep = new;
}
memcpy (*ep, name, namelen);
(*ep)[namelen] = '=';
memcpy (&(*ep)[namelen + 1], value, vallen);
}
UNLOCK;
return 0;
}
void
unsetenv (name)
const char *name;
{
const size_t len = strlen (name);
char **ep;
LOCK;
for (ep = __environ; *ep; ++ep)
if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
{
/* Found it. Remove this pointer by moving later ones back. */
char **dp = ep;
do
dp[0] = dp[1];
while (*dp++);
/* Continue the loop in case NAME appears again. */
}
UNLOCK;
}

View File

@ -1,5 +1,5 @@
/* A splay-tree datatype.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 1999 Free Software Foundation, Inc.
Contributed by Mark Mitchell (mark@markmitchell.com).
This file is part of GNU CC.
@ -235,7 +235,7 @@ splay_tree_new (compare_fn, delete_key_fn, delete_value_fn)
splay_tree_delete_key_fn delete_key_fn;
splay_tree_delete_value_fn delete_value_fn;
{
splay_tree sp = (splay_tree) xmalloc (sizeof (struct splay_tree));
splay_tree sp = (splay_tree) xmalloc (sizeof (struct splay_tree_s));
sp->root = 0;
sp->comp = compare_fn;
sp->delete_key = delete_key_fn;
@ -256,15 +256,15 @@ splay_tree_delete (sp)
/* Insert a new node (associating KEY with DATA) into SP. If a
previous node with the indicated KEY exists, its data is replaced
with the new value. */
with the new value. Returns the new node. */
void
splay_tree_node
splay_tree_insert (sp, key, value)
splay_tree sp;
splay_tree_key key;
splay_tree_value value;
{
int comparison;
int comparison = 0;
splay_tree_splay (sp, key);
@ -284,7 +284,7 @@ splay_tree_insert (sp, key, value)
/* Create a new node, and insert it at the root. */
splay_tree_node node;
node = (splay_tree_node) xmalloc (sizeof (struct splay_tree_node));
node = (splay_tree_node) xmalloc (sizeof (struct splay_tree_node_s));
node->key = key;
node->value = value;
@ -305,6 +305,8 @@ splay_tree_insert (sp, key, value)
sp->root = node;
}
return sp->root;
}
/* Lookup KEY in SP, returning VALUE if present, and NULL

View File

@ -10,10 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.

View File

@ -10,10 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
@ -91,7 +88,7 @@ strtoul(nptr, endptr, base)
break;
if (c >= base)
break;
if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
any = -1;
else {
any = 1;

View File

@ -0,0 +1,75 @@
#
# Makefile
# Copyright (C) 1999
# Free Software Foundation
#
# This file is part of the libiberty library.
# Libiberty is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# Libiberty 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with libiberty; see the file COPYING.LIB. If not,
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# This file was written by Tom Tromey <tromey@cygnus.com>.
#
# Makefile for libiberty/testsuite directory
#
srcdir = @srcdir@
VPATH = @srcdir@
SHELL = @SHELL@
CC = @CC@
CFLAGS = @CFLAGS@
LIBCFLAGS = $(CFLAGS)
# Multilib support variables.
MULTISRCTOP =
INCDIR=$(srcdir)/../$(MULTISRCTOP)../include
all:
check: @CHECK@
# Run some tests of the demangler.
check-cplus-dem: test-filter $(srcdir)/demangle-expected
$(SHELL) $(srcdir)/regress-demangle $(srcdir)/demangle-expected
# Note that we just hard-code prepends_underscore to 0. This doesn't
# matter since any particular test can override the default if need
# be.
TEST_COMPILE = $(CC) @DEFS@ $(LIBCFLAGS) -I.. -I$(INCDIR) $(HDEFINES)
test-filter: $(srcdir)/../cplus-dem.c
echo 'int prepends_underscore = 0;' > test-us.c
$(TEST_COMPILE) -o test-filter -DMAIN -DVERSION='"none"' @DEFS@ \
$(srcdir)/../cplus-dem.c test-us.c -L.. -liberty
# Standard (either GNU or Cygnus) rules we don't use.
info install-info clean-info dvi install etags tags installcheck:
# The standard clean rules.
mostlyclean:
rm -f test-us.c test-filter
clean: mostlyclean
distclean: clean
rm -f Makefile
maintainer-clean realclean: distclean
Makefile: $(srcdir)/Makefile.in ../config.status
CONFIG_FILES=testsuite/Makefile CONFIG_HEADERS= \
cd .. && $(SHELL) ./config.status

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
#! /bin/sh
# Run a regression test for the demangler.
# Usage: regress-demangle TEST-FILE
failures=0
count=0
sed -e '/^#/ d' "$1" | (
while read type; do
read mangled
read demangled
x="`echo $mangled | ./test-filter $type`"
count=`expr $count + 1`
if test "x$x" != "x$demangled"; then
failures=`expr $failures + 1`
echo "FAIL: $type $mangled"
fi
done
if test $failures -eq 0; then
echo "All $count tests passed"
else
echo "$failures of $count tests failed"
fi
test $failures -eq 0
)

View File

@ -1,7 +1,7 @@
#include <stdio.h>
#ifndef L_tmpnam
#define L_tmpname 100
#define L_tmpnam 100
#endif
#ifndef P_tmpdir
#define P_tmpdir "/usr/tmp"

View File

@ -105,6 +105,7 @@ int_vasprintf (result, format, args)
(void) va_arg (ap, char *);
break;
}
p++;
}
}
#ifdef TEST

View File

@ -15,7 +15,7 @@ $! manually copied from Makefile.in
$ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
+ "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
+ "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
+ "xatexit.o xexit.o xmalloc.o xstrdup.o xstrerror.o"
+ "xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o"
$! anything not caught by link+search of dummy.* should be added here
$ EXTRA_OFILES = ""
$!

View File

@ -43,26 +43,22 @@ PTR sbrk PARAMS ((ptrdiff_t));
/* The program name if set. */
static const char *name = "";
#if !defined (__CYGWIN__) && defined (__CYGWIN32__)
#define __CYGWIN__ 1
#endif
#if ! defined (_WIN32) || defined (__CYGWIN__) || defined (__UWIN__)
#ifdef HAVE_SBRK
/* The initial sbrk, set when the program name is set. Not used for win32
ports other than cygwin32. */
static char *first_break = NULL;
#endif /* ! _WIN32 || __CYGWIN __ || __UWIN__ */
#endif /* HAVE_SBRK */
void
xmalloc_set_program_name (s)
const char *s;
{
name = s;
#if ! defined (_WIN32) || defined (__CYGWIN__) || defined (__UWIN__)
#ifdef HAVE_SBRK
/* Win32 ports other than cygwin32 don't have brk() */
if (first_break == NULL)
first_break = (char *) sbrk (0);
#endif /* ! _WIN32 || __CYGWIN __ || __UWIN__ */
#endif /* HAVE_SBRK */
}
PTR
@ -76,7 +72,7 @@ xmalloc (size)
newmem = malloc (size);
if (!newmem)
{
#if ! defined (_WIN32) || defined (__CYGWIN__) || defined (__UWIN__)
#ifdef HAVE_SBRK
extern char **environ;
size_t allocated;
@ -85,15 +81,15 @@ xmalloc (size)
else
allocated = (char *) sbrk (0) - (char *) &environ;
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes after allocating %lu bytes\n",
"\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size, (unsigned long) allocated);
#else
#else /* HAVE_SBRK */
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes\n",
"\n%s%sCannot allocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size);
#endif /* ! _WIN32 || __CYGWIN __ || __UWIN__ */
#endif /* HAVE_SBRK */
xexit (1);
}
return (newmem);
@ -111,7 +107,7 @@ xcalloc (nelem, elsize)
newmem = calloc (nelem, elsize);
if (!newmem)
{
#if ! defined (_WIN32) || defined (__CYGWIN__)
#ifdef HAVE_SBRK
extern char **environ;
size_t allocated;
@ -120,15 +116,15 @@ xcalloc (nelem, elsize)
else
allocated = (char *) sbrk (0) - (char *) &environ;
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes after allocating %lu bytes\n",
"\n%s%sCannot allocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) (nelem * elsize), (unsigned long) allocated);
#else
#else /* HAVE_SBRK */
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes\n",
"\n%s%sCannot allocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) (nelem * elsize));
#endif /* ! _WIN32 || __CYGWIN __ */
#endif /* HAVE_SBRK */
xexit (1);
}
return (newmem);
@ -149,7 +145,7 @@ xrealloc (oldmem, size)
newmem = realloc (oldmem, size);
if (!newmem)
{
#ifndef __MINGW32__
#ifdef HAVE_SBRK
extern char **environ;
size_t allocated;
@ -158,15 +154,15 @@ xrealloc (oldmem, size)
else
allocated = (char *) sbrk (0) - (char *) &environ;
fprintf (stderr,
"\n%s%sCan not reallocate %lu bytes after allocating %lu bytes\n",
"\n%s%sCannot reallocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size, (unsigned long) allocated);
#else
#else /* HAVE_SBRK */
fprintf (stderr,
"\n%s%sCan not reallocate %lu bytes\n",
"\n%s%sCannot reallocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size);
#endif /* __MINGW32__ */
#endif /* HAVE_SBRK */
xexit (1);
}
return (newmem);

22
libiberty/xmemdup.c Normal file
View File

@ -0,0 +1,22 @@
/* xmemdup.c -- Duplicate a memory buffer, using xcalloc.
This trivial function is in the public domain.
Jeff Garzik, September 1999. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "ansidecl.h"
#include "libiberty.h"
#include <sys/types.h> /* For size_t. */
PTR
xmemdup (input, copy_size, alloc_size)
const PTR input;
size_t copy_size;
size_t alloc_size;
{
PTR output = xcalloc (1, alloc_size);
memcpy (output, input, copy_size);
return output;
}

View File

@ -2,6 +2,7 @@
This trivial function is in the public domain.
Ian Lance Taylor, Cygnus Support, December 1995. */
#include <sys/types.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif