git: 346f0084ba72 - releng/13.1 - libcxxrt: Insert padding in __cxa_dependent_exception

From: Ed Maste <emaste_at_FreeBSD.org>
Date: Wed, 27 Apr 2022 17:55:23 UTC
The branch releng/13.1 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=346f0084ba726f5b4640e0624c6f7e0df2622d54

commit 346f0084ba726f5b4640e0624c6f7e0df2622d54
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2022-04-27 13:15:09 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2022-04-27 16:05:34 +0000

    libcxxrt: Insert padding in __cxa_dependent_exception
    
    Padding was added to __cxa_exception in 45ca8b19 and
    __cxa_dependent_exception needs the same layout.
    Add some static_asserts to detect this in the future.
    
    Merge of libcxxrt commit b00c6c564357
    
    (cherry picked from commit c40e4349889b32500e51e60f9529dbcc080f468b)
    (cherry picked from commit 69a40d924128b88ff2c82a35ab1b4509e1bdca56)
    
    Approved by:    re (gjb)
---
 contrib/libcxxrt/exception.cc | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/contrib/libcxxrt/exception.cc b/contrib/libcxxrt/exception.cc
index 0fb26ddb4ed2..f2b5fc0808ac 100644
--- a/contrib/libcxxrt/exception.cc
+++ b/contrib/libcxxrt/exception.cc
@@ -196,6 +196,7 @@ struct __cxa_thread_info
 struct __cxa_dependent_exception
 {
 #if __LP64__
+	void *reserve;
 	void *primaryException;
 #endif
 	std::type_info *exceptionType;
@@ -218,6 +219,17 @@ struct __cxa_dependent_exception
 #endif
 	_Unwind_Exception unwindHeader;
 };
+static_assert(sizeof(__cxa_exception) == sizeof(__cxa_dependent_exception),
+    "__cxa_exception and __cxa_dependent_exception should have the same size");
+static_assert(offsetof(__cxa_exception, referenceCount) ==
+    offsetof(__cxa_dependent_exception, primaryException),
+    "referenceCount and primaryException should have the same offset");
+static_assert(offsetof(__cxa_exception, unwindHeader) ==
+    offsetof(__cxa_dependent_exception, unwindHeader),
+    "unwindHeader fields should have the same offset");
+static_assert(offsetof(__cxa_dependent_exception, unwindHeader) ==
+    offsetof(__cxa_dependent_exception, adjustedPtr) + 8,
+    "there should be no padding before unwindHeader");
 
 
 namespace std