| /** |
| * @file opd_mapping.h |
| * Management of process mappings |
| * |
| * @remark Copyright 2002 OProfile authors |
| * @remark Read the file COPYING |
| * |
| * @author John Levon |
| * @author Philippe Elie |
| */ |
| |
| #ifndef OPD_MAPPING_H |
| #define OPD_MAPPING_H |
| |
| #include "op_list.h" |
| |
| struct opd_image; |
| struct opd_proc; |
| struct op_note; |
| |
| /** |
| * represent a mmap'ed area, we create such area only for vma area with exec |
| * access right |
| */ |
| struct opd_map { |
| /** next mapping for this image */ |
| struct list_head next; |
| /** owning image */ |
| struct opd_image * image; |
| /** mapping start vma */ |
| unsigned long start; |
| /** mapping offset */ |
| unsigned long offset; |
| /** mapping end vma */ |
| unsigned long end; |
| }; |
| |
| /** |
| * opd_init_hash_map - initialise the hashmap |
| */ |
| void opd_init_hash_map(void); |
| |
| /** |
| * op_cleanup_hash_name |
| * |
| * release resource owned by hash_name array |
| */ |
| void opd_cleanup_hash_name(void); |
| |
| /** |
| * opd_handle_mapping - deal with mapping notification |
| * @param note mapping notification |
| * |
| * Deal with one notification that a process has mapped |
| * in a new executable file. The mapping information is |
| * added to the process structure. |
| */ |
| void opd_handle_mapping(struct op_note const * note); |
| |
| /** |
| * opd_put_mapping - add a mapping to a process |
| * @param proc process to add map to |
| * @param image mapped image pointer |
| * @param start start of mapping |
| * @param offset file offset of mapping |
| * @param end end of mapping |
| * |
| * Add the mapping specified to the process proc growing the maps array |
| * if necessary. |
| */ |
| void opd_add_mapping(struct opd_proc * proc, struct opd_image * image, |
| unsigned long start, unsigned long offset, unsigned long end); |
| |
| /** |
| * opd_kill_maps - delete mapping information for a process |
| * @param proc process to work on |
| * |
| * Frees structures holding mapping information |
| */ |
| void opd_kill_maps(struct opd_proc * proc); |
| |
| /** |
| * opd_is_in_map - check whether an EIP is within a mapping |
| * @param map map to check |
| * @param eip EIP value |
| * |
| * Return %1 if the EIP value @eip is within the boundaries |
| * of the map @map, %0 otherwise. |
| */ |
| inline static int opd_is_in_map(struct opd_map * map, unsigned long eip) |
| { |
| return (eip >= map->start && eip < map->end); |
| } |
| |
| |
| /* |
| * opd_map_offset - return offset of sample against map |
| * @param map map to use |
| * @param eip EIP value to use |
| * |
| * Returns the offset of the EIP value @eip into |
| * the map @map, which is the same as the file offset |
| * for the relevant binary image. |
| */ |
| inline static unsigned long opd_map_offset(struct opd_map * map, |
| unsigned long eip) |
| { |
| return (eip - map->start) + map->offset; |
| } |
| |
| #endif /* OPD_MAPPING_H */ |