From 27e2f2014aa659dac5fb999a96ba57faa32aaa61 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Fri, 14 Dec 2018 05:56:20 +0000 Subject: [PATCH] [llvm-xray] Store offset pointers in temporaries DataExtractor::getU64 modifies the OffsetPtr which also pass to RelocateOrElse which breaks on Windows. This addresses the issue introduced in r349120. Differential Revision: https://reviews.llvm.org/D55689 llvm-svn: 349129 --- llvm/lib/XRay/InstrumentationMap.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/XRay/InstrumentationMap.cpp b/llvm/lib/XRay/InstrumentationMap.cpp index d33fb4a..e90446c 100644 --- a/llvm/lib/XRay/InstrumentationMap.cpp +++ b/llvm/lib/XRay/InstrumentationMap.cpp @@ -137,8 +137,10 @@ loadObj(StringRef Filename, object::OwningBinary &ObjFile, Sleds.push_back({}); auto &Entry = Sleds.back(); uint32_t OffsetPtr = 0; - Entry.Address = RelocateOrElse(OffsetPtr, Extractor.getU64(&OffsetPtr)); - Entry.Function = RelocateOrElse(OffsetPtr, Extractor.getU64(&OffsetPtr)); + uint32_t AddrPtr = OffsetPtr; + Entry.Address = RelocateOrElse(AddrOff, Extractor.getU64(&OffsetPtr)); + uint32_t FuncPtr = OffsetPtr; + Entry.Function = RelocateOrElse(FuncOff, Extractor.getU64(&OffsetPtr)); auto Kind = Extractor.getU8(&OffsetPtr); static constexpr SledEntry::FunctionKinds Kinds[] = { SledEntry::FunctionKinds::ENTRY, SledEntry::FunctionKinds::EXIT, -- 2.7.4