6ee5892638
As reported, libtool -export-symbols-regex doesn't work on Solaris when using GNU ld instead of Sun ld, libtool just always assumes Sun ld. As I'm unsure what is the maintainance status of libtool right now, this patch solves it on the lto-plugin side instead, tests at configure time similar way how libssp and other target libraries test for symbol versioning (except omitting the symbol version because we just want one GLOBAL symbol and rest of them LOCAL), and will use the current way of -export-symbols-regex onload as fallback when this doesn't work. 2022-03-22 Jakub Jelinek <jakub@redhat.com> PR lto/102426 lto-plugin/ * configure.ac (LTO_PLUGIN_USE_SYMVER, LTO_PLUGIN_USE_SYMVER_GNU, LTO_PLUGIN_USE_SYMVER_SUN): New test for symbol versioning support. * Makefile.am (version_arg, version_dep): Set conditionally based on LTO_PLUGIN_USE_SYMVER*. (liblto_plugin_la_LDFLAGS): Use $(version_arg) instead of -export-symbols-regex onload. (liblto_plugin_la_DEPENDENCIES): Depend on $(version_dep). * lto-plugin.map: New file. * configure: Regenerated. * Makefile.in: Regenerated.
99 lines
2.9 KiB
Plaintext
99 lines
2.9 KiB
Plaintext
AC_INIT([LTO plugin for ld], 0.1,,[lto-plugin])
|
|
AC_CANONICAL_SYSTEM
|
|
GCC_TOPLEV_SUBDIRS
|
|
AM_INIT_AUTOMAKE([foreign no-dist])
|
|
AM_MAINTAINER_MODE
|
|
AC_ARG_WITH(libiberty,
|
|
[AS_HELP_STRING([--with-libiberty=PATH],
|
|
[specify the directory where to find libiberty [../libiberty]])],
|
|
[], with_libiberty=../libiberty)
|
|
AC_SUBST(with_libiberty)
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
AC_PROG_CC
|
|
AC_SYS_LARGEFILE
|
|
ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_lto_plugin_warn_cflags])
|
|
|
|
# Check whether -static-libgcc is supported.
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -static-libgcc"
|
|
AC_MSG_CHECKING([for -static-libgcc])
|
|
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
|
int main() {}])], [have_static_libgcc=yes], [have_static_libgcc=no])
|
|
AC_MSG_RESULT($have_static_libgcc);
|
|
LDFLAGS="$saved_LDFLAGS"
|
|
# Need -Wc to get it through libtool.
|
|
if test "x$have_static_libgcc" = xyes; then
|
|
ac_lto_plugin_ldflags="-Wc,-static-libgcc"
|
|
fi
|
|
AC_SUBST(ac_lto_plugin_ldflags)
|
|
|
|
GCC_CET_HOST_FLAGS(CET_HOST_FLAGS)
|
|
AC_SUBST(CET_HOST_FLAGS)
|
|
|
|
if test x"$host_subdir" = x.; then
|
|
gcc_build_dir=../gcc
|
|
else
|
|
gcc_build_dir=../../$host_subdir/gcc
|
|
fi
|
|
AC_SUBST(gcc_build_dir)
|
|
|
|
# Used for constructing correct paths for offload compilers.
|
|
accel_dir_suffix=
|
|
real_target_noncanonical=${target_noncanonical}
|
|
if test x"$enable_as_accelerator_for" != x; then
|
|
accel_dir_suffix=/accel/${target_noncanonical}
|
|
real_target_noncanonical=${enable_as_accelerator_for}
|
|
fi
|
|
AC_SUBST(accel_dir_suffix)
|
|
AC_SUBST(real_target_noncanonical)
|
|
|
|
# Determine what GCC version number to use in filesystem paths.
|
|
GCC_BASE_VER
|
|
|
|
AC_MSG_CHECKING([whether symbol versioning is supported])
|
|
lto_plugin_use_symver=no
|
|
if test x$gcc_no_link = xyes; then
|
|
# If we cannot link, we cannot build shared libraries, so do not use
|
|
# symbol versioning.
|
|
lto_plugin_use_symver=no
|
|
else
|
|
save_LDFLAGS="$LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
|
|
cat > conftest.map <<EOF
|
|
{
|
|
global: *foo*; bar; local: *;
|
|
};
|
|
EOF
|
|
AC_TRY_LINK([int foo;],[],[lto_plugin_use_symver=gnu],[lto_plugin_use_symver=no])
|
|
if test x$lto_plugin_use_symver = xno; then
|
|
case "$target_os" in
|
|
solaris2*)
|
|
LDFLAGS="$save_LDFLAGS"
|
|
LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
|
|
# Sun ld cannot handle wildcards and treats all entries as undefined.
|
|
cat > conftest.map <<EOF
|
|
{
|
|
global: foo; local: *;
|
|
};
|
|
EOF
|
|
AC_TRY_LINK([int foo;],[],[lto_plugin_use_symver=sun],[lto_plugin_use_symver=no])
|
|
;;
|
|
esac
|
|
fi
|
|
LDFLAGS="$save_LDFLAGS"
|
|
fi
|
|
AC_MSG_RESULT($lto_plugin_use_symver)
|
|
AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER, [test "x$lto_plugin_use_symver" != xno])
|
|
AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_GNU, [test "x$lto_plugin_use_symver" = xgnu])
|
|
AM_CONDITIONAL(LTO_PLUGIN_USE_SYMVER_SUN, [test "x$lto_plugin_use_symver" = xsun])
|
|
|
|
AM_PROG_LIBTOOL
|
|
ACX_LT_HOST_FLAGS
|
|
AC_SUBST(target_noncanonical)
|
|
AC_TYPE_INT64_T
|
|
AC_TYPE_UINT64_T
|
|
AC_HEADER_SYS_WAIT
|
|
AC_CONFIG_FILES(Makefile)
|
|
AC_CONFIG_HEADERS(config.h)
|
|
AC_OUTPUT
|