Eric Pouech : dbghelp/dwarf: Add word size parameter to parse_addr() internal function.

Alexandre Julliard julliard at winehq.org
Thu Sep 9 15:42:32 CDT 2021


Module: wine
Branch: master
Commit: f4da45d9f5dacc0b4ce1c09ae3685a26f7fc1919
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f4da45d9f5dacc0b4ce1c09ae3685a26f7fc1919

Author: Eric Pouech <eric.pouech at gmail.com>
Date:   Wed Sep  8 08:34:08 2021 +0200

dbghelp/dwarf: Add word size parameter to parse_addr() internal function.

Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dbghelp/dwarf.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 19545e2b72b..07f06c4fa82 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -351,13 +351,18 @@ static ULONG_PTR dwarf2_get_addr(const unsigned char* ptr, unsigned word_size)
     return ret;
 }
 
-static ULONG_PTR dwarf2_parse_addr(dwarf2_traverse_context_t* ctx)
+static inline ULONG_PTR dwarf2_parse_addr(dwarf2_traverse_context_t* ctx, unsigned word_size)
 {
-    ULONG_PTR ret = dwarf2_get_addr(ctx->data, ctx->word_size);
-    ctx->data += ctx->word_size;
+    ULONG_PTR ret = dwarf2_get_addr(ctx->data, word_size);
+    ctx->data += word_size;
     return ret;
 }
 
+static inline ULONG_PTR dwarf2_parse_addr_head(dwarf2_traverse_context_t* ctx, const dwarf2_cuhead_t* head)
+{
+    return dwarf2_parse_addr(ctx, head->word_size);
+}
+
 static const char* dwarf2_debug_traverse_ctx(const dwarf2_traverse_context_t* ctx) 
 {
     return wine_dbg_sprintf("ctx(%p)", ctx->data); 
@@ -714,7 +719,7 @@ compute_location(const struct module *module, dwarf2_traverse_context_t* ctx, st
         else switch (op)
         {
         case DW_OP_nop:         break;
-        case DW_OP_addr:        stack[++stk] = dwarf2_parse_addr(ctx); break;
+        case DW_OP_addr:        stack[++stk] = dwarf2_parse_addr(ctx, ctx->word_size); break;
         case DW_OP_const1u:     stack[++stk] = dwarf2_parse_byte(ctx); break;
         case DW_OP_const1s:     stack[++stk] = dwarf2_parse_byte(ctx); break;
         case DW_OP_const2u:     stack[++stk] = dwarf2_parse_u2(ctx); break;
@@ -1050,10 +1055,10 @@ static BOOL dwarf2_read_range(dwarf2_parse_context_t* ctx, const dwarf2_debug_in
 
         *plow  = ULONG_MAX;
         *phigh = 0;
-        while (traverse.data + 2 * traverse.word_size < traverse.end_data)
+        while (traverse.data + 2 * ctx->head.word_size < traverse.end_data)
         {
-            low = dwarf2_parse_addr(&traverse);
-            high = dwarf2_parse_addr(&traverse);
+            low = dwarf2_parse_addr_head(&traverse, &ctx->head);
+            high = dwarf2_parse_addr_head(&traverse, &ctx->head);
             if (low == 0 && high == 0) break;
             if (low == ULONG_MAX) FIXME("unsupported yet (base address selection)\n");
             if (low  < *plow)  *plow = low;
@@ -2303,7 +2308,7 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections,
                         end_sequence = TRUE;
                         break;
                     case DW_LNE_set_address:
-                        address = ctx->load_offset + dwarf2_parse_addr(&traverse);
+                        address = ctx->load_offset + dwarf2_parse_addr_head(&traverse, &ctx->head);
                         break;
                     case DW_LNE_define_file:
                         FIXME("not handled define file %s\n", debugstr_a((char *)traverse.data));
@@ -2608,7 +2613,7 @@ static ULONG_PTR dwarf2_parse_augmentation_ptr(dwarf2_traverse_context_t* ctx, u
     switch (encoding & 0x0f)
     {
     case DW_EH_PE_native:
-        return base + dwarf2_parse_addr(ctx);
+        return base + dwarf2_parse_addr(ctx, ctx->word_size);
     case DW_EH_PE_leb128:
         return base + dwarf2_leb128_as_unsigned(ctx);
     case DW_EH_PE_data2:
@@ -3107,7 +3112,7 @@ static ULONG_PTR eval_expression(const struct module* module, struct cpu_stack_w
         else switch (opcode)
         {
         case DW_OP_nop:         break;
-        case DW_OP_addr:        stack[++sp] = dwarf2_parse_addr(&ctx); break;
+        case DW_OP_addr:        stack[++sp] = dwarf2_parse_addr(&ctx, ctx.word_size); break;
         case DW_OP_const1u:     stack[++sp] = dwarf2_parse_byte(&ctx); break;
         case DW_OP_const1s:     stack[++sp] = (signed char)dwarf2_parse_byte(&ctx); break;
         case DW_OP_const2u:     stack[++sp] = dwarf2_parse_u2(&ctx); break;




More information about the wine-cvs mailing list