blob: 5d5527098cc472bdf39c4f2b9d7073e9321c58e8 [file] [log] [blame]
Mike Dodd8cfa7022010-11-17 11:12:26 -08001/**
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
21struct opd_24_sfile;
22
23/**
24 * A binary (library, application, kernel or module)
25 * is represented by a struct opd_image.
26 */
27struct 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() */
52typedef 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 */
60void opd_for_each_image(opd_image_cb imagecb);
61
62/**
63 * initialize opd_image container
64 */
65void 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 */
73void 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 */
87struct 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 */
103struct 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 */
109int opd_get_nr_images(void);
110
111#endif /* OPD_IMAGE_H */