On 5/31/23 18:30, Wu, Fei wrote:
On 6/1/2023 7:59 AM, Richard Henderson wrote:
On 5/30/23 01:35, Fei Wu wrote:
+ /*
+ * We want to fetch the stats structure before we start code
+ * generation so we can count interesting things about this
+ * generation.
+ */
+ if (tb_stats_collection_enabled()) {
+ tb->tb_stats = tb_get_stats(phys_pc, pc, cs_base, flags);
If cflags & CF_PCREL, then 'pc' should not be cached or matched.
Using 'phys_pc' will suffice, so pass 0 in that case.
OK, tb_get_stats(phys_pc, (cflags & CF_PCREL ? 0 : pc), cs_base, flags);
btw, is it possible to drop 'pc' even w/o CF_PCREL setting in cflags?
Two TBs with different 'pc' but same 'phys_pc', are they the same?
For the purpose of statistics, yes, plausibly.
Knowing how many different translations of the same bit of libc.so, for a guest that does
not support CF_PCREL, could be revealing. In any case, you can get back to the virtual
addresses via tb_stats->tbs[i]->pc, so long as tb_stats->tb[i].cflags & CF_PCREL is not set.
r~