On 20 February 2014 12:28, Paolo Bonzini <pbonz...@redhat.com> wrote: > From: Fam Zheng <f...@redhat.com> > > 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
This commit breaks a static build of arm-linux-user: rm -rf build/arm-linux && mkdir build/arm-linux && (cd build/arm-linux && '../../configure' '--target-list=arm-linux-user' '--cc=ccache gcc' '--disable-tools' '--static' '--enable-debug' --disable-tools) && make -C build/arm-linux -j4 [...] /usr/bin/ld.bfd.real: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie (this is when linking tests/qemu-iotests/socket_scm_helper) thanks -- PMM