From e2eaf477991014a67bc122c3225f6a3fe6d1a8e6 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 22 Feb 2000 15:59:20 +0000 Subject: [PATCH] import libiberty from egcs --- libiberty/ChangeLog | 323 +++- libiberty/Makefile.in | 95 +- libiberty/argv.c | 8 +- libiberty/basename.c | 39 +- libiberty/calloc.c | 3 + libiberty/choose-temp.c | 10 +- libiberty/config.in | 21 + libiberty/config.table | 3 +- libiberty/config/mh-openedition | 3 + libiberty/configure | 283 ++- libiberty/configure.in | 55 +- libiberty/cplus-dem.c | 476 +++-- libiberty/getcwd.c | 10 + libiberty/getpwd.c | 115 ++ libiberty/getruntime.c | 4 +- libiberty/hashtab.c | 330 ++++ libiberty/makefile.vms | 2 +- libiberty/pexecute.c | 58 +- libiberty/putenv.c | 68 + libiberty/random.c | 35 +- libiberty/setenv.c | 163 ++ libiberty/splay-tree.c | 14 +- libiberty/strtol.c | 5 +- libiberty/strtoul.c | 7 +- libiberty/testsuite/Makefile.in | 75 + libiberty/testsuite/demangle-expected | 2488 +++++++++++++++++++++++++ libiberty/testsuite/regress-demangle | 28 + libiberty/tmpnam.c | 2 +- libiberty/vasprintf.c | 1 + libiberty/vmsbuild.com | 2 +- libiberty/xmalloc.c | 42 +- libiberty/xmemdup.c | 22 + libiberty/xstrdup.c | 1 + 33 files changed, 4422 insertions(+), 369 deletions(-) create mode 100644 libiberty/config/mh-openedition create mode 100644 libiberty/getpwd.c create mode 100644 libiberty/hashtab.c create mode 100644 libiberty/putenv.c create mode 100644 libiberty/setenv.c create mode 100644 libiberty/testsuite/Makefile.in create mode 100644 libiberty/testsuite/demangle-expected create mode 100755 libiberty/testsuite/regress-demangle create mode 100644 libiberty/xmemdup.c diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 7032febe63..a0b4ed39d5 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,286 @@ +2000-01-04 Mumit Khan + + * pexecute.c: Conditionally include string.h. + (fix_argv): Handle embedded whitespace in args for Mingw32. + +2000-01-04 Kaveh R. Ghazi + + * 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 + + * vasprintf.c (int_vasprintf): Don't re-read the format character + as this mishandles strings like '%%s'. + +1999-12-05 Mark Mitchell + + * 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 + + * hashtab.c (sys/types.h): File included. + +1999-11-22 Jason Merrill + + * 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 + + * xstrdup (sys/types.h): Include this file. + +1999-10-28 Nathan Sidwell + + * Makefile.in (SUBDIRS): New macro. + (mostlyclean, clean, distclean, maintainer-clean): Adjust to + avoid multiple subdirectory cleaning. + (*-subdir): Use SUBDIRS. + +1999-10-25 Jim Kingdon + + * 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 + + * 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 + + * 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 + + * calloc.c: Add a public domain notice. + +Mon Oct 18 02:30:47 1999 Philippe De Muyter + + * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly. + +Fri Oct 15 01:47:51 1999 Vladimir Makarov + + * 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 + + * 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 + + * 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 + + * config.table: Provide a backup shell for executing move-if-change. + +1999-10-02 Mark Mitchell + + * xmalloc.c (xmalloc): Fix spelling error. + (xcalloc, xrealloc): Likewise. + +1999-10-02 Kaveh R. Ghazi + + * 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 + + * choose-temp.c: Remove obsolete comment about gcc. + (make_temp_file): Constify a char*. + +Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi + + * xmemdup.c: Include sys/types.h. + +1999-09-07 Jeff Garzik + + * xmemdup.c: New xmemdup function. + * Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co]. + +Tue Sep 7 23:32:18 1999 Linas Vepstas + + * config.table: Add openedition target. + * config/mh-openedition: New file. + +Thu Sep 2 01:36:12 1999 Marc Espie + + * pexecute.c (pexecute): Fill in temp_base when needed. + +1999-08-31 Richard Henderson + + * getpwd.c: Check HAVE_GETCWD before defining it away. + +1999-08-30 Kaveh R. Ghazi + + * 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 . + + * getpwd.c: New file, moved here from gcc. + +1999-08-25 Kaveh R. Ghazi + + * 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 + + * strtoul.c (strtoul): Add parentheses around && within ||. + +Fri Aug 6 23:32:29 1999 Daniel Jacobowitz + + * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix, + libdir, libsubdir and tooldir. + +1999-08-01 Mark Mitchell + + * splay-tree.c (splay_tree_insert): Return the new node. + +1999-07-14 Richard Henderson + + * argv.c: Include stdlib.h and string.h instead of + prototyping directly. + * choose-temp.c: Conditionally include string.h. + +1999-07-12 Jason Merrill + + * Makefile.in (NEEDED): Add bcmp, bcopy, bzero. + +1999-07-11 Ian Lance Taylor + + * splay-tree.c (splay_tree_insert): Add initialization to avoid + warning. + +1999-07-07 Jason Merrill + + * Makefile.in (needed-list): Only include stuff we actually need + for libstdc++. + +1999-06-21 Andreas Schwab + + * configure.in (checkfuncs): Add gettimeofday. + * config.in, configure: Regenerated. + +Mon Jun 21 05:56:01 1999 Mumit Khan + + * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if + the test fails. + * configure: Regenerate. + +1999-06-10 Mike Stump + + * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix + parallel builds. + +1999-05-28 Kaveh R. Ghazi + + * putenv.c: Include ansidecl.h to define `const'. + * setenv.c: Likewise. + +Wed May 26 03:58:20 1999 "Melissa O'Neill" + + * 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 + + * 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 + + * tmpnam.c (L_tmpnam): Fix typo. + +Thu May 13 01:14:46 1999 Marc Espie + + * 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 + + * 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 + + * 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 + + * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32. + 1999-04-20 Jim Blandy 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 + + * 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 + 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 + + * 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 * 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 + + * cplus-dem.c (demangle_template_value_parm): Handle + pointers-to-members. + (do_type): Handle template parameters as qualifiers. + 1999-04-01 Jim Blandy * 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 +1999-04-05 Tom Tromey + + * 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 diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index b1689ba14f..c6eb4668e2 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 85c17e930e..f596ffd011 100644 --- a/libiberty/argv.c +++ b/libiberty/argv.c @@ -35,12 +35,8 @@ Boston, MA 02111-1307, USA. */ #ifdef __STDC__ #include -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 +#include #else /* !__STDC__ */ diff --git a/libiberty/basename.c b/libiberty/basename.c index f544c85391..7698f06f8a 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 + +#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 c8c0a78a7a..334b18db86 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 49c7386915..826d818ed6 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 #endif +#ifdef HAVE_STRING_H +#include +#endif #ifdef HAVE_SYS_FILE_H #include /* 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 ba72d865ea..6e64208da9 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 header file. */ #undef HAVE_SYS_PARAM_H +/* Define if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_STAT_H + /* Define if you have the header file. */ #undef HAVE_SYS_TIME_H diff --git a/libiberty/config.table b/libiberty/config.table index 5913b23ad6..4e33746164 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 0000000000..6e8e354be4 --- /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 98407e7946..02c826d929 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 < 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 < 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 < 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 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 < #include @@ -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 <&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 <&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 <&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 <&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 <&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 <&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 <&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 < +/* 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 <&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 <&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 < 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 <&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 <&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 <&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 <&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 < #include @@ -2019,7 +2120,7 @@ else #include 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 @@ -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 @@ -2075,7 +2176,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #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 < #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 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 <&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 < @@ -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 <&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 <&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 <> $CONFIG_STATUS <> $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 f02f03561e..cc1b2c2082 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 < 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 4be587a3bc..52249d2b58 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 , 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 06d55c04f5..47b1c1eec3 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 0000000000..de6e039764 --- /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 + +#include +#ifndef errno +extern int errno; +#endif + +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_SYS_PARAM_H +#include +#endif +#if HAVE_SYS_STAT_H +#include +#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 6e70773bd9..b855ea6e82 100644 --- a/libiberty/getruntime.c +++ b/libiberty/getruntime.c @@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */ #include -#ifdef HAVE_GETRUSAGE +#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H) #include #include #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 0000000000..3f5b303042 --- /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 + +#ifdef HAVE_STDLIB_H +#include +#endif + +#include + +#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 b61b51290d..6a7dd45718 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 6da97deee4..5003f1fe4d 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 #include +#ifdef HAVE_STRING_H +#include +#endif #ifdef HAVE_UNISTD_H #include #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 @@ -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 0000000000..9d5692222c --- /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 +#endif + +#include "ansidecl.h" + +#if HAVE_STDLIB_H +# include +#endif +#if HAVE_STRING_H +# include +#endif + +#ifdef HAVE_ALLOCA_H +# include +#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 0a950709fc..ef00da0a5a 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 0000000000..eec13006c2 --- /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 +#endif + +#include "ansidecl.h" +#include /* For `size_t' */ +#include /* For `NULL' */ + +#include +#if !defined(errno) && !defined(HAVE_ERRNO_DECL) +extern int errno; +#endif +#define __set_errno(ev) ((errno) = (ev)) + +#if HAVE_STDLIB_H +# include +#endif +#if HAVE_STRING_H +# include +#endif +#if HAVE_UNISTD_H +# include +#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 b6bb5a6a8f..22ea07d84a 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 37d170660f..5467cc3e2e 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 ff6f2d6784..2ec32043e6 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 0000000000..9d4ddd0ef1 --- /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 . + +# +# 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 0000000000..d3a1fe4389 --- /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::elem(int) +# +--format=gnu +elem__t6vector1Zii +vector::elem(int) +# +--format=gnu +__t6vector1Zdi +vector::vector(int) +# +--format=gnu +__t6vector1Zii +vector::vector(int) +# +--format=gnu +_\$_t6vector1Zdi +vector::~vector(int) +# +--format=gnu +_\$_t6vector1Zii +vector::~vector(int) +# +--format=gnu +__nw__t2T11ZcUi +T1::operator new(unsigned int) +# +--format=gnu +__nw__t2T11Z1tUi +T1::operator new(unsigned int) +# +--format=gnu +__dl__t2T11ZcPv +T1::operator delete(void *) +# +--format=gnu +__dl__t2T11Z1tPv +T1::operator delete(void *) +# +--format=gnu +__t2T11Zci +T1::T1(int) +# +--format=gnu +__t2T11Zc +T1::T1(void) +# +--format=gnu +__t2T11Z1ti +T1::T1(int) +# +--format=gnu +__t2T11Z1t +T1::T1(void) +# +--format=gnu +__Q2t4List1Z10VHDLEntity3Pix +List::Pix::Pix(void) +# +--format=gnu +__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element +List::Pix::Pix(List::element *) +# +--format=gnu +__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix +List::Pix::Pix(List::Pix const &) +# +--format=gnu +__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0 +List::element::element(VHDLEntity const &, List::element *) +# +--format=gnu +__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element +List::element::element(List::element const &) +# +--format=gnu +__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity +VHDLLibrary::operator()(PixX >) const +# +--format=gnu +__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix +List::operator()(List::Pix const &) const +# +--format=gnu +__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix +operator!=(void *, List::Pix const &) +# +--format=gnu +__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity +operator!=(void *, PixX > const &) +# +--format=gnu +__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity +List::List(List const &) +# +--format=gnu +__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity +PixX >::PixX(void) +# +--format=gnu +__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix +PixX >::PixX(VHDLLibraryRep *, List::Pix) +# +--format=gnu +__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity +PixX >::PixX(PixX > const &) +# +--format=gnu +nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity +VHDLLibrary::nextE(PixX > &) const +# +--format=gnu +next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix +List::next(List::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::operator=(ListS const &) +# +--format=gnu +__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix +ListS::operator()(ListS::Vix const &) const +# +--format=gnu +__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix +SetLS::operator()(SetLS::Vix const &) const +# +--format=gnu +__t10ListS_link1ZUiRCUiPT0 +ListS_link::ListS_link(unsigned int const &, ListS_link *) +# +--format=gnu +__t10ListS_link1ZUiRCt10ListS_link1ZUi +ListS_link::ListS_link(ListS_link const &) +# +--format=gnu +__t5ListS1ZUiRCt5ListS1ZUi +ListS::ListS(ListS const &) +# +--format=gnu +next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix +ListS::next(ListS::Vix &) const +# +--format=gnu +__ne__FPvRCQ2t5SetLS1ZUi3Vix +operator!=(void *, SetLS::Vix const &) +# +--format=gnu +__t8ListElem1Z5LabelRt4List1Z5Label +ListElem