Eric Pouech : dbghelp/dwarf: Add support for FORM_loc_offset and FORM_sec_offset.

Alexandre Julliard julliard at winehq.org
Tue Sep 14 16:00:14 CDT 2021


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

Author: Eric Pouech <eric.pouech at gmail.com>
Date:   Sat Sep 11 10:59:05 2021 +0200

dbghelp/dwarf: Add support for FORM_loc_offset and FORM_sec_offset.

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

---

 dlls/dbghelp/dwarf.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index a29bd53f929..a9a72ee6566 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -489,7 +489,6 @@ static void dwarf2_swallow_attribute(dwarf2_traverse_context_t* ctx,
     case DW_FORM_ref2:   step = 2; break;
     case DW_FORM_data4:
     case DW_FORM_ref4:   step = 4; break;
-    case DW_FORM_strp:   step = head->offset_size; break;
     case DW_FORM_data8:
     case DW_FORM_ref8:   step = 8; break;
     case DW_FORM_sdata:
@@ -500,6 +499,8 @@ static void dwarf2_swallow_attribute(dwarf2_traverse_context_t* ctx,
     case DW_FORM_block1: step = dwarf2_parse_byte(ctx); break;
     case DW_FORM_block2: step = dwarf2_parse_u2(ctx); break;
     case DW_FORM_block4: step = dwarf2_parse_u4(ctx); break;
+    case DW_FORM_sec_offset:
+    case DW_FORM_strp:   step = head->offset_size; break;
     default:
         FIXME("Unhandled attribute form %lx\n", abbrev_attr->form);
         return;
@@ -625,6 +626,11 @@ static void dwarf2_fill_attr(const dwarf2_parse_context_t* ctx,
         TRACE("block<%p,%u>\n", attr->u.block.ptr, attr->u.block.size);
         break;
 
+    case DW_FORM_sec_offset:
+        attr->u.lluvalue = dwarf2_get_addr(data, ctx->head.offset_size);
+        TRACE("sec_offset<%s>\n", wine_dbgstr_longlong(attr->u.lluvalue));
+        break;
+
     default:
         FIXME("Unhandled attribute form %lx\n", abbrev_attr->form);
         break;
@@ -935,11 +941,16 @@ static BOOL dwarf2_compute_location_attr(dwarf2_parse_context_t* ctx,
         loc->reg = 0;
         loc->offset = xloc.u.uvalue;
         return TRUE;
-    case DW_FORM_data4: case DW_FORM_data8:
+    case DW_FORM_data4:
         loc->kind = loc_dwarf2_location_list;
         loc->reg = Wine_DW_no_register;
         loc->offset = xloc.u.uvalue;
         return TRUE;
+    case DW_FORM_data8: case DW_FORM_sec_offset:
+        loc->kind = loc_dwarf2_location_list;
+        loc->reg = Wine_DW_no_register;
+        loc->offset = xloc.u.lluvalue;
+        return TRUE;
     case DW_FORM_block:
     case DW_FORM_block1:
     case DW_FORM_block2:
@@ -1662,6 +1673,7 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm,
             break;
 
         case DW_FORM_data8:
+        case DW_FORM_sec_offset:
             v.n1.n2.vt = VT_UI8;
             v.n1.n2.n3.llVal = value.u.lluvalue;
             break;




More information about the wine-cvs mailing list