From 6d4ef0e4b2e782f8b4ebe9ee5be640d645cb461d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 10 Jul 2010 14:35:43 +0200 Subject: [PATCH] libtool: add some patches to support gcc's LTO optimization Signed-off-by: Stephan Raue --- .../libtool/patches/libtool-2.2.10-lto_1.diff | 99 ++++++ .../libtool/patches/libtool-2.2.10-lto_3.diff | 282 ++++++++++++++++++ .../libtool/patches/libtool-2.2.10-lto_4.diff | 199 ++++++++++++ .../patches/libtool-2.2.10-use_ld.diff | 12 + 4 files changed, 592 insertions(+) create mode 100644 packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_1.diff create mode 100644 packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_3.diff create mode 100644 packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_4.diff create mode 100644 packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-use_ld.diff diff --git a/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_1.diff b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_1.diff new file mode 100644 index 0000000000..31c776a6db --- /dev/null +++ b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_1.diff @@ -0,0 +1,99 @@ +diff -Naur libtool-2.2.10-old/ChangeLog libtool-2.2.10-new/ChangeLog +--- libtool-2.2.10-old/ChangeLog 2010-06-09 06:04:52.000000000 -0700 ++++ libtool-2.2.10-new/ChangeLog 2010-07-04 15:48:14.000000000 -0700 +@@ -236,6 +236,21 @@ + + 2010-04-04 Ralf Wildenhues + ++ Support GCC LTO on GNU/Linux. ++ * NEWS: Update. ++ * libltdl/config/ltmain.m4sh (func_mode_link): Allow through ++ flags matching -O*, -flto*, -fwhopr, -fuse-linker-plugin. ++ * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Drop symbols ++ starting with __gnu_lto. ++ (_LT_LINKER_SHLIBS) [linux] : ++ Add $pic_flag for GCC. ++ (_LT_LANG_CXX_CONFIG) [linux] : ++ Likewise. ++ : Only list lines starting with a space ++ and containing 'collect'. ++ (_LT_SYS_HIDDEN_LIBDEPS): Ignore files matching *.lto.o. ++ Suggested by Török Edwin and Simon Richter. ++ + Use linker_flags not compiler_flags with $LD. + * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) [linux] + : With xlf and bgxlf +diff -Naur libtool-2.2.10-old/libltdl/config/ltmain.m4sh libtool-2.2.10-new/libltdl/config/ltmain.m4sh +--- libtool-2.2.10-old/libltdl/config/ltmain.m4sh 2010-06-09 06:06:43.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/config/ltmain.m4sh 2010-07-04 15:48:14.000000000 -0700 +@@ -4494,8 +4494,10 @@ + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection ++ # -O*, -flto*, -fwhopr, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ +- -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) ++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*| \ ++ -O*|-flto*|-fwhopr|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" +diff -Naur libtool-2.2.10-old/libltdl/m4/libtool.m4 libtool-2.2.10-new/libltdl/m4/libtool.m4 +--- libtool-2.2.10-old/libltdl/m4/libtool.m4 2010-05-20 14:22:02.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/m4/libtool.m4 2010-07-04 15:48:14.000000000 -0700 +@@ -3436,6 +3436,7 @@ + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi ++ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed -e '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no +@@ -4453,7 +4454,7 @@ + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then +- tmp_addflag= ++ tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler +@@ -5523,8 +5524,8 @@ + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' +@@ -5556,7 +5557,7 @@ + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. +- output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "^ .*collect"' + + else + GXX=no +@@ -6549,6 +6550,7 @@ + fi + ;; + ++ *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. +diff -Naur libtool-2.2.10-old/NEWS libtool-2.2.10-new/NEWS +--- libtool-2.2.10-old/NEWS 2010-06-09 07:02:19.000000000 -0700 ++++ libtool-2.2.10-new/NEWS 2010-07-04 15:48:14.000000000 -0700 +@@ -53,6 +53,7 @@ + - With binutils 2.19.50+, shared libraries can be built on AIX. + - Initial support for the Cuda Compiler Driver on GNU/Linux. + - Support for Haiku (i586-pc-haiku). ++ - Support for GCC link-time optimization (LTO) flags. + + * Bug fixes: + diff --git a/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_3.diff b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_3.diff new file mode 100644 index 0000000000..d7188818c2 --- /dev/null +++ b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_3.diff @@ -0,0 +1,282 @@ +diff -Naur libtool-2.2.10-old/ChangeLog libtool-2.2.10-new/ChangeLog +--- libtool-2.2.10-old/ChangeLog 2010-07-04 15:48:14.000000000 -0700 ++++ libtool-2.2.10-new/ChangeLog 2010-07-04 16:17:47.000000000 -0700 +@@ -225,6 +225,32 @@ + + 2010-04-09 Ralf Wildenhues + ++ Uniform const'ness of symlist variable lt_preloaded_symbols. ++ On some systems, lt_preloaded_symbols may not be declared ++ const due to relocation issues. C99 requires qualification to ++ match for compatible declarations, so ensure we declare ++ const'ness in the same way everywhere; link-time optimization ++ may otherwise rightfully complain about inconsistencies. ++ Since ltdl.h may not depend upon config.h, rely on system ++ defines for choosing const'ness. ++ * NEWS: Update. ++ * doc/libtool.texi (Dlpreopening): Document this issue. ++ * libltdl/config/ltmain.m4sh (func_generate_dlsyms): ++ [__WINDOWS__, __CYGWIN__, _WIN32_WCE]: Define LT_DLSYM_CONST ++ according to system defines. Remove old shell cruft. Use ++ LT_DLSYM_CONST for lt_${my_prefix}_LTX_preloaded_symbols. ++ * libltdl/libltdl/lt_system.h (LT_DLSYM_CONST): Likewise, ++ define LT_DLSYM_CONST according to system defines. ++ * tests/demo/foo.h (LT_DLSYM_CONST): Likewise. ++ * tests/pdemo/foo.h (LT_DLSYM_CONST): Likewise. ++ * tests/demo/dlmain.c (lt_dlsymlist): Use LT_DLSYM_CONST. ++ * tests/pdemo/longer_file_name_dlmain.c (lt_dlsymlist): ++ Likewise. ++ * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Likewise ++ for configure test code. ++ * libltdl/ltdl.c (preloaded_symbols): Use LT_DLSYM_CONST. ++ * libltdl/ltdl.h (LTDL_SET_PRELOADED_SYMBOLS): Likewise. ++ + Fix incompatible struct declarations. + * doc/libtool.texi (Dlpreopening): Remove broken documentation + of lt_dlsymbol and lt_dlsymlist. Document typedef lt_dlsymlist +diff -Naur libtool-2.2.10-old/doc/libtool.texi libtool-2.2.10-new/doc/libtool.texi +--- libtool-2.2.10-old/doc/libtool.texi 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/doc/libtool.texi 2010-07-04 16:17:47.000000000 -0700 +@@ -3408,6 +3408,9 @@ + To facilitate inclusion of symbol lists into libraries, + @code{lt_preloaded_symbols} is @samp{#define}d to a suitably unique name + in @file{ltdl.h}. ++ ++This variable may not be declared @code{const} on some systems due to ++relocation issues. + @end deftypevar + + Some compilers may allow identifiers that are not valid in ANSI C, such +diff -Naur libtool-2.2.10-old/libltdl/config/ltmain.m4sh libtool-2.2.10-new/libltdl/config/ltmain.m4sh +--- libtool-2.2.10-old/libltdl/config/ltmain.m4sh 2010-07-04 15:48:14.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/config/ltmain.m4sh 2010-07-04 16:17:47.000000000 -0700 +@@ -1952,6 +1952,18 @@ + #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" + #endif + ++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ ++#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE) ++/* DATA imports from DLLs on WIN32 con't be const, because runtime ++ relocations are performed -- see ld's documentation on pseudo-relocs. */ ++# define LT_DLSYM_CONST ++#elif defined(__osf__) ++/* This system does not cope well with relocations in const data. */ ++# define LT_DLSYM_CONST ++#else ++# define LT_DLSYM_CONST const ++#endif ++ + /* External symbol declarations for the compiler. */\ + " + +@@ -2054,26 +2066,9 @@ + const char *name; + void *address; + } lt_dlsymlist; +-" +- case $host in +- *cygwin* | *mingw* | *cegcc* ) +- echo >> "$output_objdir/$my_dlsyms" "\ +-/* DATA imports from DLLs on WIN32 con't be const, because +- runtime relocations are performed -- see ld's documentation +- on pseudo-relocs. */" +- lt_dlsym_const= ;; +- *osf5*) +- echo >> "$output_objdir/$my_dlsyms" "\ +-/* This system does not cope well with relocations in const data */" +- lt_dlsym_const= ;; +- *) +- lt_dlsym_const=const ;; +- esac +- +- echo >> "$output_objdir/$my_dlsyms" "\ +-extern $lt_dlsym_const lt_dlsymlist ++extern LT_DLSYM_CONST lt_dlsymlist + lt_${my_prefix}_LTX_preloaded_symbols[]; +-$lt_dlsym_const lt_dlsymlist ++LT_DLSYM_CONST lt_dlsymlist + lt_${my_prefix}_LTX_preloaded_symbols[] = + {\ + { \"$my_originator\", (void *) 0 }," +diff -Naur libtool-2.2.10-old/libltdl/libltdl/lt_system.h libtool-2.2.10-new/libltdl/libltdl/lt_system.h +--- libtool-2.2.10-old/libltdl/libltdl/lt_system.h 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/libltdl/lt_system.h 2010-07-04 16:17:47.000000000 -0700 +@@ -1,6 +1,6 @@ + /* lt_system.h -- system portability abstraction layer + +- Copyright (C) 2004, 2007 Free Software Foundation, Inc. ++ Copyright (C) 2004, 2007, 2010 Free Software Foundation, Inc. + Written by Gary V. Vaughan, 2004 + + NOTE: The canonical source of this file is maintained with the +@@ -76,6 +76,18 @@ + # endif + #endif + ++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ ++#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE) ++/* DATA imports from DLLs on WIN32 con't be const, because runtime ++ relocations are performed -- see ld's documentation on pseudo-relocs. */ ++# define LT_DLSYM_CONST ++#elif defined(__osf__) ++/* This system does not cope well with relocations in const data. */ ++# define LT_DLSYM_CONST ++#else ++# define LT_DLSYM_CONST const ++#endif ++ + /* Canonicalise Windows and Cygwin recognition macros. + To match the values set by recent Cygwin compilers, make sure that if + __CYGWIN__ is defined (after canonicalisation), __WINDOWS__ is NOT! */ +diff -Naur libtool-2.2.10-old/libltdl/ltdl.c libtool-2.2.10-new/libltdl/ltdl.c +--- libtool-2.2.10-old/libltdl/ltdl.c 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/ltdl.c 2010-07-04 16:17:47.000000000 -0700 +@@ -208,7 +208,7 @@ + LT_SCOPE const lt_dlvtable * get_vtable (lt_user_data data); + LT_END_C_DECLS + #ifdef HAVE_LIBDLLOADER +-extern lt_dlsymlist preloaded_symbols[]; ++extern LT_DLSYM_CONST lt_dlsymlist preloaded_symbols[]; + #endif + + /* Initialize libltdl. */ +diff -Naur libtool-2.2.10-old/libltdl/ltdl.h libtool-2.2.10-new/libltdl/ltdl.h +--- libtool-2.2.10-old/libltdl/ltdl.h 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/ltdl.h 2010-07-04 16:17:47.000000000 -0700 +@@ -103,7 +103,7 @@ + + #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols + #define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{ \ +- extern const lt_dlsymlist lt_preloaded_symbols[]; \ ++ extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[]; \ + lt_dlpreload_default(lt_preloaded_symbols); \ + }LT_STMT_END + +diff -Naur libtool-2.2.10-old/libltdl/m4/libtool.m4 libtool-2.2.10-new/libltdl/m4/libtool.m4 +--- libtool-2.2.10-old/libltdl/m4/libtool.m4 2010-07-04 15:48:14.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/m4/libtool.m4 2010-07-04 16:17:47.000000000 -0700 +@@ -3470,6 +3470,18 @@ + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext ++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ ++#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE) ++/* DATA imports from DLLs on WIN32 con't be const, because runtime ++ relocations are performed -- see ld's documentation on pseudo-relocs. */ ++# define LT@&t@_DLSYM_CONST ++#elif defined(__osf__) ++/* This system does not cope well with relocations in const data. */ ++# define LT@&t@_DLSYM_CONST ++#else ++# define LT@&t@_DLSYM_CONST const ++#endif ++ + #ifdef __cplusplus + extern "C" { + #endif +@@ -3481,7 +3493,7 @@ + cat <<_LT_EOF >> conftest.$ac_ext + + /* The mapping between symbol names and symbols. */ +-const struct { ++LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; + } +diff -Naur libtool-2.2.10-old/NEWS libtool-2.2.10-new/NEWS +--- libtool-2.2.10-old/NEWS 2010-07-04 15:48:14.000000000 -0700 ++++ libtool-2.2.10-new/NEWS 2010-07-04 16:17:47.000000000 -0700 +@@ -42,6 +42,9 @@ + options that begin with '--lt-*' from the argument list before launching + (uninstalled) programs. Any '--lt-*' option on the command line not + recognized by the wrapper will result in an error. ++ - The type of the symbol lists variables (lt_*_LTX_preloaded_symbols) has ++ been fixed in the manual and in a couple of tests to match the actual ++ implementation. + + * Changes in supported systems or compilers: + +diff -Naur libtool-2.2.10-old/tests/demo/dlmain.c libtool-2.2.10-new/tests/demo/dlmain.c +--- libtool-2.2.10-old/tests/demo/dlmain.c 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/tests/demo/dlmain.c 2010-07-04 16:17:47.000000000 -0700 +@@ -34,7 +34,7 @@ + lt_ptr_t address; + } lt_dlsymlist; + +-extern const lt_dlsymlist lt_preloaded_symbols[]; ++extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[]; + + int + main () +diff -Naur libtool-2.2.10-old/tests/demo/foo.h libtool-2.2.10-new/tests/demo/foo.h +--- libtool-2.2.10-old/tests/demo/foo.h 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/tests/demo/foo.h 2010-07-04 16:17:47.000000000 -0700 +@@ -1,6 +1,6 @@ + /* foo.h -- interface to the libfoo library + +- Copyright (C) 1996-1999 Free Software Foundation, Inc. ++ Copyright (C) 1996-1999, 2010 Free Software Foundation, Inc. + Written by Gord Matzigkeit, 1996 + + This file is part of GNU Libtool. +@@ -62,6 +62,18 @@ + # define lt_ptr_t char* + #endif + ++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ ++#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE) ++/* DATA imports from DLLs on WIN32 con't be const, because runtime ++ relocations are performed -- see ld's documentation on pseudo-relocs. */ ++# define LT_DLSYM_CONST ++#elif defined(__osf__) ++/* This system does not cope well with relocations in const data. */ ++# define LT_DLSYM_CONST ++#else ++# define LT_DLSYM_CONST const ++#endif ++ + /* Silly constants that the functions return. */ + #define HELLO_RET 0xe110 + #define FOO_RET 0xf00 +diff -Naur libtool-2.2.10-old/tests/pdemo/foo.h libtool-2.2.10-new/tests/pdemo/foo.h +--- libtool-2.2.10-old/tests/pdemo/foo.h 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/tests/pdemo/foo.h 2010-07-04 16:17:47.000000000 -0700 +@@ -1,6 +1,6 @@ + /* foo.h -- interface to the libfoo library + +- Copyright (C) 1996-1999 Free Software Foundation, Inc. ++ Copyright (C) 1996-1999, 2010 Free Software Foundation, Inc. + Written by Gord Matzigkeit, 1996 + + This file is part of GNU Libtool. +@@ -61,6 +61,18 @@ + # define lt_ptr_t char* + #endif + ++/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ ++#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE) ++/* DATA imports from DLLs on WIN32 con't be const, because runtime ++ relocations are performed -- see ld's documentation on pseudo-relocs. */ ++# define LT_DLSYM_CONST ++#elif defined(__osf__) ++/* This system does not cope well with relocations in const data. */ ++# define LT_DLSYM_CONST ++#else ++# define LT_DLSYM_CONST const ++#endif ++ + #ifdef __CYGWIN32__ + # ifdef LIBFOO_DLL + /* need some (as yet non-existant) automake magic to tell +diff -Naur libtool-2.2.10-old/tests/pdemo/longer_file_name_dlmain.c libtool-2.2.10-new/tests/pdemo/longer_file_name_dlmain.c +--- libtool-2.2.10-old/tests/pdemo/longer_file_name_dlmain.c 2010-07-04 15:48:11.000000000 -0700 ++++ libtool-2.2.10-new/tests/pdemo/longer_file_name_dlmain.c 2010-07-04 16:17:47.000000000 -0700 +@@ -34,7 +34,7 @@ + lt_ptr_t address; + } lt_dlsymlist; + +-extern const lt_dlsymlist lt_preloaded_symbols[]; ++extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[]; + + int + main (int argc, char **argv) diff --git a/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_4.diff b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_4.diff new file mode 100644 index 0000000000..53bb800ebb --- /dev/null +++ b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-lto_4.diff @@ -0,0 +1,199 @@ +diff -Naur libtool-2.2.10-old/ChangeLog libtool-2.2.10-new/ChangeLog +--- libtool-2.2.10-old/ChangeLog 2010-07-04 16:17:47.000000000 -0700 ++++ libtool-2.2.10-new/ChangeLog 2010-07-04 16:24:58.000000000 -0700 +@@ -225,6 +225,26 @@ + + 2010-04-09 Ralf Wildenhues + ++ Add $pic_flag to archive_cmds and archive_expsym_cmds. ++ * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) ++ ++ [GNU ld, netbsd]: Add $pic_flag if ELF. ++ [GNU ld, solaris]: Likewise. ++ [GNU ld, default case]: Likewise. ++ [!GNU ld, freebsd, dragonfly]: Add $pic_flag. ++ [!GNU ld, GCC, hpux9]: Add $pic_flag. ++ [!GNU ld, GCC, hpux10]: Replace -fPIC with $pic_flag ++ [!GNU ld, GCC, hpux11, !hppa*64]: Replace -fPIC with $pic_flag. ++ [!GNU ld, GCC, irix5, irix6, nonstopux]: Add $pic_flag. ++ [!GNU ld, GCC, osf4, osf5]: Likewise. ++ [!GNU ld, GCC, solaris]: Likewise. ++ (_LT_LANG_CXX_CONFIG) ++ [hpux9]: Add $pic_flag if $GXX. ++ [hpux10, hpux11, !hppa*64]: Replace -fPIC with $pic_flag. ++ [irix5, irix6]: Add $pic_flag if $GXX. ++ [osf4, osf5]: Likewise. ++ [solaris]: Add $pic_flag if $GXX and not GCC 2.7. ++ + Uniform const'ness of symlist variable lt_preloaded_symbols. + On some systems, lt_preloaded_symbols may not be declared + const due to relocation issues. C99 requires qualification to +diff -Naur libtool-2.2.10-old/libltdl/m4/libtool.m4 libtool-2.2.10-new/libltdl/m4/libtool.m4 +--- libtool-2.2.10-old/libltdl/m4/libtool.m4 2010-07-04 16:17:47.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/m4/libtool.m4 2010-07-04 16:24:58.000000000 -0700 +@@ -4536,8 +4536,8 @@ + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + +@@ -4555,8 +4555,8 @@ + + _LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +@@ -4602,8 +4602,8 @@ + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +@@ -4839,7 +4839,7 @@ + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no +@@ -4847,7 +4847,7 @@ + + hpux9*) + if test "$GCC" = yes; then +- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi +@@ -4863,7 +4863,7 @@ + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi +@@ -4887,10 +4887,10 @@ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else +@@ -4937,14 +4937,14 @@ + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, +- _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else +@@ -5031,7 +5031,7 @@ + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' +@@ -5050,9 +5050,9 @@ + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +- $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ++ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) +@@ -5829,7 +5829,7 @@ + ;; + *) + if test "$GXX" = yes; then +- _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no +@@ -5900,10 +5900,10 @@ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi +@@ -5944,9 +5944,9 @@ + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes +@@ -6224,7 +6224,7 @@ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + +@@ -6311,9 +6311,9 @@ + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then +- _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ +- $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when diff --git a/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-use_ld.diff b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-use_ld.diff new file mode 100644 index 0000000000..5812404bca --- /dev/null +++ b/packages/toolchain/devel/autotools/libtool/patches/libtool-2.2.10-use_ld.diff @@ -0,0 +1,12 @@ +diff -Naur libtool-2.2.10-old/libltdl/config/ltmain.m4sh libtool-2.2.10-new/libltdl/config/ltmain.m4sh +--- libtool-2.2.10-old/libltdl/config/ltmain.m4sh 2010-07-04 16:25:41.000000000 -0700 ++++ libtool-2.2.10-new/libltdl/config/ltmain.m4sh 2010-07-04 16:37:36.000000000 -0700 +@@ -4492,7 +4492,7 @@ + # -O*, -flto*, -fwhopr, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*| \ +- -O*|-flto*|-fwhopr|-fuse-linker-plugin) ++ -O*|-flto*|-fwhopr|-fuse-linker-plugin|-fuse-ld=*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg"