diff options
author | Petr Hosek <phosek@chromium.org> | 2018-12-14 05:56:20 +0000 |
---|---|---|
committer | Petr Hosek <phosek@chromium.org> | 2018-12-14 05:56:20 +0000 |
commit | 27e2f2014aa659dac5fb999a96ba57faa32aaa61 (patch) | |
tree | 48acfaf94fb98913c42ca6acc1436a31451e816b /llvm/lib/XRay/InstrumentationMap.cpp | |
parent | f03e8023b70b2256fef55802d5e3832d70c6a080 (diff) | |
download | bcm5719-llvm-27e2f2014aa659dac5fb999a96ba57faa32aaa61.tar.gz bcm5719-llvm-27e2f2014aa659dac5fb999a96ba57faa32aaa61.zip |
[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
Diffstat (limited to 'llvm/lib/XRay/InstrumentationMap.cpp')
-rw-r--r-- | llvm/lib/XRay/InstrumentationMap.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/XRay/InstrumentationMap.cpp b/llvm/lib/XRay/InstrumentationMap.cpp index d33fb4a2b80..e90446cc6b6 100644 --- a/llvm/lib/XRay/InstrumentationMap.cpp +++ b/llvm/lib/XRay/InstrumentationMap.cpp @@ -137,8 +137,10 @@ loadObj(StringRef Filename, object::OwningBinary<object::ObjectFile> &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, |