https://bugs.winehq.org/show_bug.cgi?id=55560
Eric Pouech eric.pouech@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |eric.pouech@gmail.com See Also| |https://sourceware.org/bugz | |illa/show_bug.cgi?id=30853
--- Comment #1 from Eric Pouech eric.pouech@gmail.com --- got a look at it...
it times out because the dwarf unwinder in dbghelp returns success but doesn't get an update of RIP in context... so it keeps on calling the unwinder, staying at same address
the offending function (in ntdll) is one of the syscall thunk generated by winebuild
very strangely, it uses this CIE (from dwarfdump) 00000000 0000000000000014 ffffffff CIE Version: 1 Augmentation: "" Code alignment factor: 1 Data alignment factor: -8 Return address column: 32
DW_CFA_def_cfa: r7 (rsp) ofs 8 DW_CFA_offset: r32 (xmm15) at cfa-8 DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop DW_CFA_nop
so, xmm15 instead of rip gets updated by the dwarf unwinder. Note its cross-assembler that generates that buggy information (local as gives the expected one).
I filled a bug report to binutils (and perhaps its already fixed)
I see two workarounds: - check in stack unwinding that Rip has been changed (if not). that works (could be a good idea anyway to prevent infinite loops for any reasons). - force in winebuild the correct register information for each .cfi_startproc directive. that works too (even we pile up register info in CIE) 00000000 0000000000000018 00000000 CIE Version: 1 Augmentation: "zR" Code alignment factor: 1 Data alignment factor: -8 Return address column: 32 Augmentation data: 1b DW_CFA_def_cfa: r7 (rsp) ofs 8 DW_CFA_offset: r32 (xmm15) at cfa-8 DW_CFA_def_cfa: r7 (rsp) ofs 8 DW_CFA_offset: r16 (rip) at cfa-8 DW_CFA_nop