Home | History | Annotate | Download | only in qtools
      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <stdlib.h>
      4 #include <inttypes.h>
      5 #include <assert.h>
      6 #include "trace_reader.h"
      7 #include "armdis.h"
      8 #include "parse_options.h"
      9 
     10 typedef TraceReader<> TraceReaderType;
     11 
     12 #include "parse_options-inl.h"
     13 
     14 static const uint32_t kOffsetThreshold = 0x100000;
     15 
     16 void Usage(const char *program)
     17 {
     18     fprintf(stderr, "Usage: %s [options] trace_file elf_file\n", program);
     19     OptionsUsage();
     20 }
     21 
     22 int main(int argc, char **argv) {
     23     // Parse the options
     24     ParseOptions(argc, argv);
     25     if (argc - optind != 2) {
     26         Usage(argv[0]);
     27         exit(1);
     28     }
     29 
     30     char *trace_filename = argv[optind++];
     31     char *elf_file = argv[optind++];
     32     TraceReader<> *trace = new TraceReader<>;
     33     trace->Open(trace_filename);
     34     trace->ReadKernelSymbols(elf_file);
     35     trace->SetRoot(root);
     36 
     37     while (1) {
     38         symbol_type *sym;
     39         BBEvent event;
     40         BBEvent ignored;
     41 
     42         if (GetNextValidEvent(trace, &event, &ignored, &sym))
     43             break;
     44         if (event.bb_num == 0)
     45             break;
     46         //printf("t%llu bb %lld %d\n", event.time, event.bb_num, event.num_insns);
     47         uint64_t insn_time = trace->ReadInsnTime(event.time);
     48         if (insn_time != event.time) {
     49             printf("time: %llu insn time: %llu bb: %llu addr: 0x%x num_insns: %d, pid: %d\n",
     50                    event.time, insn_time, event.bb_num, event.bb_addr,
     51                    event.num_insns, event.pid);
     52             exit(1);
     53         }
     54         for (int ii = 1; ii < event.num_insns; ++ii) {
     55             trace->ReadInsnTime(event.time);
     56         }
     57     }
     58 
     59     delete trace;
     60     return 0;
     61 }
     62