155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <stdio.h> 255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <unistd.h> 355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <stdlib.h> 455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <inttypes.h> 555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include <assert.h> 655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include "trace_reader.h" 755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include "parse_options.h" 855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projecttypedef TraceReader<> TraceReaderType; 1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project#include "parse_options-inl.h" 1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectvoid Usage(const char *program) 1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project{ 1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project fprintf(stderr, "Usage: %s [options] trace_file elf_file\n", program); 1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project OptionsUsage(); 1755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectint main(int argc, char **argv) { 2055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // Parse the options 2155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project ParseOptions(argc, argv); 2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (argc - optind != 2) { 2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project Usage(argv[0]); 2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project exit(1); 2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project char *trace_filename = argv[optind++]; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project char *elf_file = argv[optind++]; 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project TraceReader<> *trace = new TraceReader<>; 3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trace->Open(trace_filename); 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trace->ReadKernelSymbols(elf_file); 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project trace->SetRoot(root); 3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project printf("# time bb pid num_insns bb_addr\n"); 3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project while (1) { 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project symbol_type *sym; 3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project BBEvent event; 3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project BBEvent ignored; 3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (GetNextValidEvent(trace, &event, &ignored, &sym)) 4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project break; 4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project printf("%7lld %4lld %5d %3d 0x%08x %s\n", 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project event.time, event.bb_num, event.pid, event.num_insns, 4455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project event.bb_addr, sym->name); 4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return 0; 4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 48