asar coverage - build #


src/asar/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
27 of 27, 0 excluded
100.0%
Functions:
3 of 3, 0 excluded
100.0%
Branches:
27 of 51, 0 excluded
52.9%

addr2line.cpp
Line Branch Exec Source
1 #include "addr2line.h"
2 #include "asar.h"
3 #include "crc32.h"
4 #include "libstr.h"
5 #include <cstdint>
6
7 //////////////////////////////////////////////////////////////////////////
8 // Class to store address-to-line mappings for richer symbolic information
9 //
10 // During assembly, included files and information about generated asm
11 // should be added to this, and then read back during symbol file
12 // generation
13
14 592 void AddressToLineMapping::reset()
15 {
16 592 m_fileList.reset();
17 592 m_filenameCrcs.reset();
18 592 m_addrToLineInfo.reset();
19 592 }
20
21 // Adds information of what source file and line number an output rom address is at
22 74936 void AddressToLineMapping::includeMapping(const char* filename, int line, int addr)
23 {
24 37468 AddrToLineInfo newInfo;
25
2/4
✓ Branch 2 → 3 taken 37468 times.
✗ Branch 2 → 5 not taken.
✓ Branch 3 → 4 taken 37468 times.
✗ Branch 3 → 7 not taken.
74936 newInfo.fileIdx = getFileIndex(filename);
26 74936 newInfo.line = line;
27 74936 newInfo.addr = addr;
28
29
2/4
✓ Branch 3 → 4 taken 37468 times.
✗ Branch 3 → 5 not taken.
✓ Branch 4 → 5 taken 37468 times.
✗ Branch 4 → 7 not taken.
74936 m_addrToLineInfo.append(newInfo);
30 74936 }
31
32 // Helper to add file to list, and get the index of that file
33 74936 int AddressToLineMapping::getFileIndex(const char* filename)
34 {
35 // check if the file exists first
36
2/4
✓ Branch 2 → 3 taken 37468 times.
✗ Branch 2 → 26 not taken.
✓ Branch 3 → 4 taken 37468 times.
✗ Branch 3 → 34 not taken.
74936 uint32_t filenameCrc = crc32((const uint8_t*)filename, (unsigned int)strlen(filename));
37
4/4
✓ Branch 8 → 4 taken 37418 times.
✓ Branch 8 → 9 taken 89 times.
✓ Branch 9 → 5 taken 37418 times.
✓ Branch 9 → 10 taken 89 times.
75014 for (int i = 0; i < m_filenameCrcs.count; ++i)
38 {
39
5/7
✓ Branch 4 → 5 taken 37418 times.
✗ Branch 4 → 26 not taken.
✓ Branch 5 → 6 taken 74797 times.
✓ Branch 5 → 7 taken 39 times.
✗ Branch 5 → 34 not taken.
✓ Branch 6 → 7 taken 37379 times.
✓ Branch 6 → 8 taken 39 times.
74836 if (m_filenameCrcs[i] == filenameCrc)
40 {
41 74758 return i;
42 }
43 }
44
45 // file doesn't exist, so start tracking it
46 178 char* data = nullptr;
47 178 int len = 0;
48 178 uint32_t fileCrc = 0;
49
4/8
✓ Branch 9 → 10 taken 89 times.
✗ Branch 9 → 26 not taken.
✓ Branch 10 → 11 taken 89 times.
✗ Branch 10 → 13 not taken.
✓ Branch 12 → 13 taken 89 times.
✗ Branch 12 → 34 not taken.
✓ Branch 13 → 14 taken 89 times.
✗ Branch 13 → 16 not taken.
178 if (readfile(filename, "", &data, &len))
50 {
51
2/4
✓ Branch 11 → 12 taken 89 times.
✗ Branch 11 → 26 not taken.
✓ Branch 14 → 15 taken 89 times.
✗ Branch 14 → 34 not taken.
178 fileCrc = crc32((const uint8_t*)data, (unsigned int)len);
52 }
53 178 free(data);
54
55 267 m_fileList.append({ string(filename), fileCrc });
56
2/4
✓ Branch 16 → 17 taken 89 times.
✗ Branch 16 → 26 not taken.
✓ Branch 21 → 22 taken 89 times.
✗ Branch 21 → 34 not taken.
178 m_filenameCrcs.append(filenameCrc);
57
58 178 return m_fileList.count - 1;
59
4/12
✓ Branch 13 → 14 taken 89 times.
✗ Branch 13 → 25 not taken.
✓ Branch 14 → 15 taken 89 times.
✗ Branch 14 → 20 not taken.
✓ Branch 17 → 18 taken 89 times.
✗ Branch 17 → 32 not taken.
✓ Branch 18 → 19 taken 89 times.
✗ Branch 18 → 27 not taken.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 24 not taken.
✗ Branch 29 → 30 not taken.
✗ Branch 29 → 31 not taken.
178 }
60
61