[PATCH 0/8] Setting dwarf4 as Wine default debug format

Martin Storsjö martin at martin.st
Tue Nov 23 09:48:53 CST 2021


On Mon, 22 Nov 2021, Eric Pouech wrote:

> This series:
> + fixes all the bugs I'm aware of in all the recent dbghelp
>  changes (dwarf4, but others too).
> + and let dwarf4 replace dwarf2 as default debug format (it's been
>  almost 15 years <g>)

FWIW, I ran into a surprise due to this (just mentioning for reference, 
it's probably not worth changing anything about); this broke the recently 
contributed stack unwinding on ARM, when built with Clang.

When building with -gdwarf-4 with Clang, the CIEs in .debug_frame end up 
as version 4, but libunwind (which is needed for unwinding the ELF 
modules) breaks when there's such data present - 
https://github.com/libunwind/libunwind/issues/256 tracks that issue 
upstream. (It's easy to work around and patch locally though.)

This is only an issue on ARM, as -fasynchronous-unwind-tables ensures 
producing .eh_frame (which doesn't have this issue with CIE version) on 
other architectures (including ARM64). (On ARM on ELF, a different 
unwinding mechanism, ARMEH, is used primarily, but libunwind doesn't parse 
that, but can make do with .debug_frame instead.)

So far I'm working around it by explicitly passing in CFLAGS="-g -O2 
-gdwarf-2" when building with Clang for ARM, and I guess will be fixed 
eventually in upstream libunwind too.

// Martin




More information about the wine-devel mailing list