summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2000-02-22 15:59:20 +0000
committerIan Lance Taylor <ian@airs.com>2000-02-22 15:59:20 +0000
commitbbde8fc09912c675acb6f01bf0195f508daadcd2 (patch)
tree80ff61110b6ba30aa05932d04176fae741d8a02d
parent924ed2ac9c2b5d4487bc0d37c18999f6c8232ee6 (diff)
downloadgdb-bbde8fc09912c675acb6f01bf0195f508daadcd2.tar.gz
import libiberty from egcs
-rw-r--r--libiberty/ChangeLog323
-rw-r--r--libiberty/Makefile.in95
-rw-r--r--libiberty/argv.c8
-rw-r--r--libiberty/basename.c39
-rw-r--r--libiberty/calloc.c3
-rw-r--r--libiberty/choose-temp.c10
-rw-r--r--libiberty/config.in21
-rw-r--r--libiberty/config.table3
-rw-r--r--libiberty/config/mh-openedition3
-rwxr-xr-xlibiberty/configure283
-rw-r--r--libiberty/configure.in55
-rw-r--r--libiberty/cplus-dem.c476
-rw-r--r--libiberty/getcwd.c10
-rw-r--r--libiberty/getpwd.c115
-rw-r--r--libiberty/getruntime.c4
-rw-r--r--libiberty/hashtab.c330
-rw-r--r--libiberty/makefile.vms2
-rw-r--r--libiberty/pexecute.c58
-rw-r--r--libiberty/putenv.c68
-rw-r--r--libiberty/random.c35
-rw-r--r--libiberty/setenv.c163
-rw-r--r--libiberty/splay-tree.c14
-rw-r--r--libiberty/strtol.c5
-rw-r--r--libiberty/strtoul.c7
-rw-r--r--libiberty/testsuite/Makefile.in75
-rw-r--r--libiberty/testsuite/demangle-expected2488
-rwxr-xr-xlibiberty/testsuite/regress-demangle28
-rw-r--r--libiberty/tmpnam.c2
-rw-r--r--libiberty/vasprintf.c1
-rw-r--r--libiberty/vmsbuild.com2
-rw-r--r--libiberty/xmalloc.c42
-rw-r--r--libiberty/xmemdup.c22
-rw-r--r--libiberty/xstrdup.c1
33 files changed, 4422 insertions, 369 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 7032febe630..a0b4ed39d50 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,286 @@
+2000-01-04 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * pexecute.c: Conditionally include string.h.
+ (fix_argv): Handle embedded whitespace in args for Mingw32.
+
+2000-01-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * configure.in (ac_libiberty_warn_cflags): Turn on warnings if
+ we're using gcc.
+
+ * Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@
+
+1999-12-27 Geoff Keating <geoffk@cygnus.com>
+
+ * vasprintf.c (int_vasprintf): Don't re-read the format character
+ as this mishandles strings like '%%s'.
+
+1999-12-05 Mark Mitchell <mark@codesourcery.com>
+
+ * splay-tree.c (splay_tree_new): Use struct splay_tree_node_s
+ rather than struct splay_tree_node.
+ (splay_tree_insert): Use struct splay_tree_s rather than struct
+ splay_tree.
+
+Sun Nov 28 00:59:39 1999 Philippe De Muyter <phdm@macqel.be>
+
+ * hashtab.c (sys/types.h): File included.
+
+1999-11-22 Jason Merrill <jason@casey.cygnus.com>
+
+ * strtoul.c, strtol.c, random.c: Remove advertising clause from
+ BSD license, pursuant with
+
+ ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
+
+Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com)
+
+ * hashtab.c: Include stdio.h.
+
+Mon Nov 8 09:23:41 1999 Jeffrey A Law (law@cygnus.com)
+
+ * hashtab.c (traverse_hash_table): Protect prototype with PARAMS.
+
+Tue Nov 2 03:23:13 1999 Philippe De Muyter <phdm@macqel.be>
+
+ * xstrdup (sys/types.h): Include this file.
+
+1999-10-28 Nathan Sidwell <nathan@acm.org>
+
+ * Makefile.in (SUBDIRS): New macro.
+ (mostlyclean, clean, distclean, maintainer-clean): Adjust to
+ avoid multiple subdirectory cleaning.
+ (*-subdir): Use SUBDIRS.
+
+1999-10-25 Jim Kingdon <http://developer.redhat.com/>
+
+ * cplus-dem.c: Move declarations of standard_symbol_characters and
+ hp_symbol_characters inside #ifdef MAIN to avoid compiler
+ warnings.
+
+1999-10-23 08:51 -0700 Zack Weinberg <zack@bitmover.com>
+
+ * hashtab.c (find_hash_table_entry): When returning a
+ DELETED_ENTRY slot, change it to EMPTY_ENTRY first.
+ (clear_hash_table_slot): New function which deletes an entry
+ by its position in the table, not its value.
+ (traverse_hash_table): New function which calls a hook
+ function for every live entry in the table.
+
+1999-10-19 Mark Mitchell <mark@codesourcery.com>
+
+ * cplus-dem.c (INTBUF_SIZE): New macro.
+ (string_append_template_idx): New function.
+ (demangle_expression): Likewise.
+ (demangle_integral_value): Use it.
+ (demangle_real_value): New function, split out from ...
+ (demangle_template_value_parm): ... here. Use
+ string_append_template_idx. Use demangle_real_value.
+ (demangle_template): Use string_append_template_idx.
+ (demangle_qualified): Use consume_count_with_underscores.
+ (get_count): Tweak formatting.
+ (do_type): Use string_append_template_idx.
+
+1999-10-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * calloc.c: Add a public domain notice.
+
+Mon Oct 18 02:30:47 1999 Philippe De Muyter <phdm@macqel.be>
+
+ * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly.
+
+Fri Oct 15 01:47:51 1999 Vladimir Makarov <vmakarov@loony.cygnus.com>
+
+ * Makefile.in (CFILES): Add hashtab.c
+ (REQUIRED_OFILES): Add hashtab.o
+ (hashtab.o): Add dependencies.
+ * hashtab.c: New file
+
+Wed Oct 13 01:16:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * basename.c (DIR_SEPARATOR): New macro.
+ (DIR_SEPARATOR_2): Likewise.
+ (HAVE_DOS_BASED_FILESYSTEM): Likewise.
+ (IS_DIR_SEPARATOR): Likewise.
+ (main): Handle MSDOS style pathname.
+
+1999-10-11 Mark Mitchell <mark@codesourcery.com>
+
+ * cplus-dem.c (do_type): Handle pointer to member types whose
+ enclosing classes have namespace scope.
+
+Sun Oct 10 01:23:50 1999 Marc Espie <espie@cvs.openbsd.org>
+
+ * config.table: Provide a backup shell for executing move-if-change.
+
+1999-10-02 Mark Mitchell <mark@codesourcery.com>
+
+ * xmalloc.c (xmalloc): Fix spelling error.
+ (xcalloc, xrealloc): Likewise.
+
+1999-10-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * cplus-dem.c (fancy_abort, demangle_integral_value,
+ demangle_arm_hp_template, recursively_demangle,
+ standard_symbol_characters, hp_symbol_characters, main): Add prototype.
+ (program_name, program_version, fatal): Constify a char*.
+ (usage, fatal): Mark with ATTRIBUTE_NORETURN.
+ (main): Call return, not exit.
+
+1999-09-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * choose-temp.c: Remove obsolete comment about gcc.
+ (make_temp_file): Constify a char*.
+
+Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * xmemdup.c: Include sys/types.h.
+
+1999-09-07 Jeff Garzik <jgarzik@pobox.com>
+
+ * xmemdup.c: New xmemdup function.
+ * Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co].
+
+Tue Sep 7 23:32:18 1999 Linas Vepstas <linas@linas.org>
+
+ * config.table: Add openedition target.
+ * config/mh-openedition: New file.
+
+Thu Sep 2 01:36:12 1999 Marc Espie <espie@cvs.openbsd.org>
+
+ * pexecute.c (pexecute): Fill in temp_base when needed.
+
+1999-08-31 Richard Henderson <rth@cygnus.com>
+
+ * getpwd.c: Check HAVE_GETCWD before defining it away.
+
+1999-08-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Makefile.in (CFILES): Add calloc.c and getpwd.c.
+ (REQUIRED_OFILES): Add getpwd.o.
+ (getpwd.o): Add target.
+
+ * configure.in (AC_PREREQ): Bump to 2.13.
+ (AC_CHECK_HEADERS): Add check for <sys/stat.h>.
+
+ * getpwd.c: New file, moved here from gcc.
+
+1999-08-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * cplus-dem.c (gnu_special): Cast a `size_t' to `long' when
+ comparing against a signed quantity.
+ (arm_special): Likewise.
+ (demangle_fund_type): Likewise.
+ (do_hpacc_template_const_value): Mark parameter `work' with
+ ATTRIBUTE_UNUSED.
+ (main): Constify variable `valid_symbols'.
+
+Tue Aug 24 02:50:45 1999 Philippe De Muyter <phdm@macqel.be>
+
+ * strtoul.c (strtoul): Add parentheses around && within ||.
+
+Fri Aug 6 23:32:29 1999 Daniel Jacobowitz <drow@drow.them.org>
+
+ * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix,
+ libdir, libsubdir and tooldir.
+
+1999-08-01 Mark Mitchell <mark@codesourcery.com>
+
+ * splay-tree.c (splay_tree_insert): Return the new node.
+
+1999-07-14 Richard Henderson <rth@cygnus.com>
+
+ * argv.c: Include stdlib.h and string.h instead of
+ prototyping directly.
+ * choose-temp.c: Conditionally include string.h.
+
+1999-07-12 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (NEEDED): Add bcmp, bcopy, bzero.
+
+1999-07-11 Ian Lance Taylor <ian@zembu.com>
+
+ * splay-tree.c (splay_tree_insert): Add initialization to avoid
+ warning.
+
+1999-07-07 Jason Merrill <jason@yorick.cygnus.com>
+
+ * Makefile.in (needed-list): Only include stuff we actually need
+ for libstdc++.
+
+1999-06-21 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * configure.in (checkfuncs): Add gettimeofday.
+ * config.in, configure: Regenerated.
+
+Mon Jun 21 05:56:01 1999 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if
+ the test fails.
+ * configure: Regenerate.
+
+1999-06-10 Mike Stump <mrs@wrs.com>
+
+ * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix
+ parallel builds.
+
+1999-05-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * putenv.c: Include ansidecl.h to define `const'.
+ * setenv.c: Likewise.
+
+Wed May 26 03:58:20 1999 "Melissa O'Neill" <oneill@cs.sfu.ca>
+
+ * Makefile.in (CFILES): Add putenv.c and setenv.c.
+ * configure.in (funcs): Add putenv and setenv.
+ (AC_CHECK_FUNCS): Check for putenv and setenv.
+ * configure: Rebuilt.
+ * putenv.c setenv.c: New files.
+
+ * getcwd.c (getcwd): If pathname is NULL, then obtain SIZE
+ bytes of space using malloc.
+
+Mon May 17 01:42:34 1999 Stu Grossman <grossman@babylon-5.cygnus.com>
+
+ * cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance
+ the *mangled pointer beyond the end of the string. Clean up code to
+ match prevailing coding style.
+
+1999-05-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * tmpnam.c (L_tmpnam): Fix typo.
+
+Thu May 13 01:14:46 1999 Marc Espie <espie@cvs.openbsd.org>
+
+ * cplus-dem.c (standard_symbol_characters): Renamed from
+ standard_symbol_alphabet. No longer modify TABLE.
+ (hp_symbol_characters): Renamed from hp_symbol_alphabet. No longer
+ modify TABLE.
+ (main): Corresponding changes. Use strchr to determine if a
+ character is valid.
+
+1999-05-11 Jim Blandy <jimb@zwingli.cygnus.com>
+
+ * cplus-dem.c (main): Use table lookup to distinguish identifier
+ characters from non-identifier characters.
+ (standard_symbol_alphabet, hp_symbol_alphabet): New functions.
+
+Thu May 6 20:34:42 1999 Fred Fish <fnf@be.com>
+
+ * configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list.
+ * getruntime.c: Only attempt to include sys/resource.h and
+ use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H
+ are defined.
+
+Mon Apr 26 01:36:06 1999 Donn Terry (donn@interix.com)
+
+ * configure.in (alloca detection): Handle alloca directly for interix.
+ * configure: Rebuilt.
+
+Sun Apr 25 01:18:21 1999 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32.
+
1999-04-20 Jim Blandy <jimb@zwingli.cygnus.com>
Fix from Dale Hawkins:
@@ -7,10 +290,26 @@
* cplus-dem.c (demangle_fund_type): Check for buffer overrun. Be
stricter about syntax. Always null-terminate string.
+Thu Apr 15 23:00:55 1999 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * configure.in (checkfuncs): Check for sbrk.
+ * config.in: Rebuilt.
+ * configure: Likewise.
+ * xmalloc.c: Use HAVE_SBRK instead of the host specific definitions.
+
+1999-04-12 Jim Blandy <jimb@zwingli.cygnus.com>
+
Fix from Marcus Daniels:
* cplus-dem.c (demangle_fund_type): Don't run off the end of the
identifier looking for another underscore.
+Sun Apr 11 23:20:59 1999 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * pexecute.c: Change all references to __UWIN__ to _UWIN.
+ * xmalloc.c: Likewise.
+ (xcalloc): UWIN has sbrk.
+ (xrealloc): Fix guard macro.
+
1999-04-11 Richard Henderson <rth@cygnus.com>
* alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin
@@ -22,6 +321,12 @@
* config.table: Use mh-beos.
* config/mh-beos: New file.
+1999-04-11 Mark Mitchell <mark@codesourcery.com>
+
+ * cplus-dem.c (demangle_template_value_parm): Handle
+ pointers-to-members.
+ (do_type): Handle template parameters as qualifiers.
+
1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com>
* cplus-dem.c: Attempt to handle overflows in counts with some
@@ -31,10 +336,22 @@
(demangle_template_value_parm, demangle_template): Handle change
to consume_count's return convention.
-Thu Apr 8 14:43:28 1999 Andrew Cagney <cagney@b1.cygnus.com>
+1999-04-05 Tom Tromey <tromey@cygnus.com>
+
+ * 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>
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index b1689ba14fd..c6eb4668e20 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -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
diff --git a/libiberty/argv.c b/libiberty/argv.c
index 85c17e930ee..f596ffd0110 100644
--- a/libiberty/argv.c
+++ b/libiberty/argv.c
@@ -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__ */
diff --git a/libiberty/basename.c b/libiberty/basename.c
index f544c853910..7698f06f8ae 100644
--- a/libiberty/basename.c
+++ b/libiberty/basename.c
@@ -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;
}
+
diff --git a/libiberty/calloc.c b/libiberty/calloc.c
index c8c0a78a7a1..334b18db86a 100644
--- a/libiberty/calloc.c
+++ b/libiberty/calloc.c
@@ -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"
diff --git a/libiberty/choose-temp.c b/libiberty/choose-temp.c
index 49c73869155..826d818ed62 100644
--- a/libiberty/choose-temp.c
+++ b/libiberty/choose-temp.c
@@ -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;
diff --git a/libiberty/config.in b/libiberty/config.in
index ba72d865eaf..6e64208da92 100644
--- a/libiberty/config.in
+++ b/libiberty/config.in
@@ -85,6 +85,9 @@
/* Define if you have the getrusage function. */
#undef HAVE_GETRUSAGE
+/* Define if you have the gettimeofday function. */
+#undef HAVE_GETTIMEOFDAY
+
/* Define if you have the index function. */
#undef HAVE_INDEX
@@ -106,12 +109,18 @@
/* Define if you have the memset function. */
#undef HAVE_MEMSET
+/* Define if you have the mkstemps function. */
+#undef HAVE_MKSTEMPS
+
/* Define if you have the on_exit function. */
#undef HAVE_ON_EXIT
/* Define if you have the psignal function. */
#undef HAVE_PSIGNAL
+/* Define if you have the putenv function. */
+#undef HAVE_PUTENV
+
/* Define if you have the random function. */
#undef HAVE_RANDOM
@@ -121,6 +130,12 @@
/* Define if you have the rindex function. */
#undef HAVE_RINDEX
+/* Define if you have the sbrk function. */
+#undef HAVE_SBRK
+
+/* Define if you have the setenv function. */
+#undef HAVE_SETENV
+
/* Define if you have the sigsetmask function. */
#undef HAVE_SIGSETMASK
@@ -196,6 +211,12 @@
/* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
+/* Define if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
diff --git a/libiberty/config.table b/libiberty/config.table
index 5913b23ad63..4e33746164c 100644
--- a/libiberty/config.table
+++ b/libiberty/config.table
@@ -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
index 00000000000..6e8e354be4a
--- /dev/null
+++ b/libiberty/config/mh-openedition
@@ -0,0 +1,3 @@
+HDEFINES = -D_ALL_SOURCE
+CC=c89
+
diff --git a/libiberty/configure b/libiberty/configure
index 98407e7946c..02c826d929e 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -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
diff --git a/libiberty/configure.in b/libiberty/configure.in
index f02f03561e5..cc1b2c2082b 100644
--- a/libiberty/configure.in
+++ b/libiberty/configure.in
@@ -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
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 4be587a3bca..52249d2b580 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -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);
diff --git a/libiberty/getcwd.c b/libiberty/getcwd.c
index 06d55c04f58..47b1c1eec31 100644
--- a/libiberty/getcwd.c
+++ b/libiberty/getcwd.c
@@ -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
index 00000000000..de6e0397648
--- /dev/null
+++ b/libiberty/getpwd.c
@@ -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__ */
diff --git a/libiberty/getruntime.c b/libiberty/getruntime.c
index 6e70773bd94..b855ea6e82f 100644
--- a/libiberty/getruntime.c
+++ b/libiberty/getruntime.c
@@ -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
index 00000000000..3f5b3030422
--- /dev/null
+++ b/libiberty/hashtab.c
@@ -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;
+}
diff --git a/libiberty/makefile.vms b/libiberty/makefile.vms
index b61b51290da..6a7dd45718e 100644
--- a/libiberty/makefile.vms
+++ b/libiberty/makefile.vms
@@ -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])
diff --git a/libiberty/pexecute.c b/libiberty/pexecute.c
index 6da97deee4b..5003f1fe4d5 100644
--- a/libiberty/pexecute.c
+++ b/libiberty/pexecute.c
@@ -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
index 00000000000..9d5692222cf
--- /dev/null
+++ b/libiberty/putenv.c
@@ -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;
+}
diff --git a/libiberty/random.c b/libiberty/random.c
index 0a950709fce..ef00da0a5ae 100644
--- a/libiberty/random.c
+++ b/libiberty/random.c
@@ -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
index 00000000000..eec13006c22
--- /dev/null
+++ b/libiberty/setenv.c
@@ -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;
+}
diff --git a/libiberty/splay-tree.c b/libiberty/splay-tree.c
index b6bb5a6a8f0..22ea07d84ad 100644
--- a/libiberty/splay-tree.c
+++ b/libiberty/splay-tree.c
@@ -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
diff --git a/libiberty/strtol.c b/libiberty/strtol.c
index 37d170660f2..5467cc3e2e9 100644
--- a/libiberty/strtol.c
+++ b/libiberty/strtol.c
@@ -10,10 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
+ * 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
diff --git a/libiberty/strtoul.c b/libiberty/strtoul.c
index ff6f2d6784d..2ec32043e6b 100644
--- a/libiberty/strtoul.c
+++ b/libiberty/strtoul.c
@@ -10,10 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
+ * 3. [rescinded 22 July 1999]
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
@@ -91,7 +88,7 @@ strtoul(nptr, endptr, base)
break;
if (c >= base)
break;
- if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
+ if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
any = -1;
else {
any = 1;
diff --git a/libiberty/testsuite/Makefile.in b/libiberty/testsuite/Makefile.in
new file mode 100644
index 00000000000..9d4ddd0ef1e
--- /dev/null
+++ b/libiberty/testsuite/Makefile.in
@@ -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
index 00000000000..d3a1fe43890
--- /dev/null
+++ b/libiberty/testsuite/demangle-expected
@@ -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
index 00000000000..bd48ce9013e
--- /dev/null
+++ b/libiberty/testsuite/regress-demangle
@@ -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
+)
diff --git a/libiberty/tmpnam.c b/libiberty/tmpnam.c
index c0614677425..8eb77e28c0b 100644
--- a/libiberty/tmpnam.c
+++ b/libiberty/tmpnam.c
@@ -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"
diff --git a/libiberty/vasprintf.c b/libiberty/vasprintf.c
index eeb80e661f7..b959f5f9ca5 100644
--- a/libiberty/vasprintf.c
+++ b/libiberty/vasprintf.c
@@ -105,6 +105,7 @@ int_vasprintf (result, format, args)
(void) va_arg (ap, char *);
break;
}
+ p++;
}
}
#ifdef TEST
diff --git a/libiberty/vmsbuild.com b/libiberty/vmsbuild.com
index 4fede380bfd..497ea8974f2 100644
--- a/libiberty/vmsbuild.com
+++ b/libiberty/vmsbuild.com
@@ -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 = ""
$!
diff --git a/libiberty/xmalloc.c b/libiberty/xmalloc.c
index 1083790789d..621c6d216c7 100644
--- a/libiberty/xmalloc.c
+++ b/libiberty/xmalloc.c
@@ -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
index 00000000000..f780041aa13
--- /dev/null
+++ b/libiberty/xmemdup.c
@@ -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;
+}
diff --git a/libiberty/xstrdup.c b/libiberty/xstrdup.c
index e16aba08554..6f846cfea15 100644
--- a/libiberty/xstrdup.c
+++ b/libiberty/xstrdup.c
@@ -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