/**
* @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);
}
}