[compiler-rt] 33acdc1 - [compiler-rt][xray] Fix alignment of XRayFileHeader

Leandro Lupori via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 17 06:52:04 PDT 2023


Author: Leandro Lupori
Date: 2023-07-17T10:51:27-03:00
New Revision: 33acdc1e2fbf9775f73d12a0964f1866ae828052

URL: https://github.com/llvm/llvm-project/commit/33acdc1e2fbf9775f73d12a0964f1866ae828052
DIFF: https://github.com/llvm/llvm-project/commit/33acdc1e2fbf9775f73d12a0964f1866ae828052.diff

LOG: [compiler-rt][xray] Fix alignment of XRayFileHeader

XRayFileHeader storage was obtained from std::aligned_storage
using its default alignment and not the struct's alignment
requirement. This was causing a bus error on AArch32, on armv8
machines, where vld1.64/vst1.64 instructions with 128-bit
alignment requirement were being used to copy XRayFileHeader.

There is still another issue with fdr-single-thread.cpp test on
armv7. Now it runs until completion and produces a valid log file,
but for some reason the function name appears as _end in it,
instead of the expected mangled fn name.

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D155013

Added: 
    

Modified: 
    compiler-rt/lib/xray/xray_fdr_logging.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/xray/xray_fdr_logging.cpp b/compiler-rt/lib/xray/xray_fdr_logging.cpp
index 6056f8134553b1..378a8c0f4a70a0 100644
--- a/compiler-rt/lib/xray/xray_fdr_logging.cpp
+++ b/compiler-rt/lib/xray/xray_fdr_logging.cpp
@@ -15,6 +15,7 @@
 //===----------------------------------------------------------------------===//
 #include "xray_fdr_logging.h"
 #include <cassert>
+#include <cstddef>
 #include <errno.h>
 #include <limits>
 #include <memory>
@@ -140,7 +141,7 @@ static ThreadLocalData &getThreadLocalData() {
 }
 
 static XRayFileHeader &fdrCommonHeaderInfo() {
-  static std::aligned_storage<sizeof(XRayFileHeader)>::type HStorage;
+  alignas(XRayFileHeader) static std::byte HStorage[sizeof(XRayFileHeader)];
   static pthread_once_t OnceInit = PTHREAD_ONCE_INIT;
   static bool TSCSupported = true;
   static uint64_t CycleFrequency = NanosecondsPerSecond;
@@ -204,7 +205,8 @@ XRayBuffer fdrIterator(const XRayBuffer B) {
   // initialized the first time this function is called. We'll update one part
   // of this information with some relevant data (in particular the number of
   // buffers to expect).
-  static std::aligned_storage<sizeof(XRayFileHeader)>::type HeaderStorage;
+  alignas(
+      XRayFileHeader) static std::byte HeaderStorage[sizeof(XRayFileHeader)];
   static pthread_once_t HeaderOnce = PTHREAD_ONCE_INIT;
   pthread_once(
       &HeaderOnce, +[] {


        


More information about the llvm-commits mailing list