public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r10-10582] libphobos: Give _Unwind_Exception an alignment that best resembles __attribute__((aligned))
@ 2022-04-26 15:14 Iain Buclaw
0 siblings, 0 replies; only message in thread
From: Iain Buclaw @ 2022-04-26 15:14 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:a94620503e8a79917aca25ab7d804232ba12efc0
commit r10-10582-ga94620503e8a79917aca25ab7d804232ba12efc0
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date: Sat Sep 25 19:50:52 2021 +0200
libphobos: Give _Unwind_Exception an alignment that best resembles __attribute__((aligned))
For interoperability with C++ EH, the alignment should match, otherwise
D may not be able to intercept exceptions thrown from C++.
libphobos/ChangeLog:
* libdruntime/gcc/unwind/generic.d (__aligned__): Define.
(_Unwind_Exception): Align struct to __aligned__.
(cherry picked from commit efa5449a094d3887e124d400ff0410af2c745b2d)
Diff:
---
libphobos/libdruntime/gcc/unwind/generic.d | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/libphobos/libdruntime/gcc/unwind/generic.d b/libphobos/libdruntime/gcc/unwind/generic.d
index 9c164b6fbac..cca437df926 100644
--- a/libphobos/libdruntime/gcc/unwind/generic.d
+++ b/libphobos/libdruntime/gcc/unwind/generic.d
@@ -123,7 +123,27 @@ enum : _Unwind_Reason_Code
// @@@ The IA-64 ABI says that this structure must be double-word aligned.
// Taking that literally does not make much sense generically. Instead we
// provide the maximum alignment required by any type for the machine.
-struct _Unwind_Exception
+ version (ARM) private enum __aligned__ = 8;
+else version (AArch64) private enum __aligned__ = 16;
+else version (HPPA) private enum __aligned__ = 8;
+else version (HPPA64) private enum __aligned__ = 16;
+else version (MIPS_N32) private enum __aligned__ = 16;
+else version (MIPS_N64) private enum __aligned__ = 16;
+else version (MIPS32) private enum __aligned__ = 8;
+else version (MIPS64) private enum __aligned__ = 8;
+else version (PPC) private enum __aligned__ = 16;
+else version (PPC64) private enum __aligned__ = 16;
+else version (RISCV32) private enum __aligned__ = 16;
+else version (RISCV64) private enum __aligned__ = 16;
+else version (S390) private enum __aligned__ = 8;
+else version (SPARC) private enum __aligned__ = 8;
+else version (SPARC64) private enum __aligned__ = 16;
+else version (SystemZ) private enum __aligned__ = 8;
+else version (X86) private enum __aligned__ = 16;
+else version (X86_64) private enum __aligned__ = 16;
+else static assert( false, "Platform not supported.");
+
+align(__aligned__) struct _Unwind_Exception
{
_Unwind_Exception_Class exception_class;
_Unwind_Exception_Cleanup_Fn exception_cleanup;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-04-26 15:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-26 15:14 [gcc r10-10582] libphobos: Give _Unwind_Exception an alignment that best resembles __attribute__((aligned)) Iain Buclaw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).