Eric Pouech : dbghelp/dwarf: Add proper support for DW_FORM_GNU_ref_alt.

Alexandre Julliard julliard at winehq.org
Thu Sep 16 15:34:32 CDT 2021


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

Author: Eric Pouech <eric.pouech at gmail.com>
Date:   Thu Sep 16 11:10:47 2021 +0200

dbghelp/dwarf: Add proper support for DW_FORM_GNU_ref_alt.

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

---

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

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index c0f4afcb606..fffc7c37c13 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -680,9 +680,16 @@ static BOOL dwarf2_fill_attr(const dwarf2_parse_context_t* ctx,
         break;
 
     case DW_FORM_GNU_ref_alt:
-        FIXME("Unhandled FORM_GNU_ref_alt\n");
-        attr->u.uvalue = 0;
-        return FALSE;
+        if (!ctx->module_ctx->dwz)
+        {
+            ERR("No DWZ file present for GNU_ref_alt in %s\n", debugstr_w(ctx->module_ctx->module->modulename));
+            attr->u.uvalue = 0;
+            return FALSE;
+        }
+        attr->u.uvalue = dwarf2_get_addr(data, ctx->head.offset_size);
+        TRACE("ref_alt<0x%lx>\n", attr->u.uvalue);
+        break;
+
     case DW_FORM_GNU_strp_alt:
         if (ctx->module_ctx->dwz)
         {
@@ -767,6 +774,10 @@ static dwarf2_debug_info_t* dwarf2_jump_to_debug_info(struct attribute* attr)
     case DW_FORM_ref_addr:
         ref_ctx = dwarf2_locate_cu(attr->debug_info->unit_ctx->module_ctx, attr->u.uvalue);
         break;
+    case DW_FORM_GNU_ref_alt:
+        if (attr->debug_info->unit_ctx->module_ctx->dwz)
+            ref_ctx = dwarf2_locate_cu(&attr->debug_info->unit_ctx->module_ctx->dwz->module_ctx, attr->u.uvalue);
+        break;
     default:
         with_other = FALSE;
         ref_ctx = attr->debug_info->unit_ctx;




More information about the wine-cvs mailing list