base: Convert the annotation methods to take actual arguments.

Feed the arguments in from the decoder.

Change-Id: Ie2dcd09320a5de02bb91b8743fc643c446e506e7
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24114
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
This commit is contained in:
Gabe Black
2019-12-28 01:02:55 -08:00
parent fe1d103e0e
commit cdaf682a57
2 changed files with 74 additions and 91 deletions

View File

@@ -155,12 +155,11 @@ CPA::getFrame(ThreadContext *tc)
}
void
CPA::swSmBegin(ThreadContext *tc)
CPA::swSmBegin(ThreadContext *tc, Addr sm_string, int32_t sm_id, int32_t flags)
{
if (!enabled())
return;
Arguments args(tc);
std::string st;
Addr junk;
char sm[50];
@@ -168,7 +167,7 @@ CPA::swSmBegin(ThreadContext *tc)
debugSymbolTable->findNearestSymbol(
tc->readIntReg(ReturnAddressReg), st, junk);
tc->getVirtProxy().readString(sm, args[0], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
System *sys = tc->getSystemPtr();
StringWrap name(sys->name());
@@ -176,9 +175,9 @@ CPA::swSmBegin(ThreadContext *tc)
warn("Got null SM at tick %d\n", curTick());
int sysi = getSys(sys);
int smi = getSm(sysi, sm, args[1]);
int smi = getSm(sysi, sm, sm_id);
DPRINTF(Annotate, "Starting machine: %s(%d) sysi: %d id: %#x\n", sm,
smi, sysi, args[1]);
smi, sysi, sm_id);
DPRINTF(Annotate, "smMap[%d] = %d, %s, %#x\n", smi,
smMap[smi-1].first, smMap[smi-1].second.first,
smMap[smi-1].second.second);
@@ -187,12 +186,11 @@ CPA::swSmBegin(ThreadContext *tc)
StackId sid = StackId(sysi, frame);
// check if we need to link to the previous state machine
int flags = args[2];
if (flags & FL_LINK) {
if (smStack[sid].size()) {
int prev_smi = smStack[sid].back();
DPRINTF(Annotate, "Linking from %d to state machine %s(%d) [%#x]\n",
prev_smi, sm, smi, args[1]);
prev_smi, sm, smi, sm_id);
if (lnMap[smi])
DPRINTF(Annotate, "LnMap already contains entry for %d of %d\n",
@@ -203,7 +201,7 @@ CPA::swSmBegin(ThreadContext *tc)
add(OP_LINK, FL_NONE, tc->contextId(), prev_smi, smi);
} else {
DPRINTF(Annotate, "Not Linking to state machine %s(%d) [%#x]\n",
sm, smi, args[1]);
sm, smi, sm_id);
}
}
@@ -247,14 +245,13 @@ CPA::swSmBegin(ThreadContext *tc)
}
void
CPA::swSmEnd(ThreadContext *tc)
CPA::swSmEnd(ThreadContext *tc, Addr sm_string)
{
if (!enabled())
return;
Arguments args(tc);
char sm[50];
tc->getVirtProxy().readString(sm, args[0], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
System *sys = tc->getSystemPtr();
doSwSmEnd(sys, tc->contextId(), sm, getFrame(tc));
}
@@ -315,21 +312,20 @@ CPA::doSwSmEnd(System *sys, int cpuid, string sm, uint64_t frame)
void
CPA::swExplictBegin(ThreadContext *tc)
CPA::swExplictBegin(ThreadContext *tc, int32_t flags, Addr st_string)
{
if (!enabled())
return;
Arguments args(tc);
char st[50];
tc->getVirtProxy().readString(st, args[1], 50);
tc->getVirtProxy().readString(st, st_string, 50);
StringWrap name(tc->getSystemPtr()->name());
DPRINTF(Annotate, "Explict begin of state %s\n", st);
uint32_t flags = args[0];
if (flags & FL_BAD)
warn("BAD state encountered: at cycle %d: %s\n", curTick(), st);
swBegin(tc->getSystemPtr(), tc->contextId(), st, getFrame(tc), true, args[0]);
swBegin(tc->getSystemPtr(), tc->contextId(),
st, getFrame(tc), true, flags);
}
void
@@ -418,16 +414,13 @@ CPA::swEnd(ThreadContext *tc)
}
void
CPA::swQ(ThreadContext *tc)
CPA::swQ(ThreadContext *tc, Addr id, Addr q_string, int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
int32_t count = args[2];
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int sysi = getSys(sys);
@@ -449,16 +442,13 @@ CPA::swQ(ThreadContext *tc)
}
void
CPA::swDq(ThreadContext *tc)
CPA::swDq(ThreadContext *tc, Addr id, Addr q_string, int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
int32_t count = args[2];
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int sysi = getSys(sys);
@@ -478,17 +468,14 @@ CPA::swDq(ThreadContext *tc)
}
void
CPA::swPq(ThreadContext *tc)
CPA::swPq(ThreadContext *tc, Addr id, Addr q_string, int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int32_t count = args[2];
int sysi = getSys(sys);
StackId sid = StackId(sysi, getFrame(tc));
@@ -513,17 +500,14 @@ CPA::swPq(ThreadContext *tc)
}
void
CPA::swRq(ThreadContext *tc)
CPA::swRq(ThreadContext *tc, Addr id, Addr q_string, int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int32_t count = args[2];
int sysi = getSys(sys);
StackId sid = StackId(sysi, getFrame(tc));
@@ -544,17 +528,15 @@ CPA::swRq(ThreadContext *tc)
void
CPA::swWf(ThreadContext *tc)
CPA::swWf(ThreadContext *tc, Addr id, Addr q_string, Addr sm_string,
int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int32_t count = args[3];
int sysi = getSys(sys);
StackId sid = StackId(sysi, getFrame(tc));
@@ -564,25 +546,23 @@ CPA::swWf(ThreadContext *tc)
int qi = getQ(sysi, q, id);
add(OP_WAIT_FULL, FL_NONE, tc->contextId(), smi, qi, count);
if (!!args[2]) {
if (!!sm_string) {
char sm[50];
tc->getVirtProxy().readString(sm, args[2], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
doSwSmEnd(tc->getSystemPtr(), tc->contextId(), sm, getFrame(tc));
}
}
void
CPA::swWe(ThreadContext *tc)
CPA::swWe(ThreadContext *tc, Addr id, Addr q_string, Addr sm_string,
int32_t count)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
int32_t count = args[3];
int sysi = getSys(sys);
StackId sid = StackId(sysi, getFrame(tc));
@@ -592,27 +572,24 @@ CPA::swWe(ThreadContext *tc)
int qi = getQ(sysi, q, id);
add(OP_WAIT_EMPTY, FL_NONE, tc->contextId(), smi, qi, count);
if (!!args[2]) {
if (!!sm_string) {
char sm[50];
tc->getVirtProxy().readString(sm, args[2], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
doSwSmEnd(tc->getSystemPtr(), tc->contextId(), sm, getFrame(tc));
}
}
void
CPA::swSq(ThreadContext *tc)
CPA::swSq(ThreadContext *tc, Addr id, Addr q_string, int32_t size,
int32_t flags)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
StringWrap name(sys->name());
int32_t size = args[2];
int flags = args[3];
int sysi = getSys(sys);
StackId sid = StackId(sysi, getFrame(tc));
@@ -668,18 +645,15 @@ CPA::swSq(ThreadContext *tc)
}
void
CPA::swAq(ThreadContext *tc)
CPA::swAq(ThreadContext *tc, Addr id, Addr q_string, int32_t size)
{
if (!enabled())
return;
char q[50];
Arguments args(tc);
uint64_t id = args[0];
tc->getVirtProxy().readString(q, args[1], 50);
tc->getVirtProxy().readString(q, q_string, 50);
System *sys = tc->getSystemPtr();
StringWrap name(sys->name());
int32_t size = args[2];
int sysi = getSys(sys);
int qi = getQ(sysi, q, id);
@@ -705,14 +679,13 @@ CPA::swAq(ThreadContext *tc)
}
void
CPA::swLink(ThreadContext *tc)
CPA::swLink(ThreadContext *tc, Addr lsm_string, Addr lsm_id, Addr sm_string)
{
if (!enabled())
return;
char lsm[50];
Arguments args(tc);
tc->getVirtProxy().readString(lsm, args[0], 50);
tc->getVirtProxy().readString(lsm, lsm_string, 50);
System *sys = tc->getSystemPtr();
StringWrap name(sys->name());
@@ -721,10 +694,10 @@ CPA::swLink(ThreadContext *tc)
if (!smStack[sid].size())
return;
int smi = smStack[sid].back();
int lsmi = getSm(sysi, lsm, args[1]);
int lsmi = getSm(sysi, lsm, lsm_id);
DPRINTF(Annotate, "Linking from %d to state machine %s(%d) [%#x]\n",
smi, lsm, lsmi, args[1]);
smi, lsm, lsmi, lsm_id);
if (lnMap[lsmi])
DPRINTF(Annotate, "LnMap already contains entry for %d of %d\n",
@@ -734,29 +707,28 @@ CPA::swLink(ThreadContext *tc)
add(OP_LINK, FL_NONE, tc->contextId(), smi, lsmi);
if (!!args[2]) {
if (!!sm_string) {
char sm[50];
tc->getVirtProxy().readString(sm, args[2], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
doSwSmEnd(tc->getSystemPtr(), tc->contextId(), sm, getFrame(tc));
}
}
void
CPA::swIdentify(ThreadContext *tc)
CPA::swIdentify(ThreadContext *tc, Addr smi_string)
{
if (!enabled())
return;
Arguments args(tc);
int sysi = getSys(tc->getSystemPtr());
StackId sid = StackId(sysi, getFrame(tc));
if (!smStack[sid].size())
return;
int smi = smStack[sid].back();
DPRINTFS(Annotate, tc->getSystemPtr(), "swIdentify: id %#X\n", args[0]);
DPRINTFS(Annotate, tc->getSystemPtr(), "swIdentify: id %#X\n", smi_string);
add(OP_IDENT, FL_NONE, tc->contextId(), smi, 0, args[0]);
add(OP_IDENT, FL_NONE, tc->contextId(), smi, 0, smi_string);
}
uint64_t
@@ -780,14 +752,13 @@ CPA::swGetId(ThreadContext *tc)
void
CPA::swSyscallLink(ThreadContext *tc)
CPA::swSyscallLink(ThreadContext *tc, Addr lsm_string, Addr sm_string)
{
if (!enabled())
return;
char lsm[50];
Arguments args(tc);
tc->getVirtProxy().readString(lsm, args[0], 50);
tc->getVirtProxy().readString(lsm, lsm_string, 50);
System *sys = tc->getSystemPtr();
StringWrap name(sys->name());
int sysi = getSys(sys);
@@ -811,9 +782,9 @@ CPA::swSyscallLink(ThreadContext *tc)
scLinks[sysi-1][id] = add(OP_LINK, FL_NONE, tc->contextId(), smi, 0xFFFF);
scLinks[sysi-1][id]->dump = false;
if (!!args[1]) {
if (!!sm_string) {
char sm[50];
tc->getVirtProxy().readString(sm, args[1], 50);
tc->getVirtProxy().readString(sm, sm_string, 50);
doSwSmEnd(tc->getSystemPtr(), tc->contextId(), sm, getFrame(tc));
}
}

View File

@@ -82,23 +82,35 @@ class CPA
static CPA *cpa() { return NULL; }
static bool available() { return false; }
bool enabled() { return false; }
void swSmBegin(ThreadContext *tc) { return; }
void swSmEnd(ThreadContext *tc) { return; }
void swExplictBegin(ThreadContext *tc) { return; }
void swSmBegin(ThreadContext *tc, Addr sm_string,
int32_t sm_id, int32_t flags) { return; }
void swSmEnd(ThreadContext *tc, Addr sm_string) { return; }
void swExplictBegin(ThreadContext *tc, int32_t flags,
Addr st_string) { return; }
void swAutoBegin(ThreadContext *tc, Addr next_pc) { return; }
void swEnd(ThreadContext *tc) { return; }
void swQ(ThreadContext *tc) { return; }
void swDq(ThreadContext *tc) { return; }
void swPq(ThreadContext *tc) { return; }
void swRq(ThreadContext *tc) { return; }
void swWf(ThreadContext *tc) { return; }
void swWe(ThreadContext *tc) { return; }
void swSq(ThreadContext *tc) { return; }
void swAq(ThreadContext *tc) { return; }
void swLink(ThreadContext *tc) { return; }
void swIdentify(ThreadContext *tc) { return; }
void swQ(ThreadContext *tc, Addr id, Addr q_string,
int32_t count) { return; }
void swDq(ThreadContext *tc, Addr id, Addr q_string,
int32_t count) { return; }
void swPq(ThreadContext *tc, Addr id, Addr q_string,
int32_t count) { return; }
void swRq(ThreadContext *tc, Addr id, Addr q_string,
int32_t count) { return; }
void swWf(ThreadContext *tc, Addr id, Addr q_string,
Addr sm_string, int32_t count) { return; }
void swWe(ThreadContext *tc, Addr id, Addr q_string,
Addr sm_string, int32_t count) { return; }
void swSq(ThreadContext *tc, Addr id, Addr q_string,
int32_t size, int32_t flags) { return; }
void swAq(ThreadContext *tc, Addr id, Addr q_string,
int32_t size) { return; }
void swLink(ThreadContext *tc, Addr lsm_string,
Addr lsm_id, Addr sm_string) { return; }
void swIdentify(ThreadContext *tc, Addr smi_string) { return; }
uint64_t swGetId(ThreadContext *tc) { return 0; }
void swSyscallLink(ThreadContext *tc) { return; }
void swSyscallLink(ThreadContext *tc, Addr lsm_string,
Addr sm_string) { return; }
void hwBegin(flags f, System *sys, uint64_t frame, std::string sm,
std::string st) { return; }
void hwQ(flags f, System *sys, uint64_t frame, std::string sm,