Unfortunately, decreasing the TLB size to one was a red haring
(sic?). With only one entry, if an instruction or an access spans pages
(which takes amazingly long to happen), the TLB thrashes back and forth
in that one entry and never gets anywhere. Now what I'm trying to do to
get a better handle on the flow of the program is to implement a tracer,
like the one you get with the Exec traceflag, but that prints out the
parameters and return value of system calls. I have a simple version of
this hacked in already, but there are probably four things that prevent
it from working as well as it could. Three of those are mapping syscall
numbers to names, knowing how many arguments there are, and knowing
which are string pointers so the string can be gathered with functional
accesses. The fourth is identifying when you're entering or exiting a
syscall in the first place. For the first group, I'm just simply
ignoring those issues and printing the raw syscall number and the values
in each of the argument registers. For the last one, I'm doing a
hardcoded check for the mnemonics of fitting instructions as they go by
which you can imagine is hardly efficient or flexible.
At least some of the information I'd like to get at, like syscall
names at least, is already present in m5 but is only compiled in for SE.
Other bits of information like the number and types of arguments would
be harder to get at. I was thinking for system call and system return
instructions the IsSyscall and IsReturn and/or IsCall could be used to
generically identify the instructions of interest. Does anyone have any
thoughts about whether this is worthwhile and how best to get the
information it would need gathered together?
Gabe
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev