V1: - partly committed
V2: - added new SymTag* values in cvconst.h
V3: - amend configure.ac patch for coherency of config options for regular and cross compilation (from Jacek's suggestions)
A+ ---
Eric Pouech (6): dbghelp/dwarf: downgrade FIXME into WARN for empty range dbghelp/dwarf: added support for local variables with constant values dbghelp/dwarf: fix incorrect WARN dbghelp/dwarf: Bumping max supported version (by default) up to 4 configure: allow picking up dwarf version for compilation from command line include/cvconst.h: added enumeration for newest SymTag values
configure.ac | 15 ++++++++---- dlls/dbghelp/dbghelp_private.h | 4 ++++ dlls/dbghelp/dwarf.c | 43 ++++++++++++++++++++-------------- dlls/dbghelp/symbol.c | 39 ++++++++++++++++++++++++++++++ dlls/dbghelp/type.c | 15 ++++++++++-- include/cvconst.h | 14 ++++++++++- 6 files changed, 104 insertions(+), 26 deletions(-)
it happens to be generated for some inline functions, that we badly support yet
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dwarf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 0397ffe90b2..f05186eb9c0 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1236,7 +1236,7 @@ static BOOL dwarf2_read_range(dwarf2_parse_context_t* ctx, const dwarf2_debug_in if (high > *phigh) *phigh = high; } if (*plow == UMAX || *phigh == 0) {FIXME("no entry found\n"); return FALSE;} - if (*plow == *phigh) {FIXME("entry found, but low=high\n"); return FALSE;} + if (*plow == *phigh) {WARN("entry found, but low=high %lx %lx\n", low, high); return FALSE;}
return TRUE; } @@ -2002,7 +2002,7 @@ static void dwarf2_parse_inlined_subroutine(dwarf2_subprogram_t* subpgm,
if (!dwarf2_read_range(subpgm->ctx, di, &low_pc, &high_pc)) { - FIXME("cannot read range\n"); + WARN("cannot read range\n"); return; }
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dbghelp_private.h | 4 ++++ dlls/dbghelp/dwarf.c | 15 +++++++++++---- dlls/dbghelp/symbol.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/dlls/dbghelp/dbghelp_private.h b/dlls/dbghelp/dbghelp_private.h index 2d4efafd041..0587ce13914 100644 --- a/dlls/dbghelp/dbghelp_private.h +++ b/dlls/dbghelp/dbghelp_private.h @@ -756,6 +756,10 @@ extern struct symt_data* enum DataKind dt, const struct location* loc, struct symt_block* block, struct symt* type, const char* name) DECLSPEC_HIDDEN; +extern struct symt_data* + symt_add_func_constant(struct module* module, + struct symt_function* func, struct symt_block* block, + struct symt* type, const char* name, VARIANT* v) DECLSPEC_HIDDEN; extern struct symt_block* symt_open_func_block(struct module* module, struct symt_function* func, diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index f05186eb9c0..33c3b7fc467 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1880,8 +1880,7 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, else if (dwarf2_find_attribute(di, DW_AT_const_value, &value)) { VARIANT v; - if (subpgm->func) WARN("Unsupported constant %s in function\n", debugstr_a(name.u.string)); - if (is_pmt) FIXME("Unsupported constant (parameter) %s in function\n", debugstr_a(name.u.string)); + switch (value.form) { case DW_FORM_data1: @@ -1936,8 +1935,16 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, debugstr_a(name.u.string), value.form); v.n1.n2.vt = VT_EMPTY; } - di->symt = &symt_new_constant(subpgm->ctx->module_ctx->module, subpgm->ctx->compiland, - name.u.string, param_type, &v)->symt; + if (subpgm->func) + { + if (is_pmt) FIXME("Unsupported constant (parameter) %s in function '%s'\n", debugstr_a(name.u.string), subpgm->func->hash_elt.name); + di->symt = &symt_add_func_constant(subpgm->ctx->module_ctx->module, + subpgm->func, block, + param_type, name.u.string, &v)->symt; + } + else + di->symt = &symt_new_constant(subpgm->ctx->module_ctx->module, subpgm->ctx->compiland, + name.u.string, param_type, &v)->symt; } else { diff --git a/dlls/dbghelp/symbol.c b/dlls/dbghelp/symbol.c index 29376812653..e2fde00456a 100644 --- a/dlls/dbghelp/symbol.c +++ b/dlls/dbghelp/symbol.c @@ -409,6 +409,42 @@ struct symt_data* symt_add_func_local(struct module* module, return locsym; }
+/****************************************************************** + * symt_add_func_local + * + * Adds a new (local) constant to a given function + */ +struct symt_data* symt_add_func_constant(struct module* module, + struct symt_function* func, + struct symt_block* block, + struct symt* type, const char* name, + VARIANT* v) +{ + struct symt_data* locsym; + struct symt** p; + + TRACE_(dbghelp_symt)("Adding local constant (%s:%s): %s %p\n", + debugstr_w(module->modulename), func->hash_elt.name, + name, type); + + assert(func); + assert(func->symt.tag == SymTagFunction); + + locsym = pool_alloc(&module->pool, sizeof(*locsym)); + locsym->symt.tag = SymTagData; + locsym->hash_elt.name = pool_strdup(&module->pool, name); + locsym->hash_elt.next = NULL; + locsym->kind = DataIsConstant; + locsym->container = block ? &block->symt : &func->symt; + locsym->type = type; + locsym->u.value = *v; + if (block) + p = vector_add(&block->vchildren, &module->pool); + else + p = vector_add(&func->vchildren, &module->pool); + *p = &locsym->symt; + return locsym; +}
struct symt_block* symt_open_func_block(struct module* module, struct symt_function* func, @@ -653,6 +689,9 @@ static void symt_fill_sym_info(struct module_pair* pair, break; case DataIsConstant: sym_info->Flags |= SYMFLAG_VALUEPRESENT; + if (data->container && + (data->container->tag == SymTagFunction || data->container->tag == SymTagBlock)) + sym_info->Flags |= SYMFLAG_LOCAL; switch (data->u.value.n1.n2.vt) { case VT_I4: sym_info->Value = (ULONG)data->u.value.n1.n2.n3.lVal; break;
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dwarf.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 33c3b7fc467..51789f8591e 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1948,18 +1948,22 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, } else { - /* variable has been optimized away... report anyway */ - loc.kind = loc_error; - loc.reg = loc_err_no_location; if (subpgm->func) { + /* local variable has been optimized away... report anyway */ + loc.kind = loc_error; + loc.reg = loc_err_no_location; symt_add_func_local(subpgm->ctx->module_ctx->module, subpgm->func, is_pmt ? DataIsParam : DataIsLocal, &loc, block, param_type, name.u.string); } else { - WARN("dropping global variable %s which has been optimized away\n", debugstr_a(name.u.string)); + struct attribute is_decl; + /* only warn when di doesn't represent a declaration */ + if (!dwarf2_find_attribute(di, DW_AT_declaration, &is_decl) || + !is_decl.u.uvalue || is_decl.gotten_from != attr_direct) + WARN("dropping global variable %s which has been optimized away\n", debugstr_a(name.u.string)); } } if (is_pmt && subpgm->func && symt_check_tag(subpgm->func->type, SymTagFunctionType))
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/dwarf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 51789f8591e..430544196c5 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -2710,18 +2710,14 @@ static BOOL dwarf2_parse_compilation_unit_head(dwarf2_parse_context_t* ctx, if (max_supported_dwarf_version == 0) { char* env = getenv("DBGHELP_DWARF_VERSION"); - LONG v = env ? atol(env) : 2; - max_supported_dwarf_version = (v >= 2 && v <= 4) ? v : 2; + LONG v = env ? atol(env) : 4; + max_supported_dwarf_version = (v >= 2 && v <= 4) ? v : 4; }
if (ctx->head.version < 2 || ctx->head.version > max_supported_dwarf_version) { - if (max_supported_dwarf_version > 2) - WARN("%u DWARF version unsupported. Wine dbghelp only support DWARF 2 up to %u.\n", - ctx->head.version, max_supported_dwarf_version); - else - WARN("%u DWARF version unsupported. Wine dbghelp only support DWARF 2.\n", - ctx->head.version); + WARN("DWARF version %d isn't supported. Wine dbghelp only supports DWARF 2 up to %u.\n", + ctx->head.version, max_supported_dwarf_version); return FALSE; }
- specifying -gdwarf-X will configure dwarf version X for compilation (recent compilers will support 2 up to 5, Wine doesn't support 5 yet) - <regular> compilation: either picked up in one of CFLAGS options (when present), or gotten from DEBUGFORMAT as fallback - cross compilation: either picked up in one of CROSSCFLAGS options, (when present), or gotten from CROSSDEBUGFORMAT as fallback - renamed CROSSDEBUG into CROSSDEBUGFORMAT in sake of clarity and coherency with DEBUGFORMAT
Default version for both compilations is still dwarf 2
V2: with Jacek's suggestions on making both compilations regular/cross as coherent as possiblex)
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- configure.ac | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-)
diff --git a/configure.ac b/configure.ac index c0a126293c4..7b97740788d 100644 --- a/configure.ac +++ b/configure.ac @@ -1031,21 +1031,31 @@ then esac
dnl Determine debug info format + AC_SUBST(CROSSDEBUGFORMAT) AC_SUBST(CROSSDEBUG) - if test -z "$CROSSDEBUG" + if test -n "$CROSSDEBUG" + then + AS_ECHO("CROSSDEBUG is deprecated. Please use CROSSDEBUGFORMAT instead.") >&AS_MESSAGE_FD + fi + CROSSDEBUGFORMAT=${CROSSDEBUGFORMAT:-$CROSSDEBUG} + if test -z "$CROSSDEBUGFORMAT" then for ac_flag in $CROSSCFLAGS; do case $ac_flag in - -gdwarf*) CROSSDEBUG=dwarf ;; - -gcodeview) CROSSDEBUG=pdb ;; - -g) CROSSDEBUG=${CROSSDEBUG:-dwarf} ;; + -gdwarf*) CROSSDEBUGFORMAT=$ac_flag ;; + -gcodeview) CROSSDEBUGFORMAT=pdb ;; + -g) CROSSDEBUGFORMAT=dwarf ;; esac done fi - case $CROSSDEBUG in - *dwarf) WINE_TRY_CROSSCFLAGS([-gdwarf-2]) - WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;; - pdb) WINE_TRY_CROSSCFLAGS([-gcodeview]) ;; + case $CROSSDEBUGFORMAT in + *dwarf-3) WINE_TRY_CROSSCFLAGS([-gdwarf-3]) + WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;; + *dwarf-4) WINE_TRY_CROSSCFLAGS([-gdwarf-4]) + WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;; + *dwarf|*dwarf-2) WINE_TRY_CROSSCFLAGS([-gdwarf-2]) + WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;; + codeview|pdb) WINE_TRY_CROSSCFLAGS([-gcodeview]) ;; esac
WINE_TRY_CROSSCFLAGS([-fexcess-precision=standard],[AC_SUBST(EXCESS_PRECISION_CFLAGS,"-fexcess-precision=standard")]) @@ -2040,12 +2050,24 @@ char*f(const char *h,char n) {return strchr(h,n);}]])],[ac_cv_c_logicalop_noisy= esac
dnl Default to dwarf-2 debug info - for ac_flag in $CFLAGS; do - case $ac_flag in - -g) WINE_TRY_CFLAGS([-gdwarf-2]) - WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; - esac - done + AC_SUBST(DEBUGFORMAT) + if test -z "$DEBUGFORMAT" + then + for ac_flag in $CFLAGS; do + case $ac_flag in + -gdwarf*) DEBUGFORMAT=$ac_flag ;; + -g) DEBUGFORMAT=-gdwarf ;; + esac + done + fi + case $DEBUGFORMAT in + *dwarf-3) WINE_TRY_CFLAGS([-gdwarf-3]) + WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; + *dwarf-4) WINE_TRY_CFLAGS([-gdwarf-4]) + WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; + *dwarf|*dwarf-2) WINE_TRY_CFLAGS([-gdwarf-2]) + WINE_TRY_CFLAGS([-gstrict-dwarf]) ;; + esac
dnl Disable gcc builtins except for Mingw AC_SUBST(MSVCRTFLAGS,"")
Hi Eric,
On 9/28/21 5:21 PM, Eric Pouech wrote:
- specifying -gdwarf-X will configure dwarf version X for compilation (recent compilers will support 2 up to 5, Wine doesn't support 5 yet)
- <regular> compilation: either picked up in one of CFLAGS options (when present), or gotten from DEBUGFORMAT as fallback
- cross compilation: either picked up in one of CROSSCFLAGS options, (when present), or gotten from CROSSDEBUGFORMAT as fallback
- renamed CROSSDEBUG into CROSSDEBUGFORMAT in sake of clarity and coherency with DEBUGFORMAT
Default version for both compilations is still dwarf 2
V2: with Jacek's suggestions on making both compilations regular/cross as coherent as possiblex)
Signed-off-by: Eric Pouech eric.pouech@gmail.com
configure.ac | 50 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 14 deletions(-)
diff --git a/configure.ac b/configure.ac index c0a126293c4..7b97740788d 100644 --- a/configure.ac +++ b/configure.ac @@ -1031,21 +1031,31 @@ then esac
dnl Determine debug info format
AC_SUBST(CROSSDEBUGFORMAT) AC_SUBST(CROSSDEBUG)
if test -z "$CROSSDEBUG"
- if test -n "$CROSSDEBUG"
- then
AS_ECHO("CROSSDEBUG is deprecated. Please use CROSSDEBUGFORMAT instead.") >&AS_MESSAGE_FD
- fi
I'm not really convinced it's worth the change, but in any case it could be a separated patch. Also note that you used tabs here.
- CROSSDEBUGFORMAT=${CROSSDEBUGFORMAT:-$CROSSDEBUG}
if test -z "$CROSSDEBUGFORMAT" then for ac_flag in $CROSSCFLAGS; do case $ac_flag in
-gdwarf*) CROSSDEBUG=dwarf ;;
-gcodeview) CROSSDEBUG=pdb ;;
-g) CROSSDEBUG=${CROSSDEBUG:-dwarf} ;;
-gdwarf*) CROSSDEBUGFORMAT=$ac_flag ;;
-gcodeview) CROSSDEBUGFORMAT=pdb ;;
-g) CROSSDEBUGFORMAT=dwarf ;; esac done fi
case $CROSSDEBUG in
*dwarf) WINE_TRY_CROSSCFLAGS([-gdwarf-2])
WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;;
pdb) WINE_TRY_CROSSCFLAGS([-gcodeview]) ;;
case $CROSSDEBUGFORMAT in
*dwarf-3) WINE_TRY_CROSSCFLAGS([-gdwarf-3])
WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;;
*dwarf-4) WINE_TRY_CROSSCFLAGS([-gdwarf-4])
WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;;
*dwarf|*dwarf-2) WINE_TRY_CROSSCFLAGS([-gdwarf-2])
WINE_TRY_CROSSCFLAGS([-gstrict-dwarf]) ;;
codeview|pdb) WINE_TRY_CROSSCFLAGS([-gcodeview]) ;; esac WINE_TRY_CROSSCFLAGS([-fexcess-precision=standard],[AC_SUBST(EXCESS_PRECISION_CFLAGS,"-fexcess-precision=standard")])
@@ -2040,12 +2050,24 @@ char*f(const char *h,char n) {return strchr(h,n);}]])],[ac_cv_c_logicalop_noisy= esac
dnl Default to dwarf-2 debug info
- for ac_flag in $CFLAGS; do
- case $ac_flag in
-g) WINE_TRY_CFLAGS([-gdwarf-2])
WINE_TRY_CFLAGS([-gstrict-dwarf]) ;;
- esac
- done
- AC_SUBST(DEBUGFORMAT)
AC_SUBST is not needed here, you don't use it outside configure script
- if test -z "$DEBUGFORMAT"
- then
- for ac_flag in $CFLAGS; do
case $ac_flag in
-gdwarf*) DEBUGFORMAT=$ac_flag ;;
-g) DEBUGFORMAT=-gdwarf ;;
Note that this will override previous selection for cases like CFLAGS="-gdwarf-4 -g".
Thanks,
Jacek
Le 01/10/2021 à 20:14, Jacek Caban a écrit :
Hi Eric,
Hi Jacek,
thanks for the feedback
getting back on it, I think we need to clarify the semantics & goals we want to achieve (I wasn't 100% clear myself), as we tackle different questions:
- what's wine debug format by default, and how it's going to evolve
- what flexibility is given in configuration for changing it
- what transformation logic is necessary on input parameters
in the following;
- when refer to items (DEBUG, CFLAGS...) related to regular compilation, for simplicity, it's implied that the same applies as well to cross compilation items (CROSSDEBUG, CROSSCFLAGS)
- I let aside the choice of name between DEBUG vs DEBUGFORMAT
as of today, wine's preferred debug format is "-gdwarf-2 -gstrict-dwarf" (for both regular and cross compilation)
note:
- wine's preferred debug format that it is most always different from compiler's preferred debug format. gcc claims it's mostly dwarf5 on unix, (this will hold true until wine catches up on debug format used by default)
- When enabling dwarf4, the exact format still needs from attention (eg: strict dwarf or not, Mac OS support to be clarified, see below)
- as of today, the preferred debug format isn't tied to a compiler (it's global) (in fact we try if either option -gdwarf-2 and -gstrict-dwarf work...)
- CFLAGS defaults to -g -O2 and expects the -g to be transformed into wine's preferred format
- this may have to be revisited as:
- as of today, dwarf-2 support is no longer in gcc default's configuration and must be explicitely enabled at configuration time...
- there are cases when it's not - see for example thread on wine-devel on GCC11 with open suse conf where it's not, so this could end up as only -gstrict-dwarf -g, which will turn into dwarf5 :-)
- gcc doc says that macos/darwin defaults to dwarf2. I tested homebrew/gcc and Xcode's clang on big sur, they both default to dwarf4, but I haven't tested on previous versions (may likely be dwarf2)
what could be done:
DEBUG (when specified)
- used to choose a debug format for compiling wine
- I'd suggest a more drastic approach than what we have today: just append DEBUG content as it is to EXTRACFLAGS. this gives total flexibility on what we may want to experiment ; note: it will require using -gcodeview (not -gpdb nor pdb) in CROSSDEBUG
- this means that no transformation logic is applied on this option ; this option should be for internal maintenance and forcing some given options
- note that -g will still be present in CFLAGS, but shouldn't harm ; if CFLAGS has more -g* option, it may be necessary to erase them all
when DEBUG is not specified
- try to elaborate debug format from CFLAGS
- several debug entries (-g*) can be present in CFLAGS
- support the following transformations (it means removing all -g* options from CFLAGS and append to EXTRACFLAGS the result of their tranformation)
-g => wine's preferred debug format. (* see below)
-gdwarf => wine's preferred debug format.
-gdwarf-X => kept as is. but do we add strict dwarf or not ? I'd say enforce strict dwarf for dwarf2 (as we have it in place), and decide later on if we need it elsewhere
-gpdb => -gcodeview (synonym)
-g* => (all the other debug options) retained as is
reguarding the transformation of several options, like CFLAGS=-gdwarf-X -g
+ we need to explicit what meaning bears -g
+ in gcc, it can be used either when pushing elements down the chain for enabling debug management, and/or to pick up default format when no other -g option is specified
so we may have to keep the same logic:
transformation of -g:
- if first -g* option in CFLAGS, then transform it into wine's preferred debug format
- if not first, keep as -g
comments welcomed
A+
+ AC_SUBST(DEBUGFORMAT)
AC_SUBST is not needed here, you don't use it outside configure script
I blindly copied what is done with DEBUG in configure.ac... should we get rid of it as well, it's not used in any of .in files ?
On 10/3/21 2:25 PM, Eric Pouech wrote:
what could be done:
DEBUG (when specified)
used to choose a debug format for compiling wine
I'd suggest a more drastic approach than what we have today: just
append DEBUG content as it is to EXTRACFLAGS. this gives total flexibility on what we may want to experiment ; note: it will require using -gcodeview (not -gpdb nor pdb) in CROSSDEBUG
There is one more reason for CROSSDEBUG, which is CROSSDEBUG=split (or split-dwarf), causing build system to create separated symbol files for cross compiled modules. This does not translate so well to EXTRACFLAGS, it's handled by makedep. We currently don't do similar things for ELF files. The common practice in Unix world seems to be splitting executables at install time. Given additional portability challenges, I'm not sure if providing an equivalent of CROSSDEBUG=split for ELFs is worth it.
How about an easier solution: we could skip appending -gdwarf-2 if any of -gdwarf-[234] options are provided in CFLAGS.
Thanks,
Jacek
How about an easier solution: we could skip appending -gdwarf-2 if any of -gdwarf-[234] options are provided in CFLAGS.
yeah, way simpler ; may even work ;-)
two questions though:
- is there a need to support CROSSDEBUG=dwarf ? or not specifying anything in CROSSDEBUG is fine
- when using CROSSDEBUG=pdb, I assume there's no need to the -gdwarf* options at the same time?
A+
On 10/4/21 5:07 PM, Eric Pouech wrote:
How about an easier solution: we could skip appending -gdwarf-2 if any of -gdwarf-[234] options are provided in CFLAGS.
yeah, way simpler ; may even work ;-)
two questions though:
- is there a need to support CROSSDEBUG=dwarf ? or not specifying
anything in CROSSDEBUG is fine
I'm not sure what you mean. It should be easy to keep it working and it doesn't need to be specified.
- when using CROSSDEBUG=pdb, I assume there's no need to the -gdwarf*
options at the same time?
Yes, pdb implies that we're using codeview symbols, so -gdwarf* options do not apply.
Jacek
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/dbghelp/type.c | 15 +++++++++++++-- include/cvconst.h | 14 +++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/dlls/dbghelp/type.c b/dlls/dbghelp/type.c index 29d8a5350a5..70719cf6b7c 100644 --- a/dlls/dbghelp/type.c +++ b/dlls/dbghelp/type.c @@ -62,9 +62,9 @@ static const char* symt_get_tag_str(DWORD tag) case SymTagBaseClass: return "SymTagBaseClass"; case SymTagFriend: return "SymTagFriend"; case SymTagFunctionArgType: return "SymTagFunctionArgType,"; - case SymTagFuncDebugStart: return "SymTagFuncDebugStart,"; + case SymTagFuncDebugStart: return "SymTagFuncDebugStart"; case SymTagFuncDebugEnd: return "SymTagFuncDebugEnd"; - case SymTagUsingNamespace: return "SymTagUsingNamespace,"; + case SymTagUsingNamespace: return "SymTagUsingNamespace"; case SymTagVTableShape: return "SymTagVTableShape"; case SymTagVTable: return "SymTagVTable"; case SymTagCustom: return "SymTagCustom"; @@ -72,6 +72,17 @@ static const char* symt_get_tag_str(DWORD tag) case SymTagCustomType: return "SymTagCustomType"; case SymTagManagedType: return "SymTagManagedType"; case SymTagDimension: return "SymTagDimension"; + case SymTagCallSite: return "SymTagCallSite"; + case SymTagInlineSite: return "SymTagInlineSite"; + case SymTagBaseInterface: return "SymTagBaseInterface"; + case SymTagVectorType: return "SymTagVectorType"; + case SymTagMatrixType: return "SymTagMatrixType"; + case SymTagHLSLType: return "SymTagHLSLType"; + case SymTagCaller: return "SymTagCaller"; + case SymTagCallee: return "SymTagCallee"; + case SymTagExport: return "SymTagExport"; + case SymTagHeapAllocationSite: return "SymTagHeapAllocationSite"; + case SymTagCoffGroup: return "SymTagCoffGroup"; default: return "---"; } } diff --git a/include/cvconst.h b/include/cvconst.h index 95fdc9c73e5..f90c61a57fa 100644 --- a/include/cvconst.h +++ b/include/cvconst.h @@ -55,6 +55,17 @@ enum SymTagEnum SymTagCustomType, SymTagManagedType, SymTagDimension, + SymTagCallSite, + SymTagInlineSite, + SymTagBaseInterface, + SymTagVectorType, + SymTagMatrixType, + SymTagHLSLType, + SymTagCaller, + SymTagCallee, + SymTagExport, + SymTagHeapAllocationSite, + SymTagCoffGroup, SymTagMax };
@@ -103,7 +114,8 @@ enum LocationType LocIsSlot, LocIsIlRel, LocInMetaData, - LocIsConstant + LocIsConstant, + LocTypeMax };
/* kind of SymTagData */