git: 07bbb50f59ae - releng/13.1 - Merge libcxxrt commit 45ca8b1942090226ba9368caeeeabc0d4ee41ad6
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 19 Apr 2022 20:24:00 UTC
The branch releng/13.1 has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=07bbb50f59ae4c42ab82c11ccda7b25aeea4f7d7 commit 07bbb50f59ae4c42ab82c11ccda7b25aeea4f7d7 Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2022-04-19 16:11:11 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2022-04-19 20:23:20 +0000 Merge libcxxrt commit 45ca8b1942090226ba9368caeeeabc0d4ee41ad6 Insert padding in __cxa_exception struct for compatibility Similar to https://github.com/llvm/llvm-project/commit/f2a436058fcb, the addition of __attribute__((__aligned__)) to _Unwind_Exception (in commit b9616964) causes implicit padding to be inserted before the unwindHeader field in __cxa_exception. Applications attempt to get at the earlier fields in __cxa_exception, so preserve the same negative offsets in __cxa_exception, by moving the padding to the beginning of the struct. The assumption here is that if the ABI is not aware of the padding before unwindHeader and put the referenceCount/primaryException in there, no padding should exist before unwindHeader. This should make libreoffice's custom exception handling mechanisms work correctly, even if it was built against an older cxxabi.h/unwind.h pair. PR: 263370 Approved by: re (gjb) MFC after: immediately (cherry picked from commit 434215c26da3c6acf2423ab93ff2b41b2d823cc8) (cherry picked from commit 06394327dd1fd77c66af06f6f89713c5142fe1b2) --- contrib/libcxxrt/cxxabi.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contrib/libcxxrt/cxxabi.h b/contrib/libcxxrt/cxxabi.h index 411c4c749ccf..e843599c66da 100644 --- a/contrib/libcxxrt/cxxabi.h +++ b/contrib/libcxxrt/cxxabi.h @@ -77,6 +77,13 @@ typedef void (*terminate_handler)(); struct __cxa_exception { #if __LP64__ + /** + * Now _Unwind_Exception is marked with __attribute__((aligned)), which + * implies __cxa_exception is also aligned. Insert padding in the + * beginning of the struct, rather than before unwindHeader. + */ + void *reserve; + /** * Reference count. Used to support the C++11 exception_ptr class. This * is prepended to the structure in 64-bit mode and squeezed in to the