mirror of
https://git.rtems.org/rtems-tools/
synced 2025-06-13 02:57:33 +08:00
275 lines
6.6 KiB
C++
275 lines
6.6 KiB
C++
/*! @file GcovFunctionData.h
|
|
* @brief GcovFunctionData Specification
|
|
*
|
|
* This file contains the specification of the GcovGcnoWriter class.
|
|
*/
|
|
|
|
#ifndef __GCOV_FUNCTION_DATA_H__
|
|
#define __GCOV_FUNCTION_DATA_H__
|
|
|
|
#include <stdint.h>
|
|
#include <list>
|
|
#include "CoverageMapBase.h"
|
|
#include "DesiredSymbols.h"
|
|
|
|
namespace Gcov {
|
|
|
|
#define FUNCTION_NAME_LENGTH 64
|
|
#define FILE_NAME_LENGTH 256
|
|
|
|
#define ON_TREE_ARC_FLAG 0x1
|
|
#define FAKE_ARC_FLAG 0x2
|
|
#define FALLTHROUGH_ARC_FLAG 0x4
|
|
|
|
struct gcov_arc_info
|
|
{
|
|
uint32_t sourceBlock;
|
|
uint32_t destinationBlock;
|
|
uint32_t flags;
|
|
uint64_t counter;
|
|
};
|
|
|
|
struct gcov_block_info
|
|
{
|
|
uint32_t id;
|
|
uint32_t flags;
|
|
uint32_t numberOfLines;
|
|
uint64_t counter;
|
|
char sourceFileName[FILE_NAME_LENGTH];
|
|
std::list<uint32_t> lines;
|
|
};
|
|
|
|
typedef std::list<gcov_arc_info> arcs_t;
|
|
typedef std::list<gcov_arc_info>::iterator arcs_iterator_t;
|
|
typedef std::list<gcov_block_info> blocks_t;
|
|
typedef std::list<gcov_block_info>::iterator blocks_iterator_t;
|
|
|
|
/*! @class GcovFunctionData
|
|
*
|
|
* This is the specification of the GcovFunctionData class.
|
|
*/
|
|
class GcovFunctionData {
|
|
|
|
public:
|
|
|
|
/*!
|
|
* This method constructs a GcovFunctionData instance.
|
|
*/
|
|
GcovFunctionData();
|
|
|
|
/*!
|
|
* This method destructs a GcovFunctionData instance.
|
|
*/
|
|
virtual ~GcovFunctionData();
|
|
|
|
/*!
|
|
* This method stores checksum related to function
|
|
*
|
|
* @param[in] chk stores the checksum value
|
|
*/
|
|
void setChecksum(
|
|
const uint32_t chk
|
|
);
|
|
|
|
/*!
|
|
* This method stores id of function
|
|
*
|
|
* @param[in] idNumber stores the id value
|
|
*/
|
|
void setId(
|
|
const uint32_t idNumber
|
|
);
|
|
|
|
/*!
|
|
* This method stores checksum related to function
|
|
*
|
|
* @param[in] lineNo passes number of the line begining the function
|
|
*/
|
|
void setFirstLineNumber(
|
|
const uint32_t lineNo
|
|
);
|
|
|
|
/*!
|
|
* This method stores name of the function and ties it to its
|
|
* unified coverage map.
|
|
*
|
|
* @param[in] functionName passes name of the the function
|
|
*
|
|
* @return Returns TRUE if the method succeeded and FALSE if it failed.
|
|
*/
|
|
bool setFunctionName(
|
|
const char* fcnName
|
|
);
|
|
|
|
/*!
|
|
* This method stores name of the source file where function is located
|
|
*
|
|
* @param[in] fileName passes name of the the file
|
|
*
|
|
* @return Returns TRUE if the method succeeded and FALSE if it failed.
|
|
*/
|
|
bool setFileName(
|
|
const char* fileName
|
|
);
|
|
|
|
/*!
|
|
* This method stores name of the source file where block is located
|
|
*
|
|
* @param[in] block identifies block
|
|
* @param[in] fileName passes name of the the file
|
|
*
|
|
* @return Returns TRUE if the method succeeded and FALSE if it failed.
|
|
*/
|
|
void setBlockFileName(
|
|
const blocks_iterator_t block,
|
|
const char* fileName
|
|
);
|
|
|
|
/*!
|
|
* This method returns arcs list
|
|
*/
|
|
arcs_t getArcs() const;
|
|
|
|
/*!
|
|
* This method returns blocks list
|
|
*/
|
|
blocks_t getBlocks() const;
|
|
|
|
/*!
|
|
* This method returns checksum
|
|
*/
|
|
uint32_t getChecksum() const;
|
|
|
|
/*!
|
|
* This method returns id
|
|
*/
|
|
uint32_t getId() const;
|
|
|
|
/*!
|
|
* This method returns counters
|
|
*
|
|
* @param[out] counterValues array of counter values
|
|
* @param[out] countersFound used to return counters number
|
|
* @param[out] countersSum used to return sum counters values
|
|
* @param[out] countersMax used to return max counter value
|
|
*/
|
|
void getCounters( uint64_t* counterValues, uint32_t &countersFound, uint64_t &countersSum, uint64_t &countersMax );
|
|
|
|
/*!
|
|
* This method adds new arc to arc list
|
|
*
|
|
* @param[in] source passes source block number
|
|
* @param[in] destination passes destination block number
|
|
*/
|
|
void addArc(
|
|
uint32_t source,
|
|
uint32_t destination,
|
|
uint32_t flags
|
|
);
|
|
|
|
/*!
|
|
* This method adds new arc to arc list
|
|
*
|
|
* @param[in] block identifies block
|
|
* @param[in] line passes the line number
|
|
*/
|
|
void addBlockLine(
|
|
const blocks_iterator_t block,
|
|
const uint32_t line
|
|
);
|
|
|
|
/*!
|
|
* This method finds block by its ID
|
|
*
|
|
* @param[in] id passes block id number
|
|
*
|
|
* @return Returns iterator to a matching block or NULL for error.
|
|
*/
|
|
blocks_iterator_t findBlockById(
|
|
const uint32_t id
|
|
);
|
|
|
|
/*!
|
|
* This method adds new block to block list
|
|
*
|
|
* @param[in] id passes block id number
|
|
* @param[in] flags passes per block flags
|
|
* @param[in] sourceFileName passes containing file name
|
|
*/
|
|
void addBlock(
|
|
const uint32_t id,
|
|
const uint32_t flags,
|
|
const char * sourceFileName
|
|
);
|
|
|
|
/*!
|
|
* This method prints info about function
|
|
*/
|
|
void printFunctionInfo( FILE * textFile, uint32_t function_number );
|
|
|
|
/*!
|
|
* This method prints info about coverage of this function
|
|
*/
|
|
void printCoverageInfo( FILE * textFile, uint32_t function_number );
|
|
|
|
/*!
|
|
* This method prints info about chosen arc in arcs list
|
|
*
|
|
* @param[in] textFile specifies output file
|
|
* @param[in] arc passes iterator identifying arc
|
|
*/
|
|
void printArcInfo(
|
|
FILE * textFile,
|
|
arcs_iterator_t arc
|
|
);
|
|
|
|
/*!
|
|
* This method prints info about chosen block in blocks list
|
|
*
|
|
* @param[in] block passes iterator identifying block
|
|
*/
|
|
void printBlockInfo(
|
|
FILE * textFile,
|
|
blocks_iterator_t block
|
|
);
|
|
|
|
/*!
|
|
* This method calculates values of arc counters
|
|
*/
|
|
bool processFunctionCounters( void );
|
|
|
|
private:
|
|
|
|
uint32_t id;
|
|
uint32_t checksum;
|
|
uint32_t firstLineNumber;
|
|
uint32_t numberOfBlocks;
|
|
uint32_t numberOfArcs;
|
|
arcs_t arcs;
|
|
blocks_t blocks;
|
|
char functionName[FUNCTION_NAME_LENGTH];
|
|
char sourceFileName[FILE_NAME_LENGTH];
|
|
|
|
/*!
|
|
* This member contains the unified or merged coverage map
|
|
* and symbol info for the symbol.
|
|
*/
|
|
Coverage::CoverageMapBase* coverageMap;
|
|
Coverage::SymbolInformation* symbolInfo;
|
|
|
|
/*!
|
|
* This method creates list of taken/not taken values
|
|
* for branches
|
|
*
|
|
* @param[in] taken used to return taken counts list
|
|
* @param[in] notTaken used to return not taken counts list
|
|
*/
|
|
bool processBranches(
|
|
std::list<uint64_t> * taken ,
|
|
std::list<uint64_t> * notTaken
|
|
);
|
|
};
|
|
|
|
}
|
|
#endif
|