diff options
author | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-11-05 01:11:58 +0000 |
---|---|---|
committer | Yuchen Wu <yuchenericwu@hotmail.com> | 2013-11-05 01:11:58 +0000 |
commit | e85959cb2cb6f82959b3cf1a9ef59c6d793a2556 (patch) | |
tree | e8aacd6a728630b9dda10307428452f0cd49419b /include | |
parent | 23c8d2bf861ac0984da0b214fa08090abcba1869 (diff) | |
download | external_llvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.zip external_llvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.tar.gz external_llvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.tar.bz2 |
Support for reading run counts in llvm-cov.
This patch enables llvm-cov to correctly output the run count stored in
the GCDA file. GCOVProfiling currently does not generate this
information, so the GCDA run data had to be hacked on from a GCDA file
generated by gcc. This is corrected by a subsequent patch.
With the run and program data included, both llvm-cov and gcov produced
the same output.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194033 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/GCOV.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/include/llvm/Support/GCOV.h b/include/llvm/Support/GCOV.h index d8836e0..ccc7c6e 100644 --- a/include/llvm/Support/GCOV.h +++ b/include/llvm/Support/GCOV.h @@ -126,6 +126,19 @@ public: return true; } + /// readObjectTag - If cursor points to an object summary tag then increment + /// the cursor and return true otherwise return false. + bool readObjectTag() { + StringRef Tag = Buffer->getBuffer().slice(Cursor, Cursor+4); + if (Tag.empty() || + Tag[0] != '\0' || Tag[1] != '\0' || + Tag[2] != '\0' || Tag[3] != '\xa1') { + return false; + } + Cursor += 4; + return true; + } + /// readProgramTag - If cursor points to a program summary tag then increment /// the cursor and return true otherwise return false. bool readProgramTag() { @@ -163,6 +176,7 @@ public: } uint64_t getCursor() const { return Cursor; } + void advanceCursor(uint32_t n) { Cursor += n*4; } private: MemoryBuffer *Buffer; uint64_t Cursor; @@ -172,13 +186,14 @@ private: /// (.gcno and .gcda). class GCOVFile { public: - GCOVFile() : Functions(), ProgramCount(0) {} + GCOVFile() : Functions(), RunCount(0), ProgramCount(0) {} ~GCOVFile(); bool read(GCOVBuffer &Buffer); void dump(); void collectLineCounts(FileInfo &FI); private: SmallVector<GCOVFunction *, 16> Functions; + uint32_t RunCount; uint32_t ProgramCount; }; @@ -234,10 +249,12 @@ public: void addLineCount(StringRef Filename, uint32_t Line, uint64_t Count) { LineInfo[Filename][Line-1] += Count; } - void setProgramCount(uint32_t PC) { ProgramCount = PC; } + void setRunCount(uint32_t Runs) { RunCount = Runs; } + void setProgramCount(uint32_t Programs) { ProgramCount = Programs; } void print(raw_fd_ostream &OS, StringRef gcnoFile, StringRef gcdaFile); private: StringMap<LineCounts> LineInfo; + uint32_t RunCount; uint32_t ProgramCount; }; |