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