/** * @file abi_test.cpp * Import sample files from other ABI * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author Graydon Hoare */ #include "abi.h" #include "odb.h" #include "popt_options.h" #include "op_sample_file.h" #include "op_cpu_type.h" #include "op_config.h" #include <fstream> #include <iostream> #include <cstdlib> #include <cstring> using namespace std; namespace { string db_filename; string abi_filename; } popt::option options_array[] = { popt::option(db_filename, "db", 'd', "output db to file", "filename"), popt::option(abi_filename, "abi", 'a', "output abi to file", "filename") }; int main(int argc, char const ** argv) { vector<string> rest; popt::parse_options(argc, argv, rest); if (abi_filename.empty() && db_filename.empty()) { cerr << "error: no file specified to work on" << endl; exit(1); } if (!abi_filename.empty()) { ofstream file(abi_filename.c_str()); if (!file) { cerr << "error: cannot open " << abi_filename << " for writing" << endl; exit(1); } file << abi(); } if (!db_filename.empty()) { odb_t dest; int rc = odb_open(&dest, db_filename.c_str(), ODB_RDWR, sizeof(struct opd_header)); if (rc) { cerr << "odb_open() fail:\n" << strerror(rc) << endl; exit(EXIT_FAILURE); } struct opd_header * header; header = static_cast<struct opd_header *>(odb_get_data(&dest)); memset(header, '\0', sizeof(struct opd_header)); header->version = OPD_VERSION; memcpy(header->magic, OPD_MAGIC, sizeof(header->magic)); header->is_kernel = 1; /* ICACHE_FETCHES */ header->ctr_event = 0x80; header->ctr_um = 0x0; header->cpu_type = CPU_ATHLON; header->ctr_count = 0xdeadbeef; header->cpu_speed = 0; header->mtime = 1034790063; header->cg_to_is_kernel = 1; header->anon_start = 0; header->cg_to_anon_start = 0; for (int i = 0; i < 3793; ++i) { int rc = odb_add_node(&dest, i, i); if (rc != EXIT_SUCCESS) { cerr << strerror(rc) << endl; exit(EXIT_FAILURE); } } odb_close(&dest); } }