• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /**
2   * @file opd_mapping.h
3   * Management of process mappings
4   *
5   * @remark Copyright 2002 OProfile authors
6   * @remark Read the file COPYING
7   *
8   * @author John Levon
9   * @author Philippe Elie
10   */
11  
12  #ifndef OPD_MAPPING_H
13  #define OPD_MAPPING_H
14  
15  #include "op_list.h"
16  
17  struct opd_image;
18  struct opd_proc;
19  struct op_note;
20  
21  /**
22   * represent a mmap'ed area, we create such area only for vma area with exec
23   * access right
24   */
25  struct opd_map {
26  	/** next mapping for this image */
27  	struct list_head next;
28  	/** owning image */
29  	struct opd_image * image;
30  	/** mapping start vma */
31  	unsigned long start;
32  	/** mapping offset */
33  	unsigned long offset;
34  	/** mapping end vma */
35  	unsigned long end;
36  };
37  
38  /**
39   * opd_init_hash_map - initialise the hashmap
40   */
41  void opd_init_hash_map(void);
42  
43  /**
44   * op_cleanup_hash_name
45   *
46   * release resource owned by hash_name array
47   */
48  void opd_cleanup_hash_name(void);
49  
50  /**
51   * opd_handle_mapping - deal with mapping notification
52   * @param note  mapping notification
53   *
54   * Deal with one notification that a process has mapped
55   * in a new executable file. The mapping information is
56   * added to the process structure.
57   */
58  void opd_handle_mapping(struct op_note const * note);
59  
60  /**
61   * opd_put_mapping - add a mapping to a process
62   * @param proc  process to add map to
63   * @param image  mapped image pointer
64   * @param start  start of mapping
65   * @param offset  file offset of mapping
66   * @param end  end of mapping
67   *
68   * Add the mapping specified to the process proc growing the maps array
69   * if necessary.
70   */
71  void opd_add_mapping(struct opd_proc * proc, struct opd_image * image,
72  		unsigned long start, unsigned long offset, unsigned long end);
73  
74  /**
75   * opd_kill_maps - delete mapping information for a process
76   * @param proc  process to work on
77   *
78   * Frees structures holding mapping information
79   */
80  void opd_kill_maps(struct opd_proc * proc);
81  
82  /**
83   * opd_is_in_map - check whether an EIP is within a mapping
84   * @param map  map to check
85   * @param eip  EIP value
86   *
87   * Return %1 if the EIP value @eip is within the boundaries
88   * of the map @map, %0 otherwise.
89   */
opd_is_in_map(struct opd_map * map,unsigned long eip)90  inline static int opd_is_in_map(struct opd_map * map, unsigned long eip)
91  {
92  	return (eip >= map->start && eip < map->end);
93  }
94  
95  
96  /*
97   * opd_map_offset - return offset of sample against map
98   * @param map  map to use
99   * @param eip  EIP value to use
100   *
101   * Returns the offset of the EIP value @eip into
102   * the map @map, which is the same as the file offset
103   * for the relevant binary image.
104   */
opd_map_offset(struct opd_map * map,unsigned long eip)105  inline static unsigned long opd_map_offset(struct opd_map * map,
106  					   unsigned long eip)
107  {
108  	return (eip - map->start) + map->offset;
109  }
110  
111  #endif /* OPD_MAPPING_H */
112