Add an autoconf check for -retain-symbols-file and conditionalize

use of that option with it. This eliminates an imprecise "Linux"
test, and should help support old versions of gold.

llvm-svn: 101560
This commit is contained in:
Dan Gohman 2010-04-16 22:58:15 +00:00
parent 034e0b1e68
commit 91f8ad7bd3
4 changed files with 56 additions and 7 deletions

View File

@ -337,3 +337,7 @@ ENABLE_LLVMC_DYNAMIC_PLUGINS = 1
NO_MISSING_FIELD_INITIALIZERS = @NO_MISSING_FIELD_INITIALIZERS@ NO_MISSING_FIELD_INITIALIZERS = @NO_MISSING_FIELD_INITIALIZERS@
# -Wno-variadic-macros # -Wno-variadic-macros
NO_VARIADIC_MACROS = @NO_VARIADIC_MACROS@ NO_VARIADIC_MACROS = @NO_VARIADIC_MACROS@
# Flags supported by the linker.
# bfd ld / gold -retain-symbols-file file
HAVE_LINK_RETAIN_SYMBOLS_FILE = @HAVE_LINK_RETAIN_SYMBOLS_FILE@

View File

@ -561,7 +561,7 @@ ifeq ($(HOST_OS),Darwin)
# Get "4" out of 10.4 for later pieces in the makefile. # Get "4" out of 10.4 for later pieces in the makefile.
DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/') DARWIN_MAJVERS := $(shell echo $(DARWIN_VERSION)| sed -E 's/10.([0-9]).*/\1/')
SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \ SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined,suppress \
-dynamiclib -dynamiclib
ifneq ($(ARCH),ARM) ifneq ($(ARCH),ARM)
SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION) SharedLinkOptions += -mmacosx-version-min=$(DARWIN_VERSION)
@ -990,13 +990,12 @@ endif
# Now add the linker command-line options to use the native export file. # Now add the linker command-line options to use the native export file.
ifeq ($(HOST_OS),Darwin) ifeq ($(HOST_OS),Darwin)
LLVMLibsOptions += -Wl,-exported_symbols_list -Wl,$(NativeExportsFile) LLVMLibsOptions += -Wl,-exported_symbols_list,$(NativeExportsFile)
endif endif
# This isn't really Linux-specific; it works at least on gold and bfd ld, but # gold, bfd ld, etc.
# there's no convenient way to detect it. ifeq ($(HAVE_LINK_RETAIN_SYMBOLS_FILE),1)
ifeq ($(HOST_OS),Linux) LLVMLibsOptions += -Wl,-retain-symbols-file,$(NativeExportsFile)
LLVMLibsOptions += -Wl,-retain-symbols-file -Wl,$(NativeExportsFile)
endif endif
endif endif
@ -1297,7 +1296,7 @@ ifeq ($(HOST_OS),Darwin)
# Tiger tools don't support this. # Tiger tools don't support this.
ifneq ($(DARWIN_MAJVERS),4) ifneq ($(DARWIN_MAJVERS),4)
LD.Flags += -Wl,-exported_symbol -Wl,_main LD.Flags += -Wl,-exported_symbol,_main
endif endif
endif endif

View File

@ -1022,6 +1022,9 @@ AC_LINK_USE_R
dnl Determine whether the linker supports the -export-dynamic option. dnl Determine whether the linker supports the -export-dynamic option.
AC_LINK_EXPORT_DYNAMIC AC_LINK_EXPORT_DYNAMIC
dnl Determine whether the linker supports the -retain-symbols-file option.
AC_LINK_RETAIN_SYMBOLS_FILE
dnl Check for libtool and the library that has dlopen function (which must come dnl Check for libtool and the library that has dlopen function (which must come
dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with dnl before the AC_PROG_LIBTOOL check in order to enable dlopening libraries with
dnl libtool). dnl libtool).

View File

@ -39,3 +39,46 @@ if test "$llvm_cv_link_use_export_dynamic" = yes ; then
fi fi
]) ])
#
# Determine if the system can handle the -retain-symbols-file option being
# passed to the linker.
#
# This macro is specific to LLVM.
#
AC_DEFUN([AC_LINK_RETAIN_SYMBOLS_FILE],
[AC_CACHE_CHECK([for compiler -Wl,-retain-symbols-file option],
[llvm_cv_link_use_retain_symbols_file],
[ AC_LANG_PUSH([C])
oldcflags="$CFLAGS"
# The following code is from the autoconf manual,
# "11.13: Limitations of Usual Tools".
# Create a temporary directory $tmp in $TMPDIR (default /tmp).
# Use mktemp if possible; otherwise fall back on mkdir,
# with $RANDOM to make collisions less likely.
: ${TMPDIR=/tmp}
{
tmp=`
(umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
` &&
test -n "$tmp" && test -d "$tmp"
} || {
tmp=$TMPDIR/foo$$-$RANDOM
(umask 077 && mkdir "$tmp")
} || exit $?
echo "main" > "$tmp/exports"
CFLAGS="$CFLAGS -Wl,-retain-symbols-file=$tmp/exports"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[int main() { return 0; }]])],
[llvm_cv_link_use_retain_symbols_file=yes],[llvm_cv_link_use_retain_symbols_file=no])
rm "$tmp/exports"
rmdir "$tmp"
CFLAGS="$oldcflags"
AC_LANG_POP([C])
])
if test "$llvm_cv_link_use_retain_symbols_file" = yes ; then
AC_SUBST(HAVE_LINK_RETAIN_SYMBOLS_FILE,1)
fi
])