configure: simplify creation of plugin symbol list
--dynamic-list is present on all supported ELF (not Windows or Darwin) platforms, since it dates back to 2006; -exported_symbols_list is likewise present on all supported versions of macOS. Do not bother doing a functional test in configure. Remove the file creation from configure as well: for Darwin, move the the creation of the Darwin-formatted symbols to meson; for ELF, use the file in the source path directly and switch from -Wl, to -Xlinker to not break weird paths that include a comma. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a5730b8bd3
commit
3765068947
|
@ -78,7 +78,6 @@ TMPC="${TMPDIR1}/${TMPB}.c"
|
||||||
TMPO="${TMPDIR1}/${TMPB}.o"
|
TMPO="${TMPDIR1}/${TMPB}.o"
|
||||||
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
||||||
TMPE="${TMPDIR1}/${TMPB}.exe"
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
||||||
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
|
||||||
|
|
||||||
rm -f config.log
|
rm -f config.log
|
||||||
|
|
||||||
|
@ -1696,6 +1695,7 @@ if test "$static" = "yes" ; then
|
||||||
plugins="no"
|
plugins="no"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
test "$plugins" = "" && plugins=yes
|
||||||
|
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
|
|
||||||
|
@ -2317,69 +2317,6 @@ EOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##########################################
|
|
||||||
# plugin linker support probe
|
|
||||||
|
|
||||||
if test "$plugins" != "no"; then
|
|
||||||
|
|
||||||
#########################################
|
|
||||||
# See if --dynamic-list is supported by the linker
|
|
||||||
|
|
||||||
ld_dynamic_list="no"
|
|
||||||
cat > $TMPTXT <<EOF
|
|
||||||
{
|
|
||||||
foo;
|
|
||||||
};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > $TMPC <<EOF
|
|
||||||
#include <stdio.h>
|
|
||||||
void foo(void);
|
|
||||||
|
|
||||||
void foo(void)
|
|
||||||
{
|
|
||||||
printf("foo\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
foo();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
|
|
||||||
ld_dynamic_list="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#########################################
|
|
||||||
# See if -exported_symbols_list is supported by the linker
|
|
||||||
|
|
||||||
ld_exported_symbols_list="no"
|
|
||||||
cat > $TMPTXT <<EOF
|
|
||||||
_foo
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
|
|
||||||
ld_exported_symbols_list="yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$ld_dynamic_list" = "no" &&
|
|
||||||
test "$ld_exported_symbols_list" = "no" ; then
|
|
||||||
if test "$plugins" = "yes"; then
|
|
||||||
error_exit \
|
|
||||||
"Plugin support requires dynamic linking and specifying a set of symbols " \
|
|
||||||
"that are exported to plugins. Unfortunately your linker doesn't " \
|
|
||||||
"support the flag (--dynamic-list or -exported_symbols_list) used " \
|
|
||||||
"for this purpose."
|
|
||||||
else
|
|
||||||
plugins="no"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
plugins="yes"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# glib support probe
|
# glib support probe
|
||||||
|
|
||||||
|
@ -3614,22 +3551,6 @@ fi
|
||||||
|
|
||||||
if test "$plugins" = "yes" ; then
|
if test "$plugins" = "yes" ; then
|
||||||
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
||||||
# Copy the export object list to the build dir
|
|
||||||
if test "$ld_dynamic_list" = "yes" ; then
|
|
||||||
echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
|
|
||||||
ld_symbols=qemu-plugins-ld.symbols
|
|
||||||
cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
|
|
||||||
elif test "$ld_exported_symbols_list" = "yes" ; then
|
|
||||||
echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
|
|
||||||
ld64_symbols=qemu-plugins-ld64.symbols
|
|
||||||
echo "# Automatically generated by configure - do not modify" > $ld64_symbols
|
|
||||||
grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
|
|
||||||
sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
|
|
||||||
else
|
|
||||||
error_exit \
|
|
||||||
"If \$plugins=yes, either \$ld_dynamic_list or " \
|
|
||||||
"\$ld_exported_symbols_list should have been set to 'yes'."
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -n "$gdb_bin"; then
|
if test -n "$gdb_bin"; then
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
plugin_ldflags = []
|
plugin_ldflags = []
|
||||||
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
|
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
|
||||||
if not enable_modules
|
if not enable_modules
|
||||||
if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host
|
if targetos == 'darwin'
|
||||||
plugin_ldflags = ['-Wl,--dynamic-list=qemu-plugins-ld.symbols']
|
qemu_plugins_symbols_list = configure_file(
|
||||||
elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host
|
input: files('qemu-plugins.symbols'),
|
||||||
plugin_ldflags = ['-Wl,-exported_symbols_list,qemu-plugins-ld64.symbols']
|
output: 'qemu-plugins-ld64.symbols',
|
||||||
|
capture: true,
|
||||||
|
command: ['sed', '-ne', 's/^[[:space:]]*\\(qemu_.*\\);/_\\1/p', '@INPUT@'])
|
||||||
|
plugin_ldflags = ['-Wl,-exported_symbols_list,plugins/qemu-plugins-ld64.symbols']
|
||||||
|
else
|
||||||
|
plugin_ldflags = ['-Xlinker', '--dynamic-list=' + (meson.project_source_root() / 'plugins/qemu-plugins.symbols')]
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue