import libiberty from egcs
authorIan Lance Taylor <ian@airs.com>
Tue, 22 Feb 2000 15:59:20 +0000 (15:59 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 22 Feb 2000 15:59:20 +0000 (15:59 +0000)
33 files changed:
libiberty/ChangeLog
libiberty/Makefile.in
libiberty/argv.c
libiberty/basename.c
libiberty/calloc.c
libiberty/choose-temp.c
libiberty/config.in
libiberty/config.table
libiberty/config/mh-openedition [new file with mode: 0644]
libiberty/configure
libiberty/configure.in
libiberty/cplus-dem.c
libiberty/getcwd.c
libiberty/getpwd.c [new file with mode: 0644]
libiberty/getruntime.c
libiberty/hashtab.c [new file with mode: 0644]
libiberty/makefile.vms
libiberty/pexecute.c
libiberty/putenv.c [new file with mode: 0644]
libiberty/random.c
libiberty/setenv.c [new file with mode: 0644]
libiberty/splay-tree.c
libiberty/strtol.c
libiberty/strtoul.c
libiberty/testsuite/Makefile.in [new file with mode: 0644]
libiberty/testsuite/demangle-expected [new file with mode: 0644]
libiberty/testsuite/regress-demangle [new file with mode: 0755]
libiberty/tmpnam.c
libiberty/vasprintf.c
libiberty/vmsbuild.com
libiberty/xmalloc.c
libiberty/xmemdup.c [new file with mode: 0644]
libiberty/xstrdup.c

index 7032febe63051233da28db38890af06eafb8614b..a0b4ed39d503cebd7b6f1be8f8b56f7b30e54342 100644 (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:
        * 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
        * 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
        (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>
+
+       * testsuite/regress-demangle: New file.
+       * testsuite/demangle-expected: New file.
 
-       * xmalloc.c, pexecute.c: Define __CYGWIN__ when being compiled
-       with old __CYGWIN32__ compiler.
+       * 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>
 
index b1689ba14fde55eea3d7234ec289e48dc1d71e88..c6eb4668e20d38c8badb46904a7f67168d4ae18d 100644 (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
index 85c17e930eef7f6ad9f38324b14a605f6cace923..f596ffd0110a033ed095cc989cdf9b900c1500b0 100644 (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__ */
 
index f544c853910c243cc58302176f22fcd431ff6b90..7698f06f8ae4675ab99c4a29866c40c56c39b689 100644 (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;
 }
+
index c8c0a78a7a131a2e3d2f052e7d2107a455397c2a..334b18db86a41d303e013e5380028942e663752d 100644 (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"
  
index 49c738691550b14a1856c8119242b38fcd66bc7a..826d818ed62c3fa455d0a9ba433420f06933cac8 100644 (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;
index ba72d865eafd19d9f096a4cb1d73371d6e518416..6e64208da924e6b5e18914de22359ce7b6928363 100644 (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
 
 /* 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
 
 /* 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
 
 /* 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
 
index 5913b23ad6375811df4cc9802d50792afcdfe089..4e33746164c9f33983d691fa14753ace127d1cf1 100644 (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
diff --git a/libiberty/config/mh-openedition b/libiberty/config/mh-openedition
new file mode 100644 (file)
index 0000000..6e8e354
--- /dev/null
@@ -0,0 +1,3 @@
+HDEFINES = -D_ALL_SOURCE
+CC=c89
+
index 98407e7946cb236f5c149643d7aaea538f9a48d3..02c826d929e1bd9f4286626b720c0a4768015a46 100755 (executable)
@@ -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
index f02f03561e58443443e0deed4df5e2bfd6b8ca4a..cc1b2c2082b107fe8b8562a017f6cc776ff422c7 100644 (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
index 4be587a3bca3e2a857d3427f81acd1d114567c9b..52249d2b580c6d3809b1367ec51f15e089b81f86 100644 (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.
 
@@ -1326,87 +1356,155 @@ demangle_template_template_parm (work, mangled, tname)
 }
 
 static int
-demangle_integral_value (work, mangled, s)
+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;
 
-  if (**mangled == 'E')
+  success = 1;
+  string_appendn (s, "(", 1);
+  (*mangled)++;
+  while (success && **mangled != 'W' && **mangled != '\0')
     {
-      int need_operator = 0;
-
-      success = 1;
-      string_appendn (s, "(", 1);
-      (*mangled)++;
-      while (success && **mangled != 'W' && **mangled != '\0')
+      if (need_operator)
        {
-         if (need_operator)
-           {
-             size_t i;
-             size_t len;
+         size_t i;
+         size_t len;
 
-             success = 0;
+         success = 0;
 
-             len = strlen (*mangled);
+         len = strlen (*mangled);
 
-             for (i = 0;
-                  i < sizeof (optable) / sizeof (optable [0]);
-                  ++i)
-               {
-                 size_t l = strlen (optable[i].in);
+         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 (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 (!success)
+           break;
        }
-
-      if (**mangled != 'W')
-         success = 0;
       else
-       {
-         string_appendn (s, ")", 1);
-         (*mangled)++;
-       }
+       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;
+     const char** mangled;
+     string* s;
+{
+  int success;
+
+  if (**mangled == 'E')
+    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)++;
        }
+
+      /* Read the rest of the number.  */
+      value = consume_count_with_underscores (mangled);
+      if (value != -1)
+       {
+         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;
+       }
+    }
+
+  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)++;
-         success = 1;
        }
     }
 
-  return success;
+  return 1;
 }
 
 static int
@@ -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)
+         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, q);
-             free (q);
+             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);
            }
-         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')
-       success = 0;
-
-      /* Skip the digits.  */
-      while (isdigit ((unsigned char)*p))
-       ++p;
-
-      if (*p != '_')
+      (*mangled)++;
+      qualifiers = consume_count_with_underscores (mangled);
+      if (qualifiers == -1)
        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);
index 06d55c04f58699752e91909fef0e69ed2ede726f..47b1c1eec31e1c680bbb5deb42efb07e84f6a3f6 100644 (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;
diff --git a/libiberty/getpwd.c b/libiberty/getpwd.c
new file mode 100644 (file)
index 0000000..de6e039
--- /dev/null
@@ -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__ */
index 6e70773bd94bae14cc931c9f223f9a88046ae151..b855ea6e82f56c35ceb92b9a8724c4d571f6be66 100644 (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);
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
new file mode 100644 (file)
index 0000000..3f5b303
--- /dev/null
@@ -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;
+}
index b61b51290daff41e02d33fee173cd56b0e0821fd..6a7dd45718ee8c8b55357a716d690dbefacc0890 100644 (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])
index 6da97deee4b2a50c61a067d717860a39fecde74c..5003f1fe4d54261802b3c8a8a125e7bf6e6b5218 100644 (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) */
diff --git a/libiberty/putenv.c b/libiberty/putenv.c
new file mode 100644 (file)
index 0000000..9d56922
--- /dev/null
@@ -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;
+}
index 0a950709fceb8714c4e209552bc2e8def3fb2965..ef00da0a5ae2ffcd4d5ce925a2217c5d5c603d56 100644 (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.
  */
 
 /*
diff --git a/libiberty/setenv.c b/libiberty/setenv.c
new file mode 100644 (file)
index 0000000..eec1300
--- /dev/null
@@ -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;
+}
index b6bb5a6a8f05d9377ae3fcf4699ca352ed745bd4..22ea07d84adb5eada30579685da96e21d99f6841 100644 (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 
index 37d170660f2522a6380f4b82a06c158289a511e8..5467cc3e2e9b3d207b5d0f57fea20266b2976a12 100644 (file)
  * 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.
index ff6f2d6784dd9ad7c28b9c426fd7264271234f55..2ec32043e6b7b2d38882b64c4630d570a4d446c4 100644 (file)
  * 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;
diff --git a/libiberty/testsuite/Makefile.in b/libiberty/testsuite/Makefile.in
new file mode 100644 (file)
index 0000000..9d4ddd0
--- /dev/null
@@ -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
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
new file mode 100644 (file)
index 0000000..d3a1fe4
--- /dev/null
@@ -0,0 +1,2488 @@
+# This file holds test cases for the demangler.
+# Each test consists of three lines in succession.
+# The first line is arguments to pass to the test filter program.
+# The second line is the mangled string.
+# The third line is the expected output.
+# A line starting with `#' is ignore.
+# However blank lines in this file are NOT ignored.
+#
+--format=gnu
+AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
+ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)
+#
+--format=gnu
+ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
+ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)
+#
+--format=gnu
+AtEnd__13ivRubberGroup
+ivRubberGroup::AtEnd(void)
+#
+--format=gnu
+BgFilter__9ivTSolverP12ivInteractor
+ivTSolver::BgFilter(ivInteractor *)
+#
+--format=gnu
+Check__6UArrayi
+UArray::Check(int)
+#
+--format=gnu
+CoreConstDecls__8TextCodeR7ostream
+TextCode::CoreConstDecls(ostream &)
+#
+--format=gnu
+Detach__8StateVarP12StateVarView
+StateVar::Detach(StateVarView *)
+#
+--format=gnu
+Done__9ComponentG8Iterator
+Component::Done(Iterator)
+#
+--format=gnu
+Effect__11RelateManipR7ivEvent
+RelateManip::Effect(ivEvent &)
+#
+--format=gnu
+FindFixed__FRP4CNetP4CNet
+FindFixed(CNet *&, CNet *)
+#
+--format=gnu
+Fix48_abort__FR8twolongs
+Fix48_abort(twolongs &)
+#
+--format=gnu
+GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
+iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)
+#
+--format=gnu
+GetBgColor__C9ivPainter
+ivPainter::GetBgColor(void) const
+#
+--format=gnu
+InsertBody__15H_PullrightMenuii
+H_PullrightMenu::InsertBody(int, int)
+#
+--format=gnu
+InsertCharacter__9TextManipc
+TextManip::InsertCharacter(char)
+#
+--format=gnu
+InsertToplevel__7ivWorldP12ivInteractorT1
+ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)
+#
+--format=gnu
+InsertToplevel__7ivWorldP12ivInteractorT1iiUi
+ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)
+#
+--format=gnu
+IsAGroup__FP11GraphicViewP11GraphicComp
+IsAGroup(GraphicView *, GraphicComp *)
+#
+--format=gnu
+IsA__10ButtonCodeUl
+ButtonCode::IsA(unsigned long)
+#
+--format=gnu
+ReadName__FR7istreamPc
+ReadName(istream &, char *)
+#
+--format=gnu
+Redraw__13StringBrowseriiii
+StringBrowser::Redraw(int, int, int, int)
+#
+--format=gnu
+Rotate__13ivTransformerf
+ivTransformer::Rotate(float)
+#
+--format=gnu
+Rotated__C13ivTransformerf
+ivTransformer::Rotated(float) const
+#
+--format=gnu
+Round__Ff
+Round(float)
+#
+--format=gnu
+SetExport__16MemberSharedNameUi
+MemberSharedName::SetExport(unsigned int)
+#
+--format=gnu
+Set__14ivControlState13ControlStatusUi
+ivControlState::Set(ControlStatus, unsigned int)
+#
+--format=gnu
+Set__5DFacePcii
+DFace::Set(char *, int, int)
+#
+--format=gnu
+VConvert__9ivTSolverP12ivInteractorRP8TElementT2
+ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)
+#
+--format=gnu
+VConvert__9ivTSolverP7ivTGlueRP8TElement
+ivTSolver::VConvert(ivTGlue *, TElement *&)
+#
+--format=gnu
+VOrder__9ivTSolverUiRP12ivInteractorT2
+ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)
+#
+--format=gnu
+_10PageButton\$__both
+PageButton::__both
+#
+--format=gnu
+_3RNG\$singleMantissa
+RNG::singleMantissa
+#
+--format=gnu
+_5IComp\$_release
+IComp::_release
+#
+--format=gnu
+_\$_10BitmapComp
+BitmapComp::~BitmapComp(void)
+#
+--format=gnu
+_\$_9__io_defs
+__io_defs::~__io_defs(void)
+#
+--format=gnu
+_\$_Q23foo3bar
+foo::bar::~bar(void)
+#
+--format=gnu
+_\$_Q33foo3bar4bell
+foo::bar::bell::~bell(void)
+#
+--format=gnu
+__10ivTelltaleiP7ivGlyph
+ivTelltale::ivTelltale(int, ivGlyph *)
+#
+--format=gnu
+__10ivViewportiP12ivInteractorUi
+ivViewport::ivViewport(int, ivInteractor *, unsigned int)
+#
+--format=gnu
+__10ostrstream
+ostrstream::ostrstream(void)
+#
+--format=gnu
+__10ostrstreamPcii
+ostrstream::ostrstream(char *, int, int)
+#
+--format=gnu
+__11BitmapTablei
+BitmapTable::BitmapTable(int)
+#
+--format=gnu
+__12ViewportCodeP12ViewportComp
+ViewportCode::ViewportCode(ViewportComp *)
+#
+--format=gnu
+__12iv2_6_Borderii
+iv2_6_Border::iv2_6_Border(int, int)
+#
+--format=gnu
+__12ivBreak_Listl
+ivBreak_List::ivBreak_List(long)
+#
+--format=gnu
+__14iv2_6_MenuItemiP12ivInteractor
+iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)
+#
+--format=gnu
+__20DisplayList_IteratorR11DisplayList
+DisplayList_Iterator::DisplayList_Iterator(DisplayList &)
+#
+--format=gnu
+__3fooRT0
+foo::foo(foo &)
+#
+--format=gnu
+__3fooiN31
+foo::foo(int, int, int, int)
+#
+--format=gnu
+__3fooiRT0iT2iT2
+foo::foo(int, foo &, int, foo &, int, foo &)
+#
+--format=gnu
+__6KeyMapPT0
+KeyMap::KeyMap(KeyMap *)
+#
+--format=gnu
+__8ArrowCmdP6EditorUiUi
+ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)
+#
+--format=gnu
+__9F_EllipseiiiiP7Graphic
+F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)
+#
+--format=gnu
+__9FrameDataP9FrameCompi
+FrameData::FrameData(FrameComp *, int)
+#
+--format=gnu
+__9HVGraphicP9CanvasVarP7Graphic
+HVGraphic::HVGraphic(CanvasVar *, Graphic *)
+#
+--format=gnu
+__Q23foo3bar
+foo::bar::bar(void)
+#
+--format=gnu
+__Q33foo3bar4bell
+foo::bar::bell::bell(void)
+#
+--format=gnu
+__aa__3fooRT0
+foo::operator&&(foo &)
+#
+--format=gnu
+__aad__3fooRT0
+foo::operator&=(foo &)
+#
+--format=gnu
+__ad__3fooRT0
+foo::operator&(foo &)
+#
+--format=gnu
+__adv__3fooRT0
+foo::operator/=(foo &)
+#
+--format=gnu
+__aer__3fooRT0
+foo::operator^=(foo &)
+#
+--format=gnu
+__als__3fooRT0
+foo::operator<<=(foo &)
+#
+--format=gnu
+__amd__3fooRT0
+foo::operator%=(foo &)
+#
+--format=gnu
+__ami__3fooRT0
+foo::operator-=(foo &)
+#
+--format=gnu
+__aml__3FixRT0
+Fix::operator*=(Fix &)
+#
+--format=gnu
+__aml__5Fix16i
+Fix16::operator*=(int)
+#
+--format=gnu
+__aml__5Fix32RT0
+Fix32::operator*=(Fix32 &)
+#
+--format=gnu
+__aor__3fooRT0
+foo::operator|=(foo &)
+#
+--format=gnu
+__apl__3fooRT0
+foo::operator+=(foo &)
+#
+--format=gnu
+__ars__3fooRT0
+foo::operator>>=(foo &)
+#
+--format=gnu
+__as__3fooRT0
+foo::operator=(foo &)
+#
+--format=gnu
+__cl__3fooRT0
+foo::operator()(foo &)
+#
+--format=gnu
+__cl__6Normal
+Normal::operator()(void)
+#
+--format=gnu
+__cl__6Stringii
+String::operator()(int, int)
+#
+--format=gnu
+__cm__3fooRT0
+foo::operator, (foo &)
+#
+--format=gnu
+__co__3foo
+foo::operator~(void)
+#
+--format=gnu
+__dl__3fooPv
+foo::operator delete(void *)
+#
+--format=gnu
+__dv__3fooRT0
+foo::operator/(foo &)
+#
+--format=gnu
+__eq__3fooRT0
+foo::operator==(foo &)
+#
+--format=gnu
+__er__3fooRT0
+foo::operator^(foo &)
+#
+--format=gnu
+__ge__3fooRT0
+foo::operator>=(foo &)
+#
+--format=gnu
+__gt__3fooRT0
+foo::operator>(foo &)
+#
+--format=gnu
+__le__3fooRT0
+foo::operator<=(foo &)
+#
+--format=gnu
+__ls__3fooRT0
+foo::operator<<(foo &)
+#
+--format=gnu
+__ls__FR7ostreamPFR3ios_R3ios
+operator<<(ostream &, ios &(*)(ios &))
+#
+--format=gnu
+__ls__FR7ostreamR3Fix
+operator<<(ostream &, Fix &)
+#
+--format=gnu
+__lt__3fooRT0
+foo::operator<(foo &)
+#
+--format=gnu
+__md__3fooRT0
+foo::operator%(foo &)
+#
+--format=gnu
+__mi__3fooRT0
+foo::operator-(foo &)
+#
+--format=gnu
+__ml__3fooRT0
+foo::operator*(foo &)
+#
+--format=gnu
+__mm__3fooi
+foo::operator--(int)
+#
+--format=gnu
+__ne__3fooRT0
+foo::operator!=(foo &)
+#
+--format=gnu
+__nt__3foo
+foo::operator!(void)
+#
+--format=gnu
+__nw__3fooi
+foo::operator new(int)
+#
+--format=gnu
+__oo__3fooRT0
+foo::operator||(foo &)
+#
+--format=gnu
+__opPc__3foo
+foo::operator char *(void)
+#
+--format=gnu
+__opi__3foo
+foo::operator int(void)
+#
+--format=gnu
+__or__3fooRT0
+foo::operator|(foo &)
+#
+--format=gnu
+__pl__3fooRT0
+foo::operator+(foo &)
+#
+--format=gnu
+__pp__3fooi
+foo::operator++(int)
+#
+--format=gnu
+__rf__3foo
+foo::operator->(void)
+#
+--format=gnu
+__rm__3fooRT0
+foo::operator->*(foo &)
+#
+--format=gnu
+__rs__3fooRT0
+foo::operator>>(foo &)
+#
+--format=gnu
+_new_Fix__FUs
+_new_Fix(unsigned short)
+#
+--format=gnu
+_vt.foo
+foo virtual table
+#
+--format=gnu
+_vt.foo.bar
+foo::bar virtual table
+#
+--format=gnu
+_vt\$foo
+foo virtual table
+#
+--format=gnu
+_vt\$foo\$bar
+foo::bar virtual table
+#
+--format=gnu
+append__7ivGlyphPT0
+ivGlyph::append(ivGlyph *)
+#
+--format=gnu
+clearok__FP7_win_sti
+clearok(_win_st *, int)
+#
+--format=gnu
+complexfunc2__FPFPc_i
+complexfunc2(int (*)(char *))
+#
+--format=gnu
+complexfunc3__FPFPFPl_s_i
+complexfunc3(int (*)(short (*)(long *)))
+#
+--format=gnu
+complexfunc4__FPFPFPc_s_i
+complexfunc4(int (*)(short (*)(char *)))
+#
+--format=gnu
+complexfunc5__FPFPc_PFl_i
+complexfunc5(int (*(*)(char *))(long))
+#
+--format=gnu
+complexfunc6__FPFPi_PFl_i
+complexfunc6(int (*(*)(int *))(long))
+#
+--format=gnu
+complexfunc7__FPFPFPc_i_PFl_i
+complexfunc7(int (*(*)(int (*)(char *)))(long))
+#
+--format=gnu
+foo__FiN30
+foo(int, int, int, int)
+#
+--format=gnu
+foo__FiR3fooiT1iT1
+foo(int, foo &, int, foo &, int, foo &)
+#
+--format=gnu
+foo___3barl
+bar::foo_(long)
+#
+--format=gnu
+insert__15ivClippingStacklRP8_XRegion
+ivClippingStack::insert(long, _XRegion *&)
+#
+--format=gnu
+insert__16ChooserInfo_ListlR11ChooserInfo
+ChooserInfo_List::insert(long, ChooserInfo &)
+#
+--format=gnu
+insert__17FontFamilyRepListlRP15ivFontFamilyRep
+FontFamilyRepList::insert(long, ivFontFamilyRep *&)
+#
+--format=gnu
+leaveok__FP7_win_stc
+leaveok(_win_st *, char)
+#
+--format=gnu
+left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
+ivMFKit::left_mover(ivAdjustable *, ivStyle *) const
+#
+--format=gnu
+overload1arg__FSc
+overload1arg(signed char)
+#
+--format=gnu
+overload1arg__FUc
+overload1arg(unsigned char)
+#
+--format=gnu
+overload1arg__FUi
+overload1arg(unsigned int)
+#
+--format=gnu
+overload1arg__FUl
+overload1arg(unsigned long)
+#
+--format=gnu
+overload1arg__FUs
+overload1arg(unsigned short)
+#
+--format=gnu
+overload1arg__Fc
+overload1arg(char)
+#
+--format=gnu
+overload1arg__Fd
+overload1arg(double)
+#
+--format=gnu
+overload1arg__Ff
+overload1arg(float)
+#
+--format=gnu
+overload1arg__Fi
+overload1arg(int)
+#
+--format=gnu
+overload1arg__Fl
+overload1arg(long)
+#
+--format=gnu
+overload1arg__Fs
+overload1arg(short)
+#
+--format=gnu
+overload1arg__Fv
+overload1arg(void)
+#
+--format=gnu
+overloadargs__Fi
+overloadargs(int)
+#
+--format=gnu
+overloadargs__Fii
+overloadargs(int, int)
+#
+--format=gnu
+overloadargs__Fiii
+overloadargs(int, int, int)
+#
+--format=gnu
+overloadargs__Fiiii
+overloadargs(int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiii
+overloadargs(int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiii
+overloadargs(int, int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiiii
+overloadargs(int, int, int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiiiii
+overloadargs(int, int, int, int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiiiiii
+overloadargs(int, int, int, int, int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiiiiiii
+overloadargs(int, int, int, int, int, int, int, int, int, int)
+#
+--format=gnu
+overloadargs__Fiiiiiiiiiii
+overloadargs(int, int, int, int, int, int, int, int, int, int, int)
+#
+--format=gnu
+poke__8ivRasterUlUlffff
+ivRaster::poke(unsigned long, unsigned long, float, float, float, float)
+#
+--format=gnu
+polar__Fdd
+polar(double, double)
+#
+--format=gnu
+scale__13ivTransformerff
+ivTransformer::scale(float, float)
+#
+--format=gnu
+sgetn__7filebufPci
+filebuf::sgetn(char *, int)
+#
+--format=gnu
+shift__FP5_FrepiT0
+shift(_Frep *, int, _Frep *)
+#
+--format=gnu
+test__C6BitSeti
+BitSet::test(int) const
+#
+--format=gnu
+test__C6BitSetii
+BitSet::test(int, int) const
+#
+--format=gnu
+text_source__8Documentl
+Document::text_source(long)
+#
+--format=gnu
+variance__6Erlangd
+Erlang::variance(double)
+#
+--format=gnu
+view__14DocumentViewerP8ItemViewP11TabularItem
+DocumentViewer::view(ItemView *, TabularItem *)
+#
+--format=gnu
+xy_extents__11ivExtensionffff
+ivExtension::xy_extents(float, float, float, float)
+#
+--format=gnu
+zero__8osMemoryPvUi
+osMemory::zero(void *, unsigned int)
+#
+--format=gnu
+_2T4\$N
+T4::N
+#
+--format=gnu
+_Q22T42t1\$N
+T4::t1::N
+#
+--format=gnu
+get__2T1
+T1::get(void)
+#
+--format=gnu
+get__Q22T11a
+T1::a::get(void)
+#
+--format=gnu
+get__Q32T11a1b
+T1::a::b::get(void)
+#
+--format=gnu
+get__Q42T11a1b1c
+T1::a::b::c::get(void)
+#
+--format=gnu
+get__Q52T11a1b1c1d
+T1::a::b::c::d::get(void)
+#
+--format=gnu
+put__2T1i
+T1::put(int)
+#
+--format=gnu
+put__Q22T11ai
+T1::a::put(int)
+#
+--format=gnu
+put__Q32T11a1bi
+T1::a::b::put(int)
+#
+--format=gnu
+put__Q42T11a1b1ci
+T1::a::b::c::put(int)
+#
+--format=gnu
+put__Q52T11a1b1c1di
+T1::a::b::c::d::put(int)
+#
+--format=gnu
+bar__3fooPv
+foo::bar(void *)
+#
+--format=gnu
+bar__C3fooPv
+foo::bar(void *) const
+#
+--format=gnu
+__eq__3fooRT0
+foo::operator==(foo &)
+#
+--format=gnu
+__eq__C3fooR3foo
+foo::operator==(foo &) const
+#
+--format=gnu
+elem__t6vector1Zdi
+vector<double>::elem(int)
+#
+--format=gnu
+elem__t6vector1Zii
+vector<int>::elem(int)
+#
+--format=gnu
+__t6vector1Zdi
+vector<double>::vector(int)
+#
+--format=gnu
+__t6vector1Zii
+vector<int>::vector(int)
+#
+--format=gnu
+_\$_t6vector1Zdi
+vector<double>::~vector(int)
+#
+--format=gnu
+_\$_t6vector1Zii
+vector<int>::~vector(int)
+#
+--format=gnu
+__nw__t2T11ZcUi
+T1<char>::operator new(unsigned int)
+#
+--format=gnu
+__nw__t2T11Z1tUi
+T1<t>::operator new(unsigned int)
+#
+--format=gnu
+__dl__t2T11ZcPv
+T1<char>::operator delete(void *)
+#
+--format=gnu
+__dl__t2T11Z1tPv
+T1<t>::operator delete(void *)
+#
+--format=gnu
+__t2T11Zci
+T1<char>::T1(int)
+#
+--format=gnu
+__t2T11Zc
+T1<char>::T1(void)
+#
+--format=gnu
+__t2T11Z1ti
+T1<t>::T1(int)
+#
+--format=gnu
+__t2T11Z1t
+T1<t>::T1(void)
+#
+--format=gnu
+__Q2t4List1Z10VHDLEntity3Pix
+List<VHDLEntity>::Pix::Pix(void)
+#
+--format=gnu
+__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
+List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *)
+#
+--format=gnu
+__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
+List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &)
+#
+--format=gnu
+__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
+List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *)
+#
+--format=gnu
+__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
+List<VHDLEntity>::element::element(List<VHDLEntity>::element const &)
+#
+--format=gnu
+__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const
+#
+--format=gnu
+__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
+List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const
+#
+--format=gnu
+__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
+operator!=(void *, List<VHDLEntity>::Pix const &)
+#
+--format=gnu
+__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
+#
+--format=gnu
+__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
+List<VHDLEntity>::List(List<VHDLEntity> const &)
+#
+--format=gnu
+__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void)
+#
+--format=gnu
+__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix)
+#
+--format=gnu
+__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
+#
+--format=gnu
+nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
+VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const
+#
+--format=gnu
+next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
+List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const
+#
+--format=gnu
+_GLOBAL_\$D\$set
+global destructors keyed to set
+#
+--format=gnu
+_GLOBAL_\$I\$set
+global constructors keyed to set
+#
+--format=gnu
+__as__t5ListS1ZUiRCt5ListS1ZUi
+ListS<unsigned int>::operator=(ListS<unsigned int> const &)
+#
+--format=gnu
+__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
+ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const
+#
+--format=gnu
+__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
+SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const
+#
+--format=gnu
+__t10ListS_link1ZUiRCUiPT0
+ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *)
+#
+--format=gnu
+__t10ListS_link1ZUiRCt10ListS_link1ZUi
+ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &)
+#
+--format=gnu
+__t5ListS1ZUiRCt5ListS1ZUi
+ListS<unsigned int>::ListS(ListS<unsigned int> const &)
+#
+--format=gnu
+next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
+ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const
+#
+--format=gnu
+__ne__FPvRCQ2t5SetLS1ZUi3Vix
+operator!=(void *, SetLS<unsigned int>::Vix const &)
+#
+--format=gnu
+__t8ListElem1Z5LabelRt4List1Z5Label
+ListElem<Label>::ListElem(List<Label> &)
+#
+--format=gnu
+__t8BDDHookV1ZPcRCPc
+BDDHookV<char *>::BDDHookV(char *const &)
+#
+--format=gnu
+_vt\$t8BDDHookV1ZPc
+BDDHookV<char *> virtual table
+#
+--format=gnu
+__ne__FPvRCQ211BDDFunction4VixB
+operator!=(void *, BDDFunction::VixB const &)
+#
+--format=gnu
+__eq__FPvRCQ211BDDFunction4VixB
+operator==(void *, BDDFunction::VixB const &)
+#
+--format=gnu
+relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
+T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const
+#
+--format=lucid
+WS__FR7istream
+WS(istream &)
+#
+--format=lucid
+__aa__3fooFR3foo
+foo::operator&&(foo &)
+#
+--format=lucid
+__aad__3fooFR3foo
+foo::operator&=(foo &)
+#
+--format=lucid
+__ad__3fooFR3foo
+foo::operator&(foo &)
+#
+--format=lucid
+__adv__3fooFR3foo
+foo::operator/=(foo &)
+#
+--format=lucid
+__adv__7complexF7complex
+complex::operator/=(complex)
+#
+--format=lucid
+__aer__3fooFR3foo
+foo::operator^=(foo &)
+#
+--format=lucid
+__als__3fooFR3foo
+foo::operator<<=(foo &)
+#
+--format=lucid
+__amd__3fooFR3foo
+foo::operator%=(foo &)
+#
+--format=lucid
+__ami__3fooFR3foo
+foo::operator-=(foo &)
+#
+--format=lucid
+__amu__3fooFR3foo
+foo::operator*=(foo &)
+#
+--format=lucid
+__amu__7complexF7complex
+complex::operator*=(complex)
+#
+--format=lucid
+__aor__3fooFR3foo
+foo::operator|=(foo &)
+#
+--format=lucid
+__apl__3fooFR3foo
+foo::operator+=(foo &)
+#
+--format=lucid
+__ars__3fooFR3foo
+foo::operator>>=(foo &)
+#
+--format=lucid
+__as__18istream_withassignFP9streambuf
+istream_withassign::operator=(streambuf *)
+#
+--format=lucid
+__as__18istream_withassignFR7istream
+istream_withassign::operator=(istream &)
+#
+--format=lucid
+__as__3fooFR3foo
+foo::operator=(foo &)
+#
+--format=lucid
+__as__3iosFR3ios
+ios::operator=(ios &)
+#
+--format=lucid
+__cl__3fooFR3foo
+foo::operator()(foo &)
+#
+--format=lucid
+__cm__3fooFR3foo
+foo::operator, (foo &)
+#
+--format=lucid
+__co__3fooFv
+foo::operator~(void)
+#
+--format=lucid
+__ct__10istrstreamFPc
+istrstream::istrstream(char *)
+#
+--format=lucid
+__ct__10istrstreamFPci
+istrstream::istrstream(char *, int)
+#
+--format=lucid
+__ct__10ostrstreamFPciT2
+ostrstream::ostrstream(char *, int, int)
+#
+--format=lucid
+__ct__10ostrstreamFv
+ostrstream::ostrstream(void)
+#
+--format=lucid
+__ct__10smanip_intFPFR3iosi_R3iosi
+smanip_int::smanip_int(ios &(*)(ios &, int), int)
+#
+--format=lucid
+__ct__11fstreambaseFi
+fstreambase::fstreambase(int)
+#
+--format=lucid
+__ct__11fstreambaseFiPcT1
+fstreambase::fstreambase(int, char *, int)
+#
+--format=lucid
+__ct__11fstreambaseFv
+fstreambase::fstreambase(void)
+#
+--format=lucid
+__ct__11smanip_longFPFR3iosl_R3iosl
+smanip_long::smanip_long(ios &(*)(ios &, long), long)
+#
+--format=lucid
+__ct__11stdiostreamFP4FILE
+stdiostream::stdiostream(FILE *)
+#
+--format=lucid
+__ct__12strstreambufFPFl_PvPFPv_v
+strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))
+#
+--format=lucid
+__ct__12strstreambufFPUciT1
+strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)
+#
+--format=lucid
+__ct__12strstreambufFPciT1
+strstreambuf::strstreambuf(char *, int, char *)
+#
+--format=lucid
+__ct__12strstreambufFi
+strstreambuf::strstreambuf(int)
+#
+--format=lucid
+__ct__12strstreambufFv
+strstreambuf::strstreambuf(void)
+#
+--format=lucid
+__ct__13strstreambaseFPciT1
+strstreambase::strstreambase(char *, int, char *)
+#
+--format=lucid
+__ct__3fooFR3foo
+foo::foo(foo &)
+#
+--format=lucid
+__ct__3fooFi
+foo::foo(int)
+#
+--format=lucid
+__ct__3fooFiN31
+foo::foo(int, int, int, int)
+#
+--format=lucid
+__ct__3fooFiR3fooT1T2T1T2
+foo::foo(int, foo &, int, foo &, int, foo &)
+#
+--format=lucid
+__ct__3iosFP9streambuf
+ios::ios(streambuf *)
+#
+--format=lucid
+__ct__7filebufFiPcT1
+filebuf::filebuf(int, char *, int)
+#
+--format=lucid
+__ct__7fstreamFiPcT1
+fstream::fstream(int, char *, int)
+#
+--format=lucid
+__ct__7istreamFP9streambuf
+istream::istream(streambuf *)
+#
+--format=lucid
+__ct__7istreamFP9streambufiP7ostream
+istream::istream(streambuf *, int, ostream *)
+#
+--format=lucid
+__ct__7istreamFiPcT1
+istream::istream(int, char *, int)
+#
+--format=lucid
+__ct__7istreamFiT1P7ostream
+istream::istream(int, int, ostream *)
+#
+--format=lucid
+__ct__7ostreamFP9streambuf
+ostream::ostream(streambuf *)
+#
+--format=lucid
+__ct__7ostreamFiPc
+ostream::ostream(int, char *)
+#
+--format=lucid
+__ct__8ifstreamFiPcT1
+ifstream::ifstream(int, char *, int)
+#
+--format=lucid
+__ct__Q23foo3barFv
+foo::bar::bar(void)
+#
+--format=lucid
+__ct__Q33foo3bar4bellFv
+foo::bar::bell::bell(void)
+#
+--format=lucid
+__dl__3fooSFPv
+foo::operator delete(void *) static
+#
+--format=lucid
+__dl__FPv
+operator delete(void *)
+#
+--format=lucid
+__dt__10istrstreamFv
+istrstream::~istrstream(void)
+#
+--format=lucid
+__dt__Q23foo3barFv
+foo::bar::~bar(void)
+#
+--format=lucid
+__dt__Q33foo3bar4bellFv
+foo::bar::bell::~bell(void)
+#
+--format=lucid
+__dv__3fooFR3foo
+foo::operator/(foo &)
+#
+--format=lucid
+__dv__F7complexT1
+operator/(complex, complex)
+#
+--format=lucid
+__eq__3fooFR3foo
+foo::operator==(foo &)
+#
+--format=lucid
+__er__3fooFR3foo
+foo::operator^(foo &)
+#
+--format=lucid
+__ge__3fooFR3foo
+foo::operator>=(foo &)
+#
+--format=lucid
+__gt__3fooFR3foo
+foo::operator>(foo &)
+#
+--format=lucid
+__le__3fooFR3foo
+foo::operator<=(foo &)
+#
+--format=lucid
+__ls__3fooFR3foo
+foo::operator<<(foo &)
+#
+--format=lucid
+__ls__7ostreamFP9streambuf
+ostream::operator<<(streambuf *)
+#
+--format=lucid
+__ls__7ostreamFPFR3ios_R3ios
+ostream::operator<<(ios &(*)(ios &))
+#
+--format=lucid
+__ls__7ostreamFPv
+ostream::operator<<(void *)
+#
+--format=lucid
+__ls__7ostreamFUi
+ostream::operator<<(unsigned int)
+#
+--format=lucid
+__ls__7ostreamFUl
+ostream::operator<<(unsigned long)
+#
+--format=lucid
+__ls__7ostreamFd
+ostream::operator<<(double)
+#
+--format=lucid
+__ls__7ostreamFf
+ostream::operator<<(float)
+#
+--format=lucid
+__ls__7ostreamFi
+ostream::operator<<(int)
+#
+--format=lucid
+__ls__7ostreamFl
+ostream::operator<<(long)
+#
+--format=lucid
+__ls__FR7ostream7complex
+operator<<(ostream &, complex)
+#
+--format=lucid
+__lt__3fooFR3foo
+foo::operator<(foo &)
+#
+--format=lucid
+__md__3fooFR3foo
+foo::operator%(foo &)
+#
+--format=lucid
+__mi__3fooFR3foo
+foo::operator-(foo &)
+#
+--format=lucid
+__ml__3fooFR3foo
+foo::operator*(foo &)
+#
+--format=lucid
+__ml__F7complexT1
+operator*(complex, complex)
+#
+--format=lucid
+__mm__3fooFi
+foo::operator--(int)
+#
+--format=lucid
+__ne__3fooFR3foo
+foo::operator!=(foo &)
+#
+--format=lucid
+__nt__3fooFv
+foo::operator!(void)
+#
+--format=lucid
+__nw__3fooSFi
+foo::operator new(int) static
+#
+--format=lucid
+__nw__FUi
+operator new(unsigned int)
+#
+--format=lucid
+__nw__FUiPv
+operator new(unsigned int, void *)
+#
+--format=lucid
+__oo__3fooFR3foo
+foo::operator||(foo &)
+#
+--format=lucid
+__opPc__3fooFv
+foo::operator char *(void)
+#
+--format=lucid
+__opi__3fooFv
+foo::operator int(void)
+#
+--format=lucid
+__or__3fooFR3foo
+foo::operator|(foo &)
+#
+--format=lucid
+__pl__3fooFR3foo
+foo::operator+(foo &)
+#
+--format=lucid
+__pp__3fooFi
+foo::operator++(int)
+#
+--format=lucid
+__pt__3fooFv
+foo::operator->(void)
+#
+--format=lucid
+__rm__3fooFR3foo
+foo::operator->*(foo &)
+#
+--format=lucid
+__rs__3fooFR3foo
+foo::operator>>(foo &)
+#
+--format=lucid
+__rs__7istreamFP9streambuf
+istream::operator>>(streambuf *)
+#
+--format=lucid
+__rs__7istreamFPFR3ios_R3ios
+istream::operator>>(ios &(*)(ios &))
+#
+--format=lucid
+__rs__7istreamFPFR7istream_R7istream
+istream::operator>>(istream &(*)(istream &))
+#
+--format=lucid
+__rs__7istreamFPUc
+istream::operator>>(unsigned char *)
+#
+--format=lucid
+__rs__7istreamFPc
+istream::operator>>(char *)
+#
+--format=lucid
+__rs__7istreamFRUi
+istream::operator>>(unsigned int &)
+#
+--format=lucid
+__rs__7istreamFRUl
+istream::operator>>(unsigned long &)
+#
+--format=lucid
+__rs__7istreamFRUs
+istream::operator>>(unsigned short &)
+#
+--format=lucid
+__rs__7istreamFRd
+istream::operator>>(double &)
+#
+--format=lucid
+__rs__7istreamFRf
+istream::operator>>(float &)
+#
+--format=lucid
+__rs__7istreamFRi
+istream::operator>>(int &)
+#
+--format=lucid
+__rs__7istreamFRl
+istream::operator>>(long &)
+#
+--format=lucid
+__rs__7istreamFRs
+istream::operator>>(short &)
+#
+--format=lucid
+__rs__FR7istreamR7complex
+operator>>(istream &, complex &)
+#
+--format=lucid
+__vtbl__10istrstream
+istrstream virtual table
+#
+--format=lucid
+__vtbl__17ostream__iostream__19iostream_withassign
+iostream_withassign::ostream__iostream virtual table
+#
+--format=lucid
+__vtbl__3ios
+ios virtual table
+#
+--format=lucid
+__vtbl__3ios__13strstreambase
+strstreambase::ios virtual table
+#
+--format=lucid
+abs__F7complex
+abs(complex)
+#
+--format=lucid
+allocate__9streambufFv
+streambuf::allocate(void)
+#
+--format=lucid
+attach__11fstreambaseFi
+fstreambase::attach(int)
+#
+--format=lucid
+bitalloc__3iosSFv
+ios::bitalloc(void) static
+#
+--format=lucid
+chr__FiT1
+chr(int, int)
+#
+--format=lucid
+complex_error__FR11c_exception
+complex_error(c_exception &)
+#
+--format=lucid
+complexfunc2__FPFPc_i
+complexfunc2(int (*)(char *))
+#
+--format=lucid
+complexfunc3__FPFPFPl_s_i
+complexfunc3(int (*)(short (*)(long *)))
+#
+--format=lucid
+complexfunc4__FPFPFPc_s_i
+complexfunc4(int (*)(short (*)(char *)))
+#
+--format=lucid
+complexfunc5__FPFPc_PFl_i
+complexfunc5(int (*(*)(char *))(long))
+#
+--format=lucid
+complexfunc6__FPFPi_PFl_i
+complexfunc6(int (*(*)(int *))(long))
+#
+--format=lucid
+complexfunc7__FPFPFPc_i_PFl_i
+complexfunc7(int (*(*)(int (*)(char *)))(long))
+#
+--format=lucid
+complicated_put__7ostreamFc
+ostream::complicated_put(char)
+#
+--format=lucid
+conv10__FlPc
+conv10(long, char *)
+#
+--format=lucid
+conv16__FUlPc
+conv16(unsigned long, char *)
+#
+--format=lucid
+dec__FR3ios
+dec(ios &)
+#
+--format=lucid
+dec__Fli
+dec(long, int)
+#
+--format=lucid
+dofield__FP7ostreamPciT2T3
+dofield(ostream *, char *, int, char *, int)
+#
+--format=lucid
+flags__3iosFl
+ios::flags(long)
+#
+--format=lucid
+flags__3iosFv
+ios::flags(void)
+#
+--format=lucid
+foo__FiN31
+foo(int, int, int, int)
+#
+--format=lucid
+foo__FiR3fooT1T2T1T2
+foo(int, foo &, int, foo &, int, foo &)
+#
+--format=lucid
+foo___3barFl
+bar::foo_(long)
+#
+--format=lucid
+get__7istreamFPcic
+istream::get(char *, int, char)
+#
+--format=lucid
+get__7istreamFR9streambufc
+istream::get(streambuf &, char)
+#
+--format=lucid
+get_complicated__7istreamFRUc
+istream::get_complicated(unsigned char &)
+#
+--format=lucid
+get_complicated__7istreamFRc
+istream::get_complicated(char &)
+#
+--format=lucid
+getline__7istreamFPUcic
+istream::getline(unsigned char *, int, char)
+#
+--format=lucid
+getline__7istreamFPcic
+istream::getline(char *, int, char)
+#
+--format=lucid
+ignore__7istreamFiT1
+istream::ignore(int, int)
+#
+--format=lucid
+init__12strstreambufFPciT1
+strstreambuf::init(char *, int, char *)
+#
+--format=lucid
+init__3iosFP9streambuf
+ios::init(streambuf *)
+#
+--format=lucid
+initcount__13Iostream_init
+Iostream_init::initcount
+#
+--format=lucid
+ipfx__7istreamFi
+istream::ipfx(int)
+#
+--format=lucid
+ls_complicated__7ostreamFUc
+ostream::ls_complicated(unsigned char)
+#
+--format=lucid
+ls_complicated__7ostreamFc
+ostream::ls_complicated(char)
+#
+--format=lucid
+overload1arg__FSc
+overload1arg(signed char)
+#
+--format=lucid
+overload1arg__FUc
+overload1arg(unsigned char)
+#
+--format=lucid
+overload1arg__FUi
+overload1arg(unsigned int)
+#
+--format=lucid
+overload1arg__FUl
+overload1arg(unsigned long)
+#
+--format=lucid
+overload1arg__FUs
+overload1arg(unsigned short)
+#
+--format=lucid
+overload1arg__Fc
+overload1arg(char)
+#
+--format=lucid
+overload1arg__Fd
+overload1arg(double)
+#
+--format=lucid
+overload1arg__Ff
+overload1arg(float)
+#
+--format=lucid
+overload1arg__Fi
+overload1arg(int)
+#
+--format=lucid
+overload1arg__Fl
+overload1arg(long)
+#
+--format=lucid
+overload1arg__Fs
+overload1arg(short)
+#
+--format=lucid
+overload1arg__Fv
+overload1arg(void)
+#
+--format=lucid
+overloadargs__FiN21
+overloadargs(int, int, int)
+#
+--format=lucid
+overloadargs__FiN31
+overloadargs(int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN41
+overloadargs(int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN51
+overloadargs(int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN61
+overloadargs(int, int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN71
+overloadargs(int, int, int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN81
+overloadargs(int, int, int, int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN91
+overloadargs(int, int, int, int, int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiN91N11
+overloadargs(int, int, int, int, int, int, int, int, int, int, int)
+#
+--format=lucid
+overloadargs__FiT1
+overloadargs(int, int)
+#
+--format=lucid
+polar__FdT1
+polar(double, double)
+#
+--format=lucid
+pow__F7complexT1
+pow(complex, complex)
+#
+--format=lucid
+pow__F7complexd
+pow(complex, double)
+#
+--format=lucid
+pow__F7complexi
+pow(complex, int)
+#
+--format=lucid
+pow__Fd7complex
+pow(double, complex)
+#
+--format=lucid
+pstart__FPciT2
+pstart(char *, int, int)
+#
+--format=lucid
+put__7ostreamFc
+ostream::put(char)
+#
+--format=lucid
+read__7istreamFPci
+istream::read(char *, int)
+#
+--format=lucid
+resetiosflags__FR3iosl
+resetiosflags(ios &, long)
+#
+--format=lucid
+restore_errno__FRi
+restore_errno(int &)
+#
+--format=lucid
+rs_complicated__7istreamFRUc
+istream::rs_complicated(unsigned char &)
+#
+--format=lucid
+rs_complicated__7istreamFRc
+istream::rs_complicated(char &)
+#
+--format=lucid
+seekg__7istreamFl8seek_dir
+istream::seekg(long, seek_dir)
+#
+--format=lucid
+seekoff__12strstreambufFl8seek_diri
+strstreambuf::seekoff(long, seek_dir, int)
+#
+--format=lucid
+seekoff__9streambufFlQ2_3ios12ios_seek_diri
+streambuf::seekoff(long, ios::ios_seek_dir, int)
+#
+--format=lucid
+seekpos__9streambufFli
+streambuf::seekpos(long, int)
+#
+--format=lucid
+set_new_handler__FPFv_v
+set_new_handler(void (*)(void))
+#
+--format=lucid
+setb__9streambufFPcT1i
+streambuf::setb(char *, char *, int)
+#
+--format=lucid
+setb__FR3iosi
+setb(ios &, int)
+#
+--format=lucid
+setbuf__11fstreambaseFPci
+fstreambase::setbuf(char *, int)
+#
+--format=lucid
+setbuf__9streambufFPUci
+streambuf::setbuf(unsigned char *, int)
+#
+--format=lucid
+setbuf__9streambufFPciT2
+streambuf::setbuf(char *, int, int)
+#
+--format=lucid
+setf__3iosFlT1
+ios::setf(long, long)
+#
+--format=lucid
+setfill__FR3iosi
+setfill(ios &, int)
+#
+--format=lucid
+setg__9streambufFPcN21
+streambuf::setg(char *, char *, char *)
+#
+--format=lucid
+setp__9streambufFPcT1
+streambuf::setp(char *, char *)
+#
+--format=lucid
+tie__3iosFP7ostream
+ios::tie(ostream *)
+#
+--format=lucid
+uconv10__FUlPc
+uconv10(unsigned long, char *)
+#
+--format=lucid
+xget__7istreamFPc
+istream::xget(char *)
+#
+--format=lucid
+xsgetn__9streambufFPci
+streambuf::xsgetn(char *, int)
+#
+--format=arm
+__dt__21T5__pt__11_PFiPPdPv_iFv
+T5<int (*)(int, double **, void *)>::~T5(void)
+#
+--format=arm
+__ct__1cFi
+c::c(int)
+#
+--format=arm
+__dt__11T5__pt__2_iFv
+T5<int>::~T5(void)
+#
+--format=arm
+__dt__11T5__pt__2_cFv
+T5<char>::~T5(void)
+#
+--format=arm
+__ct__2T2Fi
+T2::T2(int)
+#
+--format=arm
+__dt__2T1Fv
+T1::~T1(void)
+#
+--format=arm
+__dt__12T5__pt__3_1xFv
+T5<x>::~T5(void)
+#
+--format=arm
+__dt__17T5__pt__8_PFcPv_iFv
+T5<int (*)(char, void *)>::~T5(void)
+#
+--format=arm
+__ct__21T5__pt__11_PFiPPdPv_iFi
+T5<int (*)(int, double **, void *)>::T5(int)
+#
+--format=arm
+__amd__FR2T2i
+operator%=(T2 &, int)
+#
+--format=arm
+__adv__FR2T2i
+operator/=(T2 &, int)
+#
+--format=arm
+__amu__FR2T2i
+operator*=(T2 &, int)
+#
+--format=arm
+__ami__FR2T2i
+operator-=(T2 &, int)
+#
+--format=arm
+__apl__FR2T2i
+operator+=(T2 &, int)
+#
+--format=arm
+__nw__2T1SFUi
+T1::operator new(unsigned int) static
+#
+--format=arm
+__dl__2T1SFPv
+T1::operator delete(void *) static
+#
+--format=arm
+put__2T7SFi
+T7::put(int) static
+#
+--format=arm
+__dl__12T5__pt__3_1xSFPv
+T5<x>::operator delete(void *) static
+#
+--format=arm
+h__FUc
+h(unsigned char)
+#
+--format=arm
+f__Fic
+f(int, char)
+#
+--format=arm
+h__FUi
+h(unsigned int)
+#
+--format=arm
+h__Fci
+h(char, int)
+#
+--format=arm
+h__FUl
+h(unsigned long)
+#
+--format=arm
+h__Fcl
+h(char, long)
+#
+--format=arm
+h__FUs
+h(unsigned short)
+#
+--format=arm
+h__Fcs
+h(char, short)
+#
+--format=arm
+X__12T5__pt__3_1x
+T5<x>::X
+#
+--format=arm
+__ct__11T5__pt__2_iFi
+T5<int>::T5(int)
+#
+--format=arm
+__ct__11T5__pt__2_cFi
+T5<char>::T5(int)
+#
+--format=arm
+h__FcT1
+h(char, char)
+#
+--format=arm
+f__Ficd
+f(int, char, double)
+#
+--format=arm
+__dl__17T5__pt__8_PFcPv_iSFPv
+T5<int (*)(char, void *)>::operator delete(void *) static
+#
+--format=arm
+X__17T5__pt__8_PFcPv_i
+T5<int (*)(char, void *)>::X
+#
+--format=arm
+__ct__12T5__pt__3_1xFi
+T5<x>::T5(int)
+#
+--format=arm
+__dl__21T5__pt__11_PFiPPdPv_iSFPv
+T5<int (*)(int, double **, void *)>::operator delete(void *) static
+#
+--format=arm
+__std__foo
+global destructors keyed to foo
+#
+--format=arm
+__sti__bar
+global constructors keyed to bar
+#
+--format=arm
+f__FicdPcPFci_v
+f(int, char, double, char *, void (*)(char, int))
+#
+--format=arm
+f__FicdPcPFic_v
+f(int, char, double, char *, void (*)(int, char))
+#
+--format=arm
+get__2T7SFv
+T7::get(void) static
+#
+--format=arm
+X__21T5__pt__11_PFiPPdPv_i
+T5<int (*)(int, double **, void *)>::X
+#
+--format=arm
+__dl__11T5__pt__2_iSFPv
+T5<int>::operator delete(void *) static
+#
+--format=arm
+__dl__11T5__pt__2_cSFPv
+T5<char>::operator delete(void *) static
+#
+--format=arm
+h__Fc
+h(char)
+#
+--format=arm
+h__Fd
+h(double)
+#
+--format=arm
+h__Ff
+h(float)
+#
+--format=arm
+h__Fi
+h(int)
+#
+--format=arm
+f__Fi
+f(int)
+#
+--format=arm
+h__Fl
+h(long)
+#
+--format=arm
+h__Fs
+h(short)
+#
+--format=arm
+X__11T5__pt__2_c
+T5<char>::X
+#
+--format=arm
+X__11T5__pt__2_i
+T5<int>::X
+#
+--format=arm
+__ct__17T5__pt__8_PFcPv_iFi
+T5<int (*)(char, void *)>::T5(int)
+#
+--format=arm
+f__FicdPc
+f(int, char, double, char *)
+#
+--format=arm
+__nw__FUi
+operator new(unsigned int)
+#
+--format=arm
+__ct__Q3_2T11a1bSFi
+T1::a::b::b(int) static
+#
+--format=arm
+__dt__Q3_2T11a1bSFi
+T1::a::b::~b(int) static
+#
+--format=arm
+put__Q3_2T11a1bSFi
+T1::a::b::put(int) static
+#
+--format=arm
+get__Q2_2T11aSFv
+T1::a::get(void) static
+#
+--format=arm
+put__2T1SFi
+T1::put(int) static
+#
+--format=arm
+put__Q5_2T11a1b1c1dSFi
+T1::a::b::c::d::put(int) static
+#
+--format=arm
+get__Q4_2T11a1b1cSFv
+T1::a::b::c::get(void) static
+#
+--format=arm
+put__Q2_2T11aSFi
+T1::a::put(int) static
+#
+--format=arm
+put__Q4_2T11a1b1cSFi
+T1::a::b::c::put(int) static
+#
+--format=arm
+get__Q3_2T11a1bSFv
+T1::a::b::get(void) static
+#
+--format=arm
+get__2T1SFv
+T1::get(void) static
+#
+--format=arm
+get__Q5_2T11a1b1c1dSFv
+T1::a::b::c::d::get(void) static
+#
+--format=arm
+__dt__11T1__pt__2_cFv
+T1<char>::~T1(void)
+#
+--format=arm
+__dt__12T1__pt__3_1tFv
+T1<t>::~T1(void)
+#
+--format=arm
+__dl__12T1__pt__3_1tSFPv
+T1<t>::operator delete(void *) static
+#
+--format=arm
+__ct__11T1__pt__2_cFi
+T1<char>::T1(int)
+#
+--format=arm
+__ct__11T1__pt__2_cFv
+T1<char>::T1(void)
+#
+--format=arm
+__ct__12T1__pt__3_1tFi
+T1<t>::T1(int)
+#
+--format=arm
+__ct__12T1__pt__3_1tFv
+T1<t>::T1(void)
+#
+--format=arm
+__dl__11T1__pt__2_cSFPv
+T1<char>::operator delete(void *) static
+#
+--format=arm
+bar__3fooFPv
+foo::bar(void *)
+#
+--format=arm
+bar__3fooCFPv
+foo::bar(void *) const
+#
+--format=arm
+__eq__3fooFR3foo
+foo::operator==(foo &)
+#
+--format=arm
+__eq__3fooCFR3foo
+foo::operator==(foo &) const
+#
+--format=arm
+elem__15vector__pt__2_dFi
+vector<double>::elem(int)
+#
+--format=arm
+elem__15vector__pt__2_iFi
+vector<int>::elem(int)
+#
+--format=arm
+__ct__15vector__pt__2_dFi
+vector<double>::vector(int)
+#
+--format=arm
+__ct__15vector__pt__2_iFi
+vector<int>::vector(int)
+#
+--format=arm
+__ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
+DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
+#
+--format=arm
+bar__3fooFiT16FooBar
+foo::bar(int, int, FooBar)
+#
+--format=arm
+bar__3fooFPiN51PdN37PcN211T1iN215
+foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
+#
+--format=hp
+__amd__FR2T2i
+operator%=(T2 &, int)
+#
+--format=hp
+__adv__FR2T2i
+operator/=(T2 &, int)
+#
+--format=hp
+__amu__FR2T2i
+operator*=(T2 &, int)
+#
+--format=hp
+__ami__FR2T2i
+operator-=(T2 &, int)
+#
+--format=hp
+__apl__FR2T2i
+operator+=(T2 &, int)
+#
+--format=hp
+__nw__2T1SFUi
+T1::operator new(unsigned int) static
+#
+--format=hp
+__dl__2T1SFPv
+T1::operator delete(void *) static
+#
+--format=hp
+put__2T7SFi
+T7::put(int) static
+#
+--format=hp
+h__FUc
+h(unsigned char)
+#
+--format=hp
+f__Fic
+f(int, char)
+#
+--format=hp
+h__FUi
+h(unsigned int)
+#
+--format=hp
+h__Fci
+h(char, int)
+#
+--format=hp
+h__FUl
+h(unsigned long)
+#
+--format=hp
+h__Fcl
+h(char, long)
+#
+--format=hp
+h__FUs
+h(unsigned short)
+#
+--format=hp
+h__Fcs
+h(char, short)
+#
+--format=hp
+h__FcT1
+h(char, char)
+#
+--format=hp
+f__Ficd
+f(int, char, double)
+#
+--format=hp
+f__FicdPcPFci_v
+f(int, char, double, char *, void (*)(char, int))
+#
+--format=hp
+f__FicdPcPFic_v
+f(int, char, double, char *, void (*)(int, char))
+#
+--format=hp
+get__2T7SFv
+T7::get(void) static
+#
+--format=hp
+h__Fc
+h(char)
+#
+--format=hp
+h__Fd
+h(double)
+#
+--format=hp
+h__Ff
+h(float)
+#
+--format=hp
+h__Fi
+h(int)
+#
+--format=hp
+f__Fi
+f(int)
+#
+--format=hp
+h__Fl
+h(long)
+#
+--format=hp
+h__Fs
+h(short)
+#
+--format=hp
+f__FicdPc
+f(int, char, double, char *)
+#
+--format=hp
+__nw__FUi
+operator new(unsigned int)
+#
+--format=hp
+__ct__Q3_2T11a1bSFi
+T1::a::b::b(int) static
+#
+--format=hp
+__dt__Q3_2T11a1bSFi
+T1::a::b::~b(int) static
+#
+--format=hp
+put__Q3_2T11a1bSFi
+T1::a::b::put(int) static
+#
+--format=hp
+get__Q2_2T11aSFv
+T1::a::get(void) static
+#
+--format=hp
+put__2T1SFi
+T1::put(int) static
+#
+--format=hp
+put__Q5_2T11a1b1c1dSFi
+T1::a::b::c::d::put(int) static
+#
+--format=hp
+get__Q4_2T11a1b1cSFv
+T1::a::b::c::get(void) static
+#
+--format=hp
+put__Q2_2T11aSFi
+T1::a::put(int) static
+#
+--format=hp
+put__Q4_2T11a1b1cSFi
+T1::a::b::c::put(int) static
+#
+--format=hp
+get__Q3_2T11a1bSFv
+T1::a::b::get(void) static
+#
+--format=hp
+get__2T1SFv
+T1::get(void) static
+#
+--format=hp
+get__Q5_2T11a1b1c1dSFv
+T1::a::b::c::d::get(void) static
+#
+--format=hp
+bar__3fooFPv
+foo::bar(void *)
+#
+--format=hp
+bar__3fooCFPv
+foo::bar(void *) const
+#
+--format=hp
+__eq__3fooFR3foo
+foo::operator==(foo &)
+#
+--format=hp
+__eq__3fooCFR3foo
+foo::operator==(foo &) const
+#
+--format=hp
+bar__3fooFiT16FooBar
+foo::bar(int, int, FooBar)
+#
+--format=hp
+bar__3fooFPiN51PdN37PcN211T1iN215
+foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
+#
+--format=hp
+__dt__2T5XTPFiPPdPv_i__Fv
+T5<int (*)(int, double **, void *)>::~T5(void)
+#
+--format=hp
+__ct__1cFi
+c::c(int)
+#
+--format=hp
+__dt__2T5XTi__Fv
+T5<int>::~T5(void)
+#
+--format=hp
+__dt__2T5XTc__Fv
+T5<char>::~T5(void)
+#
+--format=hp
+__ct__2T2Fi
+T2::T2(int)
+#
+--format=hp
+__dt__2T1Fv
+T1::~T1(void)
+#
+--format=hp
+__dt__2T5XT1x__Fv
+T5<x>::~T5(void)
+#
+--format=hp
+__dt__2T5XTPFcPv_i__Fv
+T5<int (*)(char, void *)>::~T5(void)
+#
+--format=hp
+__ct__2T5XTPFiPPdPv_i__Fi
+T5<int (*)(int, double **, void *)>::T5(int)
+#
+--format=hp
+__dl__2T5XT1x__SFPv
+T5<x>::operator delete(void *) static
+#
+--format=hp
+X__2T5XT1x
+T5<x>::X
+#
+--format=hp
+__ct__2T5XTi__Fi
+T5<int>::T5(int)
+#
+--format=hp
+__ct__2T5XTc__Fi
+T5<char>::T5(int)
+#
+--format=hp
+__dl__2T5XTPFcPv_i__SFPv
+T5<int (*)(char, void *)>::operator delete(void *) static
+#
+--format=hp
+X__2T5XTPFcPv_i
+T5<int (*)(char, void *)>::X
+#
+--format=hp
+__ct__2T5XT1x__Fi
+T5<x>::T5(int)
+#
+--format=hp
+__dl__2T5XTPFiPPdPv_i__SFPv
+T5<int (*)(int, double **, void *)>::operator delete(void *) static
+#
+--format=hp
+X__2T5XTPFiPPdPv_i
+T5<int (*)(int, double **, void *)>::X
+#
+--format=hp
+__dl__2T5XTi__SFPv
+T5<int>::operator delete(void *) static
+#
+--format=hp
+__dl__2T5XTc__SFPv
+T5<char>::operator delete(void *) static
+#
+--format=hp
+X__2T5XTc
+T5<char>::X
+#
+--format=hp
+X__2T5XTi
+T5<int>::X
+#
+--format=hp
+__ct__2T5XTPFcPv_i__Fi
+T5<int (*)(char, void *)>::T5(int)
+#
+--format=hp
+__dt__2T1XTc__Fv
+T1<char>::~T1(void)
+#
+--format=hp
+__dt__2T1XT1t__Fv
+T1<t>::~T1(void)
+#
+--format=hp
+__dl__2T1XT1t__SFPv
+T1<t>::operator delete(void *) static
+#
+--format=hp
+__ct__2T1XTc__Fi
+T1<char>::T1(int)
+#
+--format=hp
+__ct__2T1XTc__Fv
+T1<char>::T1(void)
+#
+--format=hp
+__ct__2T1XT1t__Fi
+T1<t>::T1(int)
+#
+--format=hp
+__ct__2T1XT1t__Fv
+T1<t>::T1(void)
+#
+--format=hp
+__dl__2T1XTc__SFPv
+T1<char>::operator delete(void *) static
+#
+--format=hp
+elem__6vectorXTd__Fi
+vector<double>::elem(int)
+#
+--format=hp
+elem__6vectorXTi__Fi
+vector<int>::elem(int)
+#
+--format=hp
+__ct__6vectorXTd__Fi
+vector<double>::vector(int)
+#
+--format=hp
+__ct__6vectorXTi__Fi
+vector<int>::vector(int)
+#
+--format=hp
+__ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
+DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
+#
+--format=hp
+elem__6vectorXTiUP34__Fi
+vector<int,34U>::elem(int)
+#
+--format=hp
+elem__6vectorXUP2701Td__Fi
+vector<2701U,double>::elem(int)
+#
+--format=hp
+elem__6vectorXTiSP334__Fi
+vector<int,334>::elem(int)
+#
+--format=hp
+elem__6vectorXTiSN67__Fi
+vector<int,-67>::elem(int)
+#
+--format=hp
+elem__6vectorXTiSM__SCFPPd
+vector<int,-2147483648>::elem(double **) static const
+#
+--format=hp
+elem__6vectorXTiSN67UP4000TRs__Fi
+vector<int,-67,4000U,short &>::elem(int)
+#
+--format=hp
+elem__6vectorXTiSN67TRdTFPv_i__Fi
+vector<int,-67,double &,int (void *)>::elem(int)
+#
+--format=hp
+X__6vectorXTiSN67TdTPvUP5TRs
+vector<int,-67,double,void *,5U,short &>::X
+#
+--format=hp
+elem__6vectorXTiA3foo__Fi
+vector<int,&foo>::elem(int)
+#
+--format=hp
+elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
+vector<int,&foo,void *,&Label>::elem(int, void **, void **)
+#
+--format=hp
+elem__6vectorXTiSN42A3foo__Fi
+vector<int,-42,&foo>::elem(int)
+#
+--format=hp
+__ct__2T5XTPFcPv_i__Fi_2
+T5<int (*)(char, void *)>::T5(int)
+#
+--format=hp
+__ct__2T5XTPFcPv_i__Fi_19
+T5<int (*)(char, void *)>::T5(int)
+#
+--format=hp
+f__FicdPcPFci_v_34
+f(int, char, double, char *, void (*)(char, int))
+#
+--format=hp
+spec__13Spec<#1,#1.*>XTiTPi_FPi
+Spec<int,int *>::spec(int *)
+#
+--format=hp
+spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi
+Spec<int,int &,int>::spec(int *)
+#
+--format=hp
+add__XTc_FcT1
+add<char>(char, char)
+#
+--format=hp
+add__XTcSP9A5label_FcPPlT1
+add<char,9,&label>(char, long **, char)
+#
+--format=hp
+add__XTPfTFPd_f_FcT1
+add<float *,float (double *)>(char, char)
+#
+--format=hp
+unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
+basic_string<char,string_char_traits<char>,allocator>::unLink(void)
+#
+# A regression test with no args.  This used to cause a segv.
+
+_Utf390_1__1_9223372036854775807__9223372036854775
+_Utf390_1__1_9223372036854775807__9223372036854775
+#
+--format=gnu
+call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output
+C<Test, Test::output> call<Test>(Test &)
+#
+--format=gnu
+fn__FPQ21n1cPMQ21n1cFPQ21n1c_i
+fn(n::c *, int (n::c::*)(n::c *))
+#
+--format=gnu
+f__FGt3Bar1i21i
+f(Bar<2>, i)
+#
+--format=gnu
+f__FGt3Bar1i_21_i
+f(Bar<21>, int)
+#
+--format=gnu
+f__FGt3Bar1i24XY_t
+f(Bar<2>, XY_t)
diff --git a/libiberty/testsuite/regress-demangle b/libiberty/testsuite/regress-demangle
new file mode 100755 (executable)
index 0000000..bd48ce9
--- /dev/null
@@ -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
+)
index c06146774252f76a134a6201f035a41998a01aad..8eb77e28c0be3927a889eda972df6390bdfe9cca 100644 (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"
index eeb80e661f7d028255d00db969406f8a2dff87b3..b959f5f9ca59c6699df5b2d7844644f7d0ff6c30 100644 (file)
@@ -105,6 +105,7 @@ int_vasprintf (result, format, args)
              (void) va_arg (ap, char *);
              break;
            }
+         p++;
        }
     }
 #ifdef TEST
index 4fede380bfd6d39a4741c39cdbb3654d0b44475d..497ea8974f2b9f013f2c0182d73f0cd0a9335454 100644 (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 = ""
 $!
index 1083790789d566df2aa34e1c64e576533ae49bf8..621c6d216c7aac9aa986679f0ed59d6de20d3d25 100644 (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);
diff --git a/libiberty/xmemdup.c b/libiberty/xmemdup.c
new file mode 100644 (file)
index 0000000..f780041
--- /dev/null
@@ -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;
+}
index e16aba08554b02af84c04f61a464a7f024185bf3..6f846cfea156849c0f8e3f22ccecfb67a54fa23a 100644 (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