dbghelp: Implement some Arithmetic and Logical dwarf opcodes
André Hentschel
nerv at dawncrow.de
Tue Dec 22 12:33:34 CST 2009
...and make a fixme more clear, as there were two times the same sentences
---
dlls/dbghelp/dwarf.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index d9e52d3..282f48b 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -704,6 +704,20 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc,
case DW_OP_consts: stack[++stk] = dwarf2_leb128_as_signed(ctx); break;
case DW_OP_plus_uconst:
stack[stk] += dwarf2_leb128_as_unsigned(ctx); break;
+ case DW_OP_abs: stack[stk] = labs(stack[stk]); break;
+ case DW_OP_and: stack[stk-1] &= stack[stk]; stk--; break;
+ case DW_OP_div: stack[stk-1] = (LONG_PTR)stack[stk-1] / (LONG_PTR)stack[stk]; stk--; break;
+ case DW_OP_minus: stack[stk-1] -= stack[stk]; stk--; break;
+ case DW_OP_mod: stack[stk-1] = (LONG_PTR)stack[stk-1] % (LONG_PTR)stack[stk]; stk--; break;
+ case DW_OP_mul: stack[stk-1] *= stack[stk]; stk--; break;
+ case DW_OP_neg: stack[stk] = -stack[stk]; break;
+ case DW_OP_not: stack[stk] = ~stack[stk]; break;
+ case DW_OP_or: stack[stk-1] |= stack[stk]; stk--; break;
+ case DW_OP_plus: stack[stk-1] += stack[stk]; stk--; break;
+ case DW_OP_shl: stack[stk-1] <<= stack[stk]; stk--; break;
+ case DW_OP_shr: stack[stk-1] >>= stack[stk]; stk--; break;
+ case DW_OP_shra: stack[stk-1] = (LONG_PTR)stack[stk-1] / (1 << stack[stk]); stk--; break;
+ case DW_OP_xor: stack[stk-1] ^= stack[stk]; stk--; break;
case DW_OP_reg0: case DW_OP_reg1: case DW_OP_reg2: case DW_OP_reg3:
case DW_OP_reg4: case DW_OP_reg5: case DW_OP_reg6: case DW_OP_reg7:
case DW_OP_reg8: case DW_OP_reg9: case DW_OP_reg10: case DW_OP_reg11:
@@ -740,7 +754,7 @@ compute_location(dwarf2_traverse_context_t* ctx, struct location* loc,
if (!piece_found)
{
if (loc->reg != Wine_DW_no_register)
- FIXME("Only supporting one reg (%d -> %d)\n",
+ FIXME("Only supporting one breg (%d -> %d)\n",
loc->reg, dwarf2_map_register(op - DW_OP_breg0));
loc->reg = dwarf2_map_register(op - DW_OP_breg0);
}
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list