18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file abi_test.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Import sample files from other ABI 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Graydon Hoare 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "abi.h" 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "odb.h" 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "popt_options.h" 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_sample_file.h" 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_cpu_type.h" 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config.h" 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fstream> 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream> 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <cstdlib> 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <cstring> 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnamespace { 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string db_filename; 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string abi_filename; 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpopt::option options_array[] = { 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popt::option(db_filename, "db", 'd', "output db to file", "filename"), 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popt::option(abi_filename, "abi", 'a', "output abi to file", "filename") 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main(int argc, char const ** argv) 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd vector<string> rest; 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd popt::parse_options(argc, argv, rest); 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (abi_filename.empty() && db_filename.empty()) { 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "error: no file specified to work on" << endl; 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(1); 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!abi_filename.empty()) { 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd ofstream file(abi_filename.c_str()); 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!file) { 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "error: cannot open " << abi_filename 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << " for writing" << endl; 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(1); 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd file << abi(); 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!db_filename.empty()) { 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd odb_t dest; 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int rc = odb_open(&dest, db_filename.c_str(), ODB_RDWR, 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd sizeof(struct opd_header)); 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (rc) { 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "odb_open() fail:\n" 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << strerror(rc) << endl; 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(EXIT_FAILURE); 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct opd_header * header; 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header = static_cast<struct opd_header *>(odb_get_data(&dest)); 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd memset(header, '\0', sizeof(struct opd_header)); 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->version = OPD_VERSION; 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd memcpy(header->magic, OPD_MAGIC, sizeof(header->magic)); 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->is_kernel = 1; 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /* ICACHE_FETCHES */ 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->ctr_event = 0x80; 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->ctr_um = 0x0; 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->cpu_type = CPU_ATHLON; 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->ctr_count = 0xdeadbeef; 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->cpu_speed = 0; 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->mtime = 1034790063; 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->cg_to_is_kernel = 1; 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->anon_start = 0; 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd header->cg_to_anon_start = 0; 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for (int i = 0; i < 3793; ++i) { 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int rc = odb_add_node(&dest, i, i); 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (rc != EXIT_SUCCESS) { 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << strerror(rc) << endl; 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(EXIT_FAILURE); 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd odb_close(&dest); 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 97