1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef QEMU_MODULE_H
15#define QEMU_MODULE_H
16
17#include "qemu/osdep.h"
18
19#define DSO_STAMP_FUN glue(qemu_stamp, CONFIG_STAMP)
20#define DSO_STAMP_FUN_STR stringify(DSO_STAMP_FUN)
21
22#ifdef BUILD_DSO
23void DSO_STAMP_FUN(void);
24
25
26
27void qemu_module_dummy(void);
28
29#define module_init(function, type) \
30static void __attribute__((constructor)) do_qemu_init_ ## function(void) \
31{ \
32 register_dso_module_init(function, type); \
33}
34#else
35
36#define module_init(function, type) \
37static void __attribute__((constructor)) do_qemu_init_ ## function(void) \
38{ \
39 register_module_init(function, type); \
40}
41#endif
42
43typedef enum {
44 MODULE_INIT_BLOCK,
45 MODULE_INIT_MACHINE,
46 MODULE_INIT_QAPI,
47 MODULE_INIT_QOM,
48 MODULE_INIT_MAX
49} module_init_type;
50
51#define block_init(function) module_init(function, MODULE_INIT_BLOCK)
52#define machine_init(function) module_init(function, MODULE_INIT_MACHINE)
53#define qapi_init(function) module_init(function, MODULE_INIT_QAPI)
54#define type_init(function) module_init(function, MODULE_INIT_QOM)
55
56void register_module_init(void (*fn)(void), module_init_type type);
57void register_dso_module_init(void (*fn)(void), module_init_type type);
58
59void module_call_init(module_init_type type);
60
61#endif
62