Ken Thomases : ntdll: Add partial support for version 3 of DWARF CIEs which are generated by Clang /LLVM.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 5 06:46:12 CDT 2015


Module: wine
Branch: master
Commit: 82dd799d5243e246c30bfb5fb463d740c6cc71f4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=82dd799d5243e246c30bfb5fb463d740c6cc71f4

Author: Ken Thomases <ken at codeweavers.com>
Date:   Fri Jun  5 01:19:14 2015 -0500

ntdll: Add partial support for version 3 of DWARF CIEs which are generated by Clang/LLVM.

---

 dlls/ntdll/signal_x86_64.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 9c58363..9b98894 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -1342,7 +1342,7 @@ static NTSTATUS dwarf_virtual_unwind( ULONG64 ip, ULONG64 *frame,CONTEXT *contex
 
     /* parse the CIE first */
 
-    if (cie->version != 1)
+    if (cie->version != 1 && cie->version != 3)
     {
         FIXME( "unknown CIE version %u at %p\n", cie->version, cie );
         return STATUS_INVALID_DISPOSITION;
@@ -1351,7 +1351,10 @@ static NTSTATUS dwarf_virtual_unwind( ULONG64 ip, ULONG64 *frame,CONTEXT *contex
 
     info.code_align = dwarf_get_uleb128( &ptr );
     info.data_align = dwarf_get_sleb128( &ptr );
-    info.retaddr_reg = *ptr++;
+    if (cie->version == 1)
+        info.retaddr_reg = *ptr++;
+    else
+        info.retaddr_reg = dwarf_get_uleb128( &ptr );
     info.state.cfa_rule = RULE_CFA_OFFSET;
 
     TRACE( "function %lx base %p cie %p len %x id %x version %x aug '%s' code_align %lu data_align %ld retaddr %s\n",




More information about the wine-cvs mailing list