On 07.12.2018 21:55, Michał Górny wrote:
> 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
>
There is a lot of such pain in other LLVM projects like compiler-rt.
Changing the type to be compatible with other implementations sounds
good to me.
Attachment:
signature.asc
Description: OpenPGP digital signature