33#include " ReplayTimeline.h"
44#include " ScopedFd.h"
55#include " rr_pcp.capnp.h"
6+ #include " util.h"
67#include < algorithm>
78#include < capnp/blob.h>
89#include < capnp/message.h>
@@ -22,9 +23,10 @@ MarkData::MarkData(const ReplayTimeline::Mark& m)
2223 extra_regs(m.extra_regs()),
2324 return_addresses(m.get_internal()->proto.return_addresses),
2425 singlestep_to_next_mark_no_signal(
25- m.get_internal()->singlestep_to_next_mark_no_signal) {}
26+ m.get_internal()->singlestep_to_next_mark_no_signal),
27+ arch(m.get_internal()->extra_regs.arch()) {}
2628
27- MarkData::MarkData (rr::pcp::MarkData::Reader reader, SupportedArch arch,
29+ MarkData::MarkData (rr::pcp::MarkData::Reader reader,
2830 const CPUIDRecords& cpuid_recs)
2931 : time(reader.getTime()),
3032 ticks(reader.getTicks()),
@@ -34,7 +36,8 @@ MarkData::MarkData(rr::pcp::MarkData::Reader reader, SupportedArch arch,
3436 extra_regs(),
3537 return_addresses(),
3638 singlestep_to_next_mark_no_signal(
37- reader.getSinglestepToNextMarkNoSignal()) {
39+ reader.getSinglestepToNextMarkNoSignal()),
40+ arch(from_trace_arch(reader.getArch())) {
3841 regs.set_arch (arch);
3942 regs.set_from_trace (arch, reader.getRegs ().getRaw ().begin (),
4043 reader.getRegs ().getRaw ().size ());
@@ -69,8 +72,7 @@ static std::vector<string> checkpoint_directories(const string& trace_dir) {
6972}
7073
7174std::vector<CheckpointInfo> get_checkpoint_infos (
72- const std::string& trace_dir, SupportedArch arch,
73- const CPUIDRecords& cpuid_recs) {
75+ const std::string& trace_dir, const CPUIDRecords& cpuid_recs) {
7476
7577 std::vector<CheckpointInfo> checkpoints;
7678 for (auto checkpoint_dir : checkpoint_directories (trace_dir)) {
@@ -81,8 +83,8 @@ std::vector<CheckpointInfo> get_checkpoint_infos(
8183 }
8284 capnp::PackedFdMessageReader reader (fd);
8385 auto checkpointsInfoReader = reader.getRoot <pcp::CheckpointInfo>();
84- auto info = CheckpointInfo{ checkpoint_dir, checkpointsInfoReader, arch,
85- cpuid_recs };
86+ auto info =
87+ CheckpointInfo{ checkpoint_dir, checkpointsInfoReader, cpuid_recs };
8688 checkpoints.push_back (info);
8789 }
8890
@@ -138,6 +140,7 @@ bool CheckpointInfo::serialize(ReplaySession& session) {
138140 builder.setTicksAtEventStart (mark_data.ticks_at_event_start );
139141 builder.setSinglestepToNextMarkNoSignal (
140142 mark_data.singlestep_to_next_mark_no_signal );
143+ builder.setArch (to_trace_arch (mark_data.arch ));
141144 };
142145
143146 if (is_explicit ()) {
@@ -220,18 +223,17 @@ CheckpointInfo::CheckpointInfo(const Checkpoint& non_explicit_cp,
220223
221224CheckpointInfo::CheckpointInfo (std::string metadata_file,
222225 rr::pcp::CheckpointInfo::Reader reader,
223- SupportedArch arch,
224226 const CPUIDRecords& cpuid_recs)
225227 : capnp_directory(std::move(metadata_file)),
226228 unique_id(reader.getId()),
227229 where(data_to_str(reader.getWhere())),
228230 next_serial(reader.getNextSerial()),
229231 clone_data(reader.isExplicit() ? reader.getExplicit()
230232 : reader.getNonExplicit().getCloneMark(),
231- arch, cpuid_recs),
233+ cpuid_recs),
232234 non_explicit_mark_data(
233235 reader.isNonExplicit()
234- ? new MarkData{ reader.getNonExplicit ().getCheckpointMark (), arch,
236+ ? new MarkData{ reader.getNonExplicit ().getCheckpointMark (),
235237 cpuid_recs }
236238 : nullptr ),
237239 stats () {
0 commit comments