| /** |
| * @file opagent.h |
| * Interface to report symbol names and dynamically generated code to Oprofile |
| * |
| * @remark Copyright 2007 OProfile authors |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| * @author Jens Wilke |
| * @Modifications Daniel Hansel |
| * |
| * Copyright IBM Corporation 2007 |
| * |
| */ |
| |
| #ifndef _LIB_OPAGENT_H |
| #define _LIB_OPAGENT_H |
| |
| #include <sys/types.h> |
| |
| #if defined(__cplusplus) |
| extern "C" { |
| #endif |
| |
| struct debug_line_info { |
| unsigned long vma; |
| unsigned int lineno; |
| /* The filename format is unspecified, absolute path, relative etc. */ |
| char const * filename; |
| }; |
| |
| typedef void * op_agent_t; |
| |
| /** |
| * This function must be called by agents before any other function. |
| * Creates and opens a JIT dump file in /var/lib/oprofile/jitdump |
| * using the naming convention <process_id>.dump. |
| * |
| * Returns a valid op_agent_t handle or NULL. If NULL is returned, errno |
| * is set to indicate the nature of the error. |
| **/ |
| op_agent_t op_open_agent(void); |
| |
| /** |
| * Frees all resources and closes open file handles. |
| * |
| * hdl: Handle returned from an earlier call to op_open_agent() |
| * |
| * Returns 0 on success; -1 otherwise. If -1 is returned, errno is |
| * set to indicate the nature of the error. |
| **/ |
| int op_close_agent(op_agent_t hdl); |
| |
| /** |
| * Signal the dynamic generation of native code from a virtual machine. |
| * Writes a JIT dump record to the open JIT dump file using |
| * the passed information. |
| * |
| * hdl: Handle returned from an earlier call to op_open_agent() |
| * symbol_name: The name of the symbol being dynamically compiled. |
| * This name can (and should) contain all necessary |
| * information to disambiguate it from symbols of the |
| * same name; e.g., class, method signature. |
| * vma: The virtual memory address of the executable code. |
| * code: Pointer to the location of the compiled code. |
| * Theoretically, this may be a different location from |
| * that given by the vma argument. For some JIT compilers, |
| * obtaining the code may be impractical. For this (or any other) |
| * reason, the agent can choose to pass NULL for this paraemter. |
| * If NULL is passed, no code will be copied into the JIT dump |
| * file. |
| * code_size: Size of the compiled code. |
| * |
| * Returns 0 on success; -1 otherwise. If -1 is returned, errno is |
| * set to indicate the nature of the error. |
| **/ |
| int op_write_native_code(op_agent_t hdl, char const * symbol_name, |
| uint64_t vma, void const * code, |
| const unsigned int code_size); |
| |
| /** |
| * Add debug line information to a piece of code. An op_write_native_code() |
| * with the same code pointer should have occurred before this call. It's not |
| * necessary to provide one lineno information entry per machine instruction; |
| * the array can contain hole. |
| * |
| * hdl: Handle returned from an earlier call to op_open_agent() |
| * code: Pointer to the location of the code with debug info |
| * nr_entry: Number of entries in compile_map |
| * compile_map: Array of struct debug_line_info. See the JVMTI agent |
| * library implementation for an example of what information |
| * should be retrieved from a VM to fill out this data structure. |
| * |
| * Returns 0 on success; -1 otherwise. If -1 is returned, errno is |
| * set to indicate the nature of the error. |
| **/ |
| int op_write_debug_line_info(op_agent_t hdl, void const * code, |
| size_t nr_entry, |
| struct debug_line_info const * compile_map); |
| |
| /** |
| * Signal the invalidation of native code from a virtual machine. |
| * |
| * hdl: Handle returned from an earlier call to op_open_agent() |
| * vma: The virtual memory address of the compiled code being unloaded. |
| * An op_write_native_code() with the same vma should have |
| * occurred before this call. |
| * |
| * Returns 0 on success; -1 otherwise. If -1 is returned, errno is |
| * set to indicate the nature of the error. |
| **/ |
| int op_unload_native_code(op_agent_t hdl, uint64_t vma); |
| |
| /** |
| * Returns the major version number of the libopagent library that will be used. |
| **/ |
| int op_major_version(void); |
| |
| /** |
| * Returns the minor version number of the libopagent library that will be used. |
| **/ |
| int op_minor_version(void); |
| |
| /* idea how to post additional information for a piece of code. |
| we use the code address as reference |
| int op_write_loader_name(const void* code_addr, char const * loader_name); |
| */ |
| |
| #if defined(__cplusplus) |
| } |
| #endif |
| |
| #endif |