[Git][ghc/ghc][wip/T22965] rts: Statically assert alignment of Capability
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Mon Feb 13 18:38:05 UTC 2023
Ben Gamari pushed to branch wip/T22965 at Glasgow Haskell Compiler / GHC
Commits:
777aa4f4 by Ben Gamari at 2023-02-13T13:38:00-05:00
rts: Statically assert alignment of Capability
In #22965 we noticed that changes in the size of `Capability` can result
in unsound behavior due to the `align` pragma claiming an alignment
which we don't in practice observe. Avoid this by statically asserting
that the size is a multiple of the alignment.
- - - - -
1 changed file:
- rts/Capability.h
Changes:
=====================================
rts/Capability.h
=====================================
@@ -28,6 +28,14 @@
#include "BeginPrivate.h"
+// We never want a Capability to overlap a cache line with
+// anything else, so round it up to a cache line size:
+#if defined(s390x_HOST_ARCH)
+#define CAPABILITY_ALIGNMENT 256
+#elif !defined(mingw32_HOST_OS)
+#define CAPABILITY_ALIGNMENT 64
+#endif
+
/* N.B. This must be consistent with CapabilityPublic in RtsAPI.h */
struct Capability_ {
// State required by the STG virtual machine when running Haskell
@@ -169,14 +177,11 @@ struct Capability_ {
StgTRecHeader *free_trec_headers;
uint32_t transaction_tokens;
} // typedef Capability is defined in RtsAPI.h
- // We never want a Capability to overlap a cache line with anything
- // else, so round it up to a cache line size:
-#if defined(s390x_HOST_ARCH)
- ATTRIBUTE_ALIGNED(256)
-#elif !defined(mingw32_HOST_OS)
- ATTRIBUTE_ALIGNED(64)
-#endif
- ;
+ ATTRIBUTE_ALIGNED(CAPABILITY_ALIGNMENT);
+
+// We allocate arrays of Capabilities therefore we must ensure that the size is
+// a multiple of the claimed alignment
+GHC_STATIC_ASSERT(sizeof(struct Capability_) % CAPABILITY_ALIGNMENT == 0, "Capability size does not match cache size");
#if defined(THREADED_RTS)
#define ASSERT_TASK_ID(task) ASSERT(task->id == osThreadId())
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/777aa4f4754e8d11287a7e608259598b8838b964
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/777aa4f4754e8d11287a7e608259598b8838b964
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230213/b2796bbb/attachment-0001.html>
More information about the ghc-commits
mailing list