On Thu, 21 Apr 2022 13:57:09 -0700 (PDT) Don Lewis
<truck...@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
>>> <truck...@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.

Reply via email to