Module: wine Branch: master Commit: 108cd669330cd2cf77a976a4554d4df59007ee75 URL: https://gitlab.winehq.org/wine/wine/-/commit/108cd669330cd2cf77a976a4554d4df...
Author: Eric Pouech eric.pouech@gmail.com Date: Wed Sep 28 12:13:58 2022 +0200
dbghelp: Fix variable storage information (Dwarf).
Signed-off-by: Eric Pouech eric.pouech@gmail.com
---
dlls/dbghelp/dwarf.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 13931c45d8b..71163ced733 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1993,14 +1993,23 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm, break; case loc_absolute: /* it's a global variable */ - /* FIXME: we don't handle its scope yet */ if (!dwarf2_find_attribute(di, DW_AT_external, &ext)) ext.u.uvalue = 0; loc.offset += subpgm->ctx->module_ctx->load_offset; - symt_new_global_variable(subpgm->ctx->module_ctx->module, - ext.u.uvalue ? NULL : subpgm->ctx->compiland, - dwarf2_get_cpp_name(di, name.u.string), !ext.u.uvalue, - loc, 0, param_type); + if (subpgm->top_func) + { + if (ext.u.uvalue) WARN("unexpected global inside a functionn"); + symt_add_func_local(subpgm->ctx->module_ctx->module, subpgm->current_func, + DataIsStaticLocal, &loc, subpgm->current_block, + param_type, dwarf2_get_cpp_name(di, name.u.string)); + } + else + { + symt_new_global_variable(subpgm->ctx->module_ctx->module, + ext.u.uvalue ? NULL : subpgm->ctx->compiland, + dwarf2_get_cpp_name(di, name.u.string), !ext.u.uvalue, + loc, 0, param_type); + } break; default: subpgm->non_computed_variable = TRUE;