[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