Commit 7b01cadc authored by Hejing Li's avatar Hejing Li
Browse files

Merge branch 'master' of github.com:simbricks/simbricks

parents 9ca4cd28 8bd1069a
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -26,9 +26,12 @@
#include <string>
class log_parser;
class event {
public:
uint64_t ts;
log_parser *source;
explicit event(uint64_t ts_) : ts(ts_) {
}
......@@ -39,6 +42,40 @@ class event {
virtual void dump(std::ostream &out) = 0;
};
class EHostInstr : public event {
public:
uint64_t pc;
bool fMemR;
bool fMemW;
EHostInstr(uint64_t ts_, uint64_t pc_) : event(ts_), pc(pc_), fMemR(false),
fMemW(false) {
}
virtual ~EHostInstr() {
}
virtual void dump(std::ostream &out) {
out << ts << ": H.INSTR pc=" << std::hex << pc << std::dec << std::endl;
}
};
class EHostHalt : public event {
public:
uint64_t pc;
EHostHalt(uint64_t ts_, uint64_t pc_) : event(ts_), pc(pc_) {
}
virtual ~EHostHalt() {
}
virtual void dump(std::ostream &out) {
out << ts << ": H.HALT pc=" << std::hex << pc << std::dec << std::endl;
}
};
class EHostCall : public event {
public:
const std::string &fun;
......
......@@ -49,11 +49,34 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name,
return;
uint64_t addr;
if (!p.consume_hex(addr) || p.consume_char('.'))
if (!p.consume_hex(addr))
return;
if (const std::string *s = syms.lookup(addr)) {
cur_event = new EHostCall(ts, *s);
if (!p.consume_char('.')) {
// instructions don't have a .X
/*if (prevInstr)
yield(prevInstr)*/
yield(std::make_shared<EHostInstr>(ts, addr));
if (const std::string *s = syms.lookup(addr)) {
yield(std::make_shared<EHostCall>(ts, *s));
}
} else {
// micro-op
if (!p.skip_until_after(" : ") || !p.skip_until_after(" : "))
return;
if (p.consume_str("halt")) {
yield(std::make_shared<EHostHalt>(ts, addr));
}
/*if (p.consume_str("MemRead")) {
if (prevInstr)
prevInstr->fMemR = true;
} else if (p.consume_str("MemWrite")) {
if (prevInstr)
prevInstr->fMemW = true;
}*/
}
} else if (comp_name_len == 18 &&
!memcmp(comp_name, "system.pc.ethernet", 18)) {
......@@ -70,40 +93,40 @@ void gem5_parser::process_msg(uint64_t ts, char *comp_name,
uint64_t size = 0;
if (p.consume_str("received ")) {
if (p.consume_str("MSI-X intr vec ") && p.consume_dec(id)) {
cur_event = new EHostMsiX(ts, id);
yield(std::make_shared<EHostMsiX>(ts, id));
} else if (p.consume_str("DMA read id ") && p.consume_dec(id) &&
p.consume_str(" addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size)) {
// cosim: received DMA read id 94113551511792 addr 23697ad60
// size 20
cur_event = new EHostDmaR(ts, id, addr, size);
yield(std::make_shared<EHostDmaR>(ts, id, addr, size));
} else if (p.consume_str("DMA write id ") && p.consume_dec(id) &&
p.consume_str(" addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size)) {
// cosim: received DMA write id 94113551528032 addr 236972000
// size 4
cur_event = new EHostDmaW(ts, id, addr, size);
yield(std::make_shared<EHostDmaW>(ts, id, addr, size));
} else if (p.consume_str("read completion id ") && p.consume_dec(id)) {
// cosim: received read completion id 94583743418112
cur_event = new EHostMmioC(ts, id);
yield(std::make_shared<EHostMmioC>(ts, id));
} else if (p.consume_str("write completion id ") && p.consume_dec(id)) {
// cosim: received write completion id 94583743418736
cur_event = new EHostMmioC(ts, id);
yield(std::make_shared<EHostMmioC>(ts, id));
}
} else if (p.consume_str("sending ")) {
if (p.consume_str("read addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size) &&
p.consume_str(" id ") && p.consume_dec(id)) {
// cosim: sending read addr c012a500 size 4 id 94583743418112
cur_event = new EHostMmioR(ts, id, addr, size);
yield(std::make_shared<EHostMmioR>(ts, id, addr, size));
} else if (p.consume_str("write addr ") && p.consume_hex(addr) &&
p.consume_str(" size ") && p.consume_dec(size) &&
p.consume_str(" id ") && p.consume_dec(id)) {
// cosim: sending write addr c0108000 size 4 id 94584005188256
cur_event = new EHostMmioW(ts, id, addr, size);
yield(std::make_shared<EHostMmioW>(ts, id, addr, size));
}
} else if (p.consume_str("completed DMA id ") && p.consume_dec(id)) {
cur_event = new EHostDmaC(ts, id);
yield(std::make_shared<EHostDmaC>(ts, id));
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment