Eric Pouech : dbghelp: In dwarf parsing, correctly handle the DW_OP_regx option.
Alexandre Julliard
julliard at winehq.org
Mon Mar 29 09:57:49 CDT 2010
Module: wine
Branch: master
Commit: a5293895a34c0cbf4f6db0585a1c48a025ddaee1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a5293895a34c0cbf4f6db0585a1c48a025ddaee1
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Sat Mar 27 09:08:55 2010 +0100
dbghelp: In dwarf parsing, correctly handle the DW_OP_regx option.
---
dlls/dbghelp/dwarf.c | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 1652f46..78860d7 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -690,7 +690,6 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc,
}
stack[++stk] = dwarf2_leb128_as_signed(ctx);
loc->kind = loc_regrel;
- break;
}
else switch (op)
{
@@ -736,18 +735,22 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc,
case DW_OP_skip: tmp = dwarf2_parse_u2(ctx); ctx->data += tmp; break;
case DW_OP_bra: tmp = dwarf2_parse_u2(ctx); if (!stack[stk--]) ctx->data += tmp; break;
case DW_OP_regx:
- if (loc->reg != Wine_DW_no_register)
- FIXME("Only supporting one regx\n");
- loc->reg = dwarf2_map_register(dwarf2_leb128_as_unsigned(ctx));
+ tmp = dwarf2_leb128_as_unsigned(ctx);
+ if (!piece_found)
+ {
+ if (loc->reg != Wine_DW_no_register)
+ FIXME("Only supporting one reg\n");
+ loc->reg = dwarf2_map_register(tmp);
+ }
loc->kind = loc_register;
break;
case DW_OP_bregx:
tmp = dwarf2_leb128_as_unsigned(ctx);
- ctx->data++;
if (loc->reg != Wine_DW_no_register)
FIXME("Only supporting one regx\n");
- loc->reg = dwarf2_map_register(tmp) + dwarf2_leb128_as_signed(ctx);
- loc->kind = loc_register;
+ loc->reg = dwarf2_map_register(tmp);
+ stack[++stk] = dwarf2_leb128_as_signed(ctx);
+ loc->kind = loc_regrel;
break;
case DW_OP_fbreg:
if (loc->reg != Wine_DW_no_register)
More information about the wine-cvs
mailing list