patches/gcc/4.4.0/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
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 -rdup gcc-4.4.0.old/gcc/config/t-slibgcc-elf-ver gcc-4.4.0/gcc/config/t-slibgcc-elf-ver
    11 --- gcc-4.4.0.old/gcc/config/t-slibgcc-elf-ver	2005-10-31 18:03:08.000000000 +0100
    12 +++ gcc-4.4.0/gcc/config/t-slibgcc-elf-ver	2008-10-07 19:28:13.000000000 +0200
    13 @@ -9,7 +9,7 @@ SHLIB_MAP = @shlib_map_file@
    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  
    20  SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
    21  	-Wl,--soname=$(SHLIB_SONAME) \
    22 diff -rdup gcc-4.4.0.old/libgcc/configure gcc-4.4.0/libgcc/configure
    23 --- gcc-4.4.0.old/libgcc/configure	2008-07-17 10:40:53.000000000 +0200
    24 +++ gcc-4.4.0/libgcc/configure	2008-10-07 19:40:48.000000000 +0200
    25 @@ -272,7 +272,7 @@ PACKAGE_STRING='GNU C Runtime Library 1.
    26  PACKAGE_BUGREPORT=''
    27  
    28  ac_unique_file="static-object.mk"
    29 -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'
    30 +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'
    31  ac_subst_files=''
    32  ac_pwd=`pwd`
    33  
    34 @@ -3522,6 +3522,39 @@ if test "$enable_tls $gcc_cv_have_cc_tls
    35  fi
    36  
    37  
    38 +# On powerpc libgcc_s references copysignl which is a libm function but
    39 +# glibc apparently also provides it via libc as opposed to uClibc where
    40 +# it lives in libm.
    41 +echo "$as_me:$LINENO: checking for library containing copysignl" >&5
    42 +echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
    43 +if test "${libgcc_cv_copysignl_lib+set}" = set; then
    44 +  echo $ECHO_N "(cached) $ECHO_C" >&6
    45 +else
    46 +
    47 +    echo '#include <features.h>' > conftest.c
    48 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
    49 +    libgcc_cv_copysignl_lib="-lc"
    50 +    if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
    51 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    52 +  (eval $ac_try) 2>&5
    53 +  ac_status=$?
    54 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
    55 +  (exit $ac_status); }; }
    56 +    then
    57 +	libgcc_cv_copysignl_lib="-lm"
    58 +    fi
    59 +    rm -f conftest.*
    60 +
    61 +fi
    62 +echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
    63 +echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
    64 +
    65 +case /${libgcc_cv_copysignl_lib}/ in
    66 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
    67 +  *) LIBGCC_LIBM= ;;
    68 +esac
    69 +
    70 +
    71  # Conditionalize the makefile for this target machine.
    72  tmake_file_=
    73  for f in ${tmake_file}
    74 @@ -4242,6 +4275,7 @@ s,@enable_decimal_float@,$enable_decimal
    75  s,@fixed_point@,$fixed_point,;t t
    76  s,@vis_hide@,$vis_hide,;t t
    77  s,@set_have_cc_tls@,$set_have_cc_tls,;t t
    78 +s,@LIBGCC_LIBM@,$LIBGCC_LIBM,;t t
    79  s,@tmake_file@,$tmake_file,;t t
    80  s,@extra_parts@,$extra_parts,;t t
    81  s,@asm_hidden_op@,$asm_hidden_op,;t t
    82 diff -rdup gcc-4.4.0.old/libgcc/configure.ac gcc-4.4.0/libgcc/configure.ac
    83 --- gcc-4.4.0.old/libgcc/configure.ac	2008-07-17 10:40:53.000000000 +0200
    84 +++ gcc-4.4.0/libgcc/configure.ac	2008-10-07 19:34:48.000000000 +0200
    85 @@ -203,6 +203,27 @@ if test "$enable_tls $gcc_cv_have_cc_tls
    86  fi
    87  AC_SUBST(set_have_cc_tls)
    88  
    89 +# On powerpc libgcc_s references copysignl which is a libm function but
    90 +# glibc apparently also provides it via libc as opposed to uClibc where
    91 +# it lives in libm.
    92 +AC_CACHE_CHECK
    93 +  libgcc_cv_copysignl_lib,
    94 +    echo '#include <features.h>' > conftest.c
    95 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
    96 +    libgcc_cv_copysignl_lib="-lc"
    97 +    if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
    98 +    then
    99 +	libgcc_cv_copysignl_lib="-lm"
   100 +    fi
   101 +    rm -f conftest.*
   102 +  ])
   103 +
   104 +case /${libgcc_cv_copysignl_lib}/ in
   105 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
   106 +  *) LIBGCC_LIBM= ;;
   107 +esac
   108 +AC_SUBST(LIBGCC_LIBM)
   109 +
   110  # Conditionalize the makefile for this target machine.
   111  tmake_file_=
   112  for f in ${tmake_file}
   113 diff -rdup gcc-4.4.0.old/libgcc/Makefile.in gcc-4.4.0/libgcc/Makefile.in
   114 --- gcc-4.4.0.old/libgcc/Makefile.in	2008-07-17 10:40:53.000000000 +0200
   115 +++ gcc-4.4.0/libgcc/Makefile.in	2008-10-07 19:28:13.000000000 +0200
   116 @@ -40,6 +40,7 @@ enable_shared = @enable_shared@
   117  decimal_float = @decimal_float@
   118  enable_decimal_float = @enable_decimal_float@
   119  fixed_point = @fixed_point@
   120 +LIBGCC_LIBM = @LIBGCC_LIBM@
   121  
   122  host_noncanonical = @host_noncanonical@
   123  
   124 @@ -786,9 +787,10 @@ libgcc_s$(SHLIB_EXT): $(libgcc-s-objects
   125  		@multilib_dir@,$(MULTIDIR),$(subst \
   126  		@shlib_objs@,$(objects),$(subst \
   127  		@shlib_base_name@,libgcc_s,$(subst \
   128 +		@libgcc_libm@,$(LIBGCC_LIBM),$(subst \
   129  		@shlib_map_file@,$(mapfile),$(subst \
   130  		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
   131 -		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
   132 +		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
   133  
   134  libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
   135  	# @multilib_flags@ is still needed because this may use