source: rtems-tools/tester/covoar/CoverageWriterRTEMS.cc @ 100f517

4.104.115
Last change on this file since 100f517 was 100f517, checked in by Chris Johns <chrisj@…>, on 05/09/14 at 11:50:37

covoar: Merger the covoar source from rtems-testing.git.

Use waf to build covoar.

  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*! @file CoverageWriterRTEMS.cc
2 *  @brief CoverageWriterRTEMS Implementation
3 *
4 *  This file contains the implementation of the functions supporting
5 *  the unified overage file format.
6 */
7
8#include <stdio.h>
9#include <stdlib.h>
10#include <string.h>
11
12#include "CoverageWriterRTEMS.h"
13#include "rtemscov_header.h"
14
15namespace Coverage {
16 
17  CoverageWriterRTEMS::CoverageWriterRTEMS()
18  {
19  }
20
21  CoverageWriterRTEMS::~CoverageWriterRTEMS()
22  {
23  }
24
25  void CoverageWriterRTEMS::writeFile(
26    const char* const file,
27    CoverageMapBase*  coverage,
28    uint32_t          lowAddress,
29    uint32_t          highAddress
30  )
31  {
32    FILE*                       coverageFile;
33    uint32_t                    a;
34    int                         status;
35    uint8_t                     cover;
36    rtems_coverage_map_header_t header;
37
38    /*
39     *  read the file and update the coverage map passed in
40     */
41    coverageFile = fopen( file, "w" );
42    if ( !coverageFile ) {
43      fprintf(
44        stderr,
45        "ERROR: CoverageWriterRTEMS::writeFile - unable to open %s\n",
46        file
47      );
48      exit(-1);
49    }
50
51    /* clear out the header and fill it in */
52    memset( &header, 0, sizeof(header) );
53    header.ver           = 0x1;
54    header.header_length = sizeof(header);
55    header.start         = lowAddress;
56    header.end           = highAddress;
57    strcpy( header.desc, "RTEMS Coverage Data" );
58
59    status = fwrite(&header, 1, sizeof(header), coverageFile);
60    if (status != sizeof(header)) {
61      fprintf(
62        stderr,
63        "ERROR: CoverageWriterRTEMS::writeFile - unable to write header "
64        "to %s\n",
65        file
66      );
67      exit(-1);
68    }
69
70    for ( a=lowAddress ; a < highAddress ; a++ ) {
71      cover  = ((coverage->wasExecuted( a ))     ? 0x01 : 0);
72      status = fwrite(&cover, 1, sizeof(cover), coverageFile);
73      if (status != sizeof(cover)) {
74        fprintf(
75          stderr,
76          "ERROR: CoverageWriterRTEMS::writeFile - write to %s "
77          "at address 0x%08x failed\n",
78          file,
79          a
80        );
81        exit( -1 );
82      }
83      // fprintf( stderr, "0x%x %d\n", a, cover );
84    }
85
86    fclose( coverageFile );
87  }
88}
Note: See TracBrowser for help on using the repository browser.