-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTraceRecorder.cpp
More file actions
48 lines (38 loc) · 1.06 KB
/
TraceRecorder.cpp
File metadata and controls
48 lines (38 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <fstream>
#include "TraceRecorder.h"
using namespace std;
TraceRecorder::TraceRecorder(const string& filename) : current_instruction_count(0), trace_file(filename, ios::binary)
{
if (trace_file.fail())
throw ios_base::failure("Could not open trace file " + filename);
}
void TraceRecorder::log_instruction(void)
{
if (!addresses.empty())
{
write(trace_file, current_instruction_count);
write(trace_file, (uint64_t) addresses.size());
for (auto address : addresses)
write(trace_file, address);
addresses.clear();
current_instruction_count = 0;
}
++current_instruction_count;
}
void TraceRecorder::log_memaccess(uint64_t address)
{
addresses.push_back(address);
}
TraceRecorder::~TraceRecorder(void)
{
if (trace_file.is_open())
close();
}
void TraceRecorder::close(void)
{
write(trace_file, current_instruction_count);
write(trace_file, (uint64_t) addresses.size());
for (auto address : addresses)
write(trace_file, address);
trace_file.close();
}