summaryrefslogtreecommitdiffstats
path: root/llvm/lib/XRay
diff options
context:
space:
mode:
authorDean Michael Berris <dberris@google.com>2018-08-31 10:03:52 +0000
committerDean Michael Berris <dberris@google.com>2018-08-31 10:03:52 +0000
commit7a07a41cbb4c48db19c49bda99479cfdec7d3a0d (patch)
tree32d0d503a533856292dff5505de57fbf94c09424 /llvm/lib/XRay
parenta26a364e757162faf29b8db435305c4471d49d86 (diff)
downloadbcm5719-llvm-7a07a41cbb4c48db19c49bda99479cfdec7d3a0d.tar.gz
bcm5719-llvm-7a07a41cbb4c48db19c49bda99479cfdec7d3a0d.zip
[XRay] Attempt to fix failure on Windows
Original version of the code relied on implementation-defined order of bitfields. Follow-up on D51210. llvm-svn: 341194
Diffstat (limited to 'llvm/lib/XRay')
-rw-r--r--llvm/lib/XRay/FDRTraceWriter.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/llvm/lib/XRay/FDRTraceWriter.cpp b/llvm/lib/XRay/FDRTraceWriter.cpp
index 0148c6b7f93..b9b71eb14a8 100644
--- a/llvm/lib/XRay/FDRTraceWriter.cpp
+++ b/llvm/lib/XRay/FDRTraceWriter.cpp
@@ -21,9 +21,8 @@ namespace {
struct alignas(32) FileHeader {
uint16_t Version;
uint16_t Type;
- bool ConstantTSC : 1;
- bool NonstopTSC : 1;
- alignas(8) uint64_t CycleFrequency;
+ uint32_t BitField;
+ uint64_t CycleFrequency;
char FreeForm[16];
};
@@ -65,7 +64,7 @@ template <size_t Index> struct IndexedMemcpy {
};
template <uint8_t Kind, class... Values>
-Error writeMetadata(raw_ostream &OS, Values&&... Ds) {
+Error writeMetadata(raw_ostream &OS, Values &&... Ds) {
MetadataBlob B;
B.Type = 1;
B.RecordKind = Kind;
@@ -85,8 +84,7 @@ FDRTraceWriter::FDRTraceWriter(raw_ostream &O, const XRayFileHeader &H)
FileHeader Raw;
Raw.Version = H.Version;
Raw.Type = H.Type;
- Raw.ConstantTSC = H.ConstantTSC;
- Raw.NonstopTSC = H.NonstopTSC;
+ Raw.BitField = (H.ConstantTSC ? 0x01 : 0x0) | (H.NonstopTSC ? 0x02 : 0x0);
Raw.CycleFrequency = H.CycleFrequency;
memcpy(&Raw.FreeForm, H.FreeFormData, 16);
OS.write(reinterpret_cast<const char *>(&Raw), sizeof(XRayFileHeader));
OpenPOWER on IntegriCloud