blob: a6c4a1153b09f7bb6857e43a087d7679532bb453 [file] [log] [blame]
/* Copyright (c) 2015 Google Inc
* Davide Libenzi <dlibenzi@google.com>
* See LICENSE for details.
*
* Converts kprof profiler files into Linux perf ones. The Linux Perf file
* format has bee illustrated here:
*
* https://lwn.net/Articles/644919/
* https://openlab-mu-internal.web.cern.ch/openlab-mu-internal/03_Documents/
* 3_Technical_Documents/Technical_Reports/2011/Urs_Fassler_report.pdf
*
*/
#pragma once
#include <sys/types.h>
#include <stdio.h>
#include <stdint.h>
#include "xlib.h"
#include "perf_format.h"
struct mem_file_reloc {
struct mem_file_reloc *next;
uint64_t *ptr;
};
struct mem_block {
struct mem_block *next;
char *base;
char *top;
char *wptr;
};
struct mem_file {
size_t size;
struct mem_block *head;
struct mem_block *tail;
struct mem_file_reloc *relocs;
};
struct static_mmap64 {
struct static_mmap64 *next;
uint64_t addr;
uint64_t size;
uint64_t offset;
uint32_t pid;
uint32_t tid;
uint16_t header_misc;
char *path;
};
struct perf_headers {
struct mem_block *headers[HEADER_FEAT_BITS];
};
struct perf_event_id {
uint64_t event;
uint64_t id;
};
struct perfconv_context {
struct perf_context *pctx;
int debug_level;
struct static_mmap64 *static_mmaps;
struct perf_header ph;
struct perf_headers hdrs;
struct mem_file fhdrs, attr_ids, attrs, data, event_types;
};
extern char *cmd_line_save;
struct perfconv_context *perfconv_create_context(struct perf_context *pctx);
void perfconv_free_context(struct perfconv_context *cctx);
void perfconv_set_dbglevel(int level, struct perfconv_context *cctx);
void perfconv_add_kernel_mmap(struct perfconv_context *cctx);
void perfconv_add_kernel_buildid(struct perfconv_context *cctx);
void perfconv_process_input(struct perfconv_context *cctx, FILE *input,
FILE *output);