patches/gcc/4.4.4/380-powerpc-libgcc_s-link-libm.patch
author "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
Mon Apr 16 15:25:36 2012 +0200 (2012-04-16)
changeset 2941 13e40098fffc
parent 1948 d341be24dc68
permissions -rw-r--r--
cc/gcc: update Linaro GCC revisions to 2012.04

Update Linaro GCC with the latest available revisions.

The 4.7 revision is also released, but the infrastructure is not yet ready for
it in CT-NG.

Signed-off-by: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
     1 http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html
     2 
     3 On glibc the libc.so carries a copy of the math function copysignl() but
     4 on uClibc math functions like copysignl() live in libm. Since libgcc_s
     5 contains unresolved symbols, any attempt to link against libgcc_s
     6 without explicitely specifying -lm fails, resulting in a broken
     7 bootstrap of the compiler.
     8 
     9 
    10 diff -durN gcc-4.4.4.orig/gcc/config/t-slibgcc-elf-ver gcc-4.4.4/gcc/config/t-slibgcc-elf-ver
    11 --- gcc-4.4.4.orig/gcc/config/t-slibgcc-elf-ver	2010-01-04 16:13:08.000000000 +0100
    12 +++ gcc-4.4.4/gcc/config/t-slibgcc-elf-ver	2010-05-16 19:38:36.000000000 +0200
    13 @@ -9,7 +9,7 @@
    14  SHLIB_OBJS = @shlib_objs@
    15  SHLIB_DIR = @multilib_dir@
    16  SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
    17 -SHLIB_LC = -lc
    18 +SHLIB_LC = @libgcc_libm@ -lc
    19  SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
    20  SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
    21  	$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
    22 diff -durN gcc-4.4.4.orig/libgcc/Makefile.in gcc-4.4.4/libgcc/Makefile.in
    23 --- gcc-4.4.4.orig/libgcc/Makefile.in	2009-04-10 01:23:07.000000000 +0200
    24 +++ gcc-4.4.4/libgcc/Makefile.in	2010-05-16 19:38:36.000000000 +0200
    25 @@ -39,6 +39,7 @@
    26  decimal_float = @decimal_float@
    27  enable_decimal_float = @enable_decimal_float@
    28  fixed_point = @fixed_point@
    29 +LIBGCC_LIBM = @LIBGCC_LIBM@
    30  
    31  host_noncanonical = @host_noncanonical@
    32  
    33 @@ -787,9 +788,10 @@
    34  		@multilib_dir@,$(MULTIDIR),$(subst \
    35  		@shlib_objs@,$(objects),$(subst \
    36  		@shlib_base_name@,libgcc_s,$(subst \
    37 +		@libgcc_libm@,$(LIBGCC_LIBM),$(subst \
    38  		@shlib_map_file@,$(mapfile),$(subst \
    39  		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
    40 -		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
    41 +		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
    42  
    43  libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
    44  	# @multilib_flags@ is still needed because this may use
    45 diff -durN gcc-4.4.4.orig/libgcc/configure gcc-4.4.4/libgcc/configure
    46 --- gcc-4.4.4.orig/libgcc/configure	2008-11-20 18:13:01.000000000 +0100
    47 +++ gcc-4.4.4/libgcc/configure	2010-05-16 19:38:36.000000000 +0200
    48 @@ -272,7 +272,7 @@
    49  PACKAGE_BUGREPORT=''
    50  
    51  ac_unique_file="static-object.mk"
    52 -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float fixed_point vis_hide set_have_cc_tls tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
    53 +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libgcc_topdir enable_shared slibdir INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os host_noncanonical build_libsubdir build_subdir host_subdir target_subdir AR ac_ct_AR LIPO ac_ct_LIPO NM ac_ct_NM RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP decimal_float enable_decimal_float fixed_point vis_hide set_have_cc_tls LIBGCC_LIBM tmake_file extra_parts asm_hidden_op LIBOBJS LTLIBOBJS'
    54  ac_subst_files=''
    55  ac_pwd=`pwd`
    56  
    57 @@ -3547,6 +3547,39 @@
    58  fi
    59  
    60  
    61 +# On powerpc libgcc_s references copysignl which is a libm function but
    62 +# glibc apparently also provides it via libc as opposed to uClibc where
    63 +# it lives in libm.
    64 +echo "$as_me:$LINENO: checking for library containing copysignl" >&5
    65 +echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
    66 +if test "${libgcc_cv_copysignl_lib+set}" = set; then
    67 +  echo $ECHO_N "(cached) $ECHO_C" >&6
    68 +else
    69 +
    70 +    echo '#include <features.h>' > conftest.c
    71 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
    72 +    libgcc_cv_copysignl_lib="-lc"
    73 +    if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
    74 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    75 +  (eval $ac_try) 2>&5
    76 +  ac_status=$?
    77 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
    78 +  (exit $ac_status); }; }
    79 +    then
    80 +	libgcc_cv_copysignl_lib="-lm"
    81 +    fi
    82 +    rm -f conftest.*
    83 +
    84 +fi
    85 +echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
    86 +echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
    87 +
    88 +case /${libgcc_cv_copysignl_lib}/ in
    89 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
    90 +  *) LIBGCC_LIBM= ;;
    91 +esac
    92 +
    93 +
    94  # Conditionalize the makefile for this target machine.
    95  tmake_file_=
    96  for f in ${tmake_file}
    97 @@ -4267,6 +4300,7 @@
    98  s,@fixed_point@,$fixed_point,;t t
    99  s,@vis_hide@,$vis_hide,;t t
   100  s,@set_have_cc_tls@,$set_have_cc_tls,;t t
   101 +s,@LIBGCC_LIBM@,$LIBGCC_LIBM,;t t
   102  s,@tmake_file@,$tmake_file,;t t
   103  s,@extra_parts@,$extra_parts,;t t
   104  s,@asm_hidden_op@,$asm_hidden_op,;t t
   105 diff -durN gcc-4.4.4.orig/libgcc/configure.ac gcc-4.4.4/libgcc/configure.ac
   106 --- gcc-4.4.4.orig/libgcc/configure.ac	2008-11-20 18:13:01.000000000 +0100
   107 +++ gcc-4.4.4/libgcc/configure.ac	2010-05-16 19:38:36.000000000 +0200
   108 @@ -223,6 +223,27 @@
   109  fi
   110  AC_SUBST(set_have_cc_tls)
   111  
   112 +# On powerpc libgcc_s references copysignl which is a libm function but
   113 +# glibc apparently also provides it via libc as opposed to uClibc where
   114 +# it lives in libm.
   115 +AC_CACHE_CHECK
   116 +  libgcc_cv_copysignl_lib,
   117 +    echo '#include <features.h>' > conftest.c
   118 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
   119 +    libgcc_cv_copysignl_lib="-lc"
   120 +    if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
   121 +    then
   122 +	libgcc_cv_copysignl_lib="-lm"
   123 +    fi
   124 +    rm -f conftest.*
   125 +  ])
   126 +
   127 +case /${libgcc_cv_copysignl_lib}/ in
   128 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
   129 +  *) LIBGCC_LIBM= ;;
   130 +esac
   131 +AC_SUBST(LIBGCC_LIBM)
   132 +
   133  # Conditionalize the makefile for this target machine.
   134  tmake_file_=
   135  for f in ${tmake_file}