diff options
author | Fam Zheng <famz@redhat.com> | 2014-02-10 14:48:57 +0800 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-02-20 13:14:18 +0100 |
commit | e26110cfc67d48331a76e9b1e6f7fed7569e1ab3 (patch) | |
tree | 9ac70ad405cdf18189017345ee184f268510db3b /rules.mak | |
parent | 17969268f5938ae1d7f3dedbd73e507badb6146d (diff) |
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>
Diffstat (limited to 'rules.mak')
-rw-r--r-- | rules.mak | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -82,6 +82,8 @@ DSO_CFLAGS := -fPIC -DBUILD_DSO %$(DSOSUF): LDFLAGS += $(LDFLAGS_SHARED) %$(DSOSUF): %.mo libqemustub.a $(call LINK,$^) + @# Copy to build root so modules can be loaded when program started without install + $(if $(findstring /,$@),$(call quiet-command,cp $@ $(subst /,-,$@), " CP $(subst /,-,$@)")) .PHONY: modules modules: @@ -211,6 +213,7 @@ $(foreach o,$(filter %.o,$($1)), $(eval $(patsubst %.o,%.mo,$o): $o) \ $(eval $(patsubst %.o,%.mo,$o)-objs := $o)) $(foreach o,$(filter-out $(modules-m), $(patsubst %.o,%.mo,$($1))), \ + $(eval $o-objs += module-common.o) $(eval $o: $($o-objs)) $(eval modules-objs-m += $($o-objs)) $(eval modules-m += $o) |