Re: git: c00d34566536 - main - Install unwind.h into /usr/include

From: Tijl Coosemans <tijl_at_FreeBSD.org>
Date: Thu, 21 Apr 2022 22:04:50 UTC
On Thu, 21 Apr 2022 13:57:09 -0700 (PDT) Don Lewis
<truckman@FreeBSD.org> wrote:
> On 21 Apr, Don Lewis wrote:
>> On 21 Apr, Tijl Coosemans wrote:  
>>> On Wed, 20 Apr 2022 18:35:15 -0700 (PDT) Don Lewis
>>> <truckman@FreeBSD.org> wrote:  
>>>> My only remaining question is why the selftest fails before the recent
>>>> padding fix.  I would expect the tests to pass with the incorrectly
>>>> placed padding as long as everything was compiled with the same
>>>> structure definition.  
>>> 
>>> Are you building with devel/libunwind installed?  It installs its own
>>> unwind.h which does not have the alignment changes so it does not induce
>>> padding in __cxa_exception.  So you're not actually compiling with the
>>> same structure definition.  
>> 
>> Bingo!  libunwind is getting pulled in by the gstreamer dependency.  Not
>> sure how to fix this because some of the other dependencies are not
>> getting built with libunwind.  

There's a patch for devel/libunwind in bug 263370.
 
> ... and in view of the above, why does adding the padding to the system
> unwind.h header fix the self test since that will introduce a mismatch?

What matters for __cxa_exception are negative offsets from the end of
the struct.  Adding __aligned__ to _Unwind_Exception induced 8 bytes of
padding right before the unwindHeader field in __cxa_exception to make
that field 16 byte aligned.  That put all the fields above unwindHeader
at a different offset from the end.  By adding the padding to the
beginning unwindHeader is already 16 byte aligned and all the fields are
at the same offset again as before.