[llvm-dev] Supporting libunwind on Windows 10 (32bit; 64bit) for MSVC and Clang
Martin Storsjö via llvm-dev
llvm-dev at lists.llvm.org
Sat Aug 15 13:39:13 PDT 2020
Hi,
Please keep the discussion on the list.
On Sat, 15 Aug 2020, Ivan Serdyuk wrote:
> Just as Shoaib said, libunwind only is useful in environments
> that use
> the Itanium C++ ABI - there's really no use for it in an MSVC
> context
> (either using MSVC or clang-cl to compile it).
>
> The particular linker error comes from the fact that there's
> functions
> implemented in assembly, that expect the function name to be
> mangled the
> itanium way, while the object files built by the compiler expect
> the
> symbols to use the MSVC C++ name mangling, so there's an
> undefined
> reference.
>
>
> I see, thanks.
>
> Which options exist for MSVC, in sense an alternative to libunwind and
> libbacktrace ?
Well for libunwind, there's really no use for it in an MSVC setting. All
the unwinding functionality is already built into the operating system,
available via the Rtl*Unwind* functions.
For libbacktrace, I guess the _Unwind_Backtrace function in libunwind
might work and be useful, even if the rest of libunwind doesn't make sense
in such a context. I haven't tested this function on windows though, and
it'd require you to fix the linker error one way or another.
Another alternative, requiring much less code, would be to just extract
the SEH version of _Unwind_Backtrace function from libgcc [1]. I think
that function is fairly independent from the rest of libgcc and from the
rest of the surrounding file, and only calls Windows system APIs.
// Martin
[1] https://github.com/gcc-mirror/gcc/blob/master/libgcc/unwind-seh.c#L434
More information about the llvm-dev
mailing list