X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Fdemangle.h;h=b55226d8590a6b1e67102d6562897645f6760f5a;hb=53d25da64b00c1cf7f10d04785d66fa003f8bfc9;hp=c3fdb036d536bc184c5179fe9360b55214d9a634;hpb=5972747385e9727b46e50d4992fecbdd8bcf8106;p=deliverable%2Fbinutils-gdb.git diff --git a/include/demangle.h b/include/demangle.h index c3fdb036d5..b55226d859 100644 --- a/include/demangle.h +++ b/include/demangle.h @@ -1,27 +1,36 @@ /* Defs for interface to demanglers. Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, - 2003, 2004 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007 Free Software Foundation, Inc. - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License + as published by the Free Software Foundation; either version 2, or + (at your option) any later version. + + In addition to the permissions in the GNU Library General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file into + combinations with other programs, and to distribute those + combinations without any restriction coming from the use of this + file. (The Library Public License restrictions do apply in other + respects; for example, they cover modification of the file, and + distribution when not linked into a combined executable.) + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ #if !defined (DEMANGLE_H) #define DEMANGLE_H -#include "ansidecl.h" +#include "libiberty.h" #ifdef __cplusplus extern "C" { @@ -35,6 +44,8 @@ extern "C" { #define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */ #define DMGL_VERBOSE (1 << 3) /* Include implementation details. */ #define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */ +#define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when + present) after function signature */ #define DMGL_AUTO (1 << 8) #define DMGL_GNU (1 << 9) @@ -110,32 +121,44 @@ extern const struct demangler_engine } libiberty_demanglers[]; extern char * -cplus_demangle PARAMS ((const char *mangled, int options)); +cplus_demangle (const char *mangled, int options); extern int -cplus_demangle_opname PARAMS ((const char *opname, char *result, int options)); +cplus_demangle_opname (const char *opname, char *result, int options); extern const char * -cplus_mangle_opname PARAMS ((const char *opname, int options)); +cplus_mangle_opname (const char *opname, int options); /* Note: This sets global state. FIXME if you care about multi-threading. */ extern void -set_cplus_marker_for_demangling PARAMS ((int ch)); +set_cplus_marker_for_demangling (int ch); extern enum demangling_styles -cplus_demangle_set_style PARAMS ((enum demangling_styles style)); +cplus_demangle_set_style (enum demangling_styles style); extern enum demangling_styles -cplus_demangle_name_to_style PARAMS ((const char *name)); +cplus_demangle_name_to_style (const char *name); -/* V3 ABI demangling entry points, defined in cp-demangle.c. */ -extern char* -cplus_demangle_v3 PARAMS ((const char* mangled, int options)); +/* Callback typedef for allocation-less demangler interfaces. */ +typedef void (*demangle_callbackref) (const char *, size_t, void *); + +/* V3 ABI demangling entry points, defined in cp-demangle.c. Callback + variants return non-zero on success, zero on error. char* variants + return a string allocated by malloc on success, NULL on error. */ +extern int +cplus_demangle_v3_callback (const char *mangled, int options, + demangle_callbackref callback, void *opaque); extern char* -java_demangle_v3 PARAMS ((const char* mangled)); +cplus_demangle_v3 (const char *mangled, int options); +extern int +java_demangle_v3_callback (const char *mangled, + demangle_callbackref callback, void *opaque); + +extern char* +java_demangle_v3 (const char *mangled); enum gnu_v3_ctor_kinds { gnu_v3_complete_object_ctor = 1, @@ -148,7 +171,7 @@ enum gnu_v3_ctor_kinds { gnu_v3_ctor_kinds' value indicating what kind of constructor it is. */ extern enum gnu_v3_ctor_kinds - is_gnu_v3_mangled_ctor PARAMS ((const char *name)); + is_gnu_v3_mangled_ctor (const char *name); enum gnu_v3_dtor_kinds { @@ -162,7 +185,7 @@ enum gnu_v3_dtor_kinds { gnu_v3_dtor_kinds' value, indicating what kind of destructor it is. */ extern enum gnu_v3_dtor_kinds - is_gnu_v3_mangled_dtor PARAMS ((const char *name)); + is_gnu_v3_mangled_dtor (const char *name); /* The V3 demangler works in two passes. The first pass builds a tree representation of the mangled name, and the second pass turns the @@ -239,6 +262,9 @@ enum demangle_component_type /* A reference temporary. This has one subtree, the name for which this is a temporary. */ DEMANGLE_COMPONENT_REFTEMP, + /* A hidden alias. This has one subtree, the encoding for which it + is providing alternative linkage. */ + DEMANGLE_COMPONENT_HIDDEN_ALIAS, /* A standard substitution. This holds the name of the substitution. */ DEMANGLE_COMPONENT_SUB_STD, @@ -270,6 +296,9 @@ enum demangle_component_type /* A reference. The one subtree is the type which is being referenced. */ DEMANGLE_COMPONENT_REFERENCE, + /* C++0x: An rvalue reference. The one subtree is the type which is + being referenced. */ + DEMANGLE_COMPONENT_RVALUE_REFERENCE, /* A complex type. The one subtree is the base type. */ DEMANGLE_COMPONENT_COMPLEX, /* An imaginary type. The one subtree is the base type. */ @@ -440,25 +469,25 @@ struct demangle_component unrecognized or inappropriate component type. */ extern int -cplus_demangle_fill_component PARAMS ((struct demangle_component *fill, - enum demangle_component_type, - struct demangle_component *left, - struct demangle_component *right)); +cplus_demangle_fill_component (struct demangle_component *fill, + enum demangle_component_type, + struct demangle_component *left, + struct demangle_component *right); /* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success, zero for bad arguments. */ extern int -cplus_demangle_fill_name PARAMS ((struct demangle_component *fill, - const char *, int)); +cplus_demangle_fill_name (struct demangle_component *fill, + const char *, int); /* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the builtin type (e.g., "int", etc.). Returns non-zero on success, zero if the type is not recognized. */ extern int -cplus_demangle_fill_builtin_type PARAMS ((struct demangle_component *fill, - const char *typename)); +cplus_demangle_fill_builtin_type (struct demangle_component *fill, + const char *type_name); /* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the operator and the number of arguments which it takes (the latter is @@ -467,33 +496,33 @@ cplus_demangle_fill_builtin_type PARAMS ((struct demangle_component *fill, not recognized. */ extern int -cplus_demangle_fill_operator PARAMS ((struct demangle_component *fill, - const char *opname, int args)); +cplus_demangle_fill_operator (struct demangle_component *fill, + const char *opname, int args); /* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the number of arguments and the name. Returns non-zero on success, zero for bad arguments. */ extern int -cplus_demangle_fill_extended_operator PARAMS ((struct demangle_component *fill, - int numargs, - struct demangle_component *nm)); +cplus_demangle_fill_extended_operator (struct demangle_component *fill, + int numargs, + struct demangle_component *nm); /* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success, zero for bad arguments. */ extern int -cplus_demangle_fill_ctor PARAMS ((struct demangle_component *fill, - enum gnu_v3_ctor_kinds kind, - struct demangle_component *name)); +cplus_demangle_fill_ctor (struct demangle_component *fill, + enum gnu_v3_ctor_kinds kind, + struct demangle_component *name); /* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success, zero for bad arguments. */ extern int -cplus_demangle_fill_dtor PARAMS ((struct demangle_component *fill, - enum gnu_v3_dtor_kinds kind, - struct demangle_component *name)); +cplus_demangle_fill_dtor (struct demangle_component *fill, + enum gnu_v3_dtor_kinds kind, + struct demangle_component *name); /* This function translates a mangled name into a struct demangle_component tree. The first argument is the mangled name. @@ -504,9 +533,7 @@ cplus_demangle_fill_dtor PARAMS ((struct demangle_component *fill, needed. */ extern struct demangle_component * -cplus_demangle_v3_components PARAMS ((const char *mangled, - int options, - void **mem)); +cplus_demangle_v3_components (const char *mangled, int options, void **mem); /* This function takes a struct demangle_component tree and returns the corresponding demangled string. The first argument is DMGL_* @@ -521,10 +548,29 @@ cplus_demangle_v3_components PARAMS ((const char *mangled, memory allocation error. */ extern char * -cplus_demangle_print PARAMS ((int options, - const struct demangle_component *tree, - int estimated_length, - size_t *p_allocated_size)); +cplus_demangle_print (int options, + const struct demangle_component *tree, + int estimated_length, + size_t *p_allocated_size); + +/* This function takes a struct demangle_component tree and passes back + a demangled string in one or more calls to a callback function. + The first argument is DMGL_* options. The second is the tree to + demangle. The third is a pointer to a callback function; on each call + this receives an element of the demangled string, its length, and an + opaque value. The fourth is the opaque value passed to the callback. + The callback is called once or more to return the full demangled + string. The demangled element string is always nul-terminated, though + its length is also provided for convenience. In contrast to + cplus_demangle_print(), this function does not allocate heap memory + to grow output strings (except perhaps where alloca() is implemented + by malloc()), and so is normally safe for use where the heap has been + corrupted. On success, this function returns 1; on failure, 0. */ + +extern int +cplus_demangle_print_callback (int options, + const struct demangle_component *tree, + demangle_callbackref callback, void *opaque); #ifdef __cplusplus }