diff options
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 192 | ||||
-rw-r--r-- | libiberty/Makefile.in | 824 | ||||
-rw-r--r-- | libiberty/README | 2 | ||||
-rw-r--r-- | libiberty/config.in | 391 | ||||
-rwxr-xr-x | libiberty/configure | 20 | ||||
-rw-r--r-- | libiberty/configure.in | 520 | ||||
-rw-r--r-- | libiberty/cp-demangle.c | 2375 | ||||
-rw-r--r-- | libiberty/cplus-dem.c | 23 | ||||
-rw-r--r-- | libiberty/getpwd.c | 3 | ||||
-rw-r--r-- | libiberty/lbasename.c | 20 | ||||
-rw-r--r-- | libiberty/maint-tool | 17 | ||||
-rw-r--r-- | libiberty/strdup.c | 2 | ||||
-rw-r--r-- | libiberty/testsuite/demangle-expected | 2262 | ||||
-rw-r--r-- | libiberty/testsuite/test-demangle.c | 164 |
14 files changed, 4141 insertions, 2674 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index cd7200d..10c7f46 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,195 @@ +2004-01-25 Ian Lance Taylor <ian@wasabisystems.com> + + * configure.ac: Add m4_pattern_allow(LIBOBJS). + * configure: Regenerate. + +2004-01-22 DJ Delorie <dj@redhat.com> + + * Makefile.in: Convert to ./ throughout. Rebuild dependencies + with explicit build rules. + (VPATH): Remove. + (.c.o): Poison. + * configure.ac (pexecute, LIBOBJS): Add ./ . + * maint-tool: Build dependencies with explicit rules. + +2004-01-15 Kazu Hirata <kazu@cs.umass.edu> + + * strdup.c (strdup): Constify the argument. + +2004-01-14 Loren J. Rittle <ljrittle@acm.org> + + * Makefile.in (distclean): Remove config.cache. + +2004-01-13 Daniel Jacobowitz <drow@mvista.com> + + * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE + takes two parameters. + * cp-demint.c (cplus_demangle_fill_component): Likewise. + +2004-01-12 Ian Lance Taylor <ian@wasabisystems.com> + + * cp-demangle.c: Include "cp-demangle.h". If IN_GLIBCPP_V3 is + defined, rename some functions which are to become static via + #define. + (CP_STATIC_IF_GLIBCPP_V3): Define. + (struct d_operator_info): Move definition to cp-demangle.h, and + rename to demangle_operator_info. Change all uses. + (enum d_builtin_type_print): Move definition to cp-demangle.h. + (struct d_builtin_type_info): Move definition to cp-demangle.h, + and rename to demangle_builtin_type_info. Change all uses. + (enum d_comp_type): Move definition to include/demangle.h, and + rename to demangle_component_type, and change all enums to start + with DEMANGLE_COMPONENT_ instead of D_. Change all uses. + (struct d_comp): Move definition to include/demangle.h, and rename + to demangle_component. Change all uses. + (struct d_info): Move definition to cp-demangle.h. + (cplus_demangle_fill_name): New function. + (cplus_demangle_fill_extended_operator): New function. + (cplus_demangle_fill_ctor): New function. + (cplus_demangle_fill_dtor): New function. + (d_make_empty): Remove type parameter. Change all callers. + (d_make_name): Use cplus_demangle_fill_name. + (d_make_extended_operator): Use + cplus_demangle_fill_extended_operator. + (d_make_ctor): Use cplus_demangle_fill_ctor. + (d_make_dtor): Use cplus_demangle_fill_dtor. + (cplus_demangle_mangled_name): Rename from d_mangled_name. Make + non-static by default. Change all callers. + (cplus_demangle_operators): Rename from d_operators. Change all + uses. Make non-static by default. Add sentinel at end of array. + (d_operator_name): Adjust initialization of high for new sentinel + in cplus_demangle_operators. + (cplus_demangle_builtin_types): Rename from d_builtin_types. + Change all uses. Make non-static by default. Change initializer + to use D_BUILTIN_TYPE_COUNT instead of magic number 26. + (cplus_demangle_type): Rename from d_type. Make non-static by + default. Change all callers. + (cplus_demangle_init_info): Rename from d_init_info. Make + non-static by default. Change all callers. + * cp-demangle.h: New file. + * cp-demint.c: New file. + * Makefile.in: Rebuild dependencies. + (CFILES): Add cp-demint.c. + (REQUIRED_OFILES): Add cp-demint.o. + +2004-01-09 Kelley Cook <kcook@gcc.gnu.org> + + * configure.in: Rename file to ... + * configure.ac: ... this. + * Makefile.in: Update a comment for above change. + * README: Likewise. + * config.in: Regenerate. + +2004-01-02 Ian Lance Taylor <ian@wasabisystems.com> + + * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip + CV-qualifiers from D_COMP_LOCAL_NAME right subtree. + * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when + demangling template parameters. + * testsuite/test-demangle.c (fail): New static function. + (main): Support new options in input file: --no-params, + --is-v3-ctor, and --is-v3-dtor. + * testsuite/demangle-expected: Add --no-params to most tests, and + add the correct result when parameters are not demangled. Add + some simple tests for V3 constructor/destructor recognition. + +2003-12-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * cp-demangle.c (is_ctor_or_dtor): Fix error in last change. + +2003-12-22 Daniel Jacobowitz <drow@mvista.com> + + PR debug/13272 + * Makefile.in (lbasename.o): Depend on filenames.h. + * lbasename.c: Include "filenames.h" instead of defining + its macros locally. + +2003-12-22 Ian Lance Taylor <ian@wasabisystems.com> + + * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports + dynamic arrays. + (struct d_operator_info): Add len field. + (struct d_builtin_type_info): Add len and java_len fields. + (struct d_standard_sub_info): Add simple_len, full_len, and + set_last_name_len fields. + (struct d_comp): Add len field to s_string. + (struct d_info): Add send, did_subs, and expansion fields. + (d_append_string_constant): Define. + (d_append_string): Remove. Change all users to use + d_append_string_constant or d_append_buffer instead. + (d_make_sub): Add len parameter. Change all callers. + (d_name): Increase expansion when substituting std::. + (d_unqualified_name): Increase expansion for an operator. + (d_number): Don't use multiplication for negative numbers. + (d_identifier): Make sure there are enough characters in the + string for the specified length. Adjust expansion for an + anonymous namespace. + (d_operators): Initialize len field. + (d_special_name, d_ctor_dtor_name): Increase expansion. + (d_builtin_types): Initialize len and java_len fields. + (d_type): Increase expansion for a builtin type. + (d_cv_qualifiers): Increase expansion for each qualifier. + (d_bare_function_type): Decrease expansion when removing single + void parameter. + (d_template_param): Increment did_subs. + (d_expression): Increase expansion for an operator. + (d_expr_primary): Decrease expansion for a type we will print + specially. + (standard_subs): Initialize new fields. + (d_substitution): Increment did_subs when doing a normal + substitution. Increase expansion for a special substitution. + (d_print): Add estimate parameter. Change all callers. + (d_print_comp) [D_COMP_NAME]: Handle C++ case inline. + (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call. + (d_print_java_identifier): Rename from d_print_identifier. Handle + only Java case. Change caller. + (d_init_info): Change return type to void. Change all callers. + Initialize send, did_subs, and expansion fields. Do not + initialize comps and subs fields. + (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs + arrays on stack. Make an estimate of the length of the demangled + name. Ifdef CP_DEMANGLE_DEBUG, print estimation failures. + (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and + subs arrays on stack. + +2003-12-20 Ian Lance Taylor <ian@wasabisystems.com> + + * cp-demangle.c (d_identifier): In Java mode, skip an optional '$' + after the identifier. + * testsuite/demangle-expected: Add test case. + +2003-12-19 Ian Lance Taylor <ian@wasabisystems.com> + + Fix for PR c++/13447: + * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME. + (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME. + (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like + D_COMP_QUAL_NAME. + (is_ctor_or_dtor): Likewise. + (d_local_name): Use D_COMP_LOCAL_NAME rather than + D_COMP_QUAL_NAME. + (d_print_comp) [D_COMP_LOCAL_NAME]: New. + (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is + D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree. + (d_print_mod_list): Handle D_COMP_LOCAL_NAME. + * testsuite/demangle-expected: Add two test cases. + + * cp-demangle.c (d_print_function_type): Clear the global modifier + list when printing the modifiers, not just when printing the + function parameters. + * testsuite/demangle-expected: Add two test cases. + +2003-12-15 Ian Lance Taylor <ian@wasabisystems.com> + + * cp-demangle.c (d_print_function_type): Print the function + parameters with no modifiers. + * testsuite/demangle-expected: Add test case. + + * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't + expect that we've read the entire string. + (is_ctor_or_dtor): Don't expect that we've read the entire + string--reverse patch of 2003-11-29. + 2003-12-15 Brendan Kehoe <brendan@zen.org> * libiberty/Makefile.in (floatformat.o): Add dependency on diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in index 5fff39b..bbb5c2a 100644 --- a/libiberty/Makefile.in +++ b/libiberty/Makefile.in @@ -1,6 +1,6 @@ # # Makefile -# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003 +# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation # # This file is part of the libiberty library. @@ -28,7 +28,6 @@ libiberty_topdir = @libiberty_topdir@ srcdir = @srcdir@ -VPATH = @srcdir@ prefix = @prefix@ @@ -70,8 +69,8 @@ PICFLAG = MAKEOVERRIDES = -TARGETLIB = libiberty.a -TESTLIB = testlib.a +TARGETLIB = ./libiberty.a +TESTLIB = ./testlib.a LIBOBJS = @LIBOBJS@ @@ -118,19 +117,19 @@ installcheck: installcheck-subdir INCDIR=$(srcdir)/$(MULTISRCTOP)../include COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@ + +# Just to make sure we don't use a built-in rule with VPATH .c.o: - if [ x"$(PICFLAG)" != x ]; then \ - $(COMPILE.c) $(PICFLAG) $< -o pic/$@; \ - else true; fi - $(COMPILE.c) $< $(OUTPUT_OPTION) + false # NOTE: If you add new files to the library, add them to this list # (alphabetical), and add them to REQUIRED_OFILES, or -# CONFIGURED_OFILES and funcs in configure.in. +# CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps" +# to build the new rules. CFILES = alloca.c argv.c asprintf.c atexit.c \ basename.c bcmp.c bcopy.c bsearch.c bzero.c \ calloc.c choose-temp.c clock.c concat.c cp-demangle.c \ - cplus-dem.c \ + cp-demint.c cplus-dem.c \ dyn-string.c \ fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \ getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \ @@ -158,45 +157,45 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \ # These are always included in the library. The first four are listed # first and by compile time to optimize parallel builds. -REQUIRED_OFILES = regex.o cplus-dem.o cp-demangle.o md5.o \ - alloca.o argv.o \ - choose-temp.o concat.o \ - dyn-string.o \ - fdmatch.o fibheap.o floatformat.o fnmatch.o \ - getopt.o getopt1.o getpwd.o getruntime.o \ - hashtab.o hex.o \ - lbasename.o \ - lrealpath.o \ - make-relative-prefix.o \ - make-temp-file.o \ - objalloc.o obstack.o \ - partition.o physmem.o @pexecute@ \ - safe-ctype.o sort.o spaces.o splay-tree.o strerror.o \ - strsignal.o \ - ternary.o \ - xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o +REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./cp-demint.o ./md5.o \ + ./alloca.o ./argv.o \ + ./choose-temp.o ./concat.o \ + ./dyn-string.o \ + ./fdmatch.o ./fibheap.o ./floatformat.o ./fnmatch.o \ + ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o \ + ./hashtab.o ./hex.o \ + ./lbasename.o \ + ./lrealpath.o \ + ./make-relative-prefix.o \ + ./make-temp-file.o \ + ./objalloc.o ./obstack.o \ + ./partition.o ./physmem.o @pexecute@ \ + ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o \ + ./strsignal.o \ + ./ternary.o \ + ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o # These are all the objects that configure may add to the library via # $funcs or EXTRA_OFILES. This list exists here only for "make # maint-missing" and "make check". -CONFIGURED_OFILES = asprintf.o atexit.o \ - basename.o bcmp.o bcopy.o bsearch.o bzero.o \ - calloc.o clock.o copysign.o \ - _doprnt.o \ - ffs.o \ - getcwd.o getpagesize.o \ - index.o insque.o \ - memchr.o memcmp.o memcpy.o memmove.o mempcpy.o memset.o mkstemps.o \ - pex-djgpp.o pex-mpw.o pex-msdos.o pex-os2.o \ - pex-unix.o pex-win32.o \ - putenv.o \ - random.o rename.o rindex.o \ - setenv.o sigsetmask.o snprintf.o stpcpy.o stpncpy.o strcasecmp.o \ - strchr.o strdup.o strncasecmp.o strncmp.o strrchr.o strstr.o \ - strtod.o strtol.o strtoul.o \ - tmpnam.o \ - vasprintf.o vfork.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o \ - waitpid.o +CONFIGURED_OFILES = ./asprintf.o ./atexit.o \ + ./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o \ + ./calloc.o ./clock.o ./copysign.o \ + ./_doprnt.o \ + ./ffs.o \ + ./getcwd.o ./getpagesize.o \ + ./index.o ./insque.o \ + ./memchr.o ./memcmp.o ./memcpy.o ./memmove.o ./mempcpy.o ./memset.o ./mkstemps.o \ + ./pex-djgpp.o ./pex-mpw.o ./pex-msdos.o ./pex-os2.o \ + ./pex-unix.o ./pex-win32.o \ + ./putenv.o \ + ./random.o ./rename.o ./rindex.o \ + ./setenv.o ./sigsetmask.o ./snprintf.o ./stpcpy.o ./stpncpy.o ./strcasecmp.o \ + ./strchr.o ./strdup.o ./strncasecmp.o ./strncmp.o ./strrchr.o ./strstr.o \ + ./strtod.o ./strtol.o ./strtoul.o \ + ./tmpnam.o \ + ./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o ./vsprintf.o \ + ./waitpid.o # These files are installed if the library has been configured to do so. INSTALLED_HEADERS = \ @@ -376,7 +375,7 @@ clean: clean-subdir distclean: distclean-subdir $(MAKE) SUBDIRS="" clean @$(MULTICLEAN) multi-clean DO=distclean - -rm -f *~ Makefile config.status xhost-mkfrag TAGS multilib.out + -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out -rm -f config.log -rmdir testsuite 2>/dev/null maintainer-clean realclean: maintainer-clean-subdir @@ -390,8 +389,8 @@ Makefile: $(srcdir)/Makefile.in config.status # Depending on Makefile makes sure that config.status has been re-run # if needed. This prevents problems with parallel builds. config.h: stamp-h ; @true -stamp-h: config.in config.status Makefile - CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status +stamp-h: $(srcdir)/config.in config.status Makefile + CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status config.status: $(srcdir)/configure $(srcdir)/config.table $(SHELL) ./config.status --recheck @@ -415,110 +414,643 @@ $(CONFIGURED_OFILES): stamp-picdir # The dependencies in the remainder of this file are automatically # generated by "make maint-deps". Manual edits will be lost. -_doprnt.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h -alloca.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -argv.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -asprintf.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -atexit.o: config.h -basename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ +./_doprnt.o: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/safe-ctype.h -bsearch.o: config.h $(INCDIR)/ansidecl.h -calloc.o: $(INCDIR)/ansidecl.h -choose-temp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -clock.o: config.h -concat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -copysign.o: $(INCDIR)/ansidecl.h -cp-demangle.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \ - $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h -cplus-dem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h -dyn-string.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION) + +./alloca.o: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h -fdmatch.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -fibheap.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION) + +./argv.o: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION) + +./asprintf.o: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION) + +./atexit.o: $(srcdir)/atexit.c config.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION) + +./basename.o: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION) + +./bcmp.o: $(srcdir)/bcmp.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION) + +./bcopy.o: $(srcdir)/bcopy.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION) + +./bsearch.o: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION) + +./bzero.o: $(srcdir)/bzero.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION) + +./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION) + +./choose-temp.o: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h -floatformat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/floatformat.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION) + +./clock.o: $(srcdir)/clock.c config.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION) + +./concat.o: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h -fnmatch.o: config.h $(INCDIR)/fnmatch.h $(INCDIR)/safe-ctype.h -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)/ansidecl.h $(INCDIR)/libiberty.h -getruntime.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -hashtab.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION) + +./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION) + +./cp-demangle.o: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \ + $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ + $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION) + +./cp-demint.o: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \ + $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \ $(INCDIR)/libiberty.h -hex.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION) + +./cplus-dem.o: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION) + +./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION) + +./fdmatch.o: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION) + +./ffs.o: $(srcdir)/ffs.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION) + +./fibheap.o: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/fibheap.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION) + +./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION) + +./fnmatch.o: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \ $(INCDIR)/safe-ctype.h -lbasename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION) + +./getcwd.o: $(srcdir)/getcwd.c config.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION) + +./getopt.o: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION) + +./getopt1.o: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION) + +./getpagesize.o: $(srcdir)/getpagesize.c config.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION) + +./getpwd.o: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION) + +./getruntime.o: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION) + +./hashtab.o: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION) + +./hex.o: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION) + +./index.o: $(srcdir)/index.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION) + +./insque.o: $(srcdir)/insque.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION) + +./lbasename.o: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \ + $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION) + +./lrealpath.o: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION) + +./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c config.h \ + $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION) + +./make-temp-file.o: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION) + +./md5.o: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION) + +./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION) + +./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION) + +./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION) + +./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION) + +./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION) + +./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION) + +./mkstemps.o: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION) + +./mpw.o: $(srcdir)/mpw.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/mpw.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/mpw.c $(OUTPUT_OPTION) + +./msdos.o: $(srcdir)/msdos.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION) + +./objalloc.o: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/objalloc.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION) + +./obstack.o: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION) + +./partition.o: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(INCDIR)/partition.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION) + +./pex-djgpp.o: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION) + +./pex-mpw.o: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-mpw.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-mpw.c $(OUTPUT_OPTION) + +./pex-msdos.o: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \ $(INCDIR)/safe-ctype.h -lrealpath.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -make-relative-prefix.o: config.h $(INCDIR)/ansidecl.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION) + +./pex-os2.o: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-os2.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-os2.c $(OUTPUT_OPTION) + +./pex-unix.o: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION) + +./pex-win32.o: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(srcdir)/pex-common.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION) + +./physmem.o: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \ $(INCDIR)/libiberty.h -make-temp-file.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -md5.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h -memchr.o: $(INCDIR)/ansidecl.h -memcmp.o: $(INCDIR)/ansidecl.h -memcpy.o: $(INCDIR)/ansidecl.h -memmove.o: $(INCDIR)/ansidecl.h -mempcpy.o: $(INCDIR)/ansidecl.h -memset.o: $(INCDIR)/ansidecl.h -mkstemps.o: config.h $(INCDIR)/ansidecl.h -objalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/objalloc.h -obstack.o: config.h $(INCDIR)/obstack.h -partition.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/partition.h -pex-djgpp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h -pex-mpw.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h -pex-msdos.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h $(INCDIR)/safe-ctype.h -pex-os2.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h -pex-unix.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h -pex-win32.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(srcdir)/pex-common.h -physmem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -putenv.o: config.h $(INCDIR)/ansidecl.h -random.o: $(INCDIR)/ansidecl.h -regex.o: config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h -rename.o: config.h $(INCDIR)/ansidecl.h -safe-ctype.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h -setenv.o: config.h $(INCDIR)/ansidecl.h -sigsetmask.o: $(INCDIR)/ansidecl.h -snprintf.o: $(INCDIR)/ansidecl.h -sort.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION) + +./putenv.o: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION) + +./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION) + +./regex.o: $(srcdir)/regex.c config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION) + +./rename.o: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION) + +./rindex.o: $(srcdir)/rindex.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION) + +./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION) + +./setenv.o: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION) + +./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION) + +./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION) + +./sort.o: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ $(INCDIR)/sort.h -spaces.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -splay-tree.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/splay-tree.h -stpcpy.o: $(INCDIR)/ansidecl.h -stpncpy.o: $(INCDIR)/ansidecl.h -strcasecmp.o: $(INCDIR)/ansidecl.h -strchr.o: $(INCDIR)/ansidecl.h -strdup.o: $(INCDIR)/ansidecl.h -strerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -strncasecmp.o: $(INCDIR)/ansidecl.h -strncmp.o: $(INCDIR)/ansidecl.h -strrchr.o: $(INCDIR)/ansidecl.h -strsignal.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -strtod.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h -strtol.o: config.h $(INCDIR)/safe-ctype.h -strtoul.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h -ternary.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \ - $(INCDIR)/ternary.h -vasprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -vfork.o: $(INCDIR)/ansidecl.h -vfprintf.o: $(INCDIR)/ansidecl.h -vprintf.o: $(INCDIR)/ansidecl.h -vsnprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -vsprintf.o: $(INCDIR)/ansidecl.h -waitpid.o: config.h -xatexit.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -xexit.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -xmalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -xmemdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -xstrdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h -xstrerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION) + +./spaces.o: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION) + +./splay-tree.o: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION) + +./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION) + +./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION) + +./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION) + +./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION) + +./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION) + +./strerror.o: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION) + +./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION) + +./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION) + +./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION) + +./strsignal.o: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION) + +./strstr.o: $(srcdir)/strstr.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION) + +./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION) + +./strtol.o: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION) + +./strtoul.o: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/safe-ctype.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION) + +./ternary.o: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h $(INCDIR)/ternary.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/ternary.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/ternary.c $(OUTPUT_OPTION) + +./tmpnam.o: $(srcdir)/tmpnam.c + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION) + +./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION) + +./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION) + +./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION) + +./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION) + +./vsnprintf.o: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION) + +./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION) + +./waitpid.o: $(srcdir)/waitpid.c config.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION) + +./xatexit.o: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION) + +./xexit.o: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION) + +./xmalloc.o: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION) + +./xmemdup.o: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION) + +./xstrdup.o: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION) + +./xstrerror.o: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/libiberty.h + if [ x"$(PICFLAG)" != x ]; then \ + $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \ + else true; fi + $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION) + diff --git a/libiberty/README b/libiberty/README index e8e9b33..886bd67 100644 --- a/libiberty/README +++ b/libiberty/README @@ -34,7 +34,7 @@ name of the function must be the same as the name of the file. * Add the source file name to CFILES. * Add the function to name to the funcs shell variable in - configure.in. + configure.ac. * Add the function to the AC_CHECK_FUNCS lists just after the setting of the funcs shell variable. These AC_CHECK_FUNCS calls diff --git a/libiberty/config.in b/libiberty/config.in index 50ed326..8e5071a 100644 --- a/libiberty/config.in +++ b/libiberty/config.in @@ -1,339 +1,376 @@ -/* config.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */ -#undef HAVE_SYS_WAIT_H - -/* Define if you have <vfork.h>. */ -#undef HAVE_VFORK_H - -/* Define as __inline if that's what the C compiler calls it. */ -#undef inline - -/* Define if your C compiler doesn't accept -c and -o together. */ -#undef NO_MINUS_C_MINUS_O - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef pid_t - -/* Define if you need to in order for stat and other things to work. */ -#undef _POSIX_SOURCE - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS +/* config.in. Generated from configure.ac by autoheader. */ +/* Define to `unsigned long' if <sys/types.h> doesn't define. */ +#undef uintptr_t -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME -/* Define vfork as fork if vfork does not work. */ -#undef vfork +/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ +#undef BYTEORDER -/* Define to `unsigned long' if <sys/types.h> doesn't define. */ -#undef uintptr_t +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END -/* Define if you have the _doprnt function. */ -#undef HAVE__DOPRNT +/* Define to 1 if you have the <alloca.h> header file. */ +#undef HAVE_ALLOCA_H -/* Define if you have the asprintf function. */ +/* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF -/* Define if you have the atexit function. */ +/* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT -/* Define if you have the basename function. */ +/* Define to 1 if you have the `basename' function. */ #undef HAVE_BASENAME -/* Define if you have the bcmp function. */ +/* Define to 1 if you have the `bcmp' function. */ #undef HAVE_BCMP -/* Define if you have the bcopy function. */ +/* Define to 1 if you have the `bcopy' function. */ #undef HAVE_BCOPY -/* Define if you have the bsearch function. */ +/* Define to 1 if you have the `bsearch' function. */ #undef HAVE_BSEARCH -/* Define if you have the bzero function. */ +/* Define to 1 if you have the `bzero' function. */ #undef HAVE_BZERO -/* Define if you have the calloc function. */ +/* Define to 1 if you have the `calloc' function. */ #undef HAVE_CALLOC -/* Define if you have the canonicalize_file_name function. */ +/* Define to 1 if you have the `canonicalize_file_name' function. */ #undef HAVE_CANONICALIZE_FILE_NAME -/* Define if you have the clock function. */ +/* Define to 1 if you have the `clock' function. */ #undef HAVE_CLOCK -/* Define if you have the ffs function. */ +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `ffs' function. */ #undef HAVE_FFS -/* Define if you have the getcwd function. */ +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD -/* Define if you have the getpagesize function. */ +/* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE -/* Define if you have the getrusage function. */ +/* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE -/* Define if you have the getsysinfo function. */ +/* Define to 1 if you have the `getsysinfo' function. */ #undef HAVE_GETSYSINFO -/* Define if you have the gettimeofday function. */ +/* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY -/* Define if you have the index function. */ +/* Define to 1 if you have the `index' function. */ #undef HAVE_INDEX -/* Define if you have the insque function. */ +/* Define to 1 if you have the `insque' function. */ #undef HAVE_INSQUE -/* Define if you have the memchr function. */ +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the <limits.h> header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */ +#undef HAVE_MACHINE_HAL_SYSINFO_H + +/* Define to 1 if you have the <malloc.h> header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the `memchr' function. */ #undef HAVE_MEMCHR -/* Define if you have the memcmp function. */ +/* Define to 1 if you have the `memcmp' function. */ #undef HAVE_MEMCMP -/* Define if you have the memcpy function. */ +/* Define to 1 if you have the `memcpy' function. */ #undef HAVE_MEMCPY -/* Define if you have the memmove function. */ +/* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE -/* Define if you have the mempcpy function. */ +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY -/* Define if you have the memset function. */ +/* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET -/* Define if you have the mkstemps function. */ +/* Define to 1 if you have the `mkstemps' function. */ #undef HAVE_MKSTEMPS -/* Define if you have the on_exit function. */ +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `on_exit' function. */ #undef HAVE_ON_EXIT -/* Define if you have the psignal function. */ +/* Define to 1 if you have the `psignal' function. */ #undef HAVE_PSIGNAL -/* Define if you have the pstat_getdynamic function. */ +/* Define to 1 if you have the `pstat_getdynamic' function. */ #undef HAVE_PSTAT_GETDYNAMIC -/* Define if you have the pstat_getstatic function. */ +/* Define to 1 if you have the `pstat_getstatic' function. */ #undef HAVE_PSTAT_GETSTATIC -/* Define if you have the putenv function. */ +/* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV -/* Define if you have the random function. */ +/* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM -/* Define if you have the realpath function. */ +/* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH -/* Define if you have the rename function. */ +/* Define to 1 if you have the `rename' function. */ #undef HAVE_RENAME -/* Define if you have the rindex function. */ +/* Define to 1 if you have the `rindex' function. */ #undef HAVE_RINDEX -/* Define if you have the sbrk function. */ +/* Define to 1 if you have the `sbrk' function. */ #undef HAVE_SBRK -/* Define if you have the setenv function. */ +/* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV -/* Define if you have the sigsetmask function. */ +/* Define to 1 if you have the `sigsetmask' function. */ #undef HAVE_SIGSETMASK -/* Define if you have the snprintf function. */ +/* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF -/* Define if you have the stpcpy function. */ +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY -/* Define if you have the stpncpy function. */ +/* Define to 1 if you have the `stpncpy' function. */ #undef HAVE_STPNCPY -/* Define if you have the strcasecmp function. */ +/* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP -/* Define if you have the strchr function. */ +/* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR -/* Define if you have the strdup function. */ +/* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP -/* Define if you have the strerror function. */ +/* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR -/* Define if you have the strncasecmp function. */ +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP -/* Define if you have the strrchr function. */ +/* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR -/* Define if you have the strsignal function. */ +/* Define to 1 if you have the `strsignal' function. */ #undef HAVE_STRSIGNAL -/* Define if you have the strstr function. */ +/* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR -/* Define if you have the strtod function. */ +/* Define to 1 if you have the `strtod' function. */ #undef HAVE_STRTOD -/* Define if you have the strtol function. */ +/* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL -/* Define if you have the strtoul function. */ +/* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL -/* Define if you have the sysconf function. */ +/* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF -/* Define if you have the sysctl function. */ +/* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL -/* Define if you have the sysmp function. */ +/* Define to 1 if you have the `sysmp' function. */ #undef HAVE_SYSMP -/* Define if you have the table function. */ -#undef HAVE_TABLE +/* Define if you have the sys_errlist variable. */ +#undef HAVE_SYS_ERRLIST -/* Define if you have the times function. */ -#undef HAVE_TIMES +/* Define to 1 if you have the <sys/file.h> header file. */ +#undef HAVE_SYS_FILE_H -/* Define if you have the tmpnam function. */ -#undef HAVE_TMPNAM +/* Define to 1 if you have the <sys/mman.h> header file. */ +#undef HAVE_SYS_MMAN_H -/* Define if you have the vasprintf function. */ -#undef HAVE_VASPRINTF +/* Define if you have the sys_nerr variable. */ +#undef HAVE_SYS_NERR -/* Define if you have the vfprintf function. */ -#undef HAVE_VFPRINTF +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H -/* Define if you have the vprintf function. */ -#undef HAVE_VPRINTF +/* Define to 1 if you have the <sys/pstat.h> header file. */ +#undef HAVE_SYS_PSTAT_H -/* Define if you have the vsnprintf function. */ -#undef HAVE_VSNPRINTF +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H -/* Define if you have the vsprintf function. */ -#undef HAVE_VSPRINTF +/* Define if you have the sys_siglist variable. */ +#undef HAVE_SYS_SIGLIST -/* Define if you have the waitpid function. */ -#undef HAVE_WAITPID +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H -/* Define if you have the <alloca.h> header file. */ -#undef HAVE_ALLOCA_H +/* Define to 1 if you have the <sys/sysctl.h> header file. */ +#undef HAVE_SYS_SYSCTL_H -/* Define if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H +/* Define to 1 if you have the <sys/sysinfo.h> header file. */ +#undef HAVE_SYS_SYSINFO_H -/* Define if you have the <limits.h> header file. */ -#undef HAVE_LIMITS_H +/* Define to 1 if you have the <sys/sysmp.h> header file. */ +#undef HAVE_SYS_SYSMP_H -/* Define if you have the <machine/hal_sysinfo.h> header file. */ -#undef HAVE_MACHINE_HAL_SYSINFO_H +/* Define to 1 if you have the <sys/systemcfg.h> header file. */ +#undef HAVE_SYS_SYSTEMCFG_H -/* Define if you have the <stdlib.h> header file. */ -#undef HAVE_STDLIB_H +/* Define to 1 if you have the <sys/table.h> header file. */ +#undef HAVE_SYS_TABLE_H -/* Define if you have the <string.h> header file. */ -#undef HAVE_STRING_H +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H -/* Define if you have the <strings.h> header file. */ -#undef HAVE_STRINGS_H +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H -/* Define if you have the <sys/file.h> header file. */ -#undef HAVE_SYS_FILE_H +/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H -/* Define if you have the <sys/mman.h> header file. */ -#undef HAVE_SYS_MMAN_H +/* Define to 1 if you have the `table' function. */ +#undef HAVE_TABLE -/* Define if you have the <sys/param.h> header file. */ -#undef HAVE_SYS_PARAM_H +/* Define to 1 if you have the `times' function. */ +#undef HAVE_TIMES -/* Define if you have the <sys/pstat.h> header file. */ -#undef HAVE_SYS_PSTAT_H +/* Define to 1 if you have the <time.h> header file. */ +#undef HAVE_TIME_H -/* Define if you have the <sys/resource.h> header file. */ -#undef HAVE_SYS_RESOURCE_H +/* Define to 1 if you have the `tmpnam' function. */ +#undef HAVE_TMPNAM -/* Define if you have the <sys/stat.h> header file. */ -#undef HAVE_SYS_STAT_H +/* Define if you have the \`uintptr_t' type. */ +#undef HAVE_UINTPTR_T -/* Define if you have the <sys/sysctl.h> header file. */ -#undef HAVE_SYS_SYSCTL_H +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H -/* Define if you have the <sys/sysinfo.h> header file. */ -#undef HAVE_SYS_SYSINFO_H +/* Define to 1 if you have the `vasprintf' function. */ +#undef HAVE_VASPRINTF -/* Define if you have the <sys/sysmp.h> header file. */ -#undef HAVE_SYS_SYSMP_H +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK -/* Define if you have the <sys/systemcfg.h> header file. */ -#undef HAVE_SYS_SYSTEMCFG_H +/* Define to 1 if you have the <vfork.h> header file. */ +#undef HAVE_VFORK_H -/* Define if you have the <sys/table.h> header file. */ -#undef HAVE_SYS_TABLE_H +/* Define to 1 if you have the `vfprintf' function. */ +#undef HAVE_VFPRINTF -/* Define if you have the <sys/time.h> header file. */ -#undef HAVE_SYS_TIME_H +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF -/* Define if you have the <time.h> header file. */ -#undef HAVE_TIME_H +/* Define to 1 if you have the `vsnprintf' function. */ +#undef HAVE_VSNPRINTF -/* Define if you have the <unistd.h> header file. */ -#undef HAVE_UNISTD_H +/* Define to 1 if you have the `vsprintf' function. */ +#undef HAVE_VSPRINTF -/* Define if you have the <malloc.h> header file. */ -#undef HAVE_MALLOC_H +/* Define to 1 if you have the `waitpid' function. */ +#undef HAVE_WAITPID -/* whether byteorder is bigendian */ -#undef WORDS_BIGENDIAN +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if you have the `_doprnt' function. */ +#undef HAVE__DOPRNT + +/* Define if you have the _system_configuration variable. */ +#undef HAVE__SYSTEM_CONFIGURATION /* Define if the host machine stores words of multi-word integers in big-endian order. */ #undef HOST_WORDS_BIG_ENDIAN -/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ -#undef BYTEORDER +/* Define if canonicalize_file_name is not declared in system header files. */ +#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME /* Define if errno must be declared even when <errno.h> is included. */ #undef NEED_DECLARATION_ERRNO -/* Define if you have the `uintptr_t' type. */ -#undef HAVE_UINTPTR_T +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O -/* Define if you have the sys_errlist variable. */ -#undef HAVE_SYS_ERRLIST +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT -/* Define if you have the sys_nerr variable. */ -#undef HAVE_SYS_NERR +/* Define to the full name of this package. */ +#undef PACKAGE_NAME -/* Define if you have the sys_siglist variable. */ -#undef HAVE_SYS_SIGLIST +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING -/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP - systems. This function is required for alloca.c support on those - systems. */ -#undef CRAY_STACKSEG_END +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION -/* Define if you know the direction of stack growth for your system; - otherwise it will be automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ +/* Define if you know the direction of stack growth for your system; otherwise + it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows + toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION -/* Define if you have the _system_configuration variable. */ -#undef HAVE__SYSTEM_CONFIGURATION +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS -/* Define if canonicalize_file_name is not declared in system header files. */ -#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* whether byteorder is bigendian */ +#undef WORDS_BIGENDIAN +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define as `__inline' if that's what the C compiler calls it, or to nothing + if it is not supported. */ +#undef inline + +/* Define to `int' if <sys/types.h> does not define. */ +#undef pid_t + +/* Define to `unsigned long' if <sys/types.h> does not define. */ +#undef uintptr_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/libiberty/configure b/libiberty/configure index 71f14e8..2f65976 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -5679,11 +5679,11 @@ fi # Figure out which version of pexecute to use. case "${host}" in - *-*-mingw* | *-*-winnt*) pexecute=pex-win32.o ;; - *-*-msdosdjgpp*) pexecute=pex-djgpp.o ;; - *-*-msdos*) pexecute=pex-msdos.o ;; - *-*-os2-emx*) pexecute=pex-os2.o ;; - *) pexecute=pex-unix.o ;; + *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;; + *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;; + *-*-msdos*) pexecute=./pex-msdos.o ;; + *-*-os2-emx*) pexecute=./pex-os2.o ;; + *) pexecute=./pex-unix.o ;; esac @@ -6134,6 +6134,16 @@ else fi + +L="" +for l in x $LIBOBJS; do + case $l in + x) ;; + *) L="$L ./$l" ;; + esac +done +LIBOBJS="$L" + # We need multilib support, but only if configuring for the target. ac_config_files="$ac_config_files Makefile testsuite/Makefile" ac_config_commands="$ac_config_commands default" diff --git a/libiberty/configure.in b/libiberty/configure.in deleted file mode 100644 index eb8a99d..0000000 --- a/libiberty/configure.in +++ /dev/null @@ -1,520 +0,0 @@ -dnl Process this file with autoconf to produce a configure script - -AC_PREREQ(2.57) -AC_INIT(xmalloc.c) - -# This works around the fact that libtool configuration may change LD -# for this particular configuration, but some shells, instead of -# keeping the changes in LD private, export them just because LD is -# exported. We don't use libtool yet, but some day we might, so... -ORIGINAL_LD_FOR_MULTILIBS=$LD - -dnl We use these options to decide which functions to include. -AC_ARG_WITH(target-subdir, -[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target]) -AC_ARG_WITH(build-subdir, -[ --with-build-subdir=SUBDIR Configuring in a subdirectory for build]) -AC_ARG_WITH(cross-host, -[ --with-cross-host=HOST Configuring with a cross compiler]) -AC_ARG_WITH(newlib, -[ --with-newlib Configuring with newlib]) - -if test "${srcdir}" = "."; then - if test -n "${with_build_subdir}"; then - libiberty_topdir="${srcdir}/../.." - with_target_subdir= - elif test -z "${with_target_subdir}"; then - libiberty_topdir="${srcdir}/.." - else - if test "${with_target_subdir}" != "."; then - libiberty_topdir="${srcdir}/${with_multisrctop}../.." - else - libiberty_topdir="${srcdir}/${with_multisrctop}.." - fi - fi -else - libiberty_topdir="${srcdir}/.." -fi -AC_SUBST(libiberty_topdir) -AC_CONFIG_AUX_DIR($libiberty_topdir) - -dnl Very limited version of automake's enable-maintainer-mode - -AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode - enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - maintainer_mode=$enableval, - maintainer_mode=no) - -AC_MSG_RESULT($maintainer_mode) - -if test "$maintainer_mode" = "yes"; then - MAINT='' - NOTMAINT='#' -else - MAINT='#' - NOTMAINT='' -fi -AC_SUBST(MAINT)dnl -AC_SUBST(NOTMAINT)dnl - -# Do we have a single-tree copy of texinfo? Even if we do, we can't -# rely on it - libiberty is built before texinfo. -AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) -if test "x$MAKEINFO" = "x"; then - MAKEINFO="@echo makeinfo missing; true" - BUILD_INFO= -else - BUILD_INFO=info - case "$MAKEINFO" in - */missing\ makeinfo*) - BUILD_INFO= - AC_MSG_WARN([ -*** Makeinfo is missing. Info documentation will not be built.]) - ;; - *) - case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in - x*\ [[1-3]].* ) - MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true" - BUILD_INFO= - AC_MSG_WARN([ -*** Makeinfo is too old. Info documentation will not be built.]) - ;; - esac - ;; - esac -fi -AC_SUBST(MAKEINFO) -AC_SUBST(BUILD_INFO) - -AC_CHECK_PROG(PERL, perl, perl, ) -if test x"$PERL" = x""; then - HAVE_PERL='#' -else - HAVE_PERL='' -fi -AC_SUBST(HAVE_PERL) - -AC_CANONICAL_HOST - -dnl When we start using automake: -dnl AM_INIT_AUTOMAKE(libiberty, 1.0) - -dnl These must be called before AM_PROG_LIBTOOL, because it may want -dnl to call AC_CHECK_PROG. -AC_CHECK_TOOL(AR, ar) -AC_CHECK_TOOL(RANLIB, ranlib, :) - -GCC_NO_EXECUTABLES -AC_PROG_CC -AC_PROG_CPP_WERROR - -if test x$GCC = xyes; then - ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic' -fi -AC_SUBST(ac_libiberty_warn_cflags) - -AC_PROG_CC_C_O -# autoconf is lame and doesn't give us any substitution variable for this. -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then - NO_MINUS_C_MINUS_O=yes -else - OUTPUT_OPTION='-o $@' -fi -AC_SUBST(NO_MINUS_C_MINUS_O) -AC_SUBST(OUTPUT_OPTION) - -AC_C_CONST -AC_C_INLINE -AC_C_BIGENDIAN_CROSS - -dnl When we start using libtool: -dnl Default to a non shared library. This may be overridden by the -dnl configure option --enable-shared. -dnl AM_DISABLE_SHARED - -dnl When we start using libtool: -dnl AM_PROG_LIBTOOL - -dnl When we start using automake: -dnl AM_CONFIG_HEADER(config.h:config.in) -AC_CONFIG_HEADER(config.h:config.in) - -dnl When we start using automake: -dnl AM_MAINTAINER_MODE -dnl AC_EXEEXT - -dnl When we start using automake: -dnl AM_PROG_INSTALL -AC_PROG_INSTALL - -. ${srcdir}/config.table -host_makefile_frag=${frag} -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 limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h) -AC_HEADER_SYS_WAIT -AC_HEADER_TIME - -libiberty_AC_DECLARE_ERRNO - -AC_CHECK_TYPE(uintptr_t, unsigned long) -# Given the above check, we always have uintptr_t or a fallback -# definition. So define HAVE_UINTPTR_T in case any imported code -# relies on it. -AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.]) - -AC_TYPE_PID_T - -# This is the list of functions which libiberty will provide if they -# are not available on the host. - -funcs="asprintf" -funcs="$funcs atexit" -funcs="$funcs basename" -funcs="$funcs bcmp" -funcs="$funcs bcopy" -funcs="$funcs bsearch" -funcs="$funcs bzero" -funcs="$funcs calloc" -funcs="$funcs clock" -funcs="$funcs ffs" -funcs="$funcs getcwd" -funcs="$funcs getpagesize" -funcs="$funcs index" -funcs="$funcs insque" -funcs="$funcs memchr" -funcs="$funcs memcmp" -funcs="$funcs memcpy" -funcs="$funcs memmove" -funcs="$funcs mempcpy" -funcs="$funcs memset" -funcs="$funcs mkstemps" -funcs="$funcs putenv" -funcs="$funcs random" -funcs="$funcs rename" -funcs="$funcs rindex" -funcs="$funcs setenv" -funcs="$funcs snprintf" -funcs="$funcs sigsetmask" -funcs="$funcs stpcpy" -funcs="$funcs stpncpy" -funcs="$funcs strcasecmp" -funcs="$funcs strchr" -funcs="$funcs strdup" -funcs="$funcs strncasecmp" -funcs="$funcs strrchr" -funcs="$funcs strstr" -funcs="$funcs strtod" -funcs="$funcs strtol" -funcs="$funcs strtoul" -funcs="$funcs tmpnam" -funcs="$funcs vasprintf" -funcs="$funcs vfprintf" -funcs="$funcs vprintf" -funcs="$funcs vsnprintf" -funcs="$funcs vsprintf" -funcs="$funcs waitpid" - -# Also in the old function.def file: alloca, vfork, getopt. - -vars="sys_errlist sys_nerr sys_siglist" - -checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times sbrk gettimeofday" -checkfuncs="$checkfuncs realpath canonicalize_file_name pstat_getstatic pstat_getdynamic sysmp" -checkfuncs="$checkfuncs getsysinfo table sysctl" - -# 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 bsearch bzero calloc clock \ - getcwd getpagesize index insque mkstemps memchr memcmp memcpy \ - memmove mempcpy memset putenv random rename rindex sigsetmask \ - strcasecmp setenv stpcpy stpncpy strchr strdup strncasecmp strrchr strstr \ - strtod strtol strtoul tmpnam vasprintf vfprintf vprintf \ - vsprintf waitpid getrusage on_exit psignal strerror strsignal \ - sysconf times sbrk gettimeofday ffs snprintf vsnprintf \ - pstat_getstatic pstat_getdynamic sysmp getsysinfo table sysctl \ - realpath canonicalize_file_name) - AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.]) - AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.]) - AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.]) -fi - -# For each of these functions, if the host does not provide the -# function we want to put FN.o in LIBOBJS, and if the host does -# provide the function, we want to define HAVE_FN in config.h. - -setobjs= -CHECK= -target_header_dir= -if test -n "${with_target_subdir}"; then - - # We are being configured as a target library. AC_REPLACE_FUNCS - # may not work correctly, because the compiler may not be able to - # link executables. Note that we may still be being configured - # native. - - # If we are being configured for newlib, we know which functions - # newlib provide and which ones we will be expected to provide. - - if test "x${with_newlib}" = "xyes"; then - AC_LIBOBJ([asprintf]) - AC_LIBOBJ([basename]) - AC_LIBOBJ([insque]) - AC_LIBOBJ([random]) - AC_LIBOBJ([strdup]) - AC_LIBOBJ([vasprintf]) - - for f in $funcs; do - case "$f" in - asprintf | basename | insque | random | strdup | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # newlib doesnt provide any of the variables in $vars, so we - # dont have to check them here. - - # Of the functions in $checkfuncs, newlib only has strerror. - AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR) - - setobjs=yes - - fi - - # We may wish to install the target headers somewhere. - AC_ARG_ENABLE(install-libiberty, - [ --enable-install-libiberty Install headers for end users], - enable_install_libiberty=$enableval, - enable_install_libiberty=no)dnl - - # Option parsed, now set things appropriately. - case x"$enable_install_libiberty" in - xyes|x) - target_header_dir=libiberty - ;; - xno) - target_header_dir= - ;; - *) - # This could be sanity-checked in various ways... - target_header_dir="${enable_install_libiberty}" - ;; - esac - - -else - - # Not a target library, so we set things up to run the test suite. - CHECK=check-cplus-dem - -fi - -AC_SUBST(CHECK) -AC_SUBST(target_header_dir) - -case "${host}" in - *-*-cygwin* | *-*-mingw*) - AC_DEFINE_NOAUTOHEADER(HAVE_SYS_ERRLIST) - AC_DEFINE_NOAUTOHEADER(HAVE_SYS_NERR) - ;; -esac - -if test -z "${setobjs}"; then - case "${host}" in - - *-*-vxworks*) - # Handle VxWorks configuration specially, since on VxWorks the - # libraries are actually on the target board, not in the file - # system. - AC_LIBOBJ([basename]) - AC_LIBOBJ([getpagesize]) - AC_LIBOBJ([insque]) - AC_LIBOBJ([random]) - AC_LIBOBJ([strcasecmp]) - AC_LIBOBJ([strncasecmp]) - AC_LIBOBJ([strdup]) - AC_LIBOBJ([vfork]) - AC_LIBOBJ([waitpid]) - AC_LIBOBJ([vasprintf]) - for f in $funcs; do - case "$f" in - basename | getpagesize | insque | random | strcasecmp) - ;; - strncasecmp | strdup | vfork | waitpid | vasprintf) - ;; - *) - n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - ;; - esac - done - - # VxWorks doesn't provide any of the variables in $vars, so we - # don't have to check them here. - - # Of the functions in $checkfuncs, VxWorks only has strerror. - AC_DEFINE_NOAUTOHEADER(HAVE_STRERROR) - - setobjs=yes - ;; - - esac -fi - -if test -z "${setobjs}"; then - - case "${host}" in - - *-*-cygwin*) - # The Cygwin library actually uses a couple of files from - # libiberty when it is built. If we are building a native - # Cygwin, and we run the tests, we will appear to have these - # files. However, when we go on to build winsup, we will wind up - # with a library which does not have the files, since they should - # have come from libiberty. - - # We handle this by removing the functions the winsup library - # provides from our shell variables, so that they appear to be - # missing. - - # DJ - only if we're *building* cygwin, not just building *with* cygwin - - if test -n "${with_target_subdir}" - then - funcs="`echo $funcs | sed -e 's/random//'`" - AC_LIBOBJ([random]) - vars="`echo $vars | sed -e 's/sys_siglist//'`" - checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`" - fi - ;; - - *-*-mingw32*) - # Under mingw32, sys_nerr and sys_errlist exist, but they are - # macros, so the test below won't find them. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-uwin*) - # Under some versions of uwin, vfork is notoriously buggy and the test - # 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. - libiberty_cv_var_sys_nerr=yes - libiberty_cv_var_sys_errlist=yes - ;; - - *-*-*vms*) - # Under VMS, vfork works very different than on Unix. The standard test - # won't work, and it isn't easily adaptable. It makes more sense to - # just force it. - ac_cv_func_vfork_works=yes - ;; - - esac - - # We haven't set the list of objects yet. Use the standard autoconf - # tests. This will only work if the compiler works. - AC_ISC_POSIX - AC_REPLACE_FUNCS($funcs) - libiberty_AC_FUNC_C_ALLOCA - AC_FUNC_VFORK - if test $ac_cv_func_vfork_works = no; then - AC_LIBOBJ([vfork]) - fi - # We only need _doprnt if we might use it to implement v*printf. - if test $ac_cv_func_vprintf != yes \ - || test $ac_cv_func_vfprintf != yes \ - || test $ac_cv_func_vsprintf != yes; then - AC_REPLACE_FUNCS(_doprnt) - else - AC_CHECK_FUNCS(_doprnt) - fi - - for v in $vars; do - AC_MSG_CHECKING([for $v]) - AC_CACHE_VAL(libiberty_cv_var_$v, - [AC_TRY_LINK([int *p;], [extern int $v []; p = $v;], - [eval "libiberty_cv_var_$v=yes"], - [eval "libiberty_cv_var_$v=no"])]) - if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then - AC_MSG_RESULT(yes) - n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` - AC_DEFINE_UNQUOTED($n) - else - AC_MSG_RESULT(no) - fi - done - - # special check for _system_configuration because AIX <4.3.2 do not - # contain the `physmem' member. - AC_MSG_CHECKING([for external symbol _system_configuration]) - AC_TRY_COMPILE([#include <sys/systemcfg.h>], - [double x = _system_configuration.physmem;], - [AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1, - [Define if you have the _system_configuration variable.])], - [AC_MSG_RESULT([no])]) - - AC_CHECK_FUNCS($checkfuncs) - libiberty_NEED_DECLARATION(canonicalize_file_name) -fi - -# Figure out which version of pexecute to use. -case "${host}" in - *-*-mingw* | *-*-winnt*) pexecute=pex-win32.o ;; - *-*-msdosdjgpp*) pexecute=pex-djgpp.o ;; - *-*-msdos*) pexecute=pex-msdos.o ;; - *-*-os2-emx*) pexecute=pex-os2.o ;; - *) pexecute=pex-unix.o ;; -esac -AC_SUBST(pexecute) - -libiberty_AC_FUNC_STRNCMP - -# Install a library built with a cross compiler in $(tooldir) rather -# than $(libdir). -if test -z "${with_cross_host}"; then - INSTALL_DEST=libdir -else - INSTALL_DEST=tooldir -fi -AC_SUBST(INSTALL_DEST) - -# We need multilib support, but only if configuring for the target. -AC_OUTPUT(Makefile testsuite/Makefile, -[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h -if test -n "$CONFIG_FILES"; then - if test -n "${with_build_subdir}" || test -n "${with_target_subdir}"; then - # FIXME: We shouldn't need to set ac_file - ac_file=Makefile - LD="${ORIGINAL_LD_FOR_MULTILIBS}" - . ${libiberty_topdir}/config-ml.in - fi -fi], -srcdir=${srcdir} -host=${host} -target=${target} -with_target_subdir=${with_target_subdir} -with_build_subdir=${with_build_subdir} -with_multisubdir=${with_multisubdir} -ac_configure_args="--enable-multilib ${ac_configure_args}" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" -libiberty_topdir=${libiberty_topdir} -) diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 7a806dc..19f191e 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -1,5 +1,5 @@ /* Demangler for g++ V3 ABI. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2004 Free Software Foundation, Inc. Written by Ian Lance Taylor <ian@wasabisystems.com>. This file is part of the libiberty library, which is part of GCC. @@ -45,6 +45,22 @@ enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name) enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name) + Also, the interface to the component list is public, and defined in + demangle.h. The interface consists of these types, which are + defined in demangle.h: + enum demangle_component_type + struct demangle_component + and these functions defined in this file: + cplus_demangle_fill_name + cplus_demangle_fill_extended_operator + cplus_demangle_fill_ctor + cplus_demangle_fill_dtor + cplus_demangle_print + and other functions defined in the file cp-demint.c. + + This file also defines some other functions and variables which are + only to be used by the file cp-demint.c. + Preprocessor macros you can define while compiling this file: IN_LIBGCC2 @@ -54,7 +70,8 @@ instead of cplus_demangle_v3() and java_demangle_v3(). IN_GLIBCPP_V3 - If defined, this file defines only __cxa_demangle(). + If defined, this file defines only __cxa_demangle(), and no other + publically visible functions or variables. STANDALONE_DEMANGLER If defined, this file defines a main() function which demangles @@ -81,6 +98,68 @@ #include "ansidecl.h" #include "libiberty.h" #include "demangle.h" +#include "cp-demangle.h" + +/* If IN_GLIBCPP_V3 is defined, some functions are made static. We + also rename them via #define to avoid compiler errors when the + static definition conflicts with the extern declaration in a header + file. */ +#ifdef IN_GLIBCPP_V3 + +#define CP_STATIC_IF_GLIBCPP_V3 static + +#define cplus_demangle_fill_name d_fill_name +static int +d_fill_name PARAMS ((struct demangle_component *, const char *, int)); + +#define cplus_demangle_fill_extended_operator d_fill_extended_operator +static int +d_fill_extended_operator PARAMS ((struct demangle_component *, int, + struct demangle_component *)); + +#define cplus_demangle_fill_ctor d_fill_ctor +static int +d_fill_ctor PARAMS ((struct demangle_component *, enum gnu_v3_ctor_kinds, + struct demangle_component *)); + +#define cplus_demangle_fill_dtor d_fill_dtor +static int +d_fill_dtor PARAMS ((struct demangle_component *, enum gnu_v3_dtor_kinds, + struct demangle_component *)); + +#define cplus_demangle_mangled_name d_mangled_name +static struct demangle_component * +d_mangled_name PARAMS ((struct d_info *, int)); + +#define cplus_demangle_type d_type +static struct demangle_component * +d_type PARAMS ((struct d_info *)); + +#define cplus_demangle_print d_print +static char * +d_print PARAMS ((int, const struct demangle_component *, int, size_t *)); + +#define cplus_demangle_init_info d_init_info +static void +d_init_info PARAMS ((const char *, int, size_t, struct d_info *)); + +#else /* ! defined(IN_GLIBCPP_V3) */ +#define CP_STATIC_IF_GLIBCPP_V3 +#endif /* ! defined(IN_GLIBCPP_V3) */ + +/* See if the compiler supports dynamic arrays. */ + +#ifdef __GNUC__ +#define CP_DYNAMIC_ARRAYS +#else +#ifdef __STDC__ +#ifdef __STDC_VERSION__ +#if __STDC_VERSION__ >= 199901L +#define CP_DYNAMIC_ARRAYS +#endif /* __STDC__VERSION >= 199901L */ +#endif /* defined (__STDC_VERSION__) */ +#endif /* defined (__STDC__) */ +#endif /* ! defined (__GNUC__) */ /* We avoid pulling in the ctype tables, to prevent pulling in additional unresolved symbols when this code is used in a library. @@ -101,46 +180,6 @@ #define ANONYMOUS_NAMESPACE_PREFIX_LEN \ (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1) -/* Information we keep for operators. */ - -struct d_operator_info -{ - /* Mangled name. */ - const char *code; - /* Real name. */ - const char *name; - /* Number of arguments. */ - int args; -}; - -/* How to print the value of a builtin type. */ - -enum d_builtin_type_print -{ - /* Print as (type)val. */ - D_PRINT_DEFAULT, - /* Print as integer. */ - D_PRINT_INT, - /* Print as long, with trailing `l'. */ - D_PRINT_LONG, - /* Print as bool. */ - D_PRINT_BOOL, - /* Print in usual way, but here to detect void. */ - D_PRINT_VOID -}; - -/* Information we keep for a builtin type. */ - -struct d_builtin_type_info -{ - /* Type name. */ - const char *name; - /* Type name when using Java. */ - const char *java_name; - /* How to print a value of this type. */ - enum d_builtin_type_print print; -}; - /* Information we keep for the standard substitutions. */ struct d_standard_sub_info @@ -149,228 +188,26 @@ struct d_standard_sub_info char code; /* The simple string it expands to. */ const char *simple_expansion; + /* The length of the simple expansion. */ + int simple_len; /* The results of a full, verbose, expansion. This is used when qualifying a constructor/destructor, or when in verbose mode. */ const char *full_expansion; + /* The length of the full expansion. */ + int full_len; /* What to set the last_name field of d_info to; NULL if we should not set it. This is only relevant when qualifying a constructor/destructor. */ const char *set_last_name; + /* The length of set_last_name. */ + int set_last_name_len; }; -/* Component types found in mangled names. */ - -enum d_comp_type -{ - /* A name. */ - D_COMP_NAME, - /* A qualified name. */ - D_COMP_QUAL_NAME, - /* A typed name. */ - D_COMP_TYPED_NAME, - /* A template. */ - D_COMP_TEMPLATE, - /* A template parameter. */ - D_COMP_TEMPLATE_PARAM, - /* A constructor. */ - D_COMP_CTOR, - /* A destructor. */ - D_COMP_DTOR, - /* A vtable. */ - D_COMP_VTABLE, - /* A VTT structure. */ - D_COMP_VTT, - /* A construction vtable. */ - D_COMP_CONSTRUCTION_VTABLE, - /* A typeinfo structure. */ - D_COMP_TYPEINFO, - /* A typeinfo name. */ - D_COMP_TYPEINFO_NAME, - /* A typeinfo function. */ - D_COMP_TYPEINFO_FN, - /* A thunk. */ - D_COMP_THUNK, - /* A virtual thunk. */ - D_COMP_VIRTUAL_THUNK, - /* A covariant thunk. */ - D_COMP_COVARIANT_THUNK, - /* A Java class. */ - D_COMP_JAVA_CLASS, - /* A guard variable. */ - D_COMP_GUARD, - /* A reference temporary. */ - D_COMP_REFTEMP, - /* A standard substitution. */ - D_COMP_SUB_STD, - /* The restrict qualifier. */ - D_COMP_RESTRICT, - /* The volatile qualifier. */ - D_COMP_VOLATILE, - /* The const qualifier. */ - D_COMP_CONST, - /* The restrict qualifier modifying a member function. */ - D_COMP_RESTRICT_THIS, - /* The volatile qualifier modifying a member function. */ - D_COMP_VOLATILE_THIS, - /* The const qualifier modifying a member function. */ - D_COMP_CONST_THIS, - /* A vendor qualifier. */ - D_COMP_VENDOR_TYPE_QUAL, - /* A pointer. */ - D_COMP_POINTER, - /* A reference. */ - D_COMP_REFERENCE, - /* A complex type. */ - D_COMP_COMPLEX, - /* An imaginary type. */ - D_COMP_IMAGINARY, - /* A builtin type. */ - D_COMP_BUILTIN_TYPE, - /* A vendor's builtin type. */ - D_COMP_VENDOR_TYPE, - /* A function type. */ - D_COMP_FUNCTION_TYPE, - /* An array type. */ - D_COMP_ARRAY_TYPE, - /* A pointer to member type. */ - D_COMP_PTRMEM_TYPE, - /* An argument list. */ - D_COMP_ARGLIST, - /* A template argument list. */ - D_COMP_TEMPLATE_ARGLIST, - /* An operator. */ - D_COMP_OPERATOR, - /* An extended operator. */ - D_COMP_EXTENDED_OPERATOR, - /* A typecast. */ - D_COMP_CAST, - /* A unary expression. */ - D_COMP_UNARY, - /* A binary expression. */ - D_COMP_BINARY, - /* Arguments to a binary expression. */ - D_COMP_BINARY_ARGS, - /* A trinary expression. */ - D_COMP_TRINARY, - /* Arguments to a trinary expression. */ - D_COMP_TRINARY_ARG1, - D_COMP_TRINARY_ARG2, - /* A literal. */ - D_COMP_LITERAL, - /* A negative literal. */ - D_COMP_LITERAL_NEG -}; - -/* A component of the mangled name. */ - -struct d_comp -{ - /* The type of this component. */ - enum d_comp_type type; - union - { - /* For D_COMP_NAME. */ - struct - { - /* A pointer to the name (not NULL terminated) and it's - length. */ - const char *s; - int len; - } s_name; - - /* For D_COMP_OPERATOR. */ - struct - { - /* Operator. */ - const struct d_operator_info *op; - } s_operator; - - /* For D_COMP_EXTENDED_OPERATOR. */ - struct - { - /* Number of arguments. */ - int args; - /* Name. */ - struct d_comp *name; - } s_extended_operator; - - /* For D_COMP_CTOR. */ - struct - { - enum gnu_v3_ctor_kinds kind; - struct d_comp *name; - } s_ctor; - - /* For D_COMP_DTOR. */ - struct - { - enum gnu_v3_dtor_kinds kind; - struct d_comp *name; - } s_dtor; - - /* For D_COMP_BUILTIN_TYPE. */ - struct - { - const struct d_builtin_type_info *type; - } s_builtin; - - /* For D_COMP_SUB_STD. */ - struct - { - const char* string; - } s_string; - - /* For D_COMP_TEMPLATE_PARAM. */ - struct - { - long number; - } s_number; - - /* For other types. */ - struct - { - struct d_comp *left; - struct d_comp *right; - } s_binary; - - } u; -}; +/* Accessors for subtrees of struct demangle_component. */ #define d_left(dc) ((dc)->u.s_binary.left) #define d_right(dc) ((dc)->u.s_binary.right) -/* The information structure we pass around. */ - -struct d_info -{ - /* The string we are demangling. */ - const char *s; - /* The options passed to the demangler. */ - int options; - /* The next character in the string to consider. */ - const char *n; - /* The array of components. */ - struct d_comp *comps; - /* The index of the next available component. */ - int next_comp; - /* The number of available component structures. */ - int num_comps; - /* The array of substitutions. */ - struct d_comp **subs; - /* The index of the next substitution. */ - int next_sub; - /* The number of available entries in the subs array. */ - int num_subs; - /* The last name we saw, for constructors and destructors. */ - struct d_comp *last_name; -}; - -#define d_peek_char(di) (*((di)->n)) -#define d_peek_next_char(di) ((di)->n[1]) -#define d_advance(di, i) ((di)->n += (i)) -#define d_next_char(di) (*((di)->n++)) -#define d_str(di) ((di)->n) - /* A list of templates. This is used while printing. */ struct d_print_template @@ -378,7 +215,7 @@ struct d_print_template /* Next template on the list. */ struct d_print_template *next; /* This template. */ - const struct d_comp *template; + const struct demangle_component *template; }; /* A list of type modifiers. This is used while printing. */ @@ -389,7 +226,7 @@ struct d_print_mod in which they appeared in the mangled string. */ struct d_print_mod *next; /* The modifier. */ - const struct d_comp *mod; + const struct demangle_component *mod; /* Whether this modifier was printed. */ int printed; /* The list of templates which applies to this modifier. */ @@ -442,105 +279,193 @@ struct d_print_info } \ while (0) -#define d_append_string(dpi, s) \ - do \ - { \ - size_t d_append_string_len = strlen (s); \ - d_append_buffer ((dpi), (s), d_append_string_len); \ - } \ - while (0) +#define d_append_string_constant(dpi, s) \ + d_append_buffer (dpi, (s), sizeof (s) - 1) #define d_last_char(dpi) \ ((dpi)->buf == NULL || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1]) #ifdef CP_DEMANGLE_DEBUG -static void d_dump PARAMS ((struct d_comp *, int)); +static void +d_dump PARAMS ((struct demangle_component *, int)); #endif -static struct d_comp *d_make_empty PARAMS ((struct d_info *, - enum d_comp_type)); -static struct d_comp *d_make_comp PARAMS ((struct d_info *, enum d_comp_type, - struct d_comp *, struct d_comp *)); -static struct d_comp *d_make_name PARAMS ((struct d_info *, const char *, - int)); -static struct d_comp *d_make_builtin_type PARAMS ((struct d_info *, - const struct d_builtin_type_info *)); -static struct d_comp *d_make_operator PARAMS ((struct d_info *, - const struct d_operator_info *)); -static struct d_comp *d_make_extended_operator PARAMS ((struct d_info *, - int, - struct d_comp *)); -static struct d_comp *d_make_ctor PARAMS ((struct d_info *, - enum gnu_v3_ctor_kinds, - struct d_comp *)); -static struct d_comp *d_make_dtor PARAMS ((struct d_info *, - enum gnu_v3_dtor_kinds, - struct d_comp *)); -static struct d_comp *d_make_template_param PARAMS ((struct d_info *, long)); -static struct d_comp *d_make_sub PARAMS ((struct d_info *, const char *)); -static struct d_comp *d_mangled_name PARAMS ((struct d_info *, int)); -static int has_return_type PARAMS ((struct d_comp *)); -static int is_ctor_dtor_or_conversion PARAMS ((struct d_comp *)); -static struct d_comp *d_encoding PARAMS ((struct d_info *, int)); -static struct d_comp *d_name PARAMS ((struct d_info *)); -static struct d_comp *d_nested_name PARAMS ((struct d_info *)); -static struct d_comp *d_prefix PARAMS ((struct d_info *)); -static struct d_comp *d_unqualified_name PARAMS ((struct d_info *)); -static struct d_comp *d_source_name PARAMS ((struct d_info *)); -static long d_number PARAMS ((struct d_info *)); -static struct d_comp *d_identifier PARAMS ((struct d_info *, int)); -static struct d_comp *d_operator_name PARAMS ((struct d_info *)); -static struct d_comp *d_special_name PARAMS ((struct d_info *)); -static int d_call_offset PARAMS ((struct d_info *, int)); -static struct d_comp *d_ctor_dtor_name PARAMS ((struct d_info *)); -static struct d_comp *d_type PARAMS ((struct d_info *)); -static struct d_comp **d_cv_qualifiers PARAMS ((struct d_info *, - struct d_comp **, int)); -static struct d_comp *d_function_type PARAMS ((struct d_info *)); -static struct d_comp *d_bare_function_type PARAMS ((struct d_info *, int)); -static struct d_comp *d_class_enum_type PARAMS ((struct d_info *)); -static struct d_comp *d_array_type PARAMS ((struct d_info *)); -static struct d_comp *d_pointer_to_member_type PARAMS ((struct d_info *)); -static struct d_comp *d_template_param PARAMS ((struct d_info *)); -static struct d_comp *d_template_args PARAMS ((struct d_info *)); -static struct d_comp *d_template_arg PARAMS ((struct d_info *)); -static struct d_comp *d_expression PARAMS ((struct d_info *)); -static struct d_comp *d_expr_primary PARAMS ((struct d_info *)); -static struct d_comp *d_local_name PARAMS ((struct d_info *)); -static int d_discriminator PARAMS ((struct d_info *)); -static int d_add_substitution PARAMS ((struct d_info *, struct d_comp *)); -static struct d_comp *d_substitution PARAMS ((struct d_info *, int)); -static void d_print_resize PARAMS ((struct d_print_info *, size_t)); -static void d_print_append_char PARAMS ((struct d_print_info *, int)); -static void d_print_append_buffer PARAMS ((struct d_print_info *, const char *, - size_t)); -static void d_print_error PARAMS ((struct d_print_info *)); -static char *d_print PARAMS ((int, const struct d_comp *, size_t *)); -static void d_print_comp PARAMS ((struct d_print_info *, - const struct d_comp *)); -static void d_print_identifier PARAMS ((struct d_print_info *, const char *, - int)); -static void d_print_mod_list PARAMS ((struct d_print_info *, - struct d_print_mod *, int)); -static void d_print_mod PARAMS ((struct d_print_info *, - const struct d_comp *)); -static void d_print_function_type PARAMS ((struct d_print_info *, - const struct d_comp *, - struct d_print_mod *)); -static void d_print_array_type PARAMS ((struct d_print_info *, - const struct d_comp *, - struct d_print_mod *)); -static void d_print_expr_op PARAMS ((struct d_print_info *, - const struct d_comp *)); -static void d_print_cast PARAMS ((struct d_print_info *, - const struct d_comp *)); -static int d_init_info PARAMS ((const char *, int, size_t, struct d_info *)); -static char *d_demangle PARAMS ((const char *, int, size_t *)); + +static struct demangle_component * +d_make_empty PARAMS ((struct d_info *)); + +static struct demangle_component * +d_make_comp PARAMS ((struct d_info *, enum demangle_component_type, + struct demangle_component *, + struct demangle_component *)); + +static struct demangle_component * +d_make_name PARAMS ((struct d_info *, const char *, int)); + +static struct demangle_component * +d_make_builtin_type PARAMS ((struct d_info *, + const struct demangle_builtin_type_info *)); + +static struct demangle_component * +d_make_operator PARAMS ((struct d_info *, + const struct demangle_operator_info *)); + +static struct demangle_component * +d_make_extended_operator PARAMS ((struct d_info *, int, + struct demangle_component *)); + +static struct demangle_component * +d_make_ctor PARAMS ((struct d_info *, enum gnu_v3_ctor_kinds, + struct demangle_component *)); + +static struct demangle_component * +d_make_dtor PARAMS ((struct d_info *, enum gnu_v3_dtor_kinds, + struct demangle_component *)); + +static struct demangle_component * +d_make_template_param PARAMS ((struct d_info *, long)); + +static struct demangle_component * +d_make_sub PARAMS ((struct d_info *, const char *, int)); + +static int +has_return_type PARAMS ((struct demangle_component *)); + +static int +is_ctor_dtor_or_conversion PARAMS ((struct demangle_component *)); + +static struct demangle_component * +d_encoding PARAMS ((struct d_info *, int)); + +static struct demangle_component * +d_name PARAMS ((struct d_info *)); + +static struct demangle_component * +d_nested_name PARAMS ((struct d_info *)); + +static struct demangle_component * +d_prefix PARAMS ((struct d_info *)); + +static struct demangle_component * +d_unqualified_name PARAMS ((struct d_info *)); + +static struct demangle_component * +d_source_name PARAMS ((struct d_info *)); + +static long +d_number PARAMS ((struct d_info *)); + +static struct demangle_component * +d_identifier PARAMS ((struct d_info *, int)); + +static struct demangle_component * +d_operator_name PARAMS ((struct d_info *)); + +static struct demangle_component * +d_special_name PARAMS ((struct d_info *)); + +static int +d_call_offset PARAMS ((struct d_info *, int)); + +static struct demangle_component * +d_ctor_dtor_name PARAMS ((struct d_info *)); + +static struct demangle_component ** +d_cv_qualifiers PARAMS ((struct d_info *, struct demangle_component **, int)); + +static struct demangle_component * +d_function_type PARAMS ((struct d_info *)); + +static struct demangle_component * +d_bare_function_type PARAMS ((struct d_info *, int)); + +static struct demangle_component * +d_class_enum_type PARAMS ((struct d_info *)); + +static struct demangle_component * +d_array_type PARAMS ((struct d_info *)); + +static struct demangle_component * +d_pointer_to_member_type PARAMS ((struct d_info *)); + +static struct demangle_component * +d_template_param PARAMS ((struct d_info *)); + +static struct demangle_component * +d_template_args PARAMS ((struct d_info *)); + +static struct demangle_component * +d_template_arg PARAMS ((struct d_info *)); + +static struct demangle_component * +d_expression PARAMS ((struct d_info *)); + +static struct demangle_component * +d_expr_primary PARAMS ((struct d_info *)); + +static struct demangle_component * +d_local_name PARAMS ((struct d_info *)); + +static int +d_discriminator PARAMS ((struct d_info *)); + +static int +d_add_substitution PARAMS ((struct d_info *, struct demangle_component *)); + +static struct demangle_component * +d_substitution PARAMS ((struct d_info *, int)); + +static void +d_print_resize PARAMS ((struct d_print_info *, size_t)); + +static void +d_print_append_char PARAMS ((struct d_print_info *, int)); + +static void +d_print_append_buffer PARAMS ((struct d_print_info *, const char *, size_t)); + +static void +d_print_error PARAMS ((struct d_print_info *)); + +static void +d_print_comp PARAMS ((struct d_print_info *, + const struct demangle_component *)); + +static void +d_print_java_identifier PARAMS ((struct d_print_info *, const char *, int)); + +static void +d_print_mod_list PARAMS ((struct d_print_info *, struct d_print_mod *, int)); + +static void +d_print_mod PARAMS ((struct d_print_info *, + const struct demangle_component *)); + +static void +d_print_function_type PARAMS ((struct d_print_info *, + const struct demangle_component *, + struct d_print_mod *)); + +static void +d_print_array_type PARAMS ((struct d_print_info *, + const struct demangle_component *, + struct d_print_mod *)); + +static void +d_print_expr_op PARAMS ((struct d_print_info *, + const struct demangle_component *)); + +static void +d_print_cast PARAMS ((struct d_print_info *, + const struct demangle_component *)); + +static char * +d_demangle PARAMS ((const char *, int, size_t *)); #ifdef CP_DEMANGLE_DEBUG static void d_dump (dc, indent) - struct d_comp *dc; + struct demangle_component *dc; int indent; { int i; @@ -553,156 +478,159 @@ d_dump (dc, indent) switch (dc->type) { - case D_COMP_NAME: + case DEMANGLE_COMPONENT_NAME: printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s); return; - case D_COMP_TEMPLATE_PARAM: + case DEMANGLE_COMPONENT_TEMPLATE_PARAM: printf ("template parameter %ld\n", dc->u.s_number.number); return; - case D_COMP_CTOR: + case DEMANGLE_COMPONENT_CTOR: printf ("constructor %d\n", (int) dc->u.s_ctor.kind); d_dump (dc->u.s_ctor.name, indent + 2); return; - case D_COMP_DTOR: + case DEMANGLE_COMPONENT_DTOR: printf ("destructor %d\n", (int) dc->u.s_dtor.kind); d_dump (dc->u.s_dtor.name, indent + 2); return; - case D_COMP_SUB_STD: + case DEMANGLE_COMPONENT_SUB_STD: printf ("standard substitution %s\n", dc->u.s_string.string); return; - case D_COMP_BUILTIN_TYPE: + case DEMANGLE_COMPONENT_BUILTIN_TYPE: printf ("builtin type %s\n", dc->u.s_builtin.type->name); return; - case D_COMP_OPERATOR: + case DEMANGLE_COMPONENT_OPERATOR: printf ("operator %s\n", dc->u.s_operator.op->name); return; - case D_COMP_EXTENDED_OPERATOR: + case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: printf ("extended operator with %d args\n", dc->u.s_extended_operator.args); d_dump (dc->u.s_extended_operator.name, indent + 2); return; - case D_COMP_QUAL_NAME: + case DEMANGLE_COMPONENT_QUAL_NAME: printf ("qualified name\n"); break; - case D_COMP_TYPED_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: + printf ("local name\n"); + break; + case DEMANGLE_COMPONENT_TYPED_NAME: printf ("typed name\n"); break; - case D_COMP_TEMPLATE: + case DEMANGLE_COMPONENT_TEMPLATE: printf ("template\n"); break; - case D_COMP_VTABLE: + case DEMANGLE_COMPONENT_VTABLE: printf ("vtable\n"); break; - case D_COMP_VTT: + case DEMANGLE_COMPONENT_VTT: printf ("VTT\n"); break; - case D_COMP_CONSTRUCTION_VTABLE: + case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: printf ("construction vtable\n"); break; - case D_COMP_TYPEINFO: + case DEMANGLE_COMPONENT_TYPEINFO: printf ("typeinfo\n"); break; - case D_COMP_TYPEINFO_NAME: + case DEMANGLE_COMPONENT_TYPEINFO_NAME: printf ("typeinfo name\n"); break; - case D_COMP_TYPEINFO_FN: + case DEMANGLE_COMPONENT_TYPEINFO_FN: printf ("typeinfo function\n"); break; - case D_COMP_THUNK: + case DEMANGLE_COMPONENT_THUNK: printf ("thunk\n"); break; - case D_COMP_VIRTUAL_THUNK: + case DEMANGLE_COMPONENT_VIRTUAL_THUNK: printf ("virtual thunk\n"); break; - case D_COMP_COVARIANT_THUNK: + case DEMANGLE_COMPONENT_COVARIANT_THUNK: printf ("covariant thunk\n"); break; - case D_COMP_JAVA_CLASS: + case DEMANGLE_COMPONENT_JAVA_CLASS: printf ("java class\n"); break; - case D_COMP_GUARD: + case DEMANGLE_COMPONENT_GUARD: printf ("guard\n"); break; - case D_COMP_REFTEMP: + case DEMANGLE_COMPONENT_REFTEMP: printf ("reference temporary\n"); break; - case D_COMP_RESTRICT: + case DEMANGLE_COMPONENT_RESTRICT: printf ("restrict\n"); break; - case D_COMP_VOLATILE: + case DEMANGLE_COMPONENT_VOLATILE: printf ("volatile\n"); break; - case D_COMP_CONST: + case DEMANGLE_COMPONENT_CONST: printf ("const\n"); break; - case D_COMP_RESTRICT_THIS: + case DEMANGLE_COMPONENT_RESTRICT_THIS: printf ("restrict this\n"); break; - case D_COMP_VOLATILE_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: printf ("volatile this\n"); break; - case D_COMP_CONST_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: printf ("const this\n"); break; - case D_COMP_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: printf ("vendor type qualifier\n"); break; - case D_COMP_POINTER: + case DEMANGLE_COMPONENT_POINTER: printf ("pointer\n"); break; - case D_COMP_REFERENCE: + case DEMANGLE_COMPONENT_REFERENCE: printf ("reference\n"); break; - case D_COMP_COMPLEX: + case DEMANGLE_COMPONENT_COMPLEX: printf ("complex\n"); break; - case D_COMP_IMAGINARY: + case DEMANGLE_COMPONENT_IMAGINARY: printf ("imaginary\n"); break; - case D_COMP_VENDOR_TYPE: + case DEMANGLE_COMPONENT_VENDOR_TYPE: printf ("vendor type\n"); break; - case D_COMP_FUNCTION_TYPE: + case DEMANGLE_COMPONENT_FUNCTION_TYPE: printf ("function type\n"); break; - case D_COMP_ARRAY_TYPE: + case DEMANGLE_COMPONENT_ARRAY_TYPE: printf ("array type\n"); break; - case D_COMP_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: printf ("pointer to member type\n"); break; - case D_COMP_ARGLIST: + case DEMANGLE_COMPONENT_ARGLIST: printf ("argument list\n"); break; - case D_COMP_TEMPLATE_ARGLIST: + case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: printf ("template argument list\n"); break; - case D_COMP_CAST: + case DEMANGLE_COMPONENT_CAST: printf ("cast\n"); break; - case D_COMP_UNARY: + case DEMANGLE_COMPONENT_UNARY: printf ("unary operator\n"); break; - case D_COMP_BINARY: + case DEMANGLE_COMPONENT_BINARY: printf ("binary operator\n"); break; - case D_COMP_BINARY_ARGS: + case DEMANGLE_COMPONENT_BINARY_ARGS: printf ("binary operator arguments\n"); break; - case D_COMP_TRINARY: + case DEMANGLE_COMPONENT_TRINARY: printf ("trinary operator\n"); break; - case D_COMP_TRINARY_ARG1: + case DEMANGLE_COMPONENT_TRINARY_ARG1: printf ("trinary operator arguments 1\n"); break; - case D_COMP_TRINARY_ARG2: + case DEMANGLE_COMPONENT_TRINARY_ARG2: printf ("trinary operator arguments 1\n"); break; - case D_COMP_LITERAL: + case DEMANGLE_COMPONENT_LITERAL: printf ("literal\n"); break; - case D_COMP_LITERAL_NEG: + case DEMANGLE_COMPONENT_LITERAL_NEG: printf ("negative literal\n"); break; } @@ -713,33 +641,105 @@ d_dump (dc, indent) #endif /* CP_DEMANGLE_DEBUG */ +/* Fill in a DEMANGLE_COMPONENT_NAME. */ + +CP_STATIC_IF_GLIBCPP_V3 +int +cplus_demangle_fill_name (p, s, len) + struct demangle_component *p; + const char *s; + int len; +{ + if (p == NULL || s == NULL || len == 0) + return 0; + p->type = DEMANGLE_COMPONENT_NAME; + p->u.s_name.s = s; + p->u.s_name.len = len; + return 1; +} + +/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */ + +CP_STATIC_IF_GLIBCPP_V3 +int +cplus_demangle_fill_extended_operator (p, args, name) + struct demangle_component *p; + int args; + struct demangle_component *name; +{ + if (p == NULL || args < 0 || name == NULL) + return 0; + p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR; + p->u.s_extended_operator.args = args; + p->u.s_extended_operator.name = name; + return 1; +} + +/* Fill in a DEMANGLE_COMPONENT_CTOR. */ + +CP_STATIC_IF_GLIBCPP_V3 +int +cplus_demangle_fill_ctor (p, kind, name) + struct demangle_component *p; + enum gnu_v3_ctor_kinds kind; + struct demangle_component *name; +{ + if (p == NULL + || name == NULL + || (kind < gnu_v3_complete_object_ctor + && kind > gnu_v3_complete_object_allocating_ctor)) + return 0; + p->type = DEMANGLE_COMPONENT_CTOR; + p->u.s_ctor.kind = kind; + p->u.s_ctor.name = name; + return 1; +} + +/* Fill in a DEMANGLE_COMPONENT_DTOR. */ + +CP_STATIC_IF_GLIBCPP_V3 +int +cplus_demangle_fill_dtor (p, kind, name) + struct demangle_component *p; + enum gnu_v3_dtor_kinds kind; + struct demangle_component *name; +{ + if (p == NULL + || name == NULL + || (kind < gnu_v3_deleting_dtor + && kind > gnu_v3_base_object_dtor)) + return 0; + p->type = DEMANGLE_COMPONENT_DTOR; + p->u.s_dtor.kind = kind; + p->u.s_dtor.name = name; + return 1; +} + /* Add a new component. */ -static struct d_comp * -d_make_empty (di, type) +static struct demangle_component * +d_make_empty (di) struct d_info *di; - enum d_comp_type type; { - struct d_comp *p; + struct demangle_component *p; if (di->next_comp >= di->num_comps) return NULL; p = &di->comps[di->next_comp]; - p->type = type; ++di->next_comp; return p; } /* Add a new generic component. */ -static struct d_comp * +static struct demangle_component * d_make_comp (di, type, left, right) struct d_info *di; - enum d_comp_type type; - struct d_comp *left; - struct d_comp *right; + enum demangle_component_type type; + struct demangle_component *left; + struct demangle_component *right; { - struct d_comp *p; + struct demangle_component *p; /* We check for errors here. A typical error would be a NULL return from a subroutine. We catch those here, and return NULL @@ -747,64 +747,65 @@ d_make_comp (di, type, left, right) switch (type) { /* These types require two parameters. */ - case D_COMP_QUAL_NAME: - case D_COMP_TYPED_NAME: - case D_COMP_TEMPLATE: - case D_COMP_VENDOR_TYPE_QUAL: - case D_COMP_PTRMEM_TYPE: - case D_COMP_UNARY: - case D_COMP_BINARY: - case D_COMP_BINARY_ARGS: - case D_COMP_TRINARY: - case D_COMP_TRINARY_ARG1: - case D_COMP_TRINARY_ARG2: - case D_COMP_LITERAL: - case D_COMP_LITERAL_NEG: + case DEMANGLE_COMPONENT_QUAL_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: + case DEMANGLE_COMPONENT_TYPED_NAME: + case DEMANGLE_COMPONENT_TEMPLATE: + case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_UNARY: + case DEMANGLE_COMPONENT_BINARY: + case DEMANGLE_COMPONENT_BINARY_ARGS: + case DEMANGLE_COMPONENT_TRINARY: + case DEMANGLE_COMPONENT_TRINARY_ARG1: + case DEMANGLE_COMPONENT_TRINARY_ARG2: + case DEMANGLE_COMPONENT_LITERAL: + case DEMANGLE_COMPONENT_LITERAL_NEG: if (left == NULL || right == NULL) return NULL; break; /* These types only require one parameter. */ - case D_COMP_VTABLE: - case D_COMP_VTT: - case D_COMP_CONSTRUCTION_VTABLE: - case D_COMP_TYPEINFO: - case D_COMP_TYPEINFO_NAME: - case D_COMP_TYPEINFO_FN: - case D_COMP_THUNK: - case D_COMP_VIRTUAL_THUNK: - case D_COMP_COVARIANT_THUNK: - case D_COMP_JAVA_CLASS: - case D_COMP_GUARD: - case D_COMP_REFTEMP: - case D_COMP_POINTER: - case D_COMP_REFERENCE: - case D_COMP_COMPLEX: - case D_COMP_IMAGINARY: - case D_COMP_VENDOR_TYPE: - case D_COMP_ARGLIST: - case D_COMP_TEMPLATE_ARGLIST: - case D_COMP_CAST: + case DEMANGLE_COMPONENT_VTABLE: + case DEMANGLE_COMPONENT_VTT: + case DEMANGLE_COMPONENT_TYPEINFO: + case DEMANGLE_COMPONENT_TYPEINFO_NAME: + case DEMANGLE_COMPONENT_TYPEINFO_FN: + case DEMANGLE_COMPONENT_THUNK: + case DEMANGLE_COMPONENT_VIRTUAL_THUNK: + case DEMANGLE_COMPONENT_COVARIANT_THUNK: + case DEMANGLE_COMPONENT_JAVA_CLASS: + case DEMANGLE_COMPONENT_GUARD: + case DEMANGLE_COMPONENT_REFTEMP: + case DEMANGLE_COMPONENT_POINTER: + case DEMANGLE_COMPONENT_REFERENCE: + case DEMANGLE_COMPONENT_COMPLEX: + case DEMANGLE_COMPONENT_IMAGINARY: + case DEMANGLE_COMPONENT_VENDOR_TYPE: + case DEMANGLE_COMPONENT_ARGLIST: + case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: + case DEMANGLE_COMPONENT_CAST: if (left == NULL) return NULL; break; /* This needs a right parameter, but the left parameter can be empty. */ - case D_COMP_ARRAY_TYPE: + case DEMANGLE_COMPONENT_ARRAY_TYPE: if (right == NULL) return NULL; break; /* These are allowed to have no parameters--in some cases they will be filled in later. */ - case D_COMP_FUNCTION_TYPE: - case D_COMP_RESTRICT: - case D_COMP_VOLATILE: - case D_COMP_CONST: - case D_COMP_RESTRICT_THIS: - case D_COMP_VOLATILE_THIS: - case D_COMP_CONST_THIS: + case DEMANGLE_COMPONENT_FUNCTION_TYPE: + case DEMANGLE_COMPONENT_RESTRICT: + case DEMANGLE_COMPONENT_VOLATILE: + case DEMANGLE_COMPONENT_CONST: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: break; /* Other types should not be seen here. */ @@ -812,9 +813,10 @@ d_make_comp (di, type, left, right) return NULL; } - p = d_make_empty (di, type); + p = d_make_empty (di); if (p != NULL) { + p->type = type; p->u.s_binary.left = left; p->u.s_binary.right = right; } @@ -823,147 +825,141 @@ d_make_comp (di, type, left, right) /* Add a new name component. */ -static struct d_comp * +static struct demangle_component * d_make_name (di, s, len) struct d_info *di; const char *s; int len; { - struct d_comp *p; + struct demangle_component *p; - if (s == NULL || len == 0) + p = d_make_empty (di); + if (! cplus_demangle_fill_name (p, s, len)) return NULL; - p = d_make_empty (di, D_COMP_NAME); - if (p != NULL) - { - p->u.s_name.s = s; - p->u.s_name.len = len; - } return p; } /* Add a new builtin type component. */ -static struct d_comp * +static struct demangle_component * d_make_builtin_type (di, type) struct d_info *di; - const struct d_builtin_type_info *type; + const struct demangle_builtin_type_info *type; { - struct d_comp *p; + struct demangle_component *p; if (type == NULL) return NULL; - p = d_make_empty (di, D_COMP_BUILTIN_TYPE); + p = d_make_empty (di); if (p != NULL) - p->u.s_builtin.type = type; + { + p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE; + p->u.s_builtin.type = type; + } return p; } /* Add a new operator component. */ -static struct d_comp * +static struct demangle_component * d_make_operator (di, op) struct d_info *di; - const struct d_operator_info *op; + const struct demangle_operator_info *op; { - struct d_comp *p; + struct demangle_component *p; - p = d_make_empty (di, D_COMP_OPERATOR); + p = d_make_empty (di); if (p != NULL) - p->u.s_operator.op = op; + { + p->type = DEMANGLE_COMPONENT_OPERATOR; + p->u.s_operator.op = op; + } return p; } /* Add a new extended operator component. */ -static struct d_comp * +static struct demangle_component * d_make_extended_operator (di, args, name) struct d_info *di; int args; - struct d_comp *name; + struct demangle_component *name; { - struct d_comp *p; + struct demangle_component *p; - if (name == NULL) + p = d_make_empty (di); + if (! cplus_demangle_fill_extended_operator (p, args, name)) return NULL; - p = d_make_empty (di, D_COMP_EXTENDED_OPERATOR); - if (p != NULL) - { - p->u.s_extended_operator.args = args; - p->u.s_extended_operator.name = name; - } return p; } /* Add a new constructor component. */ -static struct d_comp * +static struct demangle_component * d_make_ctor (di, kind, name) struct d_info *di; enum gnu_v3_ctor_kinds kind; - struct d_comp *name; + struct demangle_component *name; { - struct d_comp *p; + struct demangle_component *p; - if (name == NULL) + p = d_make_empty (di); + if (! cplus_demangle_fill_ctor (p, kind, name)) return NULL; - p = d_make_empty (di, D_COMP_CTOR); - if (p != NULL) - { - p->u.s_ctor.kind = kind; - p->u.s_ctor.name = name; - } return p; } /* Add a new destructor component. */ -static struct d_comp * +static struct demangle_component * d_make_dtor (di, kind, name) struct d_info *di; enum gnu_v3_dtor_kinds kind; - struct d_comp *name; + struct demangle_component *name; { - struct d_comp *p; + struct demangle_component *p; - if (name == NULL) + p = d_make_empty (di); + if (! cplus_demangle_fill_dtor (p, kind, name)) return NULL; - p = d_make_empty (di, D_COMP_DTOR); - if (p != NULL) - { - p->u.s_dtor.kind = kind; - p->u.s_dtor.name = name; - } return p; } /* Add a new template parameter. */ -static struct d_comp * +static struct demangle_component * d_make_template_param (di, i) struct d_info *di; long i; { - struct d_comp *p; + struct demangle_component *p; - p = d_make_empty (di, D_COMP_TEMPLATE_PARAM); + p = d_make_empty (di); if (p != NULL) - p->u.s_number.number = i; + { + p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM; + p->u.s_number.number = i; + } return p; } /* Add a new standard substitution component. */ -static struct d_comp * -d_make_sub (di, name) +static struct demangle_component * +d_make_sub (di, name, len) struct d_info *di; const char *name; + int len; { - struct d_comp *p; + struct demangle_component *p; - p = d_make_empty (di, D_COMP_SUB_STD); + p = d_make_empty (di); if (p != NULL) - p->u.s_string.string = name; + { + p->type = DEMANGLE_COMPONENT_SUB_STD; + p->u.s_string.string = name; + p->u.s_string.len = len; + } return p; } @@ -971,8 +967,9 @@ d_make_sub (di, name) TOP_LEVEL is non-zero when called at the top level. */ -static struct d_comp * -d_mangled_name (di, top_level) +CP_STATIC_IF_GLIBCPP_V3 +struct demangle_component * +cplus_demangle_mangled_name (di, top_level) struct d_info *di; int top_level; { @@ -994,7 +991,7 @@ d_mangled_name (di, top_level) static int has_return_type (dc) - struct d_comp *dc; + struct demangle_component *dc; { if (dc == NULL) return 0; @@ -1002,11 +999,11 @@ has_return_type (dc) { default: return 0; - case D_COMP_TEMPLATE: + case DEMANGLE_COMPONENT_TEMPLATE: return ! is_ctor_dtor_or_conversion (d_left (dc)); - case D_COMP_RESTRICT_THIS: - case D_COMP_VOLATILE_THIS: - case D_COMP_CONST_THIS: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: return has_return_type (d_left (dc)); } } @@ -1016,7 +1013,7 @@ has_return_type (dc) static int is_ctor_dtor_or_conversion (dc) - struct d_comp *dc; + struct demangle_component *dc; { if (dc == NULL) return 0; @@ -1024,11 +1021,12 @@ is_ctor_dtor_or_conversion (dc) { default: return 0; - case D_COMP_QUAL_NAME: + case DEMANGLE_COMPONENT_QUAL_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: return is_ctor_dtor_or_conversion (d_right (dc)); - case D_COMP_CTOR: - case D_COMP_DTOR: - case D_COMP_CAST: + case DEMANGLE_COMPONENT_CTOR: + case DEMANGLE_COMPONENT_DTOR: + case DEMANGLE_COMPONENT_CAST: return 1; } } @@ -1042,7 +1040,7 @@ is_ctor_dtor_or_conversion (dc) parameters. We only set this at the top level, because otherwise we would not correctly demangle names in local scopes. */ -static struct d_comp * +static struct demangle_component * d_encoding (di, top_level) struct d_info *di; int top_level; @@ -1053,7 +1051,7 @@ d_encoding (di, top_level) return d_special_name (di); else { - struct d_comp *dc; + struct demangle_component *dc; dc = d_name (di); @@ -1062,17 +1060,34 @@ d_encoding (di, top_level) /* Strip off any initial CV-qualifiers, as they really apply to the `this' parameter, and they were not output by the v2 demangler without DMGL_PARAMS. */ - while (dc->type == D_COMP_RESTRICT_THIS - || dc->type == D_COMP_VOLATILE_THIS - || dc->type == D_COMP_CONST_THIS) + while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS + || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS + || dc->type == DEMANGLE_COMPONENT_CONST_THIS) dc = d_left (dc); + + /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then + there may be CV-qualifiers on its right argument which + really apply here; this happens when parsing a class + which is local to a function. */ + if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME) + { + struct demangle_component *dcr; + + dcr = d_right (dc); + while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS + || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS + || dcr->type == DEMANGLE_COMPONENT_CONST_THIS) + dcr = d_left (dcr); + dc->u.s_binary.right = dcr; + } + return dc; } peek = d_peek_char (di); if (peek == '\0' || peek == 'E') return dc; - return d_make_comp (di, D_COMP_TYPED_NAME, dc, + return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, d_bare_function_type (di, has_return_type (dc))); } } @@ -1089,12 +1104,12 @@ d_encoding (di, top_level) ::= <substitution> */ -static struct d_comp * +static struct demangle_component * d_name (di) struct d_info *di; { char peek = d_peek_char (di); - struct d_comp *dc; + struct demangle_component *dc; switch (peek) { @@ -1116,8 +1131,10 @@ d_name (di) else { d_advance (di, 2); - dc = d_make_comp (di, D_COMP_QUAL_NAME, d_make_name (di, "std", 3), + dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, + d_make_name (di, "std", 3), d_unqualified_name (di)); + di->expansion += 3; subst = 0; } @@ -1138,7 +1155,8 @@ d_name (di) if (! d_add_substitution (di, dc)) return NULL; } - dc = d_make_comp (di, D_COMP_TEMPLATE, dc, d_template_args (di)); + dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, + d_template_args (di)); } return dc; @@ -1153,7 +1171,8 @@ d_name (di) candidate. */ if (! d_add_substitution (di, dc)) return NULL; - dc = d_make_comp (di, D_COMP_TEMPLATE, dc, d_template_args (di)); + dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc, + d_template_args (di)); } return dc; } @@ -1163,12 +1182,12 @@ d_name (di) ::= N [<CV-qualifiers>] <template-prefix> <template-args> E */ -static struct d_comp * +static struct demangle_component * d_nested_name (di) struct d_info *di; { - struct d_comp *ret; - struct d_comp **pret; + struct demangle_component *ret; + struct demangle_component **pret; if (d_next_char (di) != 'N') return NULL; @@ -1198,17 +1217,17 @@ d_nested_name (di) ::= <substitution> */ -static struct d_comp * +static struct demangle_component * d_prefix (di) struct d_info *di; { - struct d_comp *ret = NULL; + struct demangle_component *ret = NULL; while (1) { char peek; - enum d_comp_type comb_type; - struct d_comp *dc; + enum demangle_component_type comb_type; + struct demangle_component *dc; peek = d_peek_char (di); if (peek == '\0') @@ -1218,7 +1237,7 @@ d_prefix (di) that in the grammar. The older code does not accept a <template-param> here. */ - comb_type = D_COMP_QUAL_NAME; + comb_type = DEMANGLE_COMPONENT_QUAL_NAME; if (IS_DIGIT (peek) || IS_LOWER (peek) || peek == 'C' @@ -1230,7 +1249,7 @@ d_prefix (di) { if (ret == NULL) return NULL; - comb_type = D_COMP_TEMPLATE; + comb_type = DEMANGLE_COMPONENT_TEMPLATE; dc = d_template_args (di); } else if (peek == 'T') @@ -1258,7 +1277,7 @@ d_prefix (di) ::= <source-name> */ -static struct d_comp * +static struct demangle_component * d_unqualified_name (di) struct d_info *di; { @@ -1268,7 +1287,14 @@ d_unqualified_name (di) if (IS_DIGIT (peek)) return d_source_name (di); else if (IS_LOWER (peek)) - return d_operator_name (di); + { + struct demangle_component *ret; + + ret = d_operator_name (di); + if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR) + di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2; + return ret; + } else if (peek == 'C' || peek == 'D') return d_ctor_dtor_name (di); else @@ -1277,12 +1303,12 @@ d_unqualified_name (di) /* <source-name> ::= <(positive length) number> <identifier> */ -static struct d_comp * +static struct demangle_component * d_source_name (di) struct d_info *di; { long len; - struct d_comp *ret; + struct demangle_component *ret; len = d_number (di); if (len <= 0) @@ -1298,15 +1324,15 @@ static long d_number (di) struct d_info *di; { - int sign; + int negative; char peek; long ret; - sign = 1; + negative = 0; peek = d_peek_char (di); if (peek == 'n') { - sign = -1; + negative = 1; d_advance (di, 1); peek = d_peek_char (di); } @@ -1315,7 +1341,11 @@ d_number (di) while (1) { if (! IS_DIGIT (peek)) - return ret * sign; + { + if (negative) + ret = - ret; + return ret; + } ret = ret * 10 + peek - '0'; d_advance (di, 1); peek = d_peek_char (di); @@ -1324,7 +1354,7 @@ d_number (di) /* identifier ::= <(unqualified source code identifier)> */ -static struct d_comp * +static struct demangle_component * d_identifier (di, len) struct d_info *di; int len; @@ -1332,8 +1362,19 @@ d_identifier (di, len) const char *name; name = d_str (di); + + if (di->send - name < len) + return NULL; + d_advance (di, len); + /* A Java mangled name may have a trailing '$' if it is a C++ + keyword. This '$' is not included in the length count. We just + ignore the '$'. */ + if ((di->options & DMGL_JAVA) != 0 + && d_peek_char (di) == '$') + d_advance (di, 1); + /* Look for something which looks like a gcc encoding of an anonymous namespace, and replace it with a more user friendly name. */ @@ -1346,8 +1387,11 @@ d_identifier (di, len) s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN; if ((*s == '.' || *s == '_' || *s == '$') && s[1] == 'N') - return d_make_name (di, "(anonymous namespace)", - sizeof "(anonymous namespace)" - 1); + { + di->expansion -= len - sizeof "(anonymous namespace)"; + return d_make_name (di, "(anonymous namespace)", + sizeof "(anonymous namespace)" - 1); + } } return d_make_name (di, name, len); @@ -1358,60 +1402,64 @@ d_identifier (di, len) ::= v <digit> <source-name> */ -static const struct d_operator_info d_operators[] = -{ - { "aN", "&=", 2 }, - { "aS", "=", 2 }, - { "aa", "&&", 2 }, - { "ad", "&", 1 }, - { "an", "&", 2 }, - { "cl", "()", 0 }, - { "cm", ",", 2 }, - { "co", "~", 1 }, - { "dV", "/=", 2 }, - { "da", "delete[]", 1 }, - { "de", "*", 1 }, - { "dl", "delete", 1 }, - { "dv", "/", 2 }, - { "eO", "^=", 2 }, - { "eo", "^", 2 }, - { "eq", "==", 2 }, - { "ge", ">=", 2 }, - { "gt", ">", 2 }, - { "ix", "[]", 2 }, - { "lS", "<<=", 2 }, - { "le", "<=", 2 }, - { "ls", "<<", 2 }, - { "lt", "<", 2 }, - { "mI", "-=", 2 }, - { "mL", "*=", 2 }, - { "mi", "-", 2 }, - { "ml", "*", 2 }, - { "mm", "--", 1 }, - { "na", "new[]", 1 }, - { "ne", "!=", 2 }, - { "ng", "-", 1 }, - { "nt", "!", 1 }, - { "nw", "new", 1 }, - { "oR", "|=", 2 }, - { "oo", "||", 2 }, - { "or", "|", 2 }, - { "pL", "+=", 2 }, - { "pl", "+", 2 }, - { "pm", "->*", 2 }, - { "pp", "++", 1 }, - { "ps", "+", 1 }, - { "pt", "->", 2 }, - { "qu", "?", 3 }, - { "rM", "%=", 2 }, - { "rS", ">>=", 2 }, - { "rm", "%", 2 }, - { "rs", ">>", 2 }, - { "st", "sizeof ", 1 }, - { "sz", "sizeof ", 1 } +#define NL(s) s, (sizeof s) - 1 + +CP_STATIC_IF_GLIBCPP_V3 +const struct demangle_operator_info cplus_demangle_operators[] = +{ + { "aN", NL ("&="), 2 }, + { "aS", NL ("="), 2 }, + { "aa", NL ("&&"), 2 }, + { "ad", NL ("&"), 1 }, + { "an", NL ("&"), 2 }, + { "cl", NL ("()"), 0 }, + { "cm", NL (","), 2 }, + { "co", NL ("~"), 1 }, + { "dV", NL ("/="), 2 }, + { "da", NL ("delete[]"), 1 }, + { "de", NL ("*"), 1 }, + { "dl", NL ("delete"), 1 }, + { "dv", NL ("/"), 2 }, + { "eO", NL ("^="), 2 }, + { "eo", NL ("^"), 2 }, + { "eq", NL ("=="), 2 }, + { "ge", NL (">="), 2 }, + { "gt", NL (">"), 2 }, + { "ix", NL ("[]"), 2 }, + { "lS", NL ("<<="), 2 }, + { "le", NL ("<="), 2 }, + { "ls", NL ("<<"), 2 }, + { "lt", NL ("<"), 2 }, + { "mI", NL ("-="), 2 }, + { "mL", NL ("*="), 2 }, + { "mi", NL ("-"), 2 }, + { "ml", NL ("*"), 2 }, + { "mm", NL ("--"), 1 }, + { "na", NL ("new[]"), 1 }, + { "ne", NL ("!="), 2 }, + { "ng", NL ("-"), 1 }, + { "nt", NL ("!"), 1 }, + { "nw", NL ("new"), 1 }, + { "oR", NL ("|="), 2 }, + { "oo", NL ("||"), 2 }, + { "or", NL ("|"), 2 }, + { "pL", NL ("+="), 2 }, + { "pl", NL ("+"), 2 }, + { "pm", NL ("->*"), 2 }, + { "pp", NL ("++"), 1 }, + { "ps", NL ("+"), 1 }, + { "pt", NL ("->"), 2 }, + { "qu", NL ("?"), 3 }, + { "rM", NL ("%="), 2 }, + { "rS", NL (">>="), 2 }, + { "rm", NL ("%"), 2 }, + { "rs", NL (">>"), 2 }, + { "st", NL ("sizeof "), 1 }, + { "sz", NL ("sizeof "), 1 }, + { NULL, NULL, 0, 0 } }; -static struct d_comp * +static struct demangle_component * d_operator_name (di) struct d_info *di; { @@ -1423,19 +1471,25 @@ d_operator_name (di) if (c1 == 'v' && IS_DIGIT (c2)) return d_make_extended_operator (di, c2 - '0', d_source_name (di)); else if (c1 == 'c' && c2 == 'v') - return d_make_comp (di, D_COMP_CAST, d_type (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_CAST, + cplus_demangle_type (di), NULL); else { + /* LOW is the inclusive lower bound. */ int low = 0; - int high = sizeof (d_operators) / sizeof (d_operators[0]); + /* HIGH is the exclusive upper bound. We subtract one to ignore + the sentinel at the end of the array. */ + int high = ((sizeof (cplus_demangle_operators) + / sizeof (cplus_demangle_operators[0])) + - 1); while (1) { int i; - const struct d_operator_info *p; + const struct demangle_operator_info *p; i = low + (high - low) / 2; - p = d_operators + i; + p = cplus_demangle_operators + i; if (c1 == p->code[0] && c2 == p->code[1]) return d_make_operator (di, p); @@ -1464,68 +1518,79 @@ d_operator_name (di) ::= GR <name> */ -static struct d_comp * +static struct demangle_component * d_special_name (di) struct d_info *di; { char c; + di->expansion += 20; c = d_next_char (di); if (c == 'T') { switch (d_next_char (di)) { case 'V': - return d_make_comp (di, D_COMP_VTABLE, d_type (di), NULL); + di->expansion -= 5; + return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE, + cplus_demangle_type (di), NULL); case 'T': - return d_make_comp (di, D_COMP_VTT, d_type (di), NULL); + di->expansion -= 10; + return d_make_comp (di, DEMANGLE_COMPONENT_VTT, + cplus_demangle_type (di), NULL); case 'I': - return d_make_comp (di, D_COMP_TYPEINFO, d_type (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO, + cplus_demangle_type (di), NULL); case 'S': - return d_make_comp (di, D_COMP_TYPEINFO_NAME, d_type (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME, + cplus_demangle_type (di), NULL); case 'h': if (! d_call_offset (di, 'h')) return NULL; - return d_make_comp (di, D_COMP_THUNK, d_encoding (di, 0), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_THUNK, + d_encoding (di, 0), NULL); case 'v': if (! d_call_offset (di, 'v')) return NULL; - return d_make_comp (di, D_COMP_VIRTUAL_THUNK, d_encoding (di, 0), - NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK, + d_encoding (di, 0), NULL); case 'c': if (! d_call_offset (di, '\0')) return NULL; if (! d_call_offset (di, '\0')) return NULL; - return d_make_comp (di, D_COMP_COVARIANT_THUNK, d_encoding (di, 0), - NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK, + d_encoding (di, 0), NULL); case 'C': { - struct d_comp *derived_type; + struct demangle_component *derived_type; long offset; - struct d_comp *base_type; + struct demangle_component *base_type; - derived_type = d_type (di); + derived_type = cplus_demangle_type (di); offset = d_number (di); if (offset < 0) return NULL; if (d_next_char (di) != '_') return NULL; - base_type = d_type (di); + base_type = cplus_demangle_type (di); /* We don't display the offset. FIXME: We should display it in verbose mode. */ - return d_make_comp (di, D_COMP_CONSTRUCTION_VTABLE, base_type, - derived_type); + di->expansion += 5; + return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE, + base_type, derived_type); } case 'F': - return d_make_comp (di, D_COMP_TYPEINFO_FN, d_type (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN, + cplus_demangle_type (di), NULL); case 'J': - return d_make_comp (di, D_COMP_JAVA_CLASS, d_type (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS, + cplus_demangle_type (di), NULL); default: return NULL; @@ -1536,10 +1601,11 @@ d_special_name (di) switch (d_next_char (di)) { case 'V': - return d_make_comp (di, D_COMP_GUARD, d_name (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL); case 'R': - return d_make_comp (di, D_COMP_REFTEMP, d_name (di), NULL); + return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di), + NULL); default: return NULL; @@ -1599,10 +1665,17 @@ d_call_offset (di, c) ::= D2 */ -static struct d_comp * +static struct demangle_component * d_ctor_dtor_name (di) struct d_info *di; { + if (di->last_name != NULL) + { + if (di->last_name->type == DEMANGLE_COMPONENT_NAME) + di->expansion += di->last_name->u.s_name.len; + else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD) + di->expansion += di->last_name->u.s_string.len; + } switch (d_next_char (di)) { case 'C': @@ -1671,42 +1744,45 @@ d_ctor_dtor_name (di) ::= u <source-name> */ -static const struct d_builtin_type_info d_builtin_types[26] = -{ - /* a */ { "signed char", "signed char", D_PRINT_INT }, - /* b */ { "bool", "boolean", D_PRINT_BOOL }, - /* c */ { "char", "byte", D_PRINT_INT }, - /* d */ { "double", "double", D_PRINT_DEFAULT }, - /* e */ { "long double", "long double", D_PRINT_DEFAULT }, - /* f */ { "float", "float", D_PRINT_DEFAULT }, - /* g */ { "__float128", "__float128", D_PRINT_DEFAULT }, - /* h */ { "unsigned char", "unsigned char", D_PRINT_INT }, - /* i */ { "int", "int", D_PRINT_INT }, - /* j */ { "unsigned int", "unsigned", D_PRINT_INT }, - /* k */ { NULL, NULL, D_PRINT_DEFAULT }, - /* l */ { "long", "long", D_PRINT_LONG }, - /* m */ { "unsigned long", "unsigned long", D_PRINT_LONG }, - /* n */ { "__int128", "__int128", D_PRINT_DEFAULT }, - /* o */ { "unsigned __int128", "unsigned __int128", D_PRINT_DEFAULT }, - /* p */ { NULL, NULL, D_PRINT_DEFAULT }, - /* q */ { NULL, NULL, D_PRINT_DEFAULT }, - /* r */ { NULL, NULL, D_PRINT_DEFAULT }, - /* s */ { "short", "short", D_PRINT_INT }, - /* t */ { "unsigned short", "unsigned short", D_PRINT_INT }, - /* u */ { NULL, NULL, D_PRINT_DEFAULT }, - /* v */ { "void", "void", D_PRINT_VOID }, - /* w */ { "wchar_t", "char", D_PRINT_INT }, - /* x */ { "long long", "long", D_PRINT_DEFAULT }, - /* y */ { "unsigned long long", "unsigned long long", D_PRINT_DEFAULT }, - /* z */ { "...", "...", D_PRINT_DEFAULT }, +CP_STATIC_IF_GLIBCPP_V3 +const struct demangle_builtin_type_info +cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] = +{ + /* a */ { NL ("signed char"), NL ("signed char"), D_PRINT_INT }, + /* b */ { NL ("bool"), NL ("boolean"), D_PRINT_BOOL }, + /* c */ { NL ("char"), NL ("byte"), D_PRINT_INT }, + /* d */ { NL ("double"), NL ("double"), D_PRINT_DEFAULT }, + /* e */ { NL ("long double"), NL ("long double"), D_PRINT_DEFAULT }, + /* f */ { NL ("float"), NL ("float"), D_PRINT_DEFAULT }, + /* g */ { NL ("__float128"), NL ("__float128"), D_PRINT_DEFAULT }, + /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_INT }, + /* i */ { NL ("int"), NL ("int"), D_PRINT_INT }, + /* j */ { NL ("unsigned int"), NL ("unsigned"), D_PRINT_INT }, + /* k */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, + /* l */ { NL ("long"), NL ("long"), D_PRINT_LONG }, + /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_LONG }, + /* n */ { NL ("__int128"), NL ("__int128"), D_PRINT_DEFAULT }, + /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"), D_PRINT_DEFAULT }, + /* p */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, + /* q */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, + /* r */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, + /* s */ { NL ("short"), NL ("short"), D_PRINT_INT }, + /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_INT }, + /* u */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT }, + /* v */ { NL ("void"), NL ("void"), D_PRINT_VOID }, + /* w */ { NL ("wchar_t"), NL ("char"), D_PRINT_INT }, + /* x */ { NL ("long long"), NL ("long"), D_PRINT_DEFAULT }, + /* y */ { NL ("unsigned long long"), NL ("unsigned long long"), D_PRINT_DEFAULT }, + /* z */ { NL ("..."), NL ("..."), D_PRINT_DEFAULT }, }; -static struct d_comp * -d_type (di) +CP_STATIC_IF_GLIBCPP_V3 +struct demangle_component * +cplus_demangle_type (di) struct d_info *di; { char peek; - struct d_comp *ret; + struct demangle_component *ret; int can_subst; /* The ABI specifies that when CV-qualifiers are used, the base type @@ -1727,12 +1803,12 @@ d_type (di) peek = d_peek_char (di); if (peek == 'r' || peek == 'V' || peek == 'K') { - struct d_comp **pret; + struct demangle_component **pret; pret = d_cv_qualifiers (di, &ret, 0); if (pret == NULL) return NULL; - *pret = d_type (di); + *pret = cplus_demangle_type (di); if (! d_add_substitution (di, ret)) return NULL; return ret; @@ -1746,14 +1822,17 @@ d_type (di) case 'h': case 'i': case 'j': case 'l': case 'm': case 'n': case 'o': case 's': case 't': case 'v': case 'w': case 'x': case 'y': case 'z': - ret = d_make_builtin_type (di, &d_builtin_types[peek - 'a']); + ret = d_make_builtin_type (di, + &cplus_demangle_builtin_types[peek - 'a']); + di->expansion += ret->u.s_builtin.type->len; can_subst = 0; d_advance (di, 1); break; case 'u': d_advance (di, 1); - ret = d_make_comp (di, D_COMP_VENDOR_TYPE, d_source_name (di), NULL); + ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE, + d_source_name (di), NULL); break; case 'F': @@ -1784,7 +1863,8 @@ d_type (di) candidate. */ if (! d_add_substitution (di, ret)) return NULL; - ret = d_make_comp (di, D_COMP_TEMPLATE, ret, d_template_args (di)); + ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, + d_template_args (di)); } break; @@ -1803,7 +1883,7 @@ d_type (di) /* The substituted name may have been a template name and may be followed by tepmlate args. */ if (d_peek_char (di) == 'I') - ret = d_make_comp (di, D_COMP_TEMPLATE, ret, + ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret, d_template_args (di)); else can_subst = 0; @@ -1815,7 +1895,7 @@ d_type (di) a new substitution candidate. However, if the substitution was followed by template arguments, then the whole thing is a substitution candidate. */ - if (ret != NULL && ret->type == D_COMP_SUB_STD) + if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD) can_subst = 0; } } @@ -1823,28 +1903,33 @@ d_type (di) case 'P': d_advance (di, 1); - ret = d_make_comp (di, D_COMP_POINTER, d_type (di), NULL); + ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER, + cplus_demangle_type (di), NULL); break; case 'R': d_advance (di, 1); - ret = d_make_comp (di, D_COMP_REFERENCE, d_type (di), NULL); + ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE, + cplus_demangle_type (di), NULL); break; case 'C': d_advance (di, 1); - ret = d_make_comp (di, D_COMP_COMPLEX, d_type (di), NULL); + ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX, + cplus_demangle_type (di), NULL); break; case 'G': d_advance (di, 1); - ret = d_make_comp (di, D_COMP_IMAGINARY, d_type (di), NULL); + ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY, + cplus_demangle_type (di), NULL); break; case 'U': d_advance (di, 1); ret = d_source_name (di); - ret = d_make_comp (di, D_COMP_VENDOR_TYPE_QUAL, d_type (di), ret); + ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL, + cplus_demangle_type (di), ret); break; default: @@ -1862,10 +1947,10 @@ d_type (di) /* <CV-qualifiers> ::= [r] [V] [K] */ -static struct d_comp ** +static struct demangle_component ** d_cv_qualifiers (di, pret, member_fn) struct d_info *di; - struct d_comp **pret; + struct demangle_component **pret; int member_fn; { char peek; @@ -1873,15 +1958,30 @@ d_cv_qualifiers (di, pret, member_fn) peek = d_peek_char (di); while (peek == 'r' || peek == 'V' || peek == 'K') { - enum d_comp_type t; + enum demangle_component_type t; d_advance (di, 1); if (peek == 'r') - t = member_fn ? D_COMP_RESTRICT_THIS: D_COMP_RESTRICT; + { + t = (member_fn + ? DEMANGLE_COMPONENT_RESTRICT_THIS + : DEMANGLE_COMPONENT_RESTRICT); + di->expansion += sizeof "restrict"; + } else if (peek == 'V') - t = member_fn ? D_COMP_VOLATILE_THIS : D_COMP_VOLATILE; + { + t = (member_fn + ? DEMANGLE_COMPONENT_VOLATILE_THIS + : DEMANGLE_COMPONENT_VOLATILE); + di->expansion += sizeof "volatile"; + } else - t = member_fn ? D_COMP_CONST_THIS: D_COMP_CONST; + { + t = (member_fn + ? DEMANGLE_COMPONENT_CONST_THIS + : DEMANGLE_COMPONENT_CONST); + di->expansion += sizeof "const"; + } *pret = d_make_comp (di, t, NULL, NULL); if (*pret == NULL) @@ -1896,11 +1996,11 @@ d_cv_qualifiers (di, pret, member_fn) /* <function-type> ::= F [Y] <bare-function-type> E */ -static struct d_comp * +static struct demangle_component * d_function_type (di) struct d_info *di; { - struct d_comp *ret; + struct demangle_component *ret; if (d_next_char (di) != 'F') return NULL; @@ -1918,14 +2018,14 @@ d_function_type (di) /* <bare-function-type> ::= <type>+ */ -static struct d_comp * +static struct demangle_component * d_bare_function_type (di, has_return_type) struct d_info *di; int has_return_type; { - struct d_comp *return_type; - struct d_comp *tl; - struct d_comp **ptl; + struct demangle_component *return_type; + struct demangle_component *tl; + struct demangle_component **ptl; return_type = NULL; tl = NULL; @@ -1933,12 +2033,12 @@ d_bare_function_type (di, has_return_type) while (1) { char peek; - struct d_comp *type; + struct demangle_component *type; peek = d_peek_char (di); if (peek == '\0' || peek == 'E') break; - type = d_type (di); + type = cplus_demangle_type (di); if (type == NULL) return NULL; if (has_return_type) @@ -1948,7 +2048,7 @@ d_bare_function_type (di, has_return_type) } else { - *ptl = d_make_comp (di, D_COMP_ARGLIST, type, NULL); + *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL); if (*ptl == NULL) return NULL; ptl = &d_right (*ptl); @@ -1963,16 +2063,19 @@ d_bare_function_type (di, has_return_type) /* If we have a single parameter type void, omit it. */ if (d_right (tl) == NULL - && d_left (tl)->type == D_COMP_BUILTIN_TYPE + && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID) - tl = NULL; + { + di->expansion -= d_left (tl)->u.s_builtin.type->len; + tl = NULL; + } - return d_make_comp (di, D_COMP_FUNCTION_TYPE, return_type, tl); + return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl); } /* <class-enum-type> ::= <name> */ -static struct d_comp * +static struct demangle_component * d_class_enum_type (di) struct d_info *di; { @@ -1983,12 +2086,12 @@ d_class_enum_type (di) ::= A [<(dimension) expression>] _ <(element) type> */ -static struct d_comp * +static struct demangle_component * d_array_type (di) struct d_info *di; { char peek; - struct d_comp *dim; + struct demangle_component *dim; if (d_next_char (di) != 'A') return NULL; @@ -2021,23 +2124,24 @@ d_array_type (di) if (d_next_char (di) != '_') return NULL; - return d_make_comp (di, D_COMP_ARRAY_TYPE, dim, d_type (di)); + return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim, + cplus_demangle_type (di)); } /* <pointer-to-member-type> ::= M <(class) type> <(member) type> */ -static struct d_comp * +static struct demangle_component * d_pointer_to_member_type (di) struct d_info *di; { - struct d_comp *cl; - struct d_comp *mem; - struct d_comp **pmem; + struct demangle_component *cl; + struct demangle_component *mem; + struct demangle_component **pmem; if (d_next_char (di) != 'M') return NULL; - cl = d_type (di); + cl = cplus_demangle_type (di); /* The ABI specifies that any type can be a substitution source, and that M is followed by two types, and that when a CV-qualified @@ -2050,21 +2154,21 @@ d_pointer_to_member_type (di) g++ does not work that way. g++ treats only the CV-qualified member function as a substitution source. FIXME. So to work with g++, we need to pull off the CV-qualifiers here, in order to - avoid calling add_substitution() in d_type(). */ + avoid calling add_substitution() in cplus_demangle_type(). */ pmem = d_cv_qualifiers (di, &mem, 1); if (pmem == NULL) return NULL; - *pmem = d_type (di); + *pmem = cplus_demangle_type (di); - return d_make_comp (di, D_COMP_PTRMEM_TYPE, cl, mem); + return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem); } /* <template-param> ::= T_ ::= T <(parameter-2 non-negative) number> _ */ -static struct d_comp * +static struct demangle_component * d_template_param (di) struct d_info *di; { @@ -2086,18 +2190,20 @@ d_template_param (di) if (d_next_char (di) != '_') return NULL; + ++di->did_subs; + return d_make_template_param (di, param); } /* <template-args> ::= I <template-arg>+ E */ -static struct d_comp * +static struct demangle_component * d_template_args (di) struct d_info *di; { - struct d_comp *hold_last_name; - struct d_comp *al; - struct d_comp **pal; + struct demangle_component *hold_last_name; + struct demangle_component *al; + struct demangle_component **pal; /* Preserve the last name we saw--don't let the template arguments clobber it, as that would give us the wrong name for a subsequent @@ -2111,13 +2217,13 @@ d_template_args (di) pal = &al; while (1) { - struct d_comp *a; + struct demangle_component *a; a = d_template_arg (di); if (a == NULL) return NULL; - *pal = d_make_comp (di, D_COMP_TEMPLATE_ARGLIST, a, NULL); + *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL); if (*pal == NULL) return NULL; pal = &d_right (*pal); @@ -2139,11 +2245,11 @@ d_template_args (di) ::= <expr-primary> */ -static struct d_comp * +static struct demangle_component * d_template_arg (di) struct d_info *di; { - struct d_comp *ret; + struct demangle_component *ret; switch (d_peek_char (di)) { @@ -2158,7 +2264,7 @@ d_template_arg (di) return d_expr_primary (di); default: - return d_type (di); + return cplus_demangle_type (di); } } @@ -2172,7 +2278,7 @@ d_template_arg (di) ::= <expr-primary> */ -static struct d_comp * +static struct demangle_component * d_expression (di) struct d_info *di; { @@ -2185,43 +2291,47 @@ d_expression (di) return d_template_param (di); else if (peek == 's' && d_peek_next_char (di) == 'r') { - struct d_comp *type; - struct d_comp *name; + struct demangle_component *type; + struct demangle_component *name; d_advance (di, 2); - type = d_type (di); + type = cplus_demangle_type (di); name = d_unqualified_name (di); if (d_peek_char (di) != 'I') - return d_make_comp (di, D_COMP_QUAL_NAME, type, name); + return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name); else - return d_make_comp (di, D_COMP_QUAL_NAME, type, - d_make_comp (di, D_COMP_TEMPLATE, name, + return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, + d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name, d_template_args (di))); } else { - struct d_comp *op; + struct demangle_component *op; int args; op = d_operator_name (di); if (op == NULL) return NULL; - if (op->type == D_COMP_OPERATOR + if (op->type == DEMANGLE_COMPONENT_OPERATOR) + di->expansion += op->u.s_operator.op->len - 2; + + if (op->type == DEMANGLE_COMPONENT_OPERATOR && strcmp (op->u.s_operator.op->code, "st") == 0) - return d_make_comp (di, D_COMP_UNARY, op, d_type (di)); + return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, + cplus_demangle_type (di)); switch (op->type) { default: return NULL; - case D_COMP_OPERATOR: + case DEMANGLE_COMPONENT_OPERATOR: args = op->u.s_operator.op->args; break; - case D_COMP_EXTENDED_OPERATOR: + case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: args = op->u.s_extended_operator.args; break; - case D_COMP_CAST: + case DEMANGLE_COMPONENT_CAST: args = 1; break; } @@ -2229,27 +2339,32 @@ d_expression (di) switch (args) { case 1: - return d_make_comp (di, D_COMP_UNARY, op, d_expression (di)); + return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op, + d_expression (di)); case 2: { - struct d_comp *left; + struct demangle_component *left; left = d_expression (di); - return d_make_comp (di, D_COMP_BINARY, op, - d_make_comp (di, D_COMP_BINARY_ARGS, left, + return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op, + d_make_comp (di, + DEMANGLE_COMPONENT_BINARY_ARGS, + left, d_expression (di))); } case 3: { - struct d_comp *first; - struct d_comp *second; + struct demangle_component *first; + struct demangle_component *second; first = d_expression (di); second = d_expression (di); - return d_make_comp (di, D_COMP_TRINARY, op, - d_make_comp (di, D_COMP_TRINARY_ARG1, first, + return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op, + d_make_comp (di, + DEMANGLE_COMPONENT_TRINARY_ARG1, + first, d_make_comp (di, - D_COMP_TRINARY_ARG2, + DEMANGLE_COMPONENT_TRINARY_ARG2, second, d_expression (di)))); } @@ -2264,23 +2379,29 @@ d_expression (di) ::= L <mangled-name> E */ -static struct d_comp * +static struct demangle_component * d_expr_primary (di) struct d_info *di; { - struct d_comp *ret; + struct demangle_component *ret; if (d_next_char (di) != 'L') return NULL; if (d_peek_char (di) == '_') - ret = d_mangled_name (di, 0); + ret = cplus_demangle_mangled_name (di, 0); else { - struct d_comp *type; - enum d_comp_type t; + struct demangle_component *type; + enum demangle_component_type t; const char *s; - type = d_type (di); + type = cplus_demangle_type (di); + + /* If we have a type we know how to print, we aren't going to + print the type name itself. */ + if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE + && type->u.s_builtin.type->print != D_PRINT_DEFAULT) + di->expansion -= type->u.s_builtin.type->len; /* Rather than try to interpret the literal value, we just collect it as a string. Note that it's possible to have a @@ -2293,10 +2414,10 @@ d_expr_primary (di) constant in any readable form anyhow. We don't attempt to handle these cases. */ - t = D_COMP_LITERAL; + t = DEMANGLE_COMPONENT_LITERAL; if (d_peek_char (di) == 'n') { - t = D_COMP_LITERAL_NEG; + t = DEMANGLE_COMPONENT_LITERAL_NEG; d_advance (di, 1); } s = d_str (di); @@ -2313,11 +2434,11 @@ d_expr_primary (di) ::= Z <(function) encoding> E s [<discriminator>] */ -static struct d_comp * +static struct demangle_component * d_local_name (di) struct d_info *di; { - struct d_comp *function; + struct demangle_component *function; if (d_next_char (di) != 'Z') return NULL; @@ -2332,18 +2453,18 @@ d_local_name (di) d_advance (di, 1); if (! d_discriminator (di)) return NULL; - return d_make_comp (di, D_COMP_QUAL_NAME, function, + return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, d_make_name (di, "string literal", sizeof "string literal" - 1)); } else { - struct d_comp *name; + struct demangle_component *name; name = d_name (di); if (! d_discriminator (di)) return NULL; - return d_make_comp (di, D_COMP_QUAL_NAME, function, name); + return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name); } } @@ -2372,7 +2493,7 @@ d_discriminator (di) static int d_add_substitution (di, dc) struct d_info *di; - struct d_comp *dc; + struct demangle_component *dc; { if (dc == NULL) return 0; @@ -2404,24 +2525,30 @@ d_add_substitution (di, dc) static const struct d_standard_sub_info standard_subs[] = { - { 't', "std", "std", NULL }, - { 'a', "std::allocator", "std::allocator", "allocator" }, - { 'b', "std::basic_string", "std::basic_string", "basic_string" }, - { 's', "std::string", - "std::basic_string<char, std::char_traits<char>, std::allocator<char> >", - "basic_string" }, - { 'i', "std::istream", - "std::basic_istream<char, std::char_traits<char> >", - "basic_istream" }, - { 'o', "std::ostream", - "std::basic_ostream<char, std::char_traits<char> >", - "basic_ostream" }, - { 'd', "std::iostream", - "std::basic_iostream<char, std::char_traits<char> >", - "basic_iostream" } + { 't', NL ("std"), + NL ("std"), + NULL, 0 }, + { 'a', NL ("std::allocator"), + NL ("std::allocator"), + NL ("allocator") }, + { 'b', NL ("std::basic_string"), + NL ("std::basic_string"), + NL ("basic_string") }, + { 's', NL ("std::string"), + NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"), + NL ("basic_string") }, + { 'i', NL ("std::istream"), + NL ("std::basic_istream<char, std::char_traits<char> >"), + NL ("basic_istream") }, + { 'o', NL ("std::ostream"), + NL ("std::basic_ostream<char, std::char_traits<char> >"), + NL ("basic_ostream") }, + { 'd', NL ("std::iostream"), + NL ("std::basic_iostream<char, std::char_traits<char> >"), + NL ("basic_iostream") } }; -static struct d_comp * +static struct demangle_component * d_substitution (di, prefix) struct d_info *di; int prefix; @@ -2457,6 +2584,8 @@ d_substitution (di, prefix) if (id >= di->next_sub) return NULL; + ++di->did_subs; + return di->subs[id]; } else @@ -2481,12 +2610,24 @@ d_substitution (di, prefix) { if (c == p->code) { + const char *s; + int len; + if (p->set_last_name != NULL) - di->last_name = d_make_sub (di, p->set_last_name); + di->last_name = d_make_sub (di, p->set_last_name, + p->set_last_name_len); if (verbose) - return d_make_sub (di, p->full_expansion); + { + s = p->full_expansion; + len = p->full_len; + } else - return d_make_sub (di, p->simple_expansion); + { + s = p->simple_expansion; + len = p->simple_len; + } + di->expansion += len; + return d_make_sub (di, s, len); } } @@ -2578,22 +2719,27 @@ d_print_error (dpi) dpi->buf = NULL; } -/* Turn components into a human readable string. Returns a string - allocated by malloc, or NULL on error. On success, this sets *PALC - to the size of the allocated buffer. On failure, this sets *PALC - to 0 for a bad parse, or to 1 for a memory allocation failure. */ +/* Turn components into a human readable string. OPTIONS is the + options bits passed to the demangler. DC is the tree to print. + ESTIMATE is a guess at the length of the result. This returns a + string allocated by malloc, or NULL on error. On success, this + sets *PALC to the size of the allocated buffer. On failure, this + sets *PALC to 0 for a bad parse, or to 1 for a memory allocation + failure. */ -static char * -d_print (options, dc, palc) +CP_STATIC_IF_GLIBCPP_V3 +char * +cplus_demangle_print (options, dc, estimate, palc) int options; - const struct d_comp *dc; + const struct demangle_component *dc; + int estimate; size_t *palc; { struct d_print_info dpi; dpi.options = options; - dpi.alc = 64; + dpi.alc = estimate + 1; dpi.buf = malloc (dpi.alc); if (dpi.buf == NULL) { @@ -2624,7 +2770,7 @@ d_print (options, dc, palc) static void d_print_comp (dpi, dc) struct d_print_info *dpi; - const struct d_comp *dc; + const struct demangle_component *dc; { if (dc == NULL) { @@ -2636,20 +2782,27 @@ d_print_comp (dpi, dc) switch (dc->type) { - case D_COMP_NAME: - d_print_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len); + case DEMANGLE_COMPONENT_NAME: + if ((dpi->options & DMGL_JAVA) == 0) + d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len); + else + d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len); return; - case D_COMP_QUAL_NAME: + case DEMANGLE_COMPONENT_QUAL_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: d_print_comp (dpi, d_left (dc)); - d_append_string (dpi, (dpi->options & DMGL_JAVA) == 0 ? "::" : "."); + if ((dpi->options & DMGL_JAVA) == 0) + d_append_string_constant (dpi, "::"); + else + d_append_char (dpi, '.'); d_print_comp (dpi, d_right (dc)); return; - case D_COMP_TYPED_NAME: + case DEMANGLE_COMPONENT_TYPED_NAME: { struct d_print_mod *hold_modifiers; - struct d_comp *typed_name; + struct demangle_component *typed_name; struct d_print_mod adpm[4]; unsigned int i; struct d_print_template dpt; @@ -2675,9 +2828,9 @@ d_print_comp (dpi, dc) adpm[i].templates = dpi->templates; ++i; - if (typed_name->type != D_COMP_RESTRICT_THIS - && typed_name->type != D_COMP_VOLATILE_THIS - && typed_name->type != D_COMP_CONST_THIS) + if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS + && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS + && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS) break; typed_name = d_left (typed_name); @@ -2685,16 +2838,48 @@ d_print_comp (dpi, dc) /* If typed_name is a template, then it applies to the function type as well. */ - if (typed_name->type == D_COMP_TEMPLATE) + if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) { dpt.next = dpi->templates; dpi->templates = &dpt; dpt.template = typed_name; } + /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then + there may be CV-qualifiers on its right argument which + really apply here; this happens when parsing a class which + is local to a function. */ + if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME) + { + struct demangle_component *local_name; + + local_name = d_right (typed_name); + while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS + || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS + || local_name->type == DEMANGLE_COMPONENT_CONST_THIS) + { + if (i >= sizeof adpm / sizeof adpm[0]) + { + d_print_error (dpi); + return; + } + + adpm[i] = adpm[i - 1]; + adpm[i].next = &adpm[i - 1]; + dpi->modifiers = &adpm[i]; + + adpm[i - 1].mod = local_name; + adpm[i - 1].printed = 0; + adpm[i - 1].templates = dpi->templates; + ++i; + + local_name = d_left (local_name); + } + } + d_print_comp (dpi, d_right (dc)); - if (typed_name->type == D_COMP_TEMPLATE) + if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE) dpi->templates = dpt.next; /* If the modifiers didn't get printed by the type, print them @@ -2714,7 +2899,7 @@ d_print_comp (dpi, dc) return; } - case D_COMP_TEMPLATE: + case DEMANGLE_COMPONENT_TEMPLATE: { struct d_print_mod *hold_dpm; @@ -2741,10 +2926,10 @@ d_print_comp (dpi, dc) return; } - case D_COMP_TEMPLATE_PARAM: + case DEMANGLE_COMPONENT_TEMPLATE_PARAM: { long i; - struct d_comp *a; + struct demangle_component *a; struct d_print_template *hold_dpt; if (dpi->templates == NULL) @@ -2757,7 +2942,7 @@ d_print_comp (dpi, dc) a != NULL; a = d_right (a)) { - if (a->type != D_COMP_TEMPLATE_ARGLIST) + if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST) { d_print_error (dpi); return; @@ -2787,92 +2972,92 @@ d_print_comp (dpi, dc) return; } - case D_COMP_CTOR: + case DEMANGLE_COMPONENT_CTOR: d_print_comp (dpi, dc->u.s_ctor.name); return; - case D_COMP_DTOR: + case DEMANGLE_COMPONENT_DTOR: d_append_char (dpi, '~'); d_print_comp (dpi, dc->u.s_dtor.name); return; - case D_COMP_VTABLE: - d_append_string (dpi, "vtable for "); + case DEMANGLE_COMPONENT_VTABLE: + d_append_string_constant (dpi, "vtable for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_VTT: - d_append_string (dpi, "VTT for "); + case DEMANGLE_COMPONENT_VTT: + d_append_string_constant (dpi, "VTT for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_CONSTRUCTION_VTABLE: - d_append_string (dpi, "construction vtable for "); + case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: + d_append_string_constant (dpi, "construction vtable for "); d_print_comp (dpi, d_left (dc)); - d_append_string (dpi, "-in-"); + d_append_string_constant (dpi, "-in-"); d_print_comp (dpi, d_right (dc)); return; - case D_COMP_TYPEINFO: - d_append_string (dpi, "typeinfo for "); + case DEMANGLE_COMPONENT_TYPEINFO: + d_append_string_constant (dpi, "typeinfo for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_TYPEINFO_NAME: - d_append_string (dpi, "typeinfo name for "); + case DEMANGLE_COMPONENT_TYPEINFO_NAME: + d_append_string_constant (dpi, "typeinfo name for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_TYPEINFO_FN: - d_append_string (dpi, "typeinfo fn for "); + case DEMANGLE_COMPONENT_TYPEINFO_FN: + d_append_string_constant (dpi, "typeinfo fn for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_THUNK: - d_append_string (dpi, "non-virtual thunk to "); + case DEMANGLE_COMPONENT_THUNK: + d_append_string_constant (dpi, "non-virtual thunk to "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_VIRTUAL_THUNK: - d_append_string (dpi, "virtual thunk to "); + case DEMANGLE_COMPONENT_VIRTUAL_THUNK: + d_append_string_constant (dpi, "virtual thunk to "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_COVARIANT_THUNK: - d_append_string (dpi, "covariant return thunk to "); + case DEMANGLE_COMPONENT_COVARIANT_THUNK: + d_append_string_constant (dpi, "covariant return thunk to "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_JAVA_CLASS: - d_append_string (dpi, "java Class for "); + case DEMANGLE_COMPONENT_JAVA_CLASS: + d_append_string_constant (dpi, "java Class for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_GUARD: - d_append_string (dpi, "guard variable for "); + case DEMANGLE_COMPONENT_GUARD: + d_append_string_constant (dpi, "guard variable for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_REFTEMP: - d_append_string (dpi, "reference temporary for "); + case DEMANGLE_COMPONENT_REFTEMP: + d_append_string_constant (dpi, "reference temporary for "); d_print_comp (dpi, d_left (dc)); return; - case D_COMP_SUB_STD: - d_append_string (dpi, dc->u.s_string.string); + case DEMANGLE_COMPONENT_SUB_STD: + d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len); return; - case D_COMP_RESTRICT: - case D_COMP_VOLATILE: - case D_COMP_CONST: - case D_COMP_RESTRICT_THIS: - case D_COMP_VOLATILE_THIS: - case D_COMP_CONST_THIS: - case D_COMP_VENDOR_TYPE_QUAL: - case D_COMP_POINTER: - case D_COMP_REFERENCE: - case D_COMP_COMPLEX: - case D_COMP_IMAGINARY: + case DEMANGLE_COMPONENT_RESTRICT: + case DEMANGLE_COMPONENT_VOLATILE: + case DEMANGLE_COMPONENT_CONST: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_POINTER: + case DEMANGLE_COMPONENT_REFERENCE: + case DEMANGLE_COMPONENT_COMPLEX: + case DEMANGLE_COMPONENT_IMAGINARY: { /* We keep a list of modifiers on the stack. */ struct d_print_mod dpm; @@ -2895,18 +3080,20 @@ d_print_comp (dpi, dc) return; } - case D_COMP_BUILTIN_TYPE: + case DEMANGLE_COMPONENT_BUILTIN_TYPE: if ((dpi->options & DMGL_JAVA) == 0) - d_append_string (dpi, dc->u.s_builtin.type->name); + d_append_buffer (dpi, dc->u.s_builtin.type->name, + dc->u.s_builtin.type->len); else - d_append_string (dpi, dc->u.s_builtin.type->java_name); + d_append_buffer (dpi, dc->u.s_builtin.type->java_name, + dc->u.s_builtin.type->java_len); return; - case D_COMP_VENDOR_TYPE: + case DEMANGLE_COMPONENT_VENDOR_TYPE: d_print_comp (dpi, d_left (dc)); return; - case D_COMP_FUNCTION_TYPE: + case DEMANGLE_COMPONENT_FUNCTION_TYPE: { if (d_left (dc) != NULL) { @@ -2936,7 +3123,7 @@ d_print_comp (dpi, dc) return; } - case D_COMP_ARRAY_TYPE: + case DEMANGLE_COMPONENT_ARRAY_TYPE: { struct d_print_mod dpm; @@ -2961,7 +3148,7 @@ d_print_comp (dpi, dc) return; } - case D_COMP_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: { struct d_print_mod dpm; @@ -2979,7 +3166,7 @@ d_print_comp (dpi, dc) { d_append_char (dpi, ' '); d_print_comp (dpi, d_left (dc)); - d_append_string (dpi, "::*"); + d_append_string_constant (dpi, "::*"); } dpi->modifiers = dpm.next; @@ -2987,56 +3174,57 @@ d_print_comp (dpi, dc) return; } - case D_COMP_ARGLIST: - case D_COMP_TEMPLATE_ARGLIST: + case DEMANGLE_COMPONENT_ARGLIST: + case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: d_print_comp (dpi, d_left (dc)); if (d_right (dc) != NULL) { - d_append_string (dpi, ", "); + d_append_string_constant (dpi, ", "); d_print_comp (dpi, d_right (dc)); } return; - case D_COMP_OPERATOR: + case DEMANGLE_COMPONENT_OPERATOR: { char c; - d_append_string (dpi, "operator"); + d_append_string_constant (dpi, "operator"); c = dc->u.s_operator.op->name[0]; if (IS_LOWER (c)) d_append_char (dpi, ' '); - d_append_string (dpi, dc->u.s_operator.op->name); + d_append_buffer (dpi, dc->u.s_operator.op->name, + dc->u.s_operator.op->len); return; } - case D_COMP_EXTENDED_OPERATOR: - d_append_string (dpi, "operator "); + case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: + d_append_string_constant (dpi, "operator "); d_print_comp (dpi, dc->u.s_extended_operator.name); return; - case D_COMP_CAST: - d_append_string (dpi, "operator "); + case DEMANGLE_COMPONENT_CAST: + d_append_string_constant (dpi, "operator "); d_print_cast (dpi, dc); return; - case D_COMP_UNARY: - if (d_left (dc)->type != D_COMP_CAST) + case DEMANGLE_COMPONENT_UNARY: + if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST) d_print_expr_op (dpi, d_left (dc)); else { - d_append_string (dpi, "(("); + d_append_string_constant (dpi, "(("); d_print_cast (dpi, d_left (dc)); d_append_char (dpi, ')'); } d_append_char (dpi, '('); d_print_comp (dpi, d_right (dc)); d_append_char (dpi, ')'); - if (d_left (dc)->type == D_COMP_CAST) + if (d_left (dc)->type == DEMANGLE_COMPONENT_CAST) d_append_char (dpi, ')'); return; - case D_COMP_BINARY: - if (d_right (dc)->type != D_COMP_BINARY_ARGS) + case DEMANGLE_COMPONENT_BINARY: + if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS) { d_print_error (dpi); return; @@ -3045,64 +3233,66 @@ d_print_comp (dpi, dc) /* We wrap an expression which uses the greater-than operator in an extra layer of parens so that it does not get confused with the '>' which ends the template parameters. */ - if (d_left (dc)->type == D_COMP_OPERATOR - && strcmp (d_left (dc)->u.s_operator.op->name, ">") == 0) + if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR + && d_left (dc)->u.s_operator.op->len == 1 + && d_left (dc)->u.s_operator.op->name[0] == '>') d_append_char (dpi, '('); d_append_char (dpi, '('); d_print_comp (dpi, d_left (d_right (dc))); - d_append_string (dpi, ") "); + d_append_string_constant (dpi, ") "); d_print_expr_op (dpi, d_left (dc)); - d_append_string (dpi, " ("); + d_append_string_constant (dpi, " ("); d_print_comp (dpi, d_right (d_right (dc))); d_append_char (dpi, ')'); - if (d_left (dc)->type == D_COMP_OPERATOR - && strcmp (d_left (dc)->u.s_operator.op->name, ">") == 0) + if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR + && d_left (dc)->u.s_operator.op->len == 1 + && d_left (dc)->u.s_operator.op->name[0] == '>') d_append_char (dpi, ')'); return; - case D_COMP_BINARY_ARGS: - /* We should only see this as part of D_COMP_BINARY. */ + case DEMANGLE_COMPONENT_BINARY_ARGS: + /* We should only see this as part of DEMANGLE_COMPONENT_BINARY. */ d_print_error (dpi); return; - case D_COMP_TRINARY: - if (d_right (dc)->type != D_COMP_TRINARY_ARG1 - || d_right (d_right (dc))->type != D_COMP_TRINARY_ARG2) + case DEMANGLE_COMPONENT_TRINARY: + if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1 + || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2) { d_print_error (dpi); return; } d_append_char (dpi, '('); d_print_comp (dpi, d_left (d_right (dc))); - d_append_string (dpi, ") "); + d_append_string_constant (dpi, ") "); d_print_expr_op (dpi, d_left (dc)); - d_append_string (dpi, " ("); + d_append_string_constant (dpi, " ("); d_print_comp (dpi, d_left (d_right (d_right (dc)))); - d_append_string (dpi, ") : ("); + d_append_string_constant (dpi, ") : ("); d_print_comp (dpi, d_right (d_right (d_right (dc)))); d_append_char (dpi, ')'); return; - case D_COMP_TRINARY_ARG1: - case D_COMP_TRINARY_ARG2: - /* We should only see these are part of D_COMP_TRINARY. */ + case DEMANGLE_COMPONENT_TRINARY_ARG1: + case DEMANGLE_COMPONENT_TRINARY_ARG2: + /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY. */ d_print_error (dpi); return; - case D_COMP_LITERAL: - case D_COMP_LITERAL_NEG: + case DEMANGLE_COMPONENT_LITERAL: + case DEMANGLE_COMPONENT_LITERAL_NEG: /* For some builtin types, produce simpler output. */ - if (d_left (dc)->type == D_COMP_BUILTIN_TYPE) + if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE) { switch (d_left (dc)->u.s_builtin.type->print) { case D_PRINT_INT: - if (d_right (dc)->type == D_COMP_NAME) + if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME) { - if (dc->type == D_COMP_LITERAL_NEG) + if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) d_append_char (dpi, '-'); d_print_comp (dpi, d_right (dc)); return; @@ -3110,9 +3300,9 @@ d_print_comp (dpi, dc) break; case D_PRINT_LONG: - if (d_right (dc)->type == D_COMP_NAME) + if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME) { - if (dc->type == D_COMP_LITERAL_NEG) + if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) d_append_char (dpi, '-'); d_print_comp (dpi, d_right (dc)); d_append_char (dpi, 'l'); @@ -3121,17 +3311,17 @@ d_print_comp (dpi, dc) break; case D_PRINT_BOOL: - if (d_right (dc)->type == D_COMP_NAME + if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME && d_right (dc)->u.s_name.len == 1 - && dc->type == D_COMP_LITERAL) + && dc->type == DEMANGLE_COMPONENT_LITERAL) { switch (d_right (dc)->u.s_name.s[0]) { case '0': - d_append_string (dpi, "false"); + d_append_string_constant (dpi, "false"); return; case '1': - d_append_string (dpi, "true"); + d_append_string_constant (dpi, "true"); return; default: break; @@ -3147,7 +3337,7 @@ d_print_comp (dpi, dc) d_append_char (dpi, '('); d_print_comp (dpi, d_left (dc)); d_append_char (dpi, ')'); - if (dc->type == D_COMP_LITERAL_NEG) + if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG) d_append_char (dpi, '-'); d_print_comp (dpi, d_right (dc)); return; @@ -3158,64 +3348,58 @@ d_print_comp (dpi, dc) } } -/* Print an identifier. */ +/* Print a Java dentifier. For Java we try to handle encoded extended + Unicode characters. The C++ ABI doesn't mention Unicode encoding, + so we don't it for C++. Characters are encoded as + __U<hex-char>+_. */ static void -d_print_identifier (dpi, name, len) +d_print_java_identifier (dpi, name, len) struct d_print_info *dpi; const char *name; int len; { - if ((dpi->options & DMGL_JAVA) == 0) - d_append_buffer (dpi, name, len); - else - { - const char *p; - const char *end; + const char *p; + const char *end; - /* For Java we try to handle encoded extended Unicode - characters. The C++ ABI doesn't mention Unicode encoding, so - we don't it for C++. Characters are encoded as - __U<hex-char>+_. */ - end = name + len; - for (p = name; p < end; ++p) + end = name + len; + for (p = name; p < end; ++p) + { + if (end - p > 3 + && p[0] == '_' + && p[1] == '_' + && p[2] == 'U') { - if (end - p > 3 - && p[0] == '_' - && p[1] == '_' - && p[2] == 'U') + unsigned long c; + const char *q; + + c = 0; + for (q = p + 3; q < end; ++q) { - unsigned long c; - const char *q; + int dig; + + if (IS_DIGIT (*q)) + dig = *q - '0'; + else if (*q >= 'A' && *q <= 'F') + dig = *q - 'A' + 10; + else if (*q >= 'a' && *q <= 'f') + dig = *q - 'a' + 10; + else + break; - c = 0; - for (q = p + 3; q < end; ++q) - { - int dig; - - if (IS_DIGIT (*q)) - dig = *q - '0'; - else if (*q >= 'A' && *q <= 'F') - dig = *q - 'A' + 10; - else if (*q >= 'a' && *q <= 'f') - dig = *q - 'a' + 10; - else - break; - - c = c * 16 + dig; - } - /* If the Unicode character is larger than 256, we don't - try to deal with it here. FIXME. */ - if (q < end && *q == '_' && c < 256) - { - d_append_char (dpi, c); - p = q; - continue; - } + c = c * 16 + dig; + } + /* If the Unicode character is larger than 256, we don't try + to deal with it here. FIXME. */ + if (q < end && *q == '_' && c < 256) + { + d_append_char (dpi, c); + p = q; + continue; } - - d_append_char (dpi, *p); } + + d_append_char (dpi, *p); } } @@ -3235,9 +3419,9 @@ d_print_mod_list (dpi, mods, suffix) if (mods->printed || (! suffix - && (mods->mod->type == D_COMP_RESTRICT_THIS - || mods->mod->type == D_COMP_VOLATILE_THIS - || mods->mod->type == D_COMP_CONST_THIS))) + && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS + || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS + || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS))) { d_print_mod_list (dpi, mods->next, suffix); return; @@ -3248,18 +3432,49 @@ d_print_mod_list (dpi, mods, suffix) hold_dpt = dpi->templates; dpi->templates = mods->templates; - if (mods->mod->type == D_COMP_FUNCTION_TYPE) + if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE) { d_print_function_type (dpi, mods->mod, mods->next); dpi->templates = hold_dpt; return; } - else if (mods->mod->type == D_COMP_ARRAY_TYPE) + else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) { d_print_array_type (dpi, mods->mod, mods->next); dpi->templates = hold_dpt; return; } + else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME) + { + struct d_print_mod *hold_modifiers; + struct demangle_component *dc; + + /* When this is on the modifier stack, we have pulled any + qualifiers off the right argument already. Otherwise, we + print it as usual, but don't let the left argument see any + modifiers. */ + + hold_modifiers = dpi->modifiers; + dpi->modifiers = NULL; + d_print_comp (dpi, d_left (mods->mod)); + dpi->modifiers = hold_modifiers; + + if ((dpi->options & DMGL_JAVA) == 0) + d_append_string_constant (dpi, "::"); + else + d_append_char (dpi, '.'); + + dc = d_right (mods->mod); + while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS + || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS + || dc->type == DEMANGLE_COMPONENT_CONST_THIS) + dc = d_left (dc); + + d_print_comp (dpi, dc); + + dpi->templates = hold_dpt; + return; + } d_print_mod (dpi, mods->mod); @@ -3273,47 +3488,47 @@ d_print_mod_list (dpi, mods, suffix) static void d_print_mod (dpi, mod) struct d_print_info *dpi; - const struct d_comp *mod; + const struct demangle_component *mod; { switch (mod->type) { - case D_COMP_RESTRICT: - case D_COMP_RESTRICT_THIS: - d_append_string (dpi, " restrict"); + case DEMANGLE_COMPONENT_RESTRICT: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + d_append_string_constant (dpi, " restrict"); return; - case D_COMP_VOLATILE: - case D_COMP_VOLATILE_THIS: - d_append_string (dpi, " volatile"); + case DEMANGLE_COMPONENT_VOLATILE: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + d_append_string_constant (dpi, " volatile"); return; - case D_COMP_CONST: - case D_COMP_CONST_THIS: - d_append_string (dpi, " const"); + case DEMANGLE_COMPONENT_CONST: + case DEMANGLE_COMPONENT_CONST_THIS: + d_append_string_constant (dpi, " const"); return; - case D_COMP_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: d_append_char (dpi, ' '); d_print_comp (dpi, d_right (mod)); return; - case D_COMP_POINTER: + case DEMANGLE_COMPONENT_POINTER: /* There is no pointer symbol in Java. */ if ((dpi->options & DMGL_JAVA) == 0) d_append_char (dpi, '*'); return; - case D_COMP_REFERENCE: + case DEMANGLE_COMPONENT_REFERENCE: d_append_char (dpi, '&'); return; - case D_COMP_COMPLEX: - d_append_string (dpi, "complex "); + case DEMANGLE_COMPONENT_COMPLEX: + d_append_string_constant (dpi, "complex "); return; - case D_COMP_IMAGINARY: - d_append_string (dpi, "imaginary "); + case DEMANGLE_COMPONENT_IMAGINARY: + d_append_string_constant (dpi, "imaginary "); return; - case D_COMP_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: if (d_last_char (dpi) != '(') d_append_char (dpi, ' '); d_print_comp (dpi, d_left (mod)); - d_append_string (dpi, "::*"); + d_append_string_constant (dpi, "::*"); return; - case D_COMP_TYPED_NAME: + case DEMANGLE_COMPONENT_TYPED_NAME: d_print_comp (dpi, d_left (mod)); return; default: @@ -3329,12 +3544,13 @@ d_print_mod (dpi, mod) static void d_print_function_type (dpi, dc, mods) struct d_print_info *dpi; - const struct d_comp *dc; + const struct demangle_component *dc; struct d_print_mod *mods; { int need_paren; int saw_mod; struct d_print_mod *p; + struct d_print_mod *hold_modifiers; need_paren = 0; saw_mod = 0; @@ -3346,20 +3562,20 @@ d_print_function_type (dpi, dc, mods) saw_mod = 1; switch (p->mod->type) { - case D_COMP_RESTRICT: - case D_COMP_VOLATILE: - case D_COMP_CONST: - case D_COMP_VENDOR_TYPE_QUAL: - case D_COMP_POINTER: - case D_COMP_REFERENCE: - case D_COMP_COMPLEX: - case D_COMP_IMAGINARY: - case D_COMP_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_RESTRICT: + case DEMANGLE_COMPONENT_VOLATILE: + case DEMANGLE_COMPONENT_CONST: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_POINTER: + case DEMANGLE_COMPONENT_REFERENCE: + case DEMANGLE_COMPONENT_COMPLEX: + case DEMANGLE_COMPONENT_IMAGINARY: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: need_paren = 1; break; - case D_COMP_RESTRICT_THIS: - case D_COMP_VOLATILE_THIS: - case D_COMP_CONST_THIS: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: break; default: break; @@ -3388,6 +3604,9 @@ d_print_function_type (dpi, dc, mods) d_append_char (dpi, '('); } + hold_modifiers = dpi->modifiers; + dpi->modifiers = NULL; + d_print_mod_list (dpi, mods, 0); if (need_paren) @@ -3401,6 +3620,8 @@ d_print_function_type (dpi, dc, mods) d_append_char (dpi, ')'); d_print_mod_list (dpi, mods, 1); + + dpi->modifiers = hold_modifiers; } /* Print an array type, except for the element type. */ @@ -3408,7 +3629,7 @@ d_print_function_type (dpi, dc, mods) static void d_print_array_type (dpi, dc, mods) struct d_print_info *dpi; - const struct d_comp *dc; + const struct demangle_component *dc; struct d_print_mod *mods; { int need_space; @@ -3425,7 +3646,7 @@ d_print_array_type (dpi, dc, mods) if (p->printed) break; - if (p->mod->type == D_COMP_ARRAY_TYPE) + if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE) { need_space = 0; break; @@ -3439,7 +3660,7 @@ d_print_array_type (dpi, dc, mods) } if (need_paren) - d_append_string (dpi, " ("); + d_append_string_constant (dpi, " ("); d_print_mod_list (dpi, mods, 0); @@ -3463,10 +3684,11 @@ d_print_array_type (dpi, dc, mods) static void d_print_expr_op (dpi, dc) struct d_print_info *dpi; - const struct d_comp *dc; + const struct demangle_component *dc; { - if (dc->type == D_COMP_OPERATOR) - d_append_string (dpi, dc->u.s_operator.op->name); + if (dc->type == DEMANGLE_COMPONENT_OPERATOR) + d_append_buffer (dpi, dc->u.s_operator.op->name, + dc->u.s_operator.op->len); else d_print_comp (dpi, dc); } @@ -3476,9 +3698,9 @@ d_print_expr_op (dpi, dc) static void d_print_cast (dpi, dc) struct d_print_info *dpi; - const struct d_comp *dc; + const struct demangle_component *dc; { - if (d_left (dc)->type != D_COMP_TEMPLATE) + if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE) d_print_comp (dpi, d_left (dc)); else { @@ -3518,14 +3740,16 @@ d_print_cast (dpi, dc) /* Initialize the information structure we use to pass around information. */ -static int -d_init_info (mangled, options, len, di) +CP_STATIC_IF_GLIBCPP_V3 +void +cplus_demangle_init_info (mangled, options, len, di) const char *mangled; int options; size_t len; struct d_info *di; { di->s = mangled; + di->send = mangled + len; di->options = options; di->n = mangled; @@ -3534,29 +3758,17 @@ d_init_info (mangled, options, len, di) the mangled string. Most components correspond directly to chars, but the ARGLIST types are exceptions. */ di->num_comps = 2 * len; - di->comps = (struct d_comp *) malloc (di->num_comps - * sizeof (struct d_comp)); di->next_comp = 0; /* Similarly, we can not need more substitutions than there are chars in the mangled string. */ di->num_subs = len; - di->subs = (struct d_comp **) malloc (di->num_subs - * sizeof (struct d_comp *)); di->next_sub = 0; + di->did_subs = 0; di->last_name = NULL; - if (di->comps == NULL || di->subs == NULL) - { - if (di->comps != NULL) - free (di->comps); - if (di->subs != NULL) - free (di->subs); - return 0; - } - - return 1; + di->expansion = 0; } /* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled @@ -3575,7 +3787,8 @@ d_demangle (mangled, options, palc) size_t len; int type; struct d_info di; - struct d_comp *dc; + struct demangle_component *dc; + int estimate; char *ret; *palc = 0; @@ -3611,39 +3824,82 @@ d_demangle (mangled, options, palc) type = 1; } - if (! d_init_info (mangled, options, len, &di)) - { - *palc = 1; - return NULL; - } + cplus_demangle_init_info (mangled, options, len, &di); - if (! type) - dc = d_mangled_name (&di, 1); - else - dc = d_type (&di); + { +#ifdef CP_DYNAMIC_ARRAYS + __extension__ struct demangle_component comps[di.num_comps]; + __extension__ struct demangle_component *subs[di.num_subs]; + + di.comps = &comps[0]; + di.subs = &subs[0]; +#else + di.comps = ((struct demangle_component *) + malloc (di.num_comps * sizeof (struct demangle_component))); + di.subs = ((struct demangle_component **) + malloc (di.num_subs * sizeof (struct demangle_component *))); + if (di.comps == NULL || di.subs == NULL) + { + if (di.comps != NULL) + free (di.comps); + if (di.subs != NULL) + free (di.subs); + *palc = 1; + return NULL; + } +#endif + + if (! type) + dc = cplus_demangle_mangled_name (&di, 1); + else + dc = cplus_demangle_type (&di); - /* If DMGL_PARAMS is set, then if we didn't consume the entire - mangled string, then we didn't successfully demangle it. If - DMGL_PARAMS is not set, we didn't look at the trailing - parameters. */ - if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0') - dc = NULL; + /* If DMGL_PARAMS is set, then if we didn't consume the entire + mangled string, then we didn't successfully demangle it. If + DMGL_PARAMS is not set, we didn't look at the trailing + parameters. */ + if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0') + dc = NULL; #ifdef CP_DEMANGLE_DEBUG - if (dc == NULL) - printf ("failed demangling\n"); - else - d_dump (dc, 0); + if (dc == NULL) + printf ("failed demangling\n"); + else + d_dump (dc, 0); #endif - free (di.subs); - di.subs = NULL; + /* We try to guess the length of the demangled string, to minimize + calls to realloc during demangling. */ + estimate = len + di.expansion + 10 * di.did_subs; + estimate += estimate / 8; - ret = NULL; - if (dc != NULL) - ret = d_print (options, dc, palc); + ret = NULL; + if (dc != NULL) + ret = cplus_demangle_print (options, dc, estimate, palc); - free (di.comps); +#ifndef CP_DYNAMIC_ARRAYS + free (di.comps); + free (di.subs); +#endif + +#ifdef CP_DEMANGLE_DEBUG + if (ret != NULL) + { + int rlen; + + rlen = strlen (ret); + if (rlen > 2 * estimate) + printf ("*** Length %d much greater than estimate %d\n", + rlen, estimate); + else if (rlen > estimate) + printf ("*** Length %d greater than estimate %d\n", + rlen, estimate); + else if (rlen < estimate / 2) + printf ("*** Length %d much less than estimate %d\n", + rlen, estimate); + } +#endif + } return ret; } @@ -3820,53 +4076,78 @@ is_ctor_or_dtor (mangled, ctor_kind, dtor_kind) enum gnu_v3_dtor_kinds *dtor_kind; { struct d_info di; - struct d_comp *dc; + struct demangle_component *dc; int ret; *ctor_kind = (enum gnu_v3_ctor_kinds) 0; *dtor_kind = (enum gnu_v3_dtor_kinds) 0; - if (! d_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di)) - return 0; + cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di); - dc = d_mangled_name (&di, 1); + { +#ifdef CP_DYNAMIC_ARRAYS + __extension__ struct demangle_component comps[di.num_comps]; + __extension__ struct demangle_component *subs[di.num_subs]; + + di.comps = &comps[0]; + di.subs = &subs[0]; +#else + di.comps = ((struct demangle_component *) + malloc (di.num_comps * sizeof (struct demangle_component))); + di.subs = ((struct demangle_component **) + malloc (di.num_subs * sizeof (struct demangle_component *))); + if (di.comps == NULL || di.subs == NULL) + { + if (di.comps != NULL) + free (di.comps); + if (di.subs != NULL) + free (di.subs); + return 0; + } +#endif - /* Note that because we did not pass DMGL_PARAMS, we don't expect to - demangle the entire string. */ + dc = cplus_demangle_mangled_name (&di, 1); - ret = 0; - while (dc != NULL) - { - switch (dc->type) - { - default: - dc = NULL; - break; - case D_COMP_TYPED_NAME: - case D_COMP_TEMPLATE: - case D_COMP_RESTRICT_THIS: - case D_COMP_VOLATILE_THIS: - case D_COMP_CONST_THIS: - dc = d_left (dc); - break; - case D_COMP_QUAL_NAME: - dc = d_right (dc); - break; - case D_COMP_CTOR: - *ctor_kind = dc->u.s_ctor.kind; - ret = 1; - dc = NULL; - break; - case D_COMP_DTOR: - *dtor_kind = dc->u.s_dtor.kind; - ret = 1; - dc = NULL; - break; - } - } + /* Note that because we did not pass DMGL_PARAMS, we don't expect + to demangle the entire string. */ + + ret = 0; + while (dc != NULL) + { + switch (dc->type) + { + default: + dc = NULL; + break; + case DEMANGLE_COMPONENT_TYPED_NAME: + case DEMANGLE_COMPONENT_TEMPLATE: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: + dc = d_left (dc); + break; + case DEMANGLE_COMPONENT_QUAL_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: + dc = d_right (dc); + break; + case DEMANGLE_COMPONENT_CTOR: + *ctor_kind = dc->u.s_ctor.kind; + ret = 1; + dc = NULL; + break; + case DEMANGLE_COMPONENT_DTOR: + *dtor_kind = dc->u.s_dtor.kind; + ret = 1; + dc = NULL; + break; + } + } - free (di.subs); - free (di.comps); +#ifndef CP_DYNAMIC_ARRAYS + free (di.subs); + free (di.comps); +#endif + } return ret; } diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c index 5e2e7a7..f3c4464 100644 --- a/libiberty/cplus-dem.c +++ b/libiberty/cplus-dem.c @@ -1,6 +1,6 @@ /* Demangler for GNU C++ Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001 Free Software Foundation, Inc. + 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.uucp) Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling Modified by Satish Pai (pai@apollo.hp.com) for HP demangling @@ -2318,6 +2318,7 @@ demangle_arm_hp_template (work, mangled, n, declp) if (HP_DEMANGLING && ((*mangled)[n] == 'X')) { char *start_spec_args = NULL; + int hold_options; /* First check for and omit template specialization pseudo-arguments, such as in "Spec<#1,#1.*>" */ @@ -2330,6 +2331,12 @@ demangle_arm_hp_template (work, mangled, n, declp) string_init (&arg); if (work->temp_start == -1) /* non-recursive call */ work->temp_start = declp->p - declp->b; + + /* We want to unconditionally demangle parameter types in + template parameters. */ + hold_options = work->options; + work->options |= DMGL_PARAMS; + string_append (declp, "<"); while (1) { @@ -2376,17 +2383,25 @@ demangle_arm_hp_template (work, mangled, n, declp) string_delete (&arg); if (**mangled == '_') (*mangled)++; + work->options = hold_options; return; } /* ARM template? (Also handles HP cfront extensions) */ else if (arm_pt (work, *mangled, n, &p, &args)) { + int hold_options; string type_str; string_init (&arg); string_appendn (declp, *mangled, p - *mangled); if (work->temp_start == -1) /* non-recursive call */ work->temp_start = declp->p - declp->b; + + /* We want to unconditionally demangle parameter types in + template parameters. */ + hold_options = work->options; + work->options |= DMGL_PARAMS; + string_append (declp, "<"); /* should do error checking here */ while (args < e) { @@ -2430,7 +2445,10 @@ demangle_arm_hp_template (work, mangled, n, declp) /* Fail if we didn't make any progress: prevent infinite loop. */ if (args == old_args) - return; + { + work->options = hold_options; + return; + } } } string_appends (declp, &arg); @@ -2441,6 +2459,7 @@ demangle_arm_hp_template (work, mangled, n, declp) if (args >= e) --declp->p; /* remove extra comma */ string_append (declp, ">"); + work->options = hold_options; } else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0 && (*mangled)[9] == 'N' diff --git a/libiberty/getpwd.c b/libiberty/getpwd.c index f508b1e..31c7d20 100644 --- a/libiberty/getpwd.c +++ b/libiberty/getpwd.c @@ -35,6 +35,9 @@ extern int errno; #if HAVE_SYS_STAT_H #include <sys/stat.h> #endif +#if HAVE_LIMITS_H +#include <limits.h> +#endif /* Prototype these in case the system headers don't provide them. */ extern char *getpwd (); diff --git a/libiberty/lbasename.c b/libiberty/lbasename.c index 43cb73f..200a87f 100644 --- a/libiberty/lbasename.c +++ b/libiberty/lbasename.c @@ -40,25 +40,7 @@ and a path ending in @code{/} returns the empty string after it. #include "ansidecl.h" #include "libiberty.h" #include "safe-ctype.h" - -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) \ - || defined (__DJGPP__) || defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif +#include "filenames.h" const char * lbasename (name) diff --git a/libiberty/maint-tool b/libiberty/maint-tool index 6b9bf7f..bfc5304 100644 --- a/libiberty/maint-tool +++ b/libiberty/maint-tool @@ -213,6 +213,12 @@ sub locals_first { sub deps { + $crule = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n"; + $crule .= "\t \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n"; + $crule .= "\telse true; fi\n"; + $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n"; + $crule .= "\n"; + $incdir = shift @ARGV; opendir(INC, $incdir); @@ -260,10 +266,10 @@ sub deps { @deps = sort { &locals_first($a,$b) } keys %scanned; $obj = $f; $obj =~ s/\.c$/.o/; - $obj = "$obj:"; + $obj = "./$obj:"; if ($#deps >= 0) { - print OUT $obj; - $len = length($obj); + print OUT "$obj \$(srcdir)/$f"; + $len = length("$obj $f"); for $dt (@deps) { $d = $mine{$dt}; if ($len + length($d) > 70) { @@ -275,7 +281,12 @@ sub deps { } } print OUT "\n"; + } else { + print OUT "$obj \$(srcdir)/$f\n"; } + $c = $crule; + $c =~ s@\$\<@\$\(srcdir\)\/$f@g; + print OUT $c; } } closedir(S); diff --git a/libiberty/strdup.c b/libiberty/strdup.c index 071a4a4..a3f17d3 100644 --- a/libiberty/strdup.c +++ b/libiberty/strdup.c @@ -22,7 +22,7 @@ extern PTR memcpy PARAMS ((PTR, const PTR, size_t)); char * strdup(s) - char *s; + const char *s; { size_t len = strlen (s) + 1; char *result = (char*) malloc (len); diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index b39e2f4..25e8830 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -1,2571 +1,3223 @@ # 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 +# Each test case looks like this: +# options +# input to be demangled +# expected output +# +# Supported options: +# --format=<name> Sets the demangling style. +# --no-params There are two lines of expected output; the first +# is with DMGL_PARAMS, the second is without it. +# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected +# output is an integer representing ctor_kind. +# --is-v3-dtor Likewise, but for dtors. +# +# For compatibility, just in case it matters, the options line may be +# empty, to mean --format=auto. If it doesn't start with --, then it +# may contain only a format name. +# +# A line starting with `#' is ignored. +# However, blank lines in this file are NOT ignored. +# +--format=gnu --no-params AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *) +ivTSolver::AddAlignment # ---format=gnu +--format=gnu --no-params ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *) +ArrowLine::ArrowheadIntersects # ---format=gnu +--format=gnu --no-params AtEnd__13ivRubberGroup ivRubberGroup::AtEnd(void) +ivRubberGroup::AtEnd # ---format=gnu +--format=gnu --no-params BgFilter__9ivTSolverP12ivInteractor ivTSolver::BgFilter(ivInteractor *) +ivTSolver::BgFilter # ---format=gnu +--format=gnu --no-params Check__6UArrayi UArray::Check(int) +UArray::Check # ---format=gnu +--format=gnu --no-params CoreConstDecls__8TextCodeR7ostream TextCode::CoreConstDecls(ostream &) +TextCode::CoreConstDecls # ---format=gnu +--format=gnu --no-params Detach__8StateVarP12StateVarView StateVar::Detach(StateVarView *) +StateVar::Detach # ---format=gnu +--format=gnu --no-params Done__9ComponentG8Iterator Component::Done(Iterator) +Component::Done # ---format=gnu +--format=gnu --no-params Effect__11RelateManipR7ivEvent RelateManip::Effect(ivEvent &) +RelateManip::Effect # ---format=gnu +--format=gnu --no-params FindFixed__FRP4CNetP4CNet FindFixed(CNet *&, CNet *) +FindFixed # ---format=gnu +--format=gnu --no-params Fix48_abort__FR8twolongs Fix48_abort(twolongs &) +Fix48_abort # ---format=gnu +--format=gnu --no-params GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2 iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &) +iv2_6_VScroller::GetBarInfo # ---format=gnu +--format=gnu --no-params GetBgColor__C9ivPainter ivPainter::GetBgColor(void) const +ivPainter::GetBgColor # ---format=gnu +--format=gnu --no-params InsertBody__15H_PullrightMenuii H_PullrightMenu::InsertBody(int, int) +H_PullrightMenu::InsertBody # ---format=gnu +--format=gnu --no-params InsertCharacter__9TextManipc TextManip::InsertCharacter(char) +TextManip::InsertCharacter # ---format=gnu +--format=gnu --no-params InsertToplevel__7ivWorldP12ivInteractorT1 ivWorld::InsertToplevel(ivInteractor *, ivInteractor *) +ivWorld::InsertToplevel # ---format=gnu +--format=gnu --no-params InsertToplevel__7ivWorldP12ivInteractorT1iiUi ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int) +ivWorld::InsertToplevel # ---format=gnu +--format=gnu --no-params IsAGroup__FP11GraphicViewP11GraphicComp IsAGroup(GraphicView *, GraphicComp *) +IsAGroup # ---format=gnu +--format=gnu --no-params IsA__10ButtonCodeUl ButtonCode::IsA(unsigned long) +ButtonCode::IsA # ---format=gnu +--format=gnu --no-params ReadName__FR7istreamPc ReadName(istream &, char *) +ReadName # ---format=gnu +--format=gnu --no-params Redraw__13StringBrowseriiii StringBrowser::Redraw(int, int, int, int) +StringBrowser::Redraw # ---format=gnu +--format=gnu --no-params Rotate__13ivTransformerf ivTransformer::Rotate(float) +ivTransformer::Rotate # ---format=gnu +--format=gnu --no-params Rotated__C13ivTransformerf ivTransformer::Rotated(float) const +ivTransformer::Rotated # ---format=gnu +--format=gnu --no-params Round__Ff Round(float) +Round # ---format=gnu +--format=gnu --no-params SetExport__16MemberSharedNameUi MemberSharedName::SetExport(unsigned int) +MemberSharedName::SetExport # ---format=gnu +--format=gnu --no-params Set__14ivControlState13ControlStatusUi ivControlState::Set(ControlStatus, unsigned int) +ivControlState::Set # ---format=gnu +--format=gnu --no-params Set__5DFacePcii DFace::Set(char *, int, int) +DFace::Set # ---format=gnu +--format=gnu --no-params VConvert__9ivTSolverP12ivInteractorRP8TElementT2 ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&) +ivTSolver::VConvert # ---format=gnu +--format=gnu --no-params VConvert__9ivTSolverP7ivTGlueRP8TElement ivTSolver::VConvert(ivTGlue *, TElement *&) +ivTSolver::VConvert # ---format=gnu +--format=gnu --no-params VOrder__9ivTSolverUiRP12ivInteractorT2 ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&) +ivTSolver::VOrder # ---format=gnu +--format=gnu --no-params _10PageButton$__both PageButton::__both +PageButton::__both # ---format=gnu +--format=gnu --no-params _3RNG$singleMantissa RNG::singleMantissa +RNG::singleMantissa # ---format=gnu +--format=gnu --no-params _5IComp$_release IComp::_release +IComp::_release # ---format=gnu +--format=gnu --no-params _$_10BitmapComp BitmapComp::~BitmapComp(void) +BitmapComp::~BitmapComp # ---format=gnu +--format=gnu --no-params _$_9__io_defs __io_defs::~__io_defs(void) +__io_defs::~__io_defs # ---format=gnu +--format=gnu --no-params _$_Q23foo3bar foo::bar::~bar(void) +foo::bar::~bar # ---format=gnu +--format=gnu --no-params _$_Q33foo3bar4bell foo::bar::bell::~bell(void) +foo::bar::bell::~bell # ---format=gnu +--format=gnu --no-params __10ivTelltaleiP7ivGlyph ivTelltale::ivTelltale(int, ivGlyph *) +ivTelltale::ivTelltale # ---format=gnu +--format=gnu --no-params __10ivViewportiP12ivInteractorUi ivViewport::ivViewport(int, ivInteractor *, unsigned int) +ivViewport::ivViewport # ---format=gnu +--format=gnu --no-params __10ostrstream ostrstream::ostrstream(void) +ostrstream::ostrstream # ---format=gnu +--format=gnu --no-params __10ostrstreamPcii ostrstream::ostrstream(char *, int, int) +ostrstream::ostrstream # ---format=gnu +--format=gnu --no-params __11BitmapTablei BitmapTable::BitmapTable(int) +BitmapTable::BitmapTable # ---format=gnu +--format=gnu --no-params __12ViewportCodeP12ViewportComp ViewportCode::ViewportCode(ViewportComp *) +ViewportCode::ViewportCode # ---format=gnu +--format=gnu --no-params __12iv2_6_Borderii iv2_6_Border::iv2_6_Border(int, int) +iv2_6_Border::iv2_6_Border # ---format=gnu +--format=gnu --no-params __12ivBreak_Listl ivBreak_List::ivBreak_List(long) +ivBreak_List::ivBreak_List # ---format=gnu +--format=gnu --no-params __14iv2_6_MenuItemiP12ivInteractor iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *) +iv2_6_MenuItem::iv2_6_MenuItem # ---format=gnu +--format=gnu --no-params __20DisplayList_IteratorR11DisplayList DisplayList_Iterator::DisplayList_Iterator(DisplayList &) +DisplayList_Iterator::DisplayList_Iterator # ---format=gnu +--format=gnu --no-params __3fooRT0 foo::foo(foo &) +foo::foo # ---format=gnu +--format=gnu --no-params __3fooiN31 foo::foo(int, int, int, int) +foo::foo # ---format=gnu +--format=gnu --no-params __3fooiRT0iT2iT2 foo::foo(int, foo &, int, foo &, int, foo &) +foo::foo # ---format=gnu +--format=gnu --no-params __6KeyMapPT0 KeyMap::KeyMap(KeyMap *) +KeyMap::KeyMap # ---format=gnu +--format=gnu --no-params __8ArrowCmdP6EditorUiUi ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int) +ArrowCmd::ArrowCmd # ---format=gnu +--format=gnu --no-params __9F_EllipseiiiiP7Graphic F_Ellipse::F_Ellipse(int, int, int, int, Graphic *) +F_Ellipse::F_Ellipse # ---format=gnu +--format=gnu --no-params __9FrameDataP9FrameCompi FrameData::FrameData(FrameComp *, int) +FrameData::FrameData # ---format=gnu +--format=gnu --no-params __9HVGraphicP9CanvasVarP7Graphic HVGraphic::HVGraphic(CanvasVar *, Graphic *) +HVGraphic::HVGraphic # ---format=gnu +--format=gnu --no-params __Q23foo3bar foo::bar::bar(void) +foo::bar::bar # ---format=gnu +--format=gnu --no-params __Q33foo3bar4bell foo::bar::bell::bell(void) +foo::bar::bell::bell # ---format=gnu +--format=gnu --no-params __aa__3fooRT0 foo::operator&&(foo &) +foo::operator&& # ---format=gnu +--format=gnu --no-params __aad__3fooRT0 foo::operator&=(foo &) +foo::operator&= # ---format=gnu +--format=gnu --no-params __ad__3fooRT0 foo::operator&(foo &) +foo::operator& # ---format=gnu +--format=gnu --no-params __adv__3fooRT0 foo::operator/=(foo &) +foo::operator/= # ---format=gnu +--format=gnu --no-params __aer__3fooRT0 foo::operator^=(foo &) +foo::operator^= # ---format=gnu +--format=gnu --no-params __als__3fooRT0 foo::operator<<=(foo &) +foo::operator<<= # ---format=gnu +--format=gnu --no-params __amd__3fooRT0 foo::operator%=(foo &) +foo::operator%= # ---format=gnu +--format=gnu --no-params __ami__3fooRT0 foo::operator-=(foo &) +foo::operator-= # ---format=gnu +--format=gnu --no-params __aml__3FixRT0 Fix::operator*=(Fix &) +Fix::operator*= # ---format=gnu +--format=gnu --no-params __aml__5Fix16i Fix16::operator*=(int) +Fix16::operator*= # ---format=gnu +--format=gnu --no-params __aml__5Fix32RT0 Fix32::operator*=(Fix32 &) +Fix32::operator*= # ---format=gnu +--format=gnu --no-params __aor__3fooRT0 foo::operator|=(foo &) +foo::operator|= # ---format=gnu +--format=gnu --no-params __apl__3fooRT0 foo::operator+=(foo &) +foo::operator+= # ---format=gnu +--format=gnu --no-params __ars__3fooRT0 foo::operator>>=(foo &) +foo::operator>>= # ---format=gnu +--format=gnu --no-params __as__3fooRT0 foo::operator=(foo &) +foo::operator= # ---format=gnu +--format=gnu --no-params __cl__3fooRT0 foo::operator()(foo &) +foo::operator() # ---format=gnu +--format=gnu --no-params __cl__6Normal Normal::operator()(void) +Normal::operator() # ---format=gnu +--format=gnu --no-params __cl__6Stringii String::operator()(int, int) +String::operator() # ---format=gnu +--format=gnu --no-params __cm__3fooRT0 foo::operator, (foo &) +foo::operator, # ---format=gnu +--format=gnu --no-params __co__3foo foo::operator~(void) +foo::operator~ # ---format=gnu +--format=gnu --no-params __dl__3fooPv foo::operator delete(void *) +foo::operator delete # ---format=gnu +--format=gnu --no-params __dv__3fooRT0 foo::operator/(foo &) +foo::operator/ # ---format=gnu +--format=gnu --no-params __eq__3fooRT0 foo::operator==(foo &) +foo::operator== # ---format=gnu +--format=gnu --no-params __er__3fooRT0 foo::operator^(foo &) +foo::operator^ # ---format=gnu +--format=gnu --no-params __ge__3fooRT0 foo::operator>=(foo &) +foo::operator>= # ---format=gnu +--format=gnu --no-params __gt__3fooRT0 foo::operator>(foo &) +foo::operator> # ---format=gnu +--format=gnu --no-params __le__3fooRT0 foo::operator<=(foo &) +foo::operator<= # ---format=gnu +--format=gnu --no-params __ls__3fooRT0 foo::operator<<(foo &) +foo::operator<< # ---format=gnu +--format=gnu --no-params __ls__FR7ostreamPFR3ios_R3ios operator<<(ostream &, ios &(*)(ios &)) +operator<< # ---format=gnu +--format=gnu --no-params __ls__FR7ostreamR3Fix operator<<(ostream &, Fix &) +operator<< # ---format=gnu +--format=gnu --no-params __lt__3fooRT0 foo::operator<(foo &) +foo::operator< # ---format=gnu +--format=gnu --no-params __md__3fooRT0 foo::operator%(foo &) +foo::operator% # ---format=gnu +--format=gnu --no-params __mi__3fooRT0 foo::operator-(foo &) +foo::operator- # ---format=gnu +--format=gnu --no-params __ml__3fooRT0 foo::operator*(foo &) +foo::operator* # ---format=gnu +--format=gnu --no-params __mm__3fooi foo::operator--(int) +foo::operator-- # ---format=gnu +--format=gnu --no-params __ne__3fooRT0 foo::operator!=(foo &) +foo::operator!= # ---format=gnu +--format=gnu --no-params __nt__3foo foo::operator!(void) +foo::operator! # ---format=gnu +--format=gnu --no-params __nw__3fooi foo::operator new(int) +foo::operator new # ---format=gnu +--format=gnu --no-params __oo__3fooRT0 foo::operator||(foo &) +foo::operator|| # ---format=gnu +--format=gnu --no-params __opPc__3foo foo::operator char *(void) +foo::operator char * # ---format=gnu +--format=gnu --no-params __opi__3foo foo::operator int(void) +foo::operator int # ---format=gnu +--format=gnu --no-params __or__3fooRT0 foo::operator|(foo &) +foo::operator| # ---format=gnu +--format=gnu --no-params __pl__3fooRT0 foo::operator+(foo &) +foo::operator+ # ---format=gnu +--format=gnu --no-params __pp__3fooi foo::operator++(int) +foo::operator++ # ---format=gnu +--format=gnu --no-params __rf__3foo foo::operator->(void) +foo::operator-> # ---format=gnu +--format=gnu --no-params __rm__3fooRT0 foo::operator->*(foo &) +foo::operator->* # ---format=gnu +--format=gnu --no-params __rs__3fooRT0 foo::operator>>(foo &) +foo::operator>> # ---format=gnu +--format=gnu --no-params _new_Fix__FUs _new_Fix(unsigned short) +_new_Fix # ---format=gnu +--format=gnu --no-params _vt.foo foo virtual table +foo virtual table # ---format=gnu +--format=gnu --no-params _vt.foo.bar foo::bar virtual table +foo::bar virtual table # ---format=gnu +--format=gnu --no-params _vt$foo foo virtual table +foo virtual table # ---format=gnu +--format=gnu --no-params _vt$foo$bar foo::bar virtual table +foo::bar virtual table # ---format=gnu +--format=gnu --no-params append__7ivGlyphPT0 ivGlyph::append(ivGlyph *) +ivGlyph::append # ---format=gnu +--format=gnu --no-params clearok__FP7_win_sti clearok(_win_st *, int) +clearok # ---format=gnu +--format=gnu --no-params complexfunc2__FPFPc_i complexfunc2(int (*)(char *)) +complexfunc2 # ---format=gnu +--format=gnu --no-params complexfunc3__FPFPFPl_s_i complexfunc3(int (*)(short (*)(long *))) +complexfunc3 # ---format=gnu +--format=gnu --no-params complexfunc4__FPFPFPc_s_i complexfunc4(int (*)(short (*)(char *))) +complexfunc4 # ---format=gnu +--format=gnu --no-params complexfunc5__FPFPc_PFl_i complexfunc5(int (*(*)(char *))(long)) +complexfunc5 # ---format=gnu +--format=gnu --no-params complexfunc6__FPFPi_PFl_i complexfunc6(int (*(*)(int *))(long)) +complexfunc6 # ---format=gnu +--format=gnu --no-params complexfunc7__FPFPFPc_i_PFl_i complexfunc7(int (*(*)(int (*)(char *)))(long)) +complexfunc7 # ---format=gnu +--format=gnu --no-params foo__FiN30 foo(int, int, int, int) +foo # ---format=gnu +--format=gnu --no-params foo__FiR3fooiT1iT1 foo(int, foo &, int, foo &, int, foo &) +foo # ---format=gnu +--format=gnu --no-params foo___3barl bar::foo_(long) +bar::foo_ # ---format=gnu +--format=gnu --no-params insert__15ivClippingStacklRP8_XRegion ivClippingStack::insert(long, _XRegion *&) +ivClippingStack::insert # ---format=gnu +--format=gnu --no-params insert__16ChooserInfo_ListlR11ChooserInfo ChooserInfo_List::insert(long, ChooserInfo &) +ChooserInfo_List::insert # ---format=gnu +--format=gnu --no-params insert__17FontFamilyRepListlRP15ivFontFamilyRep FontFamilyRepList::insert(long, ivFontFamilyRep *&) +FontFamilyRepList::insert # ---format=gnu +--format=gnu --no-params leaveok__FP7_win_stc leaveok(_win_st *, char) +leaveok # ---format=gnu +--format=gnu --no-params left_mover__C7ivMFKitP12ivAdjustableP7ivStyle ivMFKit::left_mover(ivAdjustable *, ivStyle *) const +ivMFKit::left_mover # ---format=gnu +--format=gnu --no-params overload1arg__FSc overload1arg(signed char) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__FUc overload1arg(unsigned char) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__FUi overload1arg(unsigned int) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__FUl overload1arg(unsigned long) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__FUs overload1arg(unsigned short) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fc overload1arg(char) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fd overload1arg(double) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Ff overload1arg(float) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fi overload1arg(int) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fl overload1arg(long) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fs overload1arg(short) +overload1arg # ---format=gnu +--format=gnu --no-params overload1arg__Fv overload1arg(void) +overload1arg # ---format=gnu +--format=gnu --no-params overloadargs__Fi overloadargs(int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fii overloadargs(int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiii overloadargs(int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiii overloadargs(int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiii overloadargs(int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiii overloadargs(int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiiii overloadargs(int, int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiiiii overloadargs(int, int, int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiiiiii overloadargs(int, int, int, int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiiiiiii overloadargs(int, int, int, int, int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params overloadargs__Fiiiiiiiiiii overloadargs(int, int, int, int, int, int, int, int, int, int, int) +overloadargs # ---format=gnu +--format=gnu --no-params poke__8ivRasterUlUlffff ivRaster::poke(unsigned long, unsigned long, float, float, float, float) +ivRaster::poke # ---format=gnu +--format=gnu --no-params polar__Fdd polar(double, double) +polar # ---format=gnu +--format=gnu --no-params scale__13ivTransformerff ivTransformer::scale(float, float) +ivTransformer::scale # ---format=gnu +--format=gnu --no-params sgetn__7filebufPci filebuf::sgetn(char *, int) +filebuf::sgetn # ---format=gnu +--format=gnu --no-params shift__FP5_FrepiT0 shift(_Frep *, int, _Frep *) +shift # ---format=gnu +--format=gnu --no-params test__C6BitSeti BitSet::test(int) const +BitSet::test # ---format=gnu +--format=gnu --no-params test__C6BitSetii BitSet::test(int, int) const +BitSet::test # ---format=gnu +--format=gnu --no-params text_source__8Documentl Document::text_source(long) +Document::text_source # ---format=gnu +--format=gnu --no-params variance__6Erlangd Erlang::variance(double) +Erlang::variance # ---format=gnu +--format=gnu --no-params view__14DocumentViewerP8ItemViewP11TabularItem DocumentViewer::view(ItemView *, TabularItem *) +DocumentViewer::view # ---format=gnu +--format=gnu --no-params xy_extents__11ivExtensionffff ivExtension::xy_extents(float, float, float, float) +ivExtension::xy_extents # ---format=gnu +--format=gnu --no-params zero__8osMemoryPvUi osMemory::zero(void *, unsigned int) +osMemory::zero # ---format=gnu +--format=gnu --no-params _2T4$N T4::N +T4::N # ---format=gnu +--format=gnu --no-params _Q22T42t1$N T4::t1::N +T4::t1::N # ---format=gnu +--format=gnu --no-params get__2T1 T1::get(void) +T1::get # ---format=gnu +--format=gnu --no-params get__Q22T11a T1::a::get(void) +T1::a::get # ---format=gnu +--format=gnu --no-params get__Q32T11a1b T1::a::b::get(void) +T1::a::b::get # ---format=gnu +--format=gnu --no-params get__Q42T11a1b1c T1::a::b::c::get(void) +T1::a::b::c::get # ---format=gnu +--format=gnu --no-params get__Q52T11a1b1c1d T1::a::b::c::d::get(void) +T1::a::b::c::d::get # ---format=gnu +--format=gnu --no-params put__2T1i T1::put(int) +T1::put # ---format=gnu +--format=gnu --no-params put__Q22T11ai T1::a::put(int) +T1::a::put # ---format=gnu +--format=gnu --no-params put__Q32T11a1bi T1::a::b::put(int) +T1::a::b::put # ---format=gnu +--format=gnu --no-params put__Q42T11a1b1ci T1::a::b::c::put(int) +T1::a::b::c::put # ---format=gnu +--format=gnu --no-params put__Q52T11a1b1c1di T1::a::b::c::d::put(int) +T1::a::b::c::d::put # ---format=gnu +--format=gnu --no-params bar__3fooPv foo::bar(void *) +foo::bar # ---format=gnu +--format=gnu --no-params bar__C3fooPv foo::bar(void *) const +foo::bar # ---format=gnu +--format=gnu --no-params __eq__3fooRT0 foo::operator==(foo &) +foo::operator== # ---format=gnu +--format=gnu --no-params __eq__C3fooR3foo foo::operator==(foo &) const +foo::operator== # ---format=gnu +--format=gnu --no-params elem__t6vector1Zdi vector<double>::elem(int) +vector<double>::elem # ---format=gnu +--format=gnu --no-params elem__t6vector1Zii vector<int>::elem(int) +vector<int>::elem # ---format=gnu +--format=gnu --no-params __t6vector1Zdi vector<double>::vector(int) +vector<double>::vector # ---format=gnu +--format=gnu --no-params __t6vector1Zii vector<int>::vector(int) +vector<int>::vector # ---format=gnu +--format=gnu --no-params _$_t6vector1Zdi vector<double>::~vector(int) +vector<double>::~vector # ---format=gnu +--format=gnu --no-params _$_t6vector1Zii vector<int>::~vector(int) +vector<int>::~vector # ---format=gnu +--format=gnu --no-params __nw__t2T11ZcUi T1<char>::operator new(unsigned int) +T1<char>::operator new # ---format=gnu +--format=gnu --no-params __nw__t2T11Z1tUi T1<t>::operator new(unsigned int) +T1<t>::operator new # ---format=gnu +--format=gnu --no-params __dl__t2T11ZcPv T1<char>::operator delete(void *) +T1<char>::operator delete # ---format=gnu +--format=gnu --no-params __dl__t2T11Z1tPv T1<t>::operator delete(void *) +T1<t>::operator delete # ---format=gnu +--format=gnu --no-params __t2T11Zci T1<char>::T1(int) +T1<char>::T1 # ---format=gnu +--format=gnu --no-params __t2T11Zc T1<char>::T1(void) +T1<char>::T1 # ---format=gnu +--format=gnu --no-params __t2T11Z1ti T1<t>::T1(int) +T1<t>::T1 # ---format=gnu +--format=gnu --no-params __t2T11Z1t T1<t>::T1(void) +T1<t>::T1 # ---format=gnu +--format=gnu --no-params __Q2t4List1Z10VHDLEntity3Pix List<VHDLEntity>::Pix::Pix(void) +List<VHDLEntity>::Pix::Pix # ---format=gnu +--format=gnu --no-params __Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *) +List<VHDLEntity>::Pix::Pix # ---format=gnu +--format=gnu --no-params __Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &) +List<VHDLEntity>::Pix::Pix # ---format=gnu +--format=gnu --no-params __Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0 List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *) +List<VHDLEntity>::element::element # ---format=gnu +--format=gnu --no-params __Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element List<VHDLEntity>::element::element(List<VHDLEntity>::element const &) +List<VHDLEntity>::element::element # ---format=gnu +--format=gnu --no-params __cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const +VHDLLibrary::operator() # ---format=gnu +--format=gnu --no-params __cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const +List<VHDLEntity>::operator() # ---format=gnu +--format=gnu --no-params __ne__FPvRCQ2t4List1Z10VHDLEntity3Pix operator!=(void *, List<VHDLEntity>::Pix const &) +operator!= # ---format=gnu +--format=gnu --no-params __ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &) +operator!= # ---format=gnu +--format=gnu --no-params __t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity List<VHDLEntity>::List(List<VHDLEntity> const &) +List<VHDLEntity>::List # ---format=gnu +--format=gnu --no-params __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void) +PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX # ---format=gnu +--format=gnu --no-params __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix) +PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX # ---format=gnu +--format=gnu --no-params __t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &) +PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX # ---format=gnu +--format=gnu --no-params nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const +VHDLLibrary::nextE # ---format=gnu +--format=gnu --no-params next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const +List<VHDLEntity>::next # ---format=gnu +--format=gnu --no-params _GLOBAL_$D$set global destructors keyed to set +global destructors keyed to set # ---format=gnu +--format=gnu --no-params _GLOBAL_$I$set global constructors keyed to set +global constructors keyed to set # ---format=gnu +--format=gnu --no-params __as__t5ListS1ZUiRCt5ListS1ZUi ListS<unsigned int>::operator=(ListS<unsigned int> const &) +ListS<unsigned int>::operator= # ---format=gnu +--format=gnu --no-params __cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const +ListS<unsigned int>::operator() # ---format=gnu +--format=gnu --no-params __cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const +SetLS<unsigned int>::operator() # ---format=gnu +--format=gnu --no-params __t10ListS_link1ZUiRCUiPT0 ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *) +ListS_link<unsigned int>::ListS_link # ---format=gnu +--format=gnu --no-params __t10ListS_link1ZUiRCt10ListS_link1ZUi ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &) +ListS_link<unsigned int>::ListS_link # ---format=gnu +--format=gnu --no-params __t5ListS1ZUiRCt5ListS1ZUi ListS<unsigned int>::ListS(ListS<unsigned int> const &) +ListS<unsigned int>::ListS # ---format=gnu +--format=gnu --no-params next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const +ListS<unsigned int>::next # ---format=gnu +--format=gnu --no-params __ne__FPvRCQ2t5SetLS1ZUi3Vix operator!=(void *, SetLS<unsigned int>::Vix const &) +operator!= # ---format=gnu +--format=gnu --no-params __t8ListElem1Z5LabelRt4List1Z5Label ListElem<Label>::ListElem(List<Label> &) +ListElem<Label>::ListElem # ---format=gnu +--format=gnu --no-params __t8BDDHookV1ZPcRCPc BDDHookV<char *>::BDDHookV(char *const &) +BDDHookV<char *>::BDDHookV # ---format=gnu +--format=gnu --no-params _vt$t8BDDHookV1ZPc BDDHookV<char *> virtual table +BDDHookV<char *> virtual table # ---format=gnu +--format=gnu --no-params __ne__FPvRCQ211BDDFunction4VixB operator!=(void *, BDDFunction::VixB const &) +operator!= # ---format=gnu +--format=gnu --no-params __eq__FPvRCQ211BDDFunction4VixB operator==(void *, BDDFunction::VixB const &) +operator== # ---format=gnu +--format=gnu --no-params relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const +T_phi2::T_preserve::FPC_next::relativeId # ---format=lucid +--format=lucid --no-params WS__FR7istream WS(istream &) +WS # ---format=lucid +--format=lucid --no-params __aa__3fooFR3foo foo::operator&&(foo &) +foo::operator&& # ---format=lucid +--format=lucid --no-params __aad__3fooFR3foo foo::operator&=(foo &) +foo::operator&= # ---format=lucid +--format=lucid --no-params __ad__3fooFR3foo foo::operator&(foo &) +foo::operator& # ---format=lucid +--format=lucid --no-params __adv__3fooFR3foo foo::operator/=(foo &) +foo::operator/= # ---format=lucid +--format=lucid --no-params __adv__7complexF7complex complex::operator/=(complex) +complex::operator/= # ---format=lucid +--format=lucid --no-params __aer__3fooFR3foo foo::operator^=(foo &) +foo::operator^= # ---format=lucid +--format=lucid --no-params __als__3fooFR3foo foo::operator<<=(foo &) +foo::operator<<= # ---format=lucid +--format=lucid --no-params __amd__3fooFR3foo foo::operator%=(foo &) +foo::operator%= # ---format=lucid +--format=lucid --no-params __ami__3fooFR3foo foo::operator-=(foo &) +foo::operator-= # ---format=lucid +--format=lucid --no-params __amu__3fooFR3foo foo::operator*=(foo &) +foo::operator*= # ---format=lucid +--format=lucid --no-params __amu__7complexF7complex complex::operator*=(complex) +complex::operator*= # ---format=lucid +--format=lucid --no-params __aor__3fooFR3foo foo::operator|=(foo &) +foo::operator|= # ---format=lucid +--format=lucid --no-params __apl__3fooFR3foo foo::operator+=(foo &) +foo::operator+= # ---format=lucid +--format=lucid --no-params __ars__3fooFR3foo foo::operator>>=(foo &) +foo::operator>>= # ---format=lucid +--format=lucid --no-params __as__18istream_withassignFP9streambuf istream_withassign::operator=(streambuf *) +istream_withassign::operator= # ---format=lucid +--format=lucid --no-params __as__18istream_withassignFR7istream istream_withassign::operator=(istream &) +istream_withassign::operator= # ---format=lucid +--format=lucid --no-params __as__3fooFR3foo foo::operator=(foo &) +foo::operator= # ---format=lucid +--format=lucid --no-params __as__3iosFR3ios ios::operator=(ios &) +ios::operator= # ---format=lucid +--format=lucid --no-params __cl__3fooFR3foo foo::operator()(foo &) +foo::operator() # ---format=lucid +--format=lucid --no-params __cm__3fooFR3foo foo::operator, (foo &) +foo::operator, # ---format=lucid +--format=lucid --no-params __co__3fooFv foo::operator~(void) +foo::operator~ # ---format=lucid +--format=lucid --no-params __ct__10istrstreamFPc istrstream::istrstream(char *) +istrstream::istrstream # ---format=lucid +--format=lucid --no-params __ct__10istrstreamFPci istrstream::istrstream(char *, int) +istrstream::istrstream # ---format=lucid +--format=lucid --no-params __ct__10ostrstreamFPciT2 ostrstream::ostrstream(char *, int, int) +ostrstream::ostrstream # ---format=lucid +--format=lucid --no-params __ct__10ostrstreamFv ostrstream::ostrstream(void) +ostrstream::ostrstream # ---format=lucid +--format=lucid --no-params __ct__10smanip_intFPFR3iosi_R3iosi smanip_int::smanip_int(ios &(*)(ios &, int), int) +smanip_int::smanip_int # ---format=lucid +--format=lucid --no-params __ct__11fstreambaseFi fstreambase::fstreambase(int) +fstreambase::fstreambase # ---format=lucid +--format=lucid --no-params __ct__11fstreambaseFiPcT1 fstreambase::fstreambase(int, char *, int) +fstreambase::fstreambase # ---format=lucid +--format=lucid --no-params __ct__11fstreambaseFv fstreambase::fstreambase(void) +fstreambase::fstreambase # ---format=lucid +--format=lucid --no-params __ct__11smanip_longFPFR3iosl_R3iosl smanip_long::smanip_long(ios &(*)(ios &, long), long) +smanip_long::smanip_long # ---format=lucid +--format=lucid --no-params __ct__11stdiostreamFP4FILE stdiostream::stdiostream(FILE *) +stdiostream::stdiostream # ---format=lucid +--format=lucid --no-params __ct__12strstreambufFPFl_PvPFPv_v strstreambuf::strstreambuf(void *(*)(long), void (*)(void *)) +strstreambuf::strstreambuf # ---format=lucid +--format=lucid --no-params __ct__12strstreambufFPUciT1 strstreambuf::strstreambuf(unsigned char *, int, unsigned char *) +strstreambuf::strstreambuf # ---format=lucid +--format=lucid --no-params __ct__12strstreambufFPciT1 strstreambuf::strstreambuf(char *, int, char *) +strstreambuf::strstreambuf # ---format=lucid +--format=lucid --no-params __ct__12strstreambufFi strstreambuf::strstreambuf(int) +strstreambuf::strstreambuf # ---format=lucid +--format=lucid --no-params __ct__12strstreambufFv strstreambuf::strstreambuf(void) +strstreambuf::strstreambuf # ---format=lucid +--format=lucid --no-params __ct__13strstreambaseFPciT1 strstreambase::strstreambase(char *, int, char *) +strstreambase::strstreambase # ---format=lucid +--format=lucid --no-params __ct__3fooFR3foo foo::foo(foo &) +foo::foo # ---format=lucid +--format=lucid --no-params __ct__3fooFi foo::foo(int) +foo::foo # ---format=lucid +--format=lucid --no-params __ct__3fooFiN31 foo::foo(int, int, int, int) +foo::foo # ---format=lucid +--format=lucid --no-params __ct__3fooFiR3fooT1T2T1T2 foo::foo(int, foo &, int, foo &, int, foo &) +foo::foo # ---format=lucid +--format=lucid --no-params __ct__3iosFP9streambuf ios::ios(streambuf *) +ios::ios # ---format=lucid +--format=lucid --no-params __ct__7filebufFiPcT1 filebuf::filebuf(int, char *, int) +filebuf::filebuf # ---format=lucid +--format=lucid --no-params __ct__7fstreamFiPcT1 fstream::fstream(int, char *, int) +fstream::fstream # ---format=lucid +--format=lucid --no-params __ct__7istreamFP9streambuf istream::istream(streambuf *) +istream::istream # ---format=lucid +--format=lucid --no-params __ct__7istreamFP9streambufiP7ostream istream::istream(streambuf *, int, ostream *) +istream::istream # ---format=lucid +--format=lucid --no-params __ct__7istreamFiPcT1 istream::istream(int, char *, int) +istream::istream # ---format=lucid +--format=lucid --no-params __ct__7istreamFiT1P7ostream istream::istream(int, int, ostream *) +istream::istream # ---format=lucid +--format=lucid --no-params __ct__7ostreamFP9streambuf ostream::ostream(streambuf *) +ostream::ostream # ---format=lucid +--format=lucid --no-params __ct__7ostreamFiPc ostream::ostream(int, char *) +ostream::ostream # ---format=lucid +--format=lucid --no-params __ct__8ifstreamFiPcT1 ifstream::ifstream(int, char *, int) +ifstream::ifstream # ---format=lucid +--format=lucid --no-params __ct__Q23foo3barFv foo::bar::bar(void) +foo::bar::bar # ---format=lucid +--format=lucid --no-params __ct__Q33foo3bar4bellFv foo::bar::bell::bell(void) +foo::bar::bell::bell # ---format=lucid +--format=lucid --no-params __dl__3fooSFPv foo::operator delete(void *) static +foo::operator delete # ---format=lucid +--format=lucid --no-params __dl__FPv operator delete(void *) +operator delete # ---format=lucid +--format=lucid --no-params __dt__10istrstreamFv istrstream::~istrstream(void) +istrstream::~istrstream # ---format=lucid +--format=lucid --no-params __dt__Q23foo3barFv foo::bar::~bar(void) +foo::bar::~bar # ---format=lucid +--format=lucid --no-params __dt__Q33foo3bar4bellFv foo::bar::bell::~bell(void) +foo::bar::bell::~bell # ---format=lucid +--format=lucid --no-params __dv__3fooFR3foo foo::operator/(foo &) +foo::operator/ # ---format=lucid +--format=lucid --no-params __dv__F7complexT1 operator/(complex, complex) +operator/ # ---format=lucid +--format=lucid --no-params __eq__3fooFR3foo foo::operator==(foo &) +foo::operator== # ---format=lucid +--format=lucid --no-params __er__3fooFR3foo foo::operator^(foo &) +foo::operator^ # ---format=lucid +--format=lucid --no-params __ge__3fooFR3foo foo::operator>=(foo &) +foo::operator>= # ---format=lucid +--format=lucid --no-params __gt__3fooFR3foo foo::operator>(foo &) +foo::operator> # ---format=lucid +--format=lucid --no-params __le__3fooFR3foo foo::operator<=(foo &) +foo::operator<= # ---format=lucid +--format=lucid --no-params __ls__3fooFR3foo foo::operator<<(foo &) +foo::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFP9streambuf ostream::operator<<(streambuf *) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFPFR3ios_R3ios ostream::operator<<(ios &(*)(ios &)) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFPv ostream::operator<<(void *) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFUi ostream::operator<<(unsigned int) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFUl ostream::operator<<(unsigned long) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFd ostream::operator<<(double) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFf ostream::operator<<(float) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFi ostream::operator<<(int) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__7ostreamFl ostream::operator<<(long) +ostream::operator<< # ---format=lucid +--format=lucid --no-params __ls__FR7ostream7complex operator<<(ostream &, complex) +operator<< # ---format=lucid +--format=lucid --no-params __lt__3fooFR3foo foo::operator<(foo &) +foo::operator< # ---format=lucid +--format=lucid --no-params __md__3fooFR3foo foo::operator%(foo &) +foo::operator% # ---format=lucid +--format=lucid --no-params __mi__3fooFR3foo foo::operator-(foo &) +foo::operator- # ---format=lucid +--format=lucid --no-params __ml__3fooFR3foo foo::operator*(foo &) +foo::operator* # ---format=lucid +--format=lucid --no-params __ml__F7complexT1 operator*(complex, complex) +operator* # ---format=lucid +--format=lucid --no-params __mm__3fooFi foo::operator--(int) +foo::operator-- # ---format=lucid +--format=lucid --no-params __ne__3fooFR3foo foo::operator!=(foo &) +foo::operator!= # ---format=lucid +--format=lucid --no-params __nt__3fooFv foo::operator!(void) +foo::operator! # ---format=lucid +--format=lucid --no-params __nw__3fooSFi foo::operator new(int) static +foo::operator new # ---format=lucid +--format=lucid --no-params __nw__FUi operator new(unsigned int) +operator new # ---format=lucid +--format=lucid --no-params __nw__FUiPv operator new(unsigned int, void *) +operator new # ---format=lucid +--format=lucid --no-params __oo__3fooFR3foo foo::operator||(foo &) +foo::operator|| # ---format=lucid +--format=lucid --no-params __opPc__3fooFv foo::operator char *(void) +foo::operator char * # ---format=lucid +--format=lucid --no-params __opi__3fooFv foo::operator int(void) +foo::operator int # ---format=lucid +--format=lucid --no-params __or__3fooFR3foo foo::operator|(foo &) +foo::operator| # ---format=lucid +--format=lucid --no-params __pl__3fooFR3foo foo::operator+(foo &) +foo::operator+ # ---format=lucid +--format=lucid --no-params __pp__3fooFi foo::operator++(int) +foo::operator++ # ---format=lucid +--format=lucid --no-params __pt__3fooFv foo::operator->(void) +foo::operator-> # ---format=lucid +--format=lucid --no-params __rm__3fooFR3foo foo::operator->*(foo &) +foo::operator->* # ---format=lucid +--format=lucid --no-params __rs__3fooFR3foo foo::operator>>(foo &) +foo::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFP9streambuf istream::operator>>(streambuf *) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFPFR3ios_R3ios istream::operator>>(ios &(*)(ios &)) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFPFR7istream_R7istream istream::operator>>(istream &(*)(istream &)) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFPUc istream::operator>>(unsigned char *) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFPc istream::operator>>(char *) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRUi istream::operator>>(unsigned int &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRUl istream::operator>>(unsigned long &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRUs istream::operator>>(unsigned short &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRd istream::operator>>(double &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRf istream::operator>>(float &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRi istream::operator>>(int &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRl istream::operator>>(long &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__7istreamFRs istream::operator>>(short &) +istream::operator>> # ---format=lucid +--format=lucid --no-params __rs__FR7istreamR7complex operator>>(istream &, complex &) +operator>> # ---format=lucid +--format=lucid --no-params __vtbl__10istrstream istrstream virtual table +istrstream virtual table # ---format=lucid +--format=lucid --no-params __vtbl__17ostream__iostream__19iostream_withassign iostream_withassign::ostream__iostream virtual table +iostream_withassign::ostream__iostream virtual table # ---format=lucid +--format=lucid --no-params __vtbl__3ios ios virtual table +ios virtual table # ---format=lucid +--format=lucid --no-params __vtbl__3ios__13strstreambase strstreambase::ios virtual table +strstreambase::ios virtual table # ---format=lucid +--format=lucid --no-params abs__F7complex abs(complex) +abs # ---format=lucid +--format=lucid --no-params allocate__9streambufFv streambuf::allocate(void) +streambuf::allocate # ---format=lucid +--format=lucid --no-params attach__11fstreambaseFi fstreambase::attach(int) +fstreambase::attach # ---format=lucid +--format=lucid --no-params bitalloc__3iosSFv ios::bitalloc(void) static +ios::bitalloc # ---format=lucid +--format=lucid --no-params chr__FiT1 chr(int, int) +chr # ---format=lucid +--format=lucid --no-params complex_error__FR11c_exception complex_error(c_exception &) +complex_error # ---format=lucid +--format=lucid --no-params complexfunc2__FPFPc_i complexfunc2(int (*)(char *)) +complexfunc2 # ---format=lucid +--format=lucid --no-params complexfunc3__FPFPFPl_s_i complexfunc3(int (*)(short (*)(long *))) +complexfunc3 # ---format=lucid +--format=lucid --no-params complexfunc4__FPFPFPc_s_i complexfunc4(int (*)(short (*)(char *))) +complexfunc4 # ---format=lucid +--format=lucid --no-params complexfunc5__FPFPc_PFl_i complexfunc5(int (*(*)(char *))(long)) +complexfunc5 # ---format=lucid +--format=lucid --no-params complexfunc6__FPFPi_PFl_i complexfunc6(int (*(*)(int *))(long)) +complexfunc6 # ---format=lucid +--format=lucid --no-params complexfunc7__FPFPFPc_i_PFl_i complexfunc7(int (*(*)(int (*)(char *)))(long)) +complexfunc7 # ---format=lucid +--format=lucid --no-params complicated_put__7ostreamFc ostream::complicated_put(char) +ostream::complicated_put # ---format=lucid +--format=lucid --no-params conv10__FlPc conv10(long, char *) +conv10 # ---format=lucid +--format=lucid --no-params conv16__FUlPc conv16(unsigned long, char *) +conv16 # ---format=lucid +--format=lucid --no-params dec__FR3ios dec(ios &) +dec # ---format=lucid +--format=lucid --no-params dec__Fli dec(long, int) +dec # ---format=lucid +--format=lucid --no-params dofield__FP7ostreamPciT2T3 dofield(ostream *, char *, int, char *, int) +dofield # ---format=lucid +--format=lucid --no-params flags__3iosFl ios::flags(long) +ios::flags # ---format=lucid +--format=lucid --no-params flags__3iosFv ios::flags(void) +ios::flags # ---format=lucid +--format=lucid --no-params foo__FiN31 foo(int, int, int, int) +foo # ---format=lucid +--format=lucid --no-params foo__FiR3fooT1T2T1T2 foo(int, foo &, int, foo &, int, foo &) +foo # ---format=lucid +--format=lucid --no-params foo___3barFl bar::foo_(long) +bar::foo_ # ---format=lucid +--format=lucid --no-params get__7istreamFPcic istream::get(char *, int, char) +istream::get # ---format=lucid +--format=lucid --no-params get__7istreamFR9streambufc istream::get(streambuf &, char) +istream::get # ---format=lucid +--format=lucid --no-params get_complicated__7istreamFRUc istream::get_complicated(unsigned char &) +istream::get_complicated # ---format=lucid +--format=lucid --no-params get_complicated__7istreamFRc istream::get_complicated(char &) +istream::get_complicated # ---format=lucid +--format=lucid --no-params getline__7istreamFPUcic istream::getline(unsigned char *, int, char) +istream::getline # ---format=lucid +--format=lucid --no-params getline__7istreamFPcic istream::getline(char *, int, char) +istream::getline # ---format=lucid +--format=lucid --no-params ignore__7istreamFiT1 istream::ignore(int, int) +istream::ignore # ---format=lucid +--format=lucid --no-params init__12strstreambufFPciT1 strstreambuf::init(char *, int, char *) +strstreambuf::init # ---format=lucid +--format=lucid --no-params init__3iosFP9streambuf ios::init(streambuf *) +ios::init # ---format=lucid +--format=lucid --no-params initcount__13Iostream_init Iostream_init::initcount +Iostream_init::initcount # ---format=lucid +--format=lucid --no-params ipfx__7istreamFi istream::ipfx(int) +istream::ipfx # ---format=lucid +--format=lucid --no-params ls_complicated__7ostreamFUc ostream::ls_complicated(unsigned char) +ostream::ls_complicated # ---format=lucid +--format=lucid --no-params ls_complicated__7ostreamFc ostream::ls_complicated(char) +ostream::ls_complicated # ---format=lucid +--format=lucid --no-params overload1arg__FSc overload1arg(signed char) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__FUc overload1arg(unsigned char) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__FUi overload1arg(unsigned int) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__FUl overload1arg(unsigned long) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__FUs overload1arg(unsigned short) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fc overload1arg(char) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fd overload1arg(double) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Ff overload1arg(float) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fi overload1arg(int) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fl overload1arg(long) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fs overload1arg(short) +overload1arg # ---format=lucid +--format=lucid --no-params overload1arg__Fv overload1arg(void) +overload1arg # ---format=lucid +--format=lucid --no-params overloadargs__FiN21 overloadargs(int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN31 overloadargs(int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN41 overloadargs(int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN51 overloadargs(int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN61 overloadargs(int, int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN71 overloadargs(int, int, int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN81 overloadargs(int, int, int, int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN91 overloadargs(int, int, int, int, int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiN91N11 overloadargs(int, int, int, int, int, int, int, int, int, int, int) +overloadargs # ---format=lucid +--format=lucid --no-params overloadargs__FiT1 overloadargs(int, int) +overloadargs # ---format=lucid +--format=lucid --no-params polar__FdT1 polar(double, double) +polar # ---format=lucid +--format=lucid --no-params pow__F7complexT1 pow(complex, complex) +pow # ---format=lucid +--format=lucid --no-params pow__F7complexd pow(complex, double) +pow # ---format=lucid +--format=lucid --no-params pow__F7complexi pow(complex, int) +pow # ---format=lucid +--format=lucid --no-params pow__Fd7complex pow(double, complex) +pow # ---format=lucid +--format=lucid --no-params pstart__FPciT2 pstart(char *, int, int) +pstart # ---format=lucid +--format=lucid --no-params put__7ostreamFc ostream::put(char) +ostream::put # ---format=lucid +--format=lucid --no-params read__7istreamFPci istream::read(char *, int) +istream::read # ---format=lucid +--format=lucid --no-params resetiosflags__FR3iosl resetiosflags(ios &, long) +resetiosflags # ---format=lucid +--format=lucid --no-params restore_errno__FRi restore_errno(int &) +restore_errno # ---format=lucid +--format=lucid --no-params rs_complicated__7istreamFRUc istream::rs_complicated(unsigned char &) +istream::rs_complicated # ---format=lucid +--format=lucid --no-params rs_complicated__7istreamFRc istream::rs_complicated(char &) +istream::rs_complicated # ---format=lucid +--format=lucid --no-params seekg__7istreamFl8seek_dir istream::seekg(long, seek_dir) +istream::seekg # ---format=lucid +--format=lucid --no-params seekoff__12strstreambufFl8seek_diri strstreambuf::seekoff(long, seek_dir, int) +strstreambuf::seekoff # ---format=lucid +--format=lucid --no-params seekoff__9streambufFlQ2_3ios12ios_seek_diri streambuf::seekoff(long, ios::ios_seek_dir, int) +streambuf::seekoff # ---format=lucid +--format=lucid --no-params seekpos__9streambufFli streambuf::seekpos(long, int) +streambuf::seekpos # ---format=lucid +--format=lucid --no-params set_new_handler__FPFv_v set_new_handler(void (*)(void)) +set_new_handler # ---format=lucid +--format=lucid --no-params setb__9streambufFPcT1i streambuf::setb(char *, char *, int) +streambuf::setb # ---format=lucid +--format=lucid --no-params setb__FR3iosi setb(ios &, int) +setb # ---format=lucid +--format=lucid --no-params setbuf__11fstreambaseFPci fstreambase::setbuf(char *, int) +fstreambase::setbuf # ---format=lucid +--format=lucid --no-params setbuf__9streambufFPUci streambuf::setbuf(unsigned char *, int) +streambuf::setbuf # ---format=lucid +--format=lucid --no-params setbuf__9streambufFPciT2 streambuf::setbuf(char *, int, int) +streambuf::setbuf # ---format=lucid +--format=lucid --no-params setf__3iosFlT1 ios::setf(long, long) +ios::setf # ---format=lucid +--format=lucid --no-params setfill__FR3iosi setfill(ios &, int) +setfill # ---format=lucid +--format=lucid --no-params setg__9streambufFPcN21 streambuf::setg(char *, char *, char *) +streambuf::setg # ---format=lucid +--format=lucid --no-params setp__9streambufFPcT1 streambuf::setp(char *, char *) +streambuf::setp # ---format=lucid +--format=lucid --no-params tie__3iosFP7ostream ios::tie(ostream *) +ios::tie # ---format=lucid +--format=lucid --no-params uconv10__FUlPc uconv10(unsigned long, char *) +uconv10 # ---format=lucid +--format=lucid --no-params xget__7istreamFPc istream::xget(char *) +istream::xget # ---format=lucid +--format=lucid --no-params xsgetn__9streambufFPci streambuf::xsgetn(char *, int) +streambuf::xsgetn # ---format=arm +--format=arm --no-params __dt__21T5__pt__11_PFiPPdPv_iFv T5<int (*)(int, double **, void *)>::~T5(void) +T5<int (*)(int, double **, void *)>::~T5 # ---format=arm +--format=arm --no-params __ct__1cFi c::c(int) +c::c # ---format=arm +--format=arm --no-params __dt__11T5__pt__2_iFv T5<int>::~T5(void) +T5<int>::~T5 # ---format=arm +--format=arm --no-params __dt__11T5__pt__2_cFv T5<char>::~T5(void) +T5<char>::~T5 # ---format=arm +--format=arm --no-params __ct__2T2Fi T2::T2(int) +T2::T2 # ---format=arm +--format=arm --no-params __dt__2T1Fv T1::~T1(void) +T1::~T1 # ---format=arm +--format=arm --no-params __dt__12T5__pt__3_1xFv T5<x>::~T5(void) +T5<x>::~T5 # ---format=arm +--format=arm --no-params __dt__17T5__pt__8_PFcPv_iFv T5<int (*)(char, void *)>::~T5(void) +T5<int (*)(char, void *)>::~T5 # ---format=arm +--format=arm --no-params __ct__21T5__pt__11_PFiPPdPv_iFi T5<int (*)(int, double **, void *)>::T5(int) +T5<int (*)(int, double **, void *)>::T5 # ---format=arm +--format=arm --no-params __amd__FR2T2i operator%=(T2 &, int) +operator%= # ---format=arm +--format=arm --no-params __adv__FR2T2i operator/=(T2 &, int) +operator/= # ---format=arm +--format=arm --no-params __amu__FR2T2i operator*=(T2 &, int) +operator*= # ---format=arm +--format=arm --no-params __ami__FR2T2i operator-=(T2 &, int) +operator-= # ---format=arm +--format=arm --no-params __apl__FR2T2i operator+=(T2 &, int) +operator+= # ---format=arm +--format=arm --no-params __nw__2T1SFUi T1::operator new(unsigned int) static +T1::operator new # ---format=arm +--format=arm --no-params __dl__2T1SFPv T1::operator delete(void *) static +T1::operator delete # ---format=arm +--format=arm --no-params put__2T7SFi T7::put(int) static +T7::put # ---format=arm +--format=arm --no-params __dl__12T5__pt__3_1xSFPv T5<x>::operator delete(void *) static +T5<x>::operator delete # ---format=arm +--format=arm --no-params h__FUc h(unsigned char) +h # ---format=arm +--format=arm --no-params f__Fic f(int, char) +f # ---format=arm +--format=arm --no-params h__FUi h(unsigned int) +h # ---format=arm +--format=arm --no-params h__Fci h(char, int) +h # ---format=arm +--format=arm --no-params h__FUl h(unsigned long) +h # ---format=arm +--format=arm --no-params h__Fcl h(char, long) +h # ---format=arm +--format=arm --no-params h__FUs h(unsigned short) +h # ---format=arm +--format=arm --no-params h__Fcs h(char, short) +h # ---format=arm +--format=arm --no-params X__12T5__pt__3_1x T5<x>::X +T5<x>::X # ---format=arm +--format=arm --no-params __ct__11T5__pt__2_iFi T5<int>::T5(int) +T5<int>::T5 # ---format=arm +--format=arm --no-params __ct__11T5__pt__2_cFi T5<char>::T5(int) +T5<char>::T5 # ---format=arm +--format=arm --no-params h__FcT1 h(char, char) +h # ---format=arm +--format=arm --no-params f__Ficd f(int, char, double) +f # ---format=arm +--format=arm --no-params __dl__17T5__pt__8_PFcPv_iSFPv T5<int (*)(char, void *)>::operator delete(void *) static +T5<int (*)(char, void *)>::operator delete # ---format=arm +--format=arm --no-params X__17T5__pt__8_PFcPv_i T5<int (*)(char, void *)>::X +T5<int (*)(char, void *)>::X # ---format=arm +--format=arm --no-params __ct__12T5__pt__3_1xFi T5<x>::T5(int) +T5<x>::T5 # ---format=arm +--format=arm --no-params __dl__21T5__pt__11_PFiPPdPv_iSFPv T5<int (*)(int, double **, void *)>::operator delete(void *) static +T5<int (*)(int, double **, void *)>::operator delete # ---format=arm +--format=arm --no-params __std__foo global destructors keyed to foo +global destructors keyed to foo # ---format=arm +--format=arm --no-params __sti__bar global constructors keyed to bar +global constructors keyed to bar # ---format=arm +--format=arm --no-params f__FicdPcPFci_v f(int, char, double, char *, void (*)(char, int)) +f # ---format=arm +--format=arm --no-params f__FicdPcPFic_v f(int, char, double, char *, void (*)(int, char)) +f # ---format=arm +--format=arm --no-params get__2T7SFv T7::get(void) static +T7::get # ---format=arm +--format=arm --no-params X__21T5__pt__11_PFiPPdPv_i T5<int (*)(int, double **, void *)>::X +T5<int (*)(int, double **, void *)>::X # ---format=arm +--format=arm --no-params __dl__11T5__pt__2_iSFPv T5<int>::operator delete(void *) static +T5<int>::operator delete # ---format=arm +--format=arm --no-params __dl__11T5__pt__2_cSFPv T5<char>::operator delete(void *) static +T5<char>::operator delete # ---format=arm +--format=arm --no-params h__Fc h(char) +h # ---format=arm +--format=arm --no-params h__Fd h(double) +h # ---format=arm +--format=arm --no-params h__Ff h(float) +h # ---format=arm +--format=arm --no-params h__Fi h(int) +h # ---format=arm +--format=arm --no-params f__Fi f(int) +f # ---format=arm +--format=arm --no-params h__Fl h(long) +h # ---format=arm +--format=arm --no-params h__Fs h(short) +h # ---format=arm +--format=arm --no-params X__11T5__pt__2_c T5<char>::X +T5<char>::X # ---format=arm +--format=arm --no-params X__11T5__pt__2_i T5<int>::X +T5<int>::X # ---format=arm +--format=arm --no-params __ct__17T5__pt__8_PFcPv_iFi T5<int (*)(char, void *)>::T5(int) +T5<int (*)(char, void *)>::T5 # ---format=arm +--format=arm --no-params f__FicdPc f(int, char, double, char *) +f # ---format=arm +--format=arm --no-params __nw__FUi operator new(unsigned int) +operator new # ---format=arm +--format=arm --no-params __ct__Q3_2T11a1bSFi T1::a::b::b(int) static +T1::a::b::b # ---format=arm +--format=arm --no-params __dt__Q3_2T11a1bSFi T1::a::b::~b(int) static +T1::a::b::~b # ---format=arm +--format=arm --no-params put__Q3_2T11a1bSFi T1::a::b::put(int) static +T1::a::b::put # ---format=arm +--format=arm --no-params get__Q2_2T11aSFv T1::a::get(void) static +T1::a::get # ---format=arm +--format=arm --no-params put__2T1SFi T1::put(int) static +T1::put # ---format=arm +--format=arm --no-params put__Q5_2T11a1b1c1dSFi T1::a::b::c::d::put(int) static +T1::a::b::c::d::put # ---format=arm +--format=arm --no-params get__Q4_2T11a1b1cSFv T1::a::b::c::get(void) static +T1::a::b::c::get # ---format=arm +--format=arm --no-params put__Q2_2T11aSFi T1::a::put(int) static +T1::a::put # ---format=arm +--format=arm --no-params put__Q4_2T11a1b1cSFi T1::a::b::c::put(int) static +T1::a::b::c::put # ---format=arm +--format=arm --no-params get__Q3_2T11a1bSFv T1::a::b::get(void) static +T1::a::b::get # ---format=arm +--format=arm --no-params get__2T1SFv T1::get(void) static +T1::get # ---format=arm +--format=arm --no-params get__Q5_2T11a1b1c1dSFv T1::a::b::c::d::get(void) static +T1::a::b::c::d::get # ---format=arm +--format=arm --no-params __dt__11T1__pt__2_cFv T1<char>::~T1(void) +T1<char>::~T1 # ---format=arm +--format=arm --no-params __dt__12T1__pt__3_1tFv T1<t>::~T1(void) +T1<t>::~T1 # ---format=arm +--format=arm --no-params __dl__12T1__pt__3_1tSFPv T1<t>::operator delete(void *) static +T1<t>::operator delete # ---format=arm +--format=arm --no-params __ct__11T1__pt__2_cFi T1<char>::T1(int) +T1<char>::T1 # ---format=arm +--format=arm --no-params __ct__11T1__pt__2_cFv T1<char>::T1(void) +T1<char>::T1 # ---format=arm +--format=arm --no-params __ct__12T1__pt__3_1tFi T1<t>::T1(int) +T1<t>::T1 # ---format=arm +--format=arm --no-params __ct__12T1__pt__3_1tFv T1<t>::T1(void) +T1<t>::T1 # ---format=arm +--format=arm --no-params __dl__11T1__pt__2_cSFPv T1<char>::operator delete(void *) static +T1<char>::operator delete # ---format=arm +--format=arm --no-params bar__3fooFPv foo::bar(void *) +foo::bar # ---format=arm +--format=arm --no-params bar__3fooCFPv foo::bar(void *) const +foo::bar # ---format=arm +--format=arm --no-params __eq__3fooFR3foo foo::operator==(foo &) +foo::operator== # ---format=arm +--format=arm --no-params __eq__3fooCFR3foo foo::operator==(foo &) const +foo::operator== # ---format=arm +--format=arm --no-params elem__15vector__pt__2_dFi vector<double>::elem(int) +vector<double>::elem # ---format=arm +--format=arm --no-params elem__15vector__pt__2_iFi vector<int>::elem(int) +vector<int>::elem # ---format=arm +--format=arm --no-params __ct__15vector__pt__2_dFi vector<double>::vector(int) +vector<double>::vector # ---format=arm +--format=arm --no-params __ct__15vector__pt__2_iFi vector<int>::vector(int) +vector<int>::vector # ---format=arm +--format=arm --no-params __ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2 DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *) +DListNode<RLabel &>::DListNode # ---format=arm +--format=arm --no-params bar__3fooFiT16FooBar foo::bar(int, int, FooBar) +foo::bar # ---format=arm +--format=arm --no-params bar__3fooFPiN51PdN37PcN211T1iN215 foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int) +foo::bar # ---format=hp +--format=hp --no-params __amd__FR2T2i operator%=(T2 &, int) +operator%= # ---format=hp +--format=hp --no-params __adv__FR2T2i operator/=(T2 &, int) +operator/= # ---format=hp +--format=hp --no-params __amu__FR2T2i operator*=(T2 &, int) +operator*= # ---format=hp +--format=hp --no-params __ami__FR2T2i operator-=(T2 &, int) +operator-= # ---format=hp +--format=hp --no-params __apl__FR2T2i operator+=(T2 &, int) +operator+= # ---format=hp +--format=hp --no-params __nw__2T1SFUi T1::operator new(unsigned int) static +T1::operator new # ---format=hp +--format=hp --no-params __dl__2T1SFPv T1::operator delete(void *) static +T1::operator delete # ---format=hp +--format=hp --no-params put__2T7SFi T7::put(int) static +T7::put # ---format=hp +--format=hp --no-params h__FUc h(unsigned char) +h # ---format=hp +--format=hp --no-params f__Fic f(int, char) +f # ---format=hp +--format=hp --no-params h__FUi h(unsigned int) +h # ---format=hp +--format=hp --no-params h__Fci h(char, int) +h # ---format=hp +--format=hp --no-params h__FUl h(unsigned long) +h # ---format=hp +--format=hp --no-params h__Fcl h(char, long) +h # ---format=hp +--format=hp --no-params h__FUs h(unsigned short) +h # ---format=hp +--format=hp --no-params h__Fcs h(char, short) +h # ---format=hp +--format=hp --no-params h__FcT1 h(char, char) +h # ---format=hp +--format=hp --no-params f__Ficd f(int, char, double) +f # ---format=hp +--format=hp --no-params f__FicdPcPFci_v f(int, char, double, char *, void (*)(char, int)) +f # ---format=hp +--format=hp --no-params f__FicdPcPFic_v f(int, char, double, char *, void (*)(int, char)) +f # ---format=hp +--format=hp --no-params get__2T7SFv T7::get(void) static +T7::get # ---format=hp +--format=hp --no-params h__Fc h(char) +h # ---format=hp +--format=hp --no-params h__Fd h(double) +h # ---format=hp +--format=hp --no-params h__Ff h(float) +h # ---format=hp +--format=hp --no-params h__Fi h(int) +h # ---format=hp +--format=hp --no-params f__Fi f(int) +f # ---format=hp +--format=hp --no-params h__Fl h(long) +h # ---format=hp +--format=hp --no-params h__Fs h(short) +h # ---format=hp +--format=hp --no-params f__FicdPc f(int, char, double, char *) +f # ---format=hp +--format=hp --no-params __nw__FUi operator new(unsigned int) +operator new # ---format=hp +--format=hp --no-params __ct__Q3_2T11a1bSFi T1::a::b::b(int) static +T1::a::b::b # ---format=hp +--format=hp --no-params __dt__Q3_2T11a1bSFi T1::a::b::~b(int) static +T1::a::b::~b # ---format=hp +--format=hp --no-params put__Q3_2T11a1bSFi T1::a::b::put(int) static +T1::a::b::put # ---format=hp +--format=hp --no-params get__Q2_2T11aSFv T1::a::get(void) static +T1::a::get # ---format=hp +--format=hp --no-params put__2T1SFi T1::put(int) static +T1::put # ---format=hp +--format=hp --no-params put__Q5_2T11a1b1c1dSFi T1::a::b::c::d::put(int) static +T1::a::b::c::d::put # ---format=hp +--format=hp --no-params get__Q4_2T11a1b1cSFv T1::a::b::c::get(void) static +T1::a::b::c::get # ---format=hp +--format=hp --no-params put__Q2_2T11aSFi T1::a::put(int) static +T1::a::put # ---format=hp +--format=hp --no-params put__Q4_2T11a1b1cSFi T1::a::b::c::put(int) static +T1::a::b::c::put # ---format=hp +--format=hp --no-params get__Q3_2T11a1bSFv T1::a::b::get(void) static +T1::a::b::get # ---format=hp +--format=hp --no-params get__2T1SFv T1::get(void) static +T1::get # ---format=hp +--format=hp --no-params get__Q5_2T11a1b1c1dSFv T1::a::b::c::d::get(void) static +T1::a::b::c::d::get # ---format=hp +--format=hp --no-params bar__3fooFPv foo::bar(void *) +foo::bar # ---format=hp +--format=hp --no-params bar__3fooCFPv foo::bar(void *) const +foo::bar # ---format=hp +--format=hp --no-params __eq__3fooFR3foo foo::operator==(foo &) +foo::operator== # ---format=hp +--format=hp --no-params __eq__3fooCFR3foo foo::operator==(foo &) const +foo::operator== # ---format=hp +--format=hp --no-params bar__3fooFiT16FooBar foo::bar(int, int, FooBar) +foo::bar # ---format=hp +--format=hp --no-params bar__3fooFPiN51PdN37PcN211T1iN215 foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int) +foo::bar # ---format=hp +--format=hp --no-params __dt__2T5XTPFiPPdPv_i__Fv T5<int (*)(int, double **, void *)>::~T5(void) +T5<int (*)(int, double **, void *)>::~T5 # ---format=hp +--format=hp --no-params __ct__1cFi c::c(int) +c::c # ---format=hp +--format=hp --no-params __dt__2T5XTi__Fv T5<int>::~T5(void) +T5<int>::~T5 # ---format=hp +--format=hp --no-params __dt__2T5XTc__Fv T5<char>::~T5(void) +T5<char>::~T5 # ---format=hp +--format=hp --no-params __ct__2T2Fi T2::T2(int) +T2::T2 # ---format=hp +--format=hp --no-params __dt__2T1Fv T1::~T1(void) +T1::~T1 # ---format=hp +--format=hp --no-params __dt__2T5XT1x__Fv T5<x>::~T5(void) +T5<x>::~T5 # ---format=hp +--format=hp --no-params __dt__2T5XTPFcPv_i__Fv T5<int (*)(char, void *)>::~T5(void) +T5<int (*)(char, void *)>::~T5 # ---format=hp +--format=hp --no-params __ct__2T5XTPFiPPdPv_i__Fi T5<int (*)(int, double **, void *)>::T5(int) +T5<int (*)(int, double **, void *)>::T5 # ---format=hp +--format=hp --no-params __dl__2T5XT1x__SFPv T5<x>::operator delete(void *) static +T5<x>::operator delete # ---format=hp +--format=hp --no-params X__2T5XT1x T5<x>::X +T5<x>::X # ---format=hp +--format=hp --no-params __ct__2T5XTi__Fi T5<int>::T5(int) +T5<int>::T5 # ---format=hp +--format=hp --no-params __ct__2T5XTc__Fi T5<char>::T5(int) +T5<char>::T5 # ---format=hp +--format=hp --no-params __dl__2T5XTPFcPv_i__SFPv T5<int (*)(char, void *)>::operator delete(void *) static +T5<int (*)(char, void *)>::operator delete # ---format=hp +--format=hp --no-params X__2T5XTPFcPv_i T5<int (*)(char, void *)>::X +T5<int (*)(char, void *)>::X # ---format=hp +--format=hp --no-params __ct__2T5XT1x__Fi T5<x>::T5(int) +T5<x>::T5 # ---format=hp +--format=hp --no-params __dl__2T5XTPFiPPdPv_i__SFPv T5<int (*)(int, double **, void *)>::operator delete(void *) static +T5<int (*)(int, double **, void *)>::operator delete # ---format=hp +--format=hp --no-params X__2T5XTPFiPPdPv_i T5<int (*)(int, double **, void *)>::X +T5<int (*)(int, double **, void *)>::X # ---format=hp +--format=hp --no-params __dl__2T5XTi__SFPv T5<int>::operator delete(void *) static +T5<int>::operator delete # ---format=hp +--format=hp --no-params __dl__2T5XTc__SFPv T5<char>::operator delete(void *) static +T5<char>::operator delete # ---format=hp +--format=hp --no-params X__2T5XTc T5<char>::X +T5<char>::X # ---format=hp +--format=hp --no-params X__2T5XTi T5<int>::X +T5<int>::X # ---format=hp +--format=hp --no-params __ct__2T5XTPFcPv_i__Fi T5<int (*)(char, void *)>::T5(int) +T5<int (*)(char, void *)>::T5 # ---format=hp +--format=hp --no-params __dt__2T1XTc__Fv T1<char>::~T1(void) +T1<char>::~T1 # ---format=hp +--format=hp --no-params __dt__2T1XT1t__Fv T1<t>::~T1(void) +T1<t>::~T1 # ---format=hp +--format=hp --no-params __dl__2T1XT1t__SFPv T1<t>::operator delete(void *) static +T1<t>::operator delete # ---format=hp +--format=hp --no-params __ct__2T1XTc__Fi T1<char>::T1(int) +T1<char>::T1 # ---format=hp +--format=hp --no-params __ct__2T1XTc__Fv T1<char>::T1(void) +T1<char>::T1 # ---format=hp +--format=hp --no-params __ct__2T1XT1t__Fi T1<t>::T1(int) +T1<t>::T1 # ---format=hp +--format=hp --no-params __ct__2T1XT1t__Fv T1<t>::T1(void) +T1<t>::T1 # ---format=hp +--format=hp --no-params __dl__2T1XTc__SFPv T1<char>::operator delete(void *) static +T1<char>::operator delete # ---format=hp +--format=hp --no-params elem__6vectorXTd__Fi vector<double>::elem(int) +vector<double>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTi__Fi vector<int>::elem(int) +vector<int>::elem # ---format=hp +--format=hp --no-params __ct__6vectorXTd__Fi vector<double>::vector(int) +vector<double>::vector # ---format=hp +--format=hp --no-params __ct__6vectorXTi__Fi vector<int>::vector(int) +vector<int>::vector # ---format=hp +--format=hp --no-params __ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2 DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *) +DListNode<RLabel &>::DListNode # ---format=hp +--format=hp --no-params elem__6vectorXTiUP34__Fi vector<int,34U>::elem(int) +vector<int,34U>::elem # ---format=hp +--format=hp --no-params elem__6vectorXUP2701Td__Fi vector<2701U,double>::elem(int) +vector<2701U,double>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSP334__Fi vector<int,334>::elem(int) +vector<int,334>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSN67__Fi vector<int,-67>::elem(int) +vector<int,-67>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSM__SCFPPd vector<int,-2147483648>::elem(double **) static const +vector<int,-2147483648>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSN67UP4000TRs__Fi vector<int,-67,4000U,short &>::elem(int) +vector<int,-67,4000U,short &>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSN67TRdTFPv_i__Fi vector<int,-67,double &,int (void *)>::elem(int) +vector<int,-67,double &,int (void *)>::elem # ---format=hp +--format=hp --no-params X__6vectorXTiSN67TdTPvUP5TRs vector<int,-67,double,void *,5U,short &>::X +vector<int,-67,double,void *,5U,short &>::X # ---format=hp +--format=hp --no-params elem__6vectorXTiA3foo__Fi vector<int,&foo>::elem(int) +vector<int,&foo>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiA3fooTPvA5Label__FiPPvT2 vector<int,&foo,void *,&Label>::elem(int, void **, void **) +vector<int,&foo,void *,&Label>::elem # ---format=hp +--format=hp --no-params elem__6vectorXTiSN42A3foo__Fi vector<int,-42,&foo>::elem(int) +vector<int,-42,&foo>::elem # ---format=hp +--format=hp --no-params __ct__2T5XTPFcPv_i__Fi_2 T5<int (*)(char, void *)>::T5(int) +T5<int (*)(char, void *)>::T5 # ---format=hp +--format=hp --no-params __ct__2T5XTPFcPv_i__Fi_19 T5<int (*)(char, void *)>::T5(int) +T5<int (*)(char, void *)>::T5 # ---format=hp +--format=hp --no-params f__FicdPcPFci_v_34 f(int, char, double, char *, void (*)(char, int)) +f # ---format=hp +--format=hp --no-params spec__13Spec<#1,#1.*>XTiTPi_FPi Spec<int,int *>::spec(int *) +Spec<int,int *>::spec # ---format=hp +--format=hp --no-params spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi Spec<int,int &,int>::spec(int *) +Spec<int,int &,int>::spec # ---format=hp +--format=hp --no-params add__XTc_FcT1 add<char>(char, char) +add<char> # ---format=hp +--format=hp --no-params add__XTcSP9A5label_FcPPlT1 add<char,9,&label>(char, long **, char) +add<char,9,&label> # ---format=hp +--format=hp --no-params add__XTPfTFPd_f_FcT1 add<float *,float (double *)>(char, char) +add<float *,float (double *)> # ---format=hp +--format=hp --no-params unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv basic_string<char,string_char_traits<char>,allocator>::unLink(void) +basic_string<char,string_char_traits<char>,allocator>::unLink # # A regression test with no args. This used to cause a segv. _Utf390_1__1_9223372036854775807__9223372036854775 _Utf390_1__1_9223372036854775807__9223372036854775 # ---format=gnu +--format=gnu --no-params call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output C<Test, Test::output> call<Test>(Test &) +C<Test, Test::output> call<Test> # ---format=gnu +--format=gnu --no-params fn__FPQ21n1cPMQ21n1cFPQ21n1c_i fn(n::c *, int (n::c::*)(n::c *)) +fn # ---format=gnu +--format=gnu --no-params f__FGt3Bar1i2G1i f(Bar<2>, i) +f # ---format=gnu +--format=gnu --no-params f__FGt3Bar1i21i f(Bar<21>, int) +f # ---format=gnu +--format=gnu --no-params f__FGt3Bar1i2G4XY_t f(Bar<2>, XY_t) +f # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZRCiZt2NA1Ui9_X01_i int foo<TA<int const &, NA<9> > >(TA<int const &, NA<9> >) +int foo<TA<int const &, NA<9> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZcZt2NA1Ui20_X01_i int foo<TA<char, NA<20> > >(TA<char, NA<20> >) +int foo<TA<char, NA<20> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZiZt8N___A___1Ui99_X01_i int foo<TA<int, N___A___<99> > >(TA<int, N___A___<99> >) +int foo<TA<int, N___A___<99> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZRCiZt2NA1im1_X01_i int foo<TA<int const &, NA<-1> > >(TA<int const &, NA<-1> >) +int foo<TA<int const &, NA<-1> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZRCiZt2NA1im9_X01_i int foo<TA<int const &, NA<-9> > >(TA<int const &, NA<-9> >) +int foo<TA<int const &, NA<-9> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZcZt2NA1i_m20__X01_i int foo<TA<char, NA<-20> > >(TA<char, NA<-20> >) +int foo<TA<char, NA<-20> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZcZt2NA1im1_X01_i int foo<TA<char, NA<-1> > >(TA<char, NA<-1> >) +int foo<TA<char, NA<-1> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZiZt4N__A1im9_X01_i int foo<TA<int, N__A<-9> > >(TA<int, N__A<-9> >) +int foo<TA<int, N__A<-9> > > # ---format=gnu +--format=gnu --no-params foo__H1Zt2TA2ZiZt4N__A1i_m99__X01_i int foo<TA<int, N__A<-99> > >(TA<int, N__A<-99> >) +int foo<TA<int, N__A<-99> > > # ---format=gnu +--format=gnu --no-params __opi__t2TA2ZiZt4N__A1i9 TA<int, N__A<9> >::operator int(void) +TA<int, N__A<9> >::operator int # ---format=gnu +--format=gnu --no-params __opi__t2TA2ZiZt8N___A___1i_m99_ TA<int, N___A___<-99> >::operator int(void) +TA<int, N___A___<-99> >::operator int # ---format=gnu +--format=gnu --no-params foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i99_X01_i int foo___bar__baz___<TA<int, N___A___<99> > >(TA<int, N___A___<99> >) +int foo___bar__baz___<TA<int, N___A___<99> > > # ---format=gnu +--format=gnu --no-params foo__bar___foobar_____t2TA2ZiZt8N___A___1i_m99_ TA<int, N___A___<-99> >::foo__bar___foobar___(void) +TA<int, N___A___<-99> >::foo__bar___foobar___ # ---format=gnu +--format=gnu --no-params foo__bar___foobar_____t2TA2ZiZt4N__A1i9 TA<int, N__A<9> >::foo__bar___foobar___(void) +TA<int, N__A<9> >::foo__bar___foobar___ # ---format=gnu +--format=gnu --no-params __tfP8sockaddr sockaddr * type_info function +sockaddr * type_info function # ---format=gnu +--format=gnu --no-params __tfPQ25libcwt16option_event_tct1Z12burst_app_ct libcw::option_event_tct<burst_app_ct> * type_info function +libcw::option_event_tct<burst_app_ct> * type_info function # ---format=gnu +--format=gnu --no-params __tiP8sockaddr sockaddr * type_info node +sockaddr * type_info node # ---format=gnu +--format=gnu --no-params __tiPQ25libcwt16option_event_tct1Z12burst_app_ct libcw::option_event_tct<burst_app_ct> * type_info node +libcw::option_event_tct<burst_app_ct> * type_info node # ---format=gnu +--format=gnu --no-params _27_GLOBAL_.N.__12burst_app_ct.app_instance {anonymous}::app_instance +{anonymous}::app_instance # ---format=gnu +--format=gnu --no-params _26_GLOBAL_$N$_tmp_n.iilg4Gya$app_instance {anonymous}::app_instance +{anonymous}::app_instance # --format=java _ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi @@ -2591,330 +3243,486 @@ Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long) _ZN4java4util14Map__U24_Entry11class__U24_E java.util.Map$Entry.class$ # ---format=hp +--format=java +_ZN3org7eclipse3cdt5debug8internal4core5model9CVariable6sizeof$Ev +org.eclipse.cdt.debug.internal.core.model.CVariable.sizeof() +# +--format=hp --no-params +_Utf58_0_1__1_2147483647__2147483648 _Utf58_0_1__1_2147483647__2147483648 _Utf58_0_1__1_2147483647__2147483648 # ---format=gnu-v3 +--format=gnu-v3 --no-params St9bad_alloc std::bad_alloc +std::bad_alloc # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN1f1fE f::f +f::f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fv f() +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fi f(int) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3foo3bar foo(bar) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params _Zrm1XS_ operator%(X, X) +operator% # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZplR1XS0_ operator+(X&, X&) +operator+ # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZlsRK1XS1_ operator<<(X const&, X const&) +operator<< # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN3FooIA4_iE3barE Foo<int [4]>::bar +Foo<int [4]>::bar # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fIiEvi void f<int>(int) +f<int> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z5firstI3DuoEvS0_ void first<Duo>(Duo) +first<Duo> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z5firstI3DuoEvT_ void first<Duo>(Duo) +first<Duo> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooIiFvdEiEvv void foo<int, void ()(double), int>() +foo<int, void ()(double), int> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN1N1fE N::f +N::f # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN6System5Sound4beepEv System::Sound::beep() +System::Sound::beep # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN5Arena5levelE Arena::level +Arena::level # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN5StackIiiE5levelE Stack<int, int>::level +Stack<int, int>::level # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fI1XEvPVN1AIT_E1TE void f<X>(A<X>::T volatile*) +f<X> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZngILi42EEvN1AIXplT_Li2EEE1TE void operator-<42>(A<(42) + (2)>::T) +operator-<42> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z4makeI7FactoryiET_IT0_Ev Factory<int> make<Factory, int>() +make<Factory, int> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z4makeI7FactoryiET_IT0_Ev Factory<int> make<Factory, int>() +make<Factory, int> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3foo5Hello5WorldS0_S_ foo(Hello, World, World, Hello) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooPM2ABi foo(int AB::**) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZlsRSoRKSs operator<<(std::ostream&, std::string const&) +operator<< # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZTI7a_class typeinfo for a_class +typeinfo for a_class # ---format=gnu-v3 +--format=gnu-v3 --no-params U4_farrVKPi int* const volatile restrict _far +int* const volatile restrict _far # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooILi2EEvRAplT_Li1E_i void foo<2>(int (&) [(2) + (1)]) +foo<2> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fM1AKFvvE f(void (A::*)() const) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooc foo(char) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params 2CBIL_Z3foocEE CB<foo(char)> +CB<foo(char)> # ---format=gnu-v3 +--format=gnu-v3 --no-params 2CBIL_Z7IsEmptyEE CB<IsEmpty> +CB<IsEmpty> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZZN1N1fEiE1p N::f(int)::p +N::f(int)::p # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZZN1N1fEiEs N::f(int)::string literal +N::f(int)::string literal # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fPFvvEM1SFvvE f(void (*)(), void (S::*)()) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN1N1TIiiE2mfES0_IddE N::T<int, int>::mf(N::T<double, double>) +N::T<int, int>::mf # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZSt5state std::state +std::state # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNSt3_In4wardE std::_In::ward +std::_In::ward # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fKPFiiE f(int (* const)(int)) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i f(int [sizeof (N::A::f() const::foo)]) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fA37_iPS_ f(int [37], int (*) [37]) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fM1AFivEPS0_ f(int (A::*)(), int (*)()) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fPFPA1_ivE f(int (*(*)()) [1]) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fPKM1AFivE f(int (A::* const*)()) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1jM1AFivEPS1_ j(int (A::*)(), int (A::**)()) +j # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1sPA37_iPS0_ s(int (*) [37], int (**) [37]) +s # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooA30_A_i foo(int [30][]) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3kooPA28_A30_i koo(int (*) [28][30]) +koo # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZlsRKU3fooU4bart1XS0_ operator<<(X bart foo const&, X bart) +operator<< # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZlsRKU3fooU4bart1XS2_ operator<<(X bart foo const&, X bart foo const) +operator<< # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fM1AKFivE f(int (A::*)() const) +f # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3absILi11EEvv void abs<11>() +abs<11> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN1AIfEcvT_IiEEv A<float>::operator int<int>() +A<float>::operator int<int> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_ void libcw_app_ct::add_option<libcw_app_ct>(void (libcw_app_ct::*)(char const*), char const*, char, char const*, char const*) +libcw_app_ct::add_option<libcw_app_ct> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids +guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE libcw::debug::cwprint_using_tct<libcw::_private_::GlobalObject> libcw::debug::cwprint_using<libcw::_private_::GlobalObject>(libcw::_private_::GlobalObject const&, void (libcw::_private_::GlobalObject::*)(std::ostream&) const) +libcw::debug::cwprint_using<libcw::_private_::GlobalObject> # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top() const +std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_ std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==(std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*> const&) const +std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator== # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_ std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-(std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > > const&) const +std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator- # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_ char* std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>(char*, char*, libcw::debug::no_alloc_checking_allocator const&) +std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_ void f<A, A*, A const*>(A, A*, A const*, A const* (*) [4], A const* (* C::*) [4]) +f<A, A*, A const*> # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_ foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************) +foo # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_ std::D<A*, A*&, A**> std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>(std::D<A*, A* const&, A* const*>, std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A**) +std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*> # ---format=gnu-v3 +--format=gnu-v3 --no-params +_X11TransParseAddress _X11TransParseAddress _X11TransParseAddress # ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless +std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless # ---format=gnu-v3 +--format=gnu-v3 --no-params _GLOBAL__I__Z2fnv global constructors keyed to _Z2fnv +global constructors keyed to _Z2fnv # ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_ r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const) +r # # This is from the gdb testsuite gdb.cp/cplusfuncs.exp. ---format=gnu-v3 +--format=gnu-v3 --no-params _Z10hairyfunc5PFPFilEPcE hairyfunc5(int (*(*)(char*))(long)) +hairyfunc5 # # This is from gcc PR 8861 ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE void f<1, 120>(A<(1) + (((int)((double)810000000000000000703DAD7A370C5)))>) +f<1, 120> # # This is also from gcc PR 8861 ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fILi1EEv1AIXplT_cvingLf3f800000EEE void f<1>(A<(1) + (((int)(-((float)3f800000))))>) +f<1> # # This is from a libstdc++ debug mode patch. ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNK11__gnu_debug16_Error_formatter14_M_format_wordImEEvPciPKcT_ void __gnu_debug::_Error_formatter::_M_format_word<unsigned long>(char*, int, char const*, unsigned long) const +__gnu_debug::_Error_formatter::_M_format_word<unsigned long> # # The new demangler used to core dump on this. ---format=gnu-v3 +--format=gnu-v3 --no-params _ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairISsPFbP6sqlitePPcEESt6vectorIS9_SaIS9_EEEESE_ET0_T_SG_SF_ __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >) +std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > > # # The new demangler used to fail on this. ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fP1cIPFiiEE f(c<int (*)(int)>*) +f # # Wrap expressions using '>' in an extra layer of parens to avoid # confusion with the '>' which ends the template parameters. ---format=gnu-v3 +--format=gnu-v3 --no-params _Z4dep9ILi3EEvP3fooIXgtT_Li2EEE void dep9<3>(foo<((3) > (2))>*) +dep9<3> # # Watch out for templated version of `operator<'--it needs an extra # space. ---format=gnu-v3 +--format=gnu-v3 --no-params _ZStltI9file_pathSsEbRKSt4pairIT_T0_ES6_ bool std::operator< <file_path, std::string>(std::pair<file_path, std::string> const&, std::pair<file_path, std::string> const&) +std::operator< <file_path, std::string> # # More hairy qualifier handling. ---format=gnu-v3 +--format=gnu-v3 --no-params _Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE hairyfunc(int (* const (X::** (* restrict (* volatile*(Y::*)(int) const)(char*)) [2])(long) const) [3]) +hairyfunc # # Check that negative numbers are handled correctly. ---format=gnu-v3 +--format=gnu-v3 --no-params _Z1fILin1EEvv void f<-1>() +f<-1> # # Check a destructor of a standard substitution. ---format=gnu-v3 +--format=gnu-v3 --no-params _ZNSdD0Ev std::basic_iostream<char, std::char_traits<char> >::~basic_iostream() +std::basic_iostream<char, std::char_traits<char> >::~basic_iostream +# +# Another case where we got member function qualifiers wrong. +--format=gnu-v3 --no-params +_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_ +nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const +nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead +# +# Another member function qualifier test case, when the member function +# returns a pointer to function. +--format=gnu-v3 --no-params +_ZNK1C1fIiEEPFivEv +int (*C::f<int>() const)() +C::f<int> +# +# Another case where we got member function qualifiers wrong. +--format=gnu-v3 --no-params +_ZZ3BBdI3FooEvvENK3Fob3FabEv +void BBd<Foo>()::Fob::Fab() const +void BBd<Foo>()::Fob::Fab +# +# The same idea one level deeper. +--format=gnu-v3 --no-params +_ZZZ3BBdI3FooEvvENK3Fob3FabEvENK3Gob3GabEv +void BBd<Foo>()::Fob::Fab() const::Gob::Gab() const +void BBd<Foo>()::Fob::Fab() const::Gob::Gab +# +# Yet another member function qualifier problem. +--format=gnu-v3 --no-params +_ZNK5boost6spirit5matchI13rcs_deltatextEcvMNS0_4impl5dummyEFvvEEv +boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()() const +boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)() +# +# Test GNU V3 constructor and destructor identification. +# 0 means it is not a constructor/destructor. +# Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h. +--is-v3-ctor +_GLOBAL__I__Z2fnv +0 +# +--is-v3-dtor +_GLOBAL__I__Z2fnv +0 +# +--is-v3-ctor +_ZNSdC1Ev +1 +# +--is-v3-dtor +_ZNSdC1Ev +0 +# +--is-v3-ctor +_ZNSdD0Ev +0 +# +--is-v3-dtor +_ZNSdD0Ev +1 +# +--is-v3-ctor +_ZNSdC2Ev +2 +# +--is-v3-dtor +_ZNSdC2Ev +0 +# +--is-v3-ctor +_ZNSdD1Ev +0 +# +--is-v3-dtor +_ZNSdD1Ev +2 # # This caused an infinite loop. # @@ -2929,12 +3737,14 @@ std::basic_iostream<char, std::char_traits<char> >::~basic_iostream() # mode. Of course the result is more or less nonsense, but an older # version of g++ would indeed generate this mangled name given the # appropriate input, so the demangling is correct. ---format=auto +--format=auto --no-params __CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator _Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator) +_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm # # This used to cause a crash. It doesn't follow the C++ encoding so # the demangled name should be identical to the original symbol name. ---format=auto +--format=auto --no-params +_test_array__L_1__B23b___clean.6 _test_array__L_1__B23b___clean.6 _test_array__L_1__B23b___clean.6 diff --git a/libiberty/testsuite/test-demangle.c b/libiberty/testsuite/test-demangle.c index ed28229..6e00d14 100644 --- a/libiberty/testsuite/test-demangle.c +++ b/libiberty/testsuite/test-demangle.c @@ -1,5 +1,5 @@ /* Demangler test program, - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. Written by Zack Weinberg <zack@codesourcery.com This file is part of GNU libiberty. @@ -80,16 +80,39 @@ getline(buf) buf->alloced = alloc; } -/* The tester operates on a data file consisting of triples of lines: - format switch +static void +fail (lineno, opts, in, out, exp) + int lineno; + const char *opts; + const char *in; + const char *out; + const char *exp; +{ + printf ("\ +FAIL at line %d, options %s:\n\ +in: %s\n\ +out: %s\n\ +exp: %s\n", + lineno, opts, in, out != NULL ? out : "(null)", exp); +} + +/* The tester operates on a data file consisting of groups of lines: + options input to be demangled expected output - The format switch is expected to be either the empty string, a - line of the form --format=<name>, or just <name> by itself. */ + Supported options: + --format=<name> Sets the demangling style. + --no-params There are two lines of expected output; the first + is with DMGL_PARAMS, the second is without it. + --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected + output is an integer representing ctor_kind. + --is-v3-dtor Likewise, but for dtors. -#define FORMATS "--format=" -#define FORMATL (sizeof FORMATS - 1) + For compatibility, just in case it matters, the options line may be + empty, to mean --format=auto. If it doesn't start with --, then it + may contain only a format name. +*/ int main(argc, argv) @@ -97,10 +120,12 @@ main(argc, argv) char **argv; { enum demangling_styles style; + int no_params; + int is_v3_ctor; + int is_v3_dtor; struct line format; struct line input; struct line expect; - char *fstyle; char *result; int failures = 0; int tests = 0; @@ -126,20 +151,98 @@ main(argc, argv) tests++; - fstyle = format.data; - if (!strncmp (fstyle, FORMATS, FORMATL)) - fstyle += FORMATL; - - if (fstyle[0] == '\0') + no_params = 0; + is_v3_ctor = 0; + is_v3_dtor = 0; + if (format.data[0] == '\0') style = auto_demangling; + else if (format.data[0] != '-') + { + style = cplus_demangle_name_to_style (format.data); + if (style == unknown_demangling) + { + printf ("FAIL at line %d: unknown demangling style %s\n", + lineno, format.data); + failures++; + continue; + } + } else - style = cplus_demangle_name_to_style (fstyle); + { + char *p; + char *opt; - if (style == unknown_demangling) + p = format.data; + while (*p != '\0') + { + char c; + + opt = p; + p += strcspn (p, " \t="); + c = *p; + *p = '\0'; + if (strcmp (opt, "--format") == 0 && c == '=') + { + char *fstyle; + + *p = c; + ++p; + fstyle = p; + p += strcspn (p, " \t"); + c = *p; + *p = '\0'; + style = cplus_demangle_name_to_style (fstyle); + if (style == unknown_demangling) + { + printf ("FAIL at line %d: unknown demangling style %s\n", + lineno, fstyle); + failures++; + continue; + } + } + else if (strcmp (opt, "--no-params") == 0) + no_params = 1; + else if (strcmp (opt, "--is-v3-ctor") == 0) + is_v3_ctor = 1; + else if (strcmp (opt, "--is-v3-dtor") == 0) + is_v3_dtor = 1; + else + { + printf ("FAIL at line %d: unrecognized option %s\n", + lineno, opt); + failures++; + continue; + } + *p = c; + p += strspn (p, " \t"); + } + } + + if (is_v3_ctor || is_v3_dtor) { - printf ("FAIL at line %d: unknown demangling style %s\n", - lineno, fstyle); - failures++; + char buf[20]; + + if (is_v3_ctor) + { + enum gnu_v3_ctor_kinds kc; + + kc = is_gnu_v3_mangled_ctor (input.data); + sprintf (buf, "%d", (int) kc); + } + else + { + enum gnu_v3_dtor_kinds kd; + + kd = is_gnu_v3_mangled_dtor (input.data); + sprintf (buf, "%d", (int) kd); + } + + if (strcmp (buf, expect.data) != 0) + { + fail (lineno, format.data, input.data, buf, expect.data); + failures++; + } + continue; } @@ -152,18 +255,25 @@ main(argc, argv) ? strcmp (result, expect.data) : strcmp (input.data, expect.data)) { - printf ("\ -FAIL at line %d, style %s:\n\ -in: %s\n\ -out: %s\n\ -exp: %s\n", - lineno, fstyle, - input.data, - result, - expect.data); + fail (lineno, format.data, input.data, result, expect.data); failures++; } free (result); + + if (no_params) + { + getline (&expect); + result = cplus_demangle (input.data, DMGL_ANSI|DMGL_TYPES); + + if (result + ? strcmp (result, expect.data) + : strcmp (input.data, expect.data)) + { + fail (lineno, format.data, input.data, result, expect.data); + failures++; + } + free (result); + } } free (format.data); |