Statistics
| Branch: | Revision:

root / include / qemu / module.h @ e26110cf

History | View | Annotate | Download (2 kB)

1
/*
2
 * QEMU Module Infrastructure
3
 *
4
 * Copyright IBM, Corp. 2009
5
 *
6
 * Authors:
7
 *  Anthony Liguori   <aliguori@us.ibm.com>
8
 *
9
 * This work is licensed under the terms of the GNU GPL, version 2.  See
10
 * the COPYING file in the top-level directory.
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
23
void DSO_STAMP_FUN(void);
24
/* This is a dummy symbol to identify a loaded DSO as a QEMU module, so we can
25
 * distinguish "version mismatch" from "not a QEMU module", when the stamp
26
 * check fails during module loading */
27
void qemu_module_dummy(void);
28

    
29
#define module_init(function, type)                                         \
30
static void __attribute__((constructor)) do_qemu_init_ ## function(void)    \
31
{                                                                           \
32
    register_dso_module_init(function, type);                               \
33
}
34
#else
35
/* This should not be used directly.  Use block_init etc. instead.  */
36
#define module_init(function, type)                                         \
37
static void __attribute__((constructor)) do_qemu_init_ ## function(void)    \
38
{                                                                           \
39
    register_module_init(function, type);                                   \
40
}
41
#endif
42

    
43
typedef 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

    
56
void register_module_init(void (*fn)(void), module_init_type type);
57
void register_dso_module_init(void (*fn)(void), module_init_type type);
58

    
59
void module_call_init(module_init_type type);
60

    
61
#endif