On Tue, Nov 27, 2018 at 15:43:52 +0300, Roman Bolshakov wrote: > ld64 on macOS has similar -exported_symbols_list option. Here's the reference: > > -exported_symbols_list filename > The specified filename contains a list of global symbol names > that will remain as global symbols in the output file. All other > global symbols will be treated as if they were marked as > __private_extern__ (aka visibility=hidden) and will not be global in > the output file. The symbol names listed in filename must be one per > line. Leading and trailing white space are not part of the symbol > name. Lines starting with # are ignored, as are lines with only white > space. Some wildcards (similar to shell file matching) are supported. > The * matches zero or more characters. The ? matches one character. > [abc] matches one character which must be an 'a', 'b', or 'c'. > [a-z] matches any single lower case letter from 'a' to 'z'. > > > I can try your branch if you add support of the linker flag or send required > changes via GitHub.
Can you please try this branch? I added a commit with the appended. https://github.com/cota/qemu/tree/plugin-v2 You can inspect the symbols in the final binary with `readelf --dyn-syms' or `nm -D'. Thanks, Emilio --- diff --git a/configure b/configure index fe9707d951..3dc9c9697b 100755 --- a/configure +++ b/configure @@ -5176,15 +5176,31 @@ int main(void) } EOF +ld_dynamic_list="no" if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then ld_dynamic_list="yes" -else - if test "$plugins" = "yes" ; then - error_exit \ - "Plugin support requires specifying a set of symbols that " \ - "are exported to plugins. Unfortunately your linker doesn't " \ - "support the flag (--dynamic-list) used for this purpose." - fi +fi + +######################################### +# See if -exported_symbols_list is supported by the linker + +cat > $TMPTXT <<EOF + foo +EOF + +ld_exported_symbols_list="no" +if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then + ld_exported_symbols_list="yes" +fi + +if test "$plugins" = "yes" && + test "$ld_dynamic_list" = "no" && + test "$ld_exported_symbols_list" = "no" ; then + error_exit \ + "Plugin support requires 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." fi ######################################## @@ -6827,7 +6843,18 @@ fi if test "$plugins" = "yes" ; then echo "CONFIG_PLUGINS=y" >> $config_host_mak LIBS="-ldl $LIBS" - LDFLAGS="-Wl,--dynamic-list=\$(SRC_PATH)/qemu-plugins.symbols $LDFLAGS" + if test "$ld_dynamic_list" = "yes" ; then + LDFLAGS="-Wl,--dynamic-list=\$(SRC_PATH)/qemu-plugins.symbols $LDFLAGS" + elif test "$ld_exported_symbols_list" = "yes" ; then + ld64_symbols=qemu-plugins-ld64.symbols + echo "# Automatically generated by configure - do not modify" > $ld64_symbols + cat "$source_path/qemu-plugins.symbols" | grep qemu_ | sed 's/;//g' >> $ld64_symbols + LDFLAGS="-Wl,-exported_symbols_list,\$(BUILD_DIR)/$ld64_symbols $LDFLAGS" + 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 "$tcg_interpreter" = "yes"; then