"QEMU 7.0.0 introduced a simplification that broke building with ld.bfd

so revert it. This should fix building on sparc64." From Brad
This commit is contained in:
sthen 2022-06-26 17:16:43 +00:00
parent 031364e7c6
commit 50e4c09798
2 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,117 @@
Revert..
[PATCH] configure: simplify creation of plugin symbol list
37650689473c4cdb5838f90cbc1aefbcd9332fb0
Index: configure
--- configure.orig
+++ configure
@@ -79,6 +79,7 @@ TMPO="${TMPDIR1}/${TMPB}.o"
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
TMPM="${TMPDIR1}/${TMPB}.m"
TMPE="${TMPDIR1}/${TMPB}.exe"
+TMPTXT="${TMPDIR1}/${TMPB}.txt"
rm -f config.log
@@ -1538,7 +1539,6 @@ if test "$static" = "yes" ; then
plugins="no"
fi
fi
-test "$plugins" = "" && plugins=yes
cat > $TMPC << EOF
@@ -2144,6 +2144,69 @@ EOF
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_req_ver=2.56
@@ -2917,6 +2980,22 @@ fi
if test "$plugins" = "yes" ; then
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
if test -n "$gdb_bin"; then

View File

@ -0,0 +1,28 @@
Revert..
[PATCH] configure: simplify creation of plugin symbol list
37650689473c4cdb5838f90cbc1aefbcd9332fb0
Index: plugins/meson.build
--- plugins/meson.build.orig
+++ plugins/meson.build
@@ -1,15 +1,10 @@
plugin_ldflags = []
# Modules need more symbols than just those in plugins/qemu-plugins.symbols
if not enable_modules
- if targetos == 'darwin'
- qemu_plugins_symbols_list = configure_file(
- input: files('qemu-plugins.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')]
+ if 'CONFIG_HAS_LD_DYNAMIC_LIST' in config_host
+ plugin_ldflags = ['-Wl,--dynamic-list=qemu-plugins-ld.symbols']
+ elif 'CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST' in config_host
+ plugin_ldflags = ['-Wl,-exported_symbols_list,qemu-plugins-ld64.symbols']
endif
endif