• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * @file opd_image.h
3  * Management of binary images
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_IMAGE_H
13 #define OPD_IMAGE_H
14 
15 #include "op_list.h"
16 #include "op_config_24.h"
17 #include "op_types.h"
18 
19 #include <time.h>
20 
21 struct opd_24_sfile;
22 
23 /**
24  * A binary (library, application, kernel or module)
25  * is represented by a struct opd_image.
26  */
27 struct opd_image {
28 	/** used by container of opd_images */
29 	struct list_head hash_next;
30 	/** how many time this opd_image is referenced */
31 	int ref_count;
32 	/** all samples files belonging to this image */
33 	struct opd_24_sfile ** sfiles[NR_CPUS];
34 	/** name of this image */
35 	char * name;
36 	/** the application name where belongs this image, NULL if image has
37 	 * no owner (such as vmlinux or module) */
38 	char * app_name;
39 	/** thread id, on 2.2 kernel always == to tgid */
40 	pid_t tid;
41 	/** thread group id  */
42 	pid_t tgid;
43 	/** time of last modification */
44 	time_t mtime;
45 	/** kernel image or not */
46 	int kernel;
47 	/** non zero if this image must be profiled */
48 	int ignored;
49 };
50 
51 /** callback function passed to opd_for_each_image() */
52 typedef void (*opd_image_cb)(struct opd_image *);
53 
54 /**
55  * @param imagecb callback to apply onto each existing image struct
56  *
57  * the callback receive a struct opd_image * (not a const struct) and is
58  * allowed to freeze the image struct itself.
59  */
60 void opd_for_each_image(opd_image_cb imagecb);
61 
62 /**
63  * initialize opd_image container
64  */
65 void opd_init_images(void);
66 
67 /**
68  * @param image  the image pointer
69  *
70  * Decrement reference count of image, if reference count is zero flush and
71  * close the samples files then freeze all memory belonging to this image.
72  */
73 void opd_delete_image(struct opd_image * image);
74 
75 /**
76  * opd_get_kernel_image - get a kernel image
77  * @param name of image
78  * @param app_name application owner of this kernel image. non-null only
79  *  when separate_kernel_sample != 0
80  * @param tid  thread id
81  * @param tgid  thread group id
82  *
83  * Create and initialise an image adding it to the image lists and to image
84  * hash list. Note than at creation reference count is zero, it's caller
85  * responsabilities to incr this count.
86  */
87 struct opd_image * opd_get_kernel_image(char const * name,
88      char const * app_name, pid_t tid, pid_t tgid);
89 
90 /**
91  * opd_get_image - get an image from the image structure
92  * @param name  name of image
93  * @param app_name  the application name where belongs this image
94  * @param kernel  is the image a kernel/module image
95  * @param tid  thread id
96  * @param tgid  thread group id
97  *
98  * Get the image specified by the file name name from the
99  * image structure. If it is not present, the image is
100  * added to the structure. In either case, the image number
101  * is returned.
102  */
103 struct opd_image * opd_get_image(char const * name, char const * app_name,
104                                  int kernel, pid_t tid, pid_t tgid);
105 
106 /**
107  * opd_get_nr_images - return number of images
108  */
109 int opd_get_nr_images(void);
110 
111 #endif /* OPD_IMAGE_H */
112