[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for 6.1] plugins: do not limit exported symbols if modules ar
From: |
Alex Bennée |
Subject: |
Re: [PATCH for 6.1] plugins: do not limit exported symbols if modules are active |
Date: |
Thu, 12 Aug 2021 10:36:20 +0100 |
User-agent: |
mu4e 1.6.2; emacs 28.0.50 |
Paolo Bonzini <pbonzini@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.bennee@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@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