diff options
author | Dean Michael Berris <dberris@google.com> | 2018-08-31 19:32:46 +0000 |
---|---|---|
committer | Dean Michael Berris <dberris@google.com> | 2018-08-31 19:32:46 +0000 |
commit | 4cae04873bcdb5eb629e4e71b36a0a87fe79083c (patch) | |
tree | 2ca697e1d698660765cdbf6a1b526d58a21a4b67 | |
parent | cc8f593d29abe99c2b049097c3c056809bfb0ddd (diff) | |
download | bcm5719-llvm-4cae04873bcdb5eb629e4e71b36a0a87fe79083c.tar.gz bcm5719-llvm-4cae04873bcdb5eb629e4e71b36a0a87fe79083c.zip |
[XRay] Use correct type for PID records
Previously we've been reading and writing the wrong types which only
worked in little endian implementations. This time we're writing the
same typed values the runtime is using, and reading them appropriately
as well.
llvm-svn: 341241
-rw-r--r-- | llvm/include/llvm/XRay/FDRRecords.h | 6 | ||||
-rw-r--r-- | llvm/lib/XRay/Trace.cpp | 2 | ||||
-rw-r--r-- | llvm/unittests/XRay/FDRTraceWriterTest.cpp | 27 |
3 files changed, 17 insertions, 18 deletions
diff --git a/llvm/include/llvm/XRay/FDRRecords.h b/llvm/include/llvm/XRay/FDRRecords.h index aaa098560c9..ab98a030129 100644 --- a/llvm/include/llvm/XRay/FDRRecords.h +++ b/llvm/include/llvm/XRay/FDRRecords.h @@ -185,16 +185,16 @@ public: }; class PIDRecord : public MetadataRecord { - uint64_t PID = 0; + int32_t PID = 0; friend class RecordInitializer; public: PIDRecord() = default; - explicit PIDRecord(uint64_t P) : MetadataRecord(), PID(P) {} + explicit PIDRecord(int32_t P) : MetadataRecord(), PID(P) {} MetadataType metadataType() const override { return MetadataType::PIDEntry; } - uint64_t pid() const { return PID; } + int32_t pid() const { return PID; } Error apply(RecordVisitor &V) override; }; diff --git a/llvm/lib/XRay/Trace.cpp b/llvm/lib/XRay/Trace.cpp index f92385ab4c1..45b266d73f9 100644 --- a/llvm/lib/XRay/Trace.cpp +++ b/llvm/lib/XRay/Trace.cpp @@ -396,7 +396,7 @@ Error processFDRPidRecord(FDRState &State, DataExtractor &RecordExtractor, fdrStateToTwine(State.Expects), std::make_error_code(std::errc::executable_format_error)); auto PreReadOffset = OffsetPtr; - State.ProcessId = RecordExtractor.getU32(&OffsetPtr); + State.ProcessId = RecordExtractor.getSigned(&OffsetPtr, 4); if (OffsetPtr == PreReadOffset) return createStringError( std::make_error_code(std::errc::executable_format_error), diff --git a/llvm/unittests/XRay/FDRTraceWriterTest.cpp b/llvm/unittests/XRay/FDRTraceWriterTest.cpp index 215a2d21d11..e9a35fe67b6 100644 --- a/llvm/unittests/XRay/FDRTraceWriterTest.cpp +++ b/llvm/unittests/XRay/FDRTraceWriterTest.cpp @@ -63,15 +63,15 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion3) { auto &Trace = TraceOrErr.get(); ASSERT_THAT(Trace, Not(IsEmpty())); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), Field(&XRayRecord::FuncId, Eq(1)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), Field(&XRayRecord::TId, Eq(1u)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::PId, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::PId, Eq(1u)), Field(&XRayRecord::PId, Eq(1u)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), Field(&XRayRecord::CPU, Eq(1u)))); - ASSERT_THAT(Trace, + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::Type, Eq(RecordTypes::ENTER)), Field(&XRayRecord::Type, Eq(RecordTypes::EXIT)))); } @@ -108,13 +108,13 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion2) { auto &Trace = TraceOrErr.get(); ASSERT_THAT(Trace, Not(IsEmpty())); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), Field(&XRayRecord::FuncId, Eq(1)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), Field(&XRayRecord::TId, Eq(1u)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), Field(&XRayRecord::CPU, Eq(1u)))); - ASSERT_THAT(Trace, + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::Type, Eq(RecordTypes::ENTER)), Field(&XRayRecord::Type, Eq(RecordTypes::EXIT)))); } @@ -167,14 +167,13 @@ TEST(FDRTraceWriterTest, WriteToStringBufferVersion1) { auto &Trace = TraceOrErr.get(); ASSERT_THAT(Trace, Not(IsEmpty())); - ASSERT_THAT(Trace, Not(IsEmpty())); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::FuncId, Eq(1)), Field(&XRayRecord::FuncId, Eq(1)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::TId, Eq(1u)), Field(&XRayRecord::TId, Eq(1u)))); - ASSERT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::CPU, Eq(1u)), Field(&XRayRecord::CPU, Eq(1u)))); - ASSERT_THAT(Trace, + EXPECT_THAT(Trace, ElementsAre(Field(&XRayRecord::Type, Eq(RecordTypes::ENTER)), Field(&XRayRecord::Type, Eq(RecordTypes::EXIT)))); } |