summaryrefslogblamecommitdiffstats
path: root/tester/covoar/GcovFunctionData.h
blob: 812b45c5603b29d723af257286112c2f66dd1b4b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16















                                                                     

                                   
 


                                   


                    



                               



                      





                                                               

  



                                                                  











                                                              
                           











                                                          
                                     







                                               
                                          







                                                                         
                                        


       
                                                                  






                                                                            
                                         









                                                                            
                                          










                                                                            

                                                  





























                                                                  





                              







                                                              


                              








                                              

                                        









                                                                       
                                    









                                                             


                                                


















                                                                        

                         







                                                                 

                             








                                                     








                                                           





                                                               
                                                   








                                                                  

                                    




      
/*! @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