Exemple #1
0
void printTopBytecodes(const OfflineTransData* tdata,
                       OfflineCode* olCode,
                       const PerfEventsMap<TCA>& samples,
                       PerfEventType etype,
                       ExtOpcode filterBy) {

  always_assert(etype < NUM_EVENT_TYPES);

  AddrToTransFragmentMapper mapper(tdata, filterBy);
  PerfEventsMap<TransFragment> tfragPerfEvents = samples.mapTo(mapper);

  std::vector<std::pair<uint64_t, TransFragment> > ranking;
  PerfEventsMap<TransFragment>::const_iterator it;

  for (it = tfragPerfEvents.begin(); it != tfragPerfEvents.end(); it++) {
    ranking.push_back(std::make_pair(it->second[etype], it->first));
  }

  sort(ranking.rbegin(), ranking.rend());

  for (size_t i = 0; i < ranking.size(); i++) {
    const TransFragment& tfrag = ranking[i].second;
    const TransRec* trec = tdata->getTransRec(tfrag.tid);

    Unit* unit = g_repo->getUnit(trec->md5);
    always_assert(unit);

    printf("\n====================\n");
    printf("{\n");
    printf("  FuncID  = %u\n", trec->src.funcID());
    printf("  TransID = %u\n", tfrag.tid);
    tfragPerfEvents.printEventsHeader(tfrag);
    printf("}\n\n");

    printf("----------\n%s: main\n----------\n", olCode->getArchName());
    olCode->printDisasm(tfrag.aStart,
                         tfrag.aLen,
                         trec->bcMapping,
                         samples,
                         hostOpcodes);

    printf("----------\n%s: cold\n----------\n", olCode->getArchName());
    olCode->printDisasm(tfrag.acoldStart,
                         tfrag.acoldLen,
                         trec->bcMapping,
                         samples,
                         hostOpcodes);

    printf("----------\n%s: frozen\n----------\n", olCode->getArchName());
    olCode->printDisasm(tfrag.afrozenStart,
                         tfrag.afrozenLen,
                         trec->bcMapping,
                         samples,
                         hostOpcodes);
  }
}
Exemple #2
0
void printBytecodeStats(const OfflineTransData* tdata,
                        const PerfEventsMap<TCA>& events,
                        PerfEventType etype) {

    if (!g_repo) error("printBytecodeStats: null repo");
    if (!tdata)  error("printBytecodeStats: null g_transData");

    AddrToBcMapper bcMapper(tdata);
    PerfEventsMap<ExtOpcode> bcPerfEvents = events.mapTo(bcMapper);

    std::map<ExtOpcode,std::string> opcodeToName;
    PerfEventsMap<ExtOpcode>::const_iterator it;

    for (it = bcPerfEvents.begin(); it != bcPerfEvents.end(); it++) {
        opcodeToName[it->first] = extOpcodeToString(it->first);
    }

    bcPerfEvents.printEventsSummary(etype,
                                    "Opcode",
                                    PerfEventsMap<ExtOpcode>::kAllEntries,
                                    verboseStats,
                                    helpersMinPercentage,
                                    opcodeToName);
}