/** * @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 */