Paolo Bonzini <pbonz...@redhat.com> writes:
> On Mac --enable-modules and --enable-plugins are currently incompatible, > because the > Apple -Wl,-exported_symbols_list command line options prevents the export of > any > symbols needed by the modules. On x86 -Wl,--dynamic-list does not have this > effect, > but only because the -Wl,--export-dynamic option provided by gmodule-2.0.pc > overrides > it. On Apple there is no -Wl,--export-dynamic, because it is the default, > and thus > no override. > > Either way, when modules are active there is no reason to include the > plugin_ldflags. > While at it, avoid the useless -Wl,--export-dynamic when --enable-plugins is > specified but --enable-modules is not; this way, the GNU and Apple > configurations > are more similar. > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/516 > Cc: Alex Bennée <alex.ben...@linaro.org> > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > configure | 5 ++--- > plugins/meson.build | 14 ++++++++------ > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/configure b/configure > index 9a79a004d7..a8721601ea 100755 > --- a/configure > +++ b/configure > @@ -3187,9 +3187,8 @@ glib_req_ver=2.56 > glib_modules=gthread-2.0 > if test "$modules" = yes; then > glib_modules="$glib_modules gmodule-export-2.0" > -fi > -if test "$plugins" = "yes"; then > - glib_modules="$glib_modules gmodule-2.0" > +elif test "$plugins" = "yes"; then > + glib_modules="$glib_modules gmodule-noexport-2.0" This brings in a new dependency because I can't configure now: ➜ ../../configure ERROR: glib-2.56 gmodule-noexport-2.0 is required to compile QEMU Should it be gmodule-no-export? Hopefully the different distros aren't packaging different .pc files. > fi > > for i in $glib_modules; do > diff --git a/plugins/meson.build b/plugins/meson.build > index e77723010e..bfd5c9822a 100644 > --- a/plugins/meson.build > +++ b/plugins/meson.build > @@ -1,9 +1,11 @@ > -if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host > - plugin_ldflags = ['-Wl,--dynamic-list=' + (meson.build_root() / > 'qemu-plugins-ld.symbols')] > -elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host > - plugin_ldflags = ['-Wl,-exported_symbols_list,' + (meson.build_root() / > 'qemu-plugins-ld64.symbols')] > -else > - plugin_ldflags = [] > +plugin_ldflags = [] > +# Modules need more symbols than just those in plugins/qemu-plugins.symbols > +if not enable_modules > + if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host > + plugin_ldflags = ['-Wl,--dynamic-list=' + (meson.build_root() / > 'qemu-plugins-ld.symbols')] > + elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host > + plugin_ldflags = ['-Wl,-exported_symbols_list,' + (meson.build_root() / > 'qemu-plugins-ld64.symbols')] > + endif > endif Does this mean --enable-modules would allow plugins to access more of the API space than we intended in the first place? -- Alex Bennée