running a 16 bit application from bug Bug 5493
now gives an a continuous list of fixme:dbghelp_dwarf:dwarf2_compute_location Unhandled attr op: 75 instead of continuous page faulting between on the lookup. What traces do you need and I will add them to that bug.
does the attached patch help ? A+
From nobody Mon Sep 17 00:00:00 2001
From: Eric Pouech eric.pouech@wanadoo.fr Date: Sat, 1 Jul 2006 11:38:10 +0200 Subject: [PATCH] [DbgHelp]: dwarf & variable with const values
- properly handle variable with const value (ie without location) in dwarf code
---
dlls/dbghelp/dwarf.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)
5d683a5bfdb679fe617ced7b9070756c29d45a85 diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c index 01250a5..a618986 100644 --- a/dlls/dbghelp/dwarf.c +++ b/dlls/dbghelp/dwarf.c @@ -1050,20 +1050,20 @@ static void dwarf2_parse_variable(dwarf2 dwarf2_debug_info_t* di) { struct symt* param_type; - union attribute loc; + union attribute name, loc, value; BOOL is_pmt = di->abbrev->tag == DW_TAG_formal_parameter;
TRACE("%s, for %s\n", dwarf2_debug_ctx(subpgm->ctx), dwarf2_debug_di(di));
param_type = dwarf2_lookup_type(subpgm->ctx, di); - if (dwarf2_find_attribute(di, DW_AT_location, &loc)) + dwarf2_find_name(subpgm->ctx, di, &name, "parameter"); + if (dwarf2_find_attribute(di, DW_AT_location, &loc) && loc.block) { union attribute name; union attribute ext; long offset; int in_reg;
- dwarf2_find_name(subpgm->ctx, di, &name, "parameter"); offset = dwarf2_compute_location(subpgm->ctx, loc.block, &in_reg); TRACE("found parameter %s/%ld (reg=%d) at %s\n", name.string, offset, in_reg, dwarf2_debug_ctx(subpgm->ctx)); @@ -1094,6 +1094,10 @@ static void dwarf2_parse_variable(dwarf2 break; } } + if (dwarf2_find_attribute(di, DW_AT_const_value, &value)) + { + FIXME("NIY (const value %08lx for %s\n", value.uvalue, name.string); + } if (is_pmt && subpgm->func && subpgm->func->type) symt_add_function_signature_parameter(subpgm->ctx->module, (struct symt_function_signature*)subpgm->func->type,