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

Reply via email to