summaryrefslogtreecommitdiffstats
path: root/tester/covoar/GcovData.h
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2014-05-09 21:50:37 +1000
committerChris Johns <chrisj@rtems.org>2014-06-18 16:48:08 +1200
commit100f517ab37265acdf067e36b6860020ec8b2184 (patch)
tree2316c8b888e11dcbcfbfc66a0c1e31991ea20656 /tester/covoar/GcovData.h
parent4.11: Add ntp patch. (diff)
downloadrtems-tools-100f517ab37265acdf067e36b6860020ec8b2184.tar.bz2
covoar: Merger the covoar source from rtems-testing.git.
Use waf to build covoar.
Diffstat (limited to 'tester/covoar/GcovData.h')
-rw-r--r--tester/covoar/GcovData.h199
1 files changed, 199 insertions, 0 deletions
diff --git a/tester/covoar/GcovData.h b/tester/covoar/GcovData.h
new file mode 100644
index 0000000..83b8772
--- /dev/null
+++ b/tester/covoar/GcovData.h
@@ -0,0 +1,199 @@
+/*! @file GcovData.h
+ * @brief GcovData Specification
+ *
+ * This file contains the specification of the GcovGcnoWriter class.
+ */
+
+#ifndef __GCOV_DATA_H__
+#define __GCOV_DATA_H__
+
+#include <stdint.h>
+#include <list>
+#include <iostream>
+#include "GcovFunctionData.h"
+
+namespace Gcov {
+
+#define GCDA_MAGIC ((uint32_t) 0x67636461 ) /* "gcda" */
+#define GCNO_MAGIC ((uint32_t) 0x67636e6f ) /* "gcno" */
+
+/* we are using gcc 4.6 release format, coded as "406R" */
+#define GCNO_VERSION ((uint32_t) 0x34303652 )
+
+/* GCOV tags */
+#define GCOV_TAG_FUNCTION ((uint32_t)0x01000000)
+#define GCOV_TAG_BLOCKS ((uint32_t)0x01410000)
+#define GCOV_TAG_ARCS ((uint32_t)0x01430000)
+#define GCOV_TAG_LINES ((uint32_t)0x01450000)
+#define GCOV_TAG_COUNTER ((uint32_t)0x01a10000)
+#define GCOV_TAG_OBJECT_SUMMARY ((uint32_t)0xa1000000)
+#define GCOV_TAG_PROGRAM_SUMMARY ((uint32_t)0xa3000000)
+
+
+typedef std::list<Gcov::GcovFunctionData*> functions_t;
+typedef std::list<Gcov::GcovFunctionData*>::iterator functions_iterator_t;
+
+struct gcov_preamble
+{
+ uint32_t magic;
+ uint32_t version;
+ uint32_t timestamp;
+};
+
+struct gcov_frame_header
+{
+ uint32_t tag;
+ uint32_t length;
+};
+
+struct gcov_statistics
+{
+ uint32_t checksum; // checksum
+ uint32_t counters; // number of counters
+ uint32_t runs; // number of runs
+ uint64_t sum; // sum of all couter values
+ uint64_t max; // max value on a single run
+ uint64_t sumMax; // sum of individual runs max values
+};
+
+ /*! @class GcovData
+ *
+ * This is the specification of the GcovData class.
+ */
+ class GcovData {
+
+ public:
+
+ /*!
+ * This method constructs a GcnoReader instance.
+ */
+ GcovData();
+
+ /*!
+ * This method destructs a GcnoReader instance.
+ */
+ virtual ~GcovData();
+
+ /*!
+ * This method reads the *.gcno file
+ *
+ * @param[in] fileName name of the file to read
+ *
+ * @return Returns TRUE if the method succeeded and FALSE if it failed.
+ */
+ bool readGcnoFile( const char* const fileName );
+
+ /*!
+ * This method writes the *.gcda file. It also produces and stores
+ * gcda and txt file names for future outputs.
+ *
+ * @return Returns TRUE if the method succeeded and FALSE if it failed.
+ */
+ bool writeGcdaFile ();
+
+ /*!
+ * This method writes all contained information to stdout file
+ *
+ * @return Returns TRUE if the method succeeded and FALSE if it failed.
+ */
+ bool writeReportFile();
+
+ /*!
+ * This method runs gcov to generate report. This method should
+ * be used only when gcno and gcda files are already generated.
+ */
+ void writeGcovFile( );
+
+ /*!
+ * This method calculates values of counters for all functions
+ */
+ bool processCounters( void );
+
+ private:
+
+ uint32_t numberOfFunctions;
+ gcov_preamble gcnoPreamble;
+ char gcnoFileName[FILE_NAME_LENGTH];
+ char gcdaFileName[FILE_NAME_LENGTH];
+ char textFileName[FILE_NAME_LENGTH];
+ char cFileName[FILE_NAME_LENGTH];
+ functions_t functions;
+
+
+ /*!
+ * This method reads a frame from *.gcno file
+ *
+ * @param[in] file points to a file to read
+ *
+ * @return true if read was succesfull, false otherwise
+ */
+ bool readFrame(
+ FILE* gcovFile
+ );
+
+ /*!
+ * This method reads a string from gcov file
+ *
+ * @param[in] buffer stores the string
+ * @param[in] file specifies the name of the file to read
+ *
+ * @return Returns length of words read (word = 32bit) or -1 if error ocurred
+ */
+ int readString(
+ char* buffer,
+ FILE* gcovFile
+ );
+
+ /*!
+ * This method reads a frame header from gcov file
+ *
+ * @param[in] header stores the header
+ * @param[in] file specifies the name of the file to read
+ *
+ * @return Returns length of words read (word = 32bit)
+ * or -1 if error ocurred
+ */
+ int readFrameHeader(
+ gcov_frame_header* header,
+ FILE* gcovFile
+ );
+
+ /*!
+ * This method reads a frame header from gcov file
+ *
+ * @param[in] preamble stores the preamble
+ * @param[in] gcovFile specifies the name of the file to read
+ * @param[in] desiredMagic stores the expected magic of a file
+ *
+ * @return Returns length of words read (word = 32bit)
+ * or -1 if error ocurred
+ */
+ int readFilePreamble(
+ gcov_preamble* preamble,
+ FILE* gcovFile,
+ const uint32_t desiredMagic
+ );
+
+ /*!
+ * This method reads a function frame from gcov file
+ *
+ * @param[in] header passes frame header
+ * @param[in] gcovFile specifies the name of the file to read
+ * @param[in] function stores the expected magic of a file
+ *
+ * @return Returns true if operation was succesfull
+ */
+ bool readFunctionFrame(
+ gcov_frame_header header,
+ FILE* gcovFile,
+ GcovFunctionData* function
+ );
+
+ /*!
+ * This method prints info about previously read *.gcno file
+ * to a specified report file
+ */
+ void printGcnoFileInfo( FILE * textFile );
+ };
+}
+#endif