powerpc-link-with-math-lib.patch.conditional 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. http://gcc.gnu.org/ml/gcc-patches/2008-10/msg00269.html
  2. On glibc the libc.so carries a copy of the math function copysignl() but
  3. on uClibc math functions like copysignl() live in libm. Since libgcc_s
  4. contains unresolved symbols, any attempt to link against libgcc_s
  5. without explicitely specifying -lm fails, resulting in a broken
  6. bootstrap of the compiler.
  7. Forward port to gcc 4.5.1 by Gustavo Zacarias <gustavo@zacarias.com.ar>
  8. diff -Nura gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver gcc-4.5.1/gcc/config/t-slibgcc-elf-ver
  9. --- gcc-4.5.1.orig/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:08.644904042 -0300
  10. +++ gcc-4.5.1/gcc/config/t-slibgcc-elf-ver 2010-11-03 14:35:56.332904024 -0300
  11. @@ -27,7 +27,7 @@
  12. SHLIB_OBJS = @shlib_objs@
  13. SHLIB_DIR = @multilib_dir@
  14. SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
  15. -SHLIB_LC = -lc
  16. +SHLIB_LC = @libgcc_libm@ -lc
  17. SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
  18. SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
  19. $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
  20. diff -Nura gcc-4.5.1.orig/libgcc/Makefile.in gcc-4.5.1/libgcc/Makefile.in
  21. --- gcc-4.5.1.orig/libgcc/Makefile.in 2010-11-03 14:32:44.272904042 -0300
  22. +++ gcc-4.5.1/libgcc/Makefile.in 2010-11-03 14:37:03.893904042 -0300
  23. @@ -39,6 +39,7 @@
  24. decimal_float = @decimal_float@
  25. enable_decimal_float = @enable_decimal_float@
  26. fixed_point = @fixed_point@
  27. +LIBGCC_LIBM = @LIBGCC_LIBM@
  28. host_noncanonical = @host_noncanonical@
  29. @@ -798,9 +799,10 @@
  30. @multilib_dir@,$(MULTIDIR),$(subst \
  31. @shlib_objs@,$(objects),$(subst \
  32. @shlib_base_name@,libgcc_s,$(subst \
  33. + @libgcc_libm@,$(LIBGCC_LIBM),$(subst \
  34. @shlib_map_file@,$(mapfile),$(subst \
  35. @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
  36. - @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK))))))))
  37. + @shlib_slibdir@,$(shlib_slibdir),$(SHLIB_LINK)))))))))
  38. libunwind$(SHLIB_EXT): $(libunwind-s-objects) $(extra-parts)
  39. # @multilib_flags@ is still needed because this may use
  40. diff -Nura gcc-4.5.1.orig/libgcc/configure gcc-4.5.1/libgcc/configure
  41. --- gcc-4.5.1.orig/libgcc/configure 2010-11-03 14:32:44.283904042 -0300
  42. +++ gcc-4.5.1/libgcc/configure 2010-11-03 14:39:48.685904042 -0300
  43. @@ -557,6 +557,7 @@
  44. extra_parts
  45. tmake_file
  46. set_use_emutls
  47. +LIBGCC_LIBM
  48. set_have_cc_tls
  49. vis_hide
  50. fixed_point
  51. @@ -3847,6 +3848,37 @@
  52. set_use_emutls="-DUSE_EMUTLS"
  53. fi
  54. +# On powerpc libgcc_s references copysignl which is a libm function but
  55. +# glibc apparently also provides it via libc as opposed to uClibc where
  56. +# it lives in libm.
  57. +echo "$as_me:$LINENO: checking for library containing copysignl" >&5
  58. +echo $ECHO_N "checking for library containing copysignl... $ECHO_C" >&6
  59. +if test "${libgcc_cv_copysignl_lib+set}" = set; then
  60. + echo $ECHO_N "(cached) $ECHO_C" >&6
  61. +else
  62. +
  63. + echo '#include <features.h>' > conftest.c
  64. + echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
  65. + libgcc_cv_copysignl_lib="-lc"
  66. + if { ac_try='${CC-cc} -S conftest.c -o conftest.s 1>&5'
  67. + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
  68. + (eval $ac_try) 2>&5
  69. + ac_status=$?
  70. + echo "$as_me:$LINENO: \$? = $ac_status" >&5
  71. + (exit $ac_status); }; }
  72. + then
  73. + libgcc_cv_copysignl_lib="-lm"
  74. + fi
  75. + rm -f conftest.*
  76. +
  77. +fi
  78. +echo "$as_me:$LINENO: result: $libgcc_cv_copysignl_lib" >&5
  79. +echo "${ECHO_T}$libgcc_cv_copysignl_lib" >&6
  80. +
  81. +case /${libgcc_cv_copysignl_lib}/ in
  82. + /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
  83. + *) LIBGCC_LIBM= ;;
  84. +esac
  85. # Conditionalize the makefile for this target machine.
  86. tmake_file_=
  87. diff -Nura gcc-4.5.1.orig/libgcc/configure.ac gcc-4.5.1/libgcc/configure.ac
  88. --- gcc-4.5.1.orig/libgcc/configure.ac 2010-11-03 14:32:44.735904042 -0300
  89. +++ gcc-4.5.1/libgcc/configure.ac 2010-11-03 14:42:11.278904045 -0300
  90. @@ -238,6 +238,27 @@
  91. fi
  92. AC_SUBST(set_have_cc_tls)
  93. +# On powerpc libgcc_s references copysignl which is a libm function but
  94. +# glibc apparently also provides it via libc as opposed to uClibc where
  95. +# it lives in libm.
  96. +AC_CACHE_CHECK
  97. + libgcc_cv_copysignl_lib,
  98. + echo '#include <features.h>' > conftest.c
  99. + echo 'int the_libc = __UCLIBC__ + __powerpc__;' >> conftest.c
  100. + libgcc_cv_copysignl_lib="-lc"
  101. + if AC_TRY_COMMAND(${CC-cc} -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD)
  102. + then
  103. + libgcc_cv_copysignl_lib="-lm"
  104. + fi
  105. + rm -f conftest.*
  106. + ])
  107. +
  108. +case /${libgcc_cv_copysignl_lib}/ in
  109. + /-lm/) LIBGCC_LIBM="$LIBGCC_LIBM -lm" ;;
  110. + *) LIBGCC_LIBM= ;;
  111. +esac
  112. +AC_SUBST(LIBGCC_LIBM)
  113. +
  114. # See if we have emulated thread-local storage.
  115. GCC_CHECK_EMUTLS
  116. set_use_emutls=