patches/gcc/4.4.4/380-powerpc-libgcc_s-link-libm.patch
author Remy Bohmer <linux@bohmer.net>
Sun Jul 11 22:23:34 2010 +0200 (2010-07-11)
changeset 2021 3e52a1510f87
child 2148 ada9128c98b8
permissions -rw-r--r--
debug/gdb: Fix compilation for Mingw hosts

GDB requires PDcurses instead of ncurses while running on Windows.
So, do not always compile ncurses in case GDB needs to build.

PDcurses is provided by an earlier build step and is not described in
this file.

Signed-off-by: Remy Bohmer <linux@bohmer.net>
[yann.morin.1998@anciense.nib.fr: we already have a way to detect ncurses usage]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     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 
    12 diff -durN gcc-4.4.4.orig/gcc/config/t-slibgcc-elf-ver gcc-4.4.4/gcc/config/t-slibgcc-elf-ver
    13 --- gcc-4.4.4.orig/gcc/config/t-slibgcc-elf-ver	2010-01-04 16:13:08.000000000 +0100
    14 +++ gcc-4.4.4/gcc/config/t-slibgcc-elf-ver	2010-05-16 19:38:36.000000000 +0200
    15 @@ -9,7 +9,7 @@
    16  SHLIB_OBJS = @shlib_objs@
    17  SHLIB_DIR = @multilib_dir@
    18  SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
    19 -SHLIB_LC = -lc
    20 +SHLIB_LC = @libgcc_libm@ -lc
    21  SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
    22  SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
    23  	$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
    24 diff -durN gcc-4.4.4.orig/libgcc/Makefile.in gcc-4.4.4/libgcc/Makefile.in
    25 --- gcc-4.4.4.orig/libgcc/Makefile.in	2009-04-10 01:23:07.000000000 +0200
    26 +++ gcc-4.4.4/libgcc/Makefile.in	2010-05-16 19:38:36.000000000 +0200
    27 @@ -39,6 +39,7 @@
    28  decimal_float = @decimal_float@
    29  enable_decimal_float = @enable_decimal_float@
    30  fixed_point = @fixed_point@
    31 +LIBGCC_LIBM = @LIBGCC_LIBM@
    32  
    33  host_noncanonical = @host_noncanonical@
    34  
    35 @@ -787,9 +788,10 @@
    36  		@multilib_dir@,$(MULTIDIR),$(subst \
    37  		@shlib_objs@,$(objects),$(subst \
    38  		@shlib_base_name@,libgcc_s,$(subst \
    39 +		@libgcc_libm@,$(LIBGCC_LIBM),$(subst \
    40  		@shlib_map_file@,$(mapfile),$(subst \
    41  		@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
    42 -		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
    43 +		@shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
    44  
    45  libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
    46  	# @multilib_flags@ is still needed because this may use
    47 diff -durN gcc-4.4.4.orig/libgcc/configure gcc-4.4.4/libgcc/configure
    48 --- gcc-4.4.4.orig/libgcc/configure	2008-11-20 18:13:01.000000000 +0100
    49 +++ gcc-4.4.4/libgcc/configure	2010-05-16 19:38:36.000000000 +0200
    50 @@ -272,7 +272,7 @@
    51  PACKAGE_BUGREPORT=''
    52  
    53  ac_unique_file="static-object.mk"
    54 -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'
    55 +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'
    56  ac_subst_files=''
    57  ac_pwd=`pwd`
    58  
    59 @@ -3547,6 +3547,39 @@
    60  fi
    61  
    62  
    63 +# On powerpc libgcc_s references copysignl which is a libm function but
    64 +# glibc apparently also provides it via libc as opposed to uClibc where
    65 +# it lives in libm.
    66 +echo "$as_me:$LINENO: checking for library containing copysignl" >&5
    67 +echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
    68 +if test "${libgcc_cv_copysignl_lib+set}" = set; then
    69 +  echo $ECHO_N "(cached) $ECHO_C" >&6
    70 +else
    71 +
    72 +    echo '#include <features.h>' > conftest.c
    73 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
    74 +    libgcc_cv_copysignl_lib="-lc"
    75 +    if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
    76 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
    77 +  (eval $ac_try) 2>&5
    78 +  ac_status=$?
    79 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
    80 +  (exit $ac_status); }; }
    81 +    then
    82 +	libgcc_cv_copysignl_lib="-lm"
    83 +    fi
    84 +    rm -f conftest.*
    85 +
    86 +fi
    87 +echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
    88 +echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
    89 +
    90 +case /${libgcc_cv_copysignl_lib}/ in
    91 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
    92 +  *) LIBGCC_LIBM= ;;
    93 +esac
    94 +
    95 +
    96  # Conditionalize the makefile for this target machine.
    97  tmake_file_=
    98  for f in ${tmake_file}
    99 @@ -4267,6 +4300,7 @@
   100  s,@fixed_point@,$fixed_point,;t t
   101  s,@vis_hide@,$vis_hide,;t t
   102  s,@set_have_cc_tls@,$set_have_cc_tls,;t t
   103 +s,@LIBGCC_LIBM@,$LIBGCC_LIBM,;t t
   104  s,@tmake_file@,$tmake_file,;t t
   105  s,@extra_parts@,$extra_parts,;t t
   106  s,@asm_hidden_op@,$asm_hidden_op,;t t
   107 diff -durN gcc-4.4.4.orig/libgcc/configure.ac gcc-4.4.4/libgcc/configure.ac
   108 --- gcc-4.4.4.orig/libgcc/configure.ac	2008-11-20 18:13:01.000000000 +0100
   109 +++ gcc-4.4.4/libgcc/configure.ac	2010-05-16 19:38:36.000000000 +0200
   110 @@ -223,6 +223,27 @@
   111  fi
   112  AC_SUBST(set_have_cc_tls)
   113  
   114 +# On powerpc libgcc_s references copysignl which is a libm function but
   115 +# glibc apparently also provides it via libc as opposed to uClibc where
   116 +# it lives in libm.
   117 +AC_CACHE_CHECK
   118 +  libgcc_cv_copysignl_lib,
   119 +    echo '#include <features.h>' > conftest.c
   120 +    echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
   121 +    libgcc_cv_copysignl_lib="-lc"
   122 +    if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
   123 +    then
   124 +	libgcc_cv_copysignl_lib="-lm"
   125 +    fi
   126 +    rm -f conftest.*
   127 +  ])
   128 +
   129 +case /${libgcc_cv_copysignl_lib}/ in
   130 +  /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
   131 +  *) LIBGCC_LIBM= ;;
   132 +esac
   133 +AC_SUBST(LIBGCC_LIBM)
   134 +
   135  # Conditionalize the makefile for this target machine.
   136  tmake_file_=
   137  for f in ${tmake_file}