module: implement module loading
authorFam Zheng <famz@redhat.com>
Mon, 10 Feb 2014 06:48:57 +0000 (14:48 +0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 20 Feb 2014 12:14:18 +0000 (13:14 +0100)
commite26110cfc67d48331a76e9b1e6f7fed7569e1ab3
tree9ac70ad405cdf18189017345ee184f268510db3b
parent17969268f5938ae1d7f3dedbd73e507badb6146d
module: implement module loading

This patch adds loading, stamp checking and initialization of modules.

The init function of dynamic module is no longer directly called as
__attribute__((constructor)) in static linked version, it is called
only after passed the checking of presense of stamp symbol:

    qemu_stamp_$RELEASEHASH

where $RELEASEHASH is generated by hashing version strings and content
of configure script.

With this, modules built from a different tree/version/configure will
not be loaded.

The module loading code requires gmodule-2.0.

Modules are searched under
 - CONFIG_MODDIR
 - executable folder (to allow running qemu-{img,io} in the build
   directory)
 - ../ of executable folder (to allow running system emulator in the
   build directory)

Modules are linked under their subdir respectively, then copied to top
level of build directory for above convinience, e.g.:
    $(BUILD_DIR)/block/curl.so -> $(BUILD_DIR)/block-curl.so

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Makefile
configure
include/qemu/module.h
module-common.c [new file with mode: 0644]
rules.mak
scripts/create_config
util/module.c