summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorYuchen Wu <yuchenericwu@hotmail.com>2013-11-05 01:11:58 +0000
committerYuchen Wu <yuchenericwu@hotmail.com>2013-11-05 01:11:58 +0000
commite85959cb2cb6f82959b3cf1a9ef59c6d793a2556 (patch)
treee8aacd6a728630b9dda10307428452f0cd49419b /include
parent23c8d2bf861ac0984da0b214fa08090abcba1869 (diff)
downloadllvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.tar.gz
llvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.tar.bz2
llvm-e85959cb2cb6f82959b3cf1a9ef59c6d793a2556.tar.xz
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.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/include/llvm/Support/GCOV.h b/include/llvm/Support/GCOV.h
index d8836e0670..ccc7c6e012 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;
};