Hi,
While working on building more LLVM projects on NetBSD, I've noticed
that libcxxabi fails to build due to incompatible unwind.h. The example
of problematic code is [1]:
_Unwind_SetGR(context, __builtin_eh_return_data_regno(0),
reinterpret_cast<uintptr_t>(unwind_exception));
_Unwind_SetGR(context, __builtin_eh_return_data_regno(1),
static_cast<uintptr_t>(results.ttypeIndex));
_Unwind_SetIP(context, results.landingPad);
This fails to build because NetBSD's unwind.h expects the last argument
to _Unwind_Set{GR,IP} to be a pointer. However, it seems that other
implementations expect an unsigned integer type instead. The types used
for the last argument of appropriate functions (and return type of their
respective _Unwind_Get* counterparts) are:
SetGR/GetGR SetIP/GetIP
gcc 7.3.0 on Linux _Unwind_Word _Unwind_Ptr (-> unsigned [a])
clang _Unwind_Word _Unwind_Word (-> uintptr_t)
llvm-libunwind uintptr_t uintptr_t
libunwind 1.2.1 uns. long uns. long
[a] gcc is doing some __attribute__ magic on top of it
I think changing our header to use unsigned integer type alike other
implementations is the way to go. Does this sound like the right thing
to do?
[1]:https://github.com/llvm-mirror/libcxxabi/blob/master/src/cxa_personality.cpp#L528
--
Best regards,
Michał Górny
Attachment:
signature.asc
Description: This is a digitally signed message part