[oe-commits] Khem Raj : gcc-4.5: Fix libstdc++ build for ARM

git version control git at git.openembedded.org
Tue Jun 8 02:59:36 UTC 2010


Module: openembedded.git
Branch: org.openembedded.dev
Commit: 48b5a0e69d868a069c1b6fc4605ed0e281ee07af
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=48b5a0e69d868a069c1b6fc4605ed0e281ee07af

Author: Khem Raj <raj.khem at gmail.com>
Date:   Mon Jun  7 19:56:19 2010 -0700

gcc-4.5: Fix libstdc++ build for ARM

* This patch makes sure that __cxa_end_cleanup is
  emitted in .text section.

* Bump SRCREV to latest

Signed-off-by: Khem Raj <raj.khem at gmail.com>

---

 recipes/gcc/gcc-4.5.inc                            |   11 +++-
 recipes/gcc/gcc-4.5/gcc-flags-for-build.patch      |   58 ++++++++++----------
 .../libstdc++-emit-__cxa_end_cleanup-in-text.patch |   29 ++++++++++
 3 files changed, 67 insertions(+), 31 deletions(-)

diff --git a/recipes/gcc/gcc-4.5.inc b/recipes/gcc/gcc-4.5.inc
index 50e2179..6c5b044 100644
--- a/recipes/gcc/gcc-4.5.inc
+++ b/recipes/gcc/gcc-4.5.inc
@@ -8,10 +8,16 @@ DEPENDS = "mpfr gmp libmpc"
 NATIVEDEPS = "mpfr-native gmp-native libmpc-native"
 
 
-INC_PR = "r1"
+INC_PR = "r2"
 
-SRCREV = "160043"
+SRCREV = "160413"
 PV = "4.5"
+# BINV should be incremented after updating to a revision
+# after a minor gcc release (e.g. 4.5.1 or 4.5.2) has been made
+# the value will be minor-release+1 e.g. if minor release was
+# 4.5.1 then the value below will be 2 which will mean 4.5.2
+# which will be next minor release and so on.
+
 BINV = "${PV}.1"
 BRANCH = "gcc-4_5-branch"
 PR_append = "+svnr${SRCPV}"
@@ -22,6 +28,7 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH} \
            file://gcc-uclibc-locale-ctype_touplow_t.patch \
 	   file://cache-amnesia.patch \
 	   file://gcc-flags-for-build.patch \
+	   file://libstdc++-emit-__cxa_end_cleanup-in-text.patch \
 	  "
 
 # Language Overrides
diff --git a/recipes/gcc/gcc-4.5/gcc-flags-for-build.patch b/recipes/gcc/gcc-4.5/gcc-flags-for-build.patch
index 905152d..510c462 100644
--- a/recipes/gcc/gcc-4.5/gcc-flags-for-build.patch
+++ b/recipes/gcc/gcc-4.5/gcc-flags-for-build.patch
@@ -1,7 +1,7 @@
 Index: gcc-4.5/Makefile.def
 ===================================================================
---- gcc-4.5.orig/Makefile.def	2010-05-30 20:32:58.000000000 -0700
-+++ gcc-4.5/Makefile.def	2010-05-30 22:40:11.810599683 -0700
+--- gcc-4.5.orig/Makefile.def	2010-06-04 23:21:43.000000000 -0700
++++ gcc-4.5/Makefile.def	2010-06-07 18:29:45.867493975 -0700
 @@ -240,6 +240,7 @@ flags_to_pass = { flag= AWK ; };
  flags_to_pass = { flag= BISON ; };
  flags_to_pass = { flag= CC_FOR_BUILD ; };
@@ -12,8 +12,8 @@ Index: gcc-4.5/Makefile.def
  flags_to_pass = { flag= FLEX ; };
 Index: gcc-4.5/gcc/Makefile.in
 ===================================================================
---- gcc-4.5.orig/gcc/Makefile.in	2010-05-30 20:30:34.000000000 -0700
-+++ gcc-4.5/gcc/Makefile.in	2010-05-30 22:40:11.820599836 -0700
+--- gcc-4.5.orig/gcc/Makefile.in	2010-06-04 23:20:06.000000000 -0700
++++ gcc-4.5/gcc/Makefile.in	2010-06-07 18:29:45.877491615 -0700
 @@ -762,7 +762,7 @@ BUILD_LINKERFLAGS = $(BUILD_CFLAGS)
  
  # Native linker and preprocessor flags.  For x-fragment overrides.
@@ -25,9 +25,9 @@ Index: gcc-4.5/gcc/Makefile.in
  GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
 Index: gcc-4.5/gcc/configure.ac
 ===================================================================
---- gcc-4.5.orig/gcc/configure.ac	2010-05-30 22:39:14.000000000 -0700
-+++ gcc-4.5/gcc/configure.ac	2010-05-30 22:40:11.820599836 -0700
-@@ -1782,16 +1782,18 @@ AC_SUBST(inhibit_libc)
+--- gcc-4.5.orig/gcc/configure.ac	2010-06-07 17:45:41.000000000 -0700
++++ gcc-4.5/gcc/configure.ac	2010-06-07 18:29:45.877491615 -0700
+@@ -1798,16 +1798,18 @@ AC_SUBST(inhibit_libc)
  # Also, we cannot run fixincludes.
  
  # These are the normal (build=host) settings:
@@ -52,8 +52,8 @@ Index: gcc-4.5/gcc/configure.ac
  # Expand extra_headers to include complete path.
 Index: gcc-4.5/Makefile.in
 ===================================================================
---- gcc-4.5.orig/Makefile.in	2010-05-30 20:32:58.000000000 -0700
-+++ gcc-4.5/Makefile.in	2010-05-30 22:40:11.830627507 -0700
+--- gcc-4.5.orig/Makefile.in	2010-06-04 23:21:43.000000000 -0700
++++ gcc-4.5/Makefile.in	2010-06-07 18:29:45.887501058 -0700
 @@ -333,6 +333,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
  AS_FOR_BUILD = @AS_FOR_BUILD@
  CC_FOR_BUILD = @CC_FOR_BUILD@
@@ -72,8 +72,8 @@ Index: gcc-4.5/Makefile.in
  	"FLEX=$(FLEX)" \
 Index: gcc-4.5/gcc/configure
 ===================================================================
---- gcc-4.5.orig/gcc/configure	2010-05-30 22:39:14.000000000 -0700
-+++ gcc-4.5/gcc/configure	2010-05-30 22:42:23.488119238 -0700
+--- gcc-4.5.orig/gcc/configure	2010-06-07 17:45:41.000000000 -0700
++++ gcc-4.5/gcc/configure	2010-06-07 18:30:48.917502927 -0700
 @@ -705,6 +705,7 @@ SED
  LIBTOOL
  collect2
@@ -82,7 +82,7 @@ Index: gcc-4.5/gcc/configure
  BUILD_LDFLAGS
  BUILD_CFLAGS
  CC_FOR_BUILD
-@@ -10927,6 +10928,7 @@ fi
+@@ -10980,6 +10981,7 @@ fi
  CC_FOR_BUILD='$(CC)'
  BUILD_CFLAGS='$(ALL_CFLAGS)'
  BUILD_LDFLAGS='$(LDFLAGS)'
@@ -90,7 +90,7 @@ Index: gcc-4.5/gcc/configure
  STMP_FIXINC=stmp-fixinc
  
  # And these apply if build != host, or we are generating coverage data
-@@ -10934,6 +10936,7 @@ if test x$build != x$host || test "x$cov
+@@ -10987,6 +10989,7 @@ if test x$build != x$host || test "x$cov
  then
      BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
      BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
@@ -98,28 +98,28 @@ Index: gcc-4.5/gcc/configure
  fi
  
  # Expand extra_headers to include complete path.
-@@ -17053,7 +17056,7 @@ else
+@@ -17106,7 +17109,7 @@ else
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
--#line 17056 "configure"
-+#line 17059 "configure"
+-#line 17109 "configure"
++#line 17112 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
-@@ -17159,7 +17162,7 @@ else
+@@ -17212,7 +17215,7 @@ else
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
--#line 17162 "configure"
-+#line 17165 "configure"
+-#line 17215 "configure"
++#line 17218 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
 Index: gcc-4.5/Makefile.tpl
 ===================================================================
---- gcc-4.5.orig/Makefile.tpl	2010-05-30 20:32:58.000000000 -0700
-+++ gcc-4.5/Makefile.tpl	2010-05-30 22:40:11.840621166 -0700
+--- gcc-4.5.orig/Makefile.tpl	2010-06-04 23:21:43.000000000 -0700
++++ gcc-4.5/Makefile.tpl	2010-06-07 18:29:45.897539904 -0700
 @@ -336,6 +336,7 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
  AS_FOR_BUILD = @AS_FOR_BUILD@
  CC_FOR_BUILD = @CC_FOR_BUILD@
@@ -130,8 +130,8 @@ Index: gcc-4.5/Makefile.tpl
  DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
 Index: gcc-4.5/configure
 ===================================================================
---- gcc-4.5.orig/configure	2010-05-30 22:39:13.018100422 -0700
-+++ gcc-4.5/configure	2010-05-30 22:40:11.840621166 -0700
+--- gcc-4.5.orig/configure	2010-06-07 17:45:40.329993062 -0700
++++ gcc-4.5/configure	2010-06-07 18:29:45.897539904 -0700
 @@ -651,6 +651,7 @@ GCJ_FOR_BUILD
  DLLTOOL_FOR_BUILD
  CXX_FOR_BUILD
@@ -140,7 +140,7 @@ Index: gcc-4.5/configure
  CFLAGS_FOR_BUILD
  CC_FOR_BUILD
  AS_FOR_BUILD
-@@ -7973,6 +7974,7 @@ esac
+@@ -8027,6 +8028,7 @@ esac
  # our build compiler if desired.
  if test x"${build}" = x"${host}" ; then
    CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
@@ -148,7 +148,7 @@ Index: gcc-4.5/configure
    CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
    LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
  fi
-@@ -8052,6 +8054,7 @@ done
+@@ -8106,6 +8108,7 @@ done
  
  
  
@@ -158,9 +158,9 @@ Index: gcc-4.5/configure
  # programs in objdir.
 Index: gcc-4.5/configure.ac
 ===================================================================
---- gcc-4.5.orig/configure.ac	2010-05-30 22:39:12.000000000 -0700
-+++ gcc-4.5/configure.ac	2010-05-30 22:40:11.840621166 -0700
-@@ -3061,6 +3061,7 @@ esac
+--- gcc-4.5.orig/configure.ac	2010-06-07 17:45:40.000000000 -0700
++++ gcc-4.5/configure.ac	2010-06-07 18:29:45.897539904 -0700
+@@ -3081,6 +3081,7 @@ esac
  # our build compiler if desired.
  if test x"${build}" = x"${host}" ; then
    CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
@@ -168,7 +168,7 @@ Index: gcc-4.5/configure.ac
    CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}}
    LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}}
  fi
-@@ -3127,6 +3128,7 @@ AC_SUBST(AR_FOR_BUILD)
+@@ -3147,6 +3148,7 @@ AC_SUBST(AR_FOR_BUILD)
  AC_SUBST(AS_FOR_BUILD)
  AC_SUBST(CC_FOR_BUILD)
  AC_SUBST(CFLAGS_FOR_BUILD)
diff --git a/recipes/gcc/gcc-4.5/libstdc++-emit-__cxa_end_cleanup-in-text.patch b/recipes/gcc/gcc-4.5/libstdc++-emit-__cxa_end_cleanup-in-text.patch
new file mode 100644
index 0000000..307327c
--- /dev/null
+++ b/recipes/gcc/gcc-4.5/libstdc++-emit-__cxa_end_cleanup-in-text.patch
@@ -0,0 +1,29 @@
+2010-06-07  Khem Raj  <raj.khem at gmail.com>
+
+	* libsupc++/eh_arm.cc (__cxa_end_cleanup): Switch to
+	.text section before emitting inline assembly.
+
+Index: gcc/libstdc++-v3/libsupc++/eh_arm.cc
+===================================================================
+--- gcc/libstdc++-v3/libsupc++/eh_arm.cc	(revision 160410)
++++ gcc/libstdc++v3/libsupc++/eh_arm.cc	(working copy)
+@@ -157,7 +157,8 @@
+ // Assembly wrapper to call __gnu_end_cleanup without clobbering r1-r3.
+ // Also push r4 to preserve stack alignment.
+ #ifdef __thumb__
+-asm (".global __cxa_end_cleanup\n"
++asm ("  .section .text.__cxa_end_cleanup\n"
++"	.global __cxa_end_cleanup\n"
+ "	.type __cxa_end_cleanup, \"function\"\n"
+ "	.thumb_func\n"
+ "__cxa_end_cleanup:\n"
+@@ -166,7 +167,8 @@
+ "	pop\t{r1, r2, r3, r4}\n"
+ "	bl\t_Unwind_Resume @ Never returns\n");
+ #else
+-asm (".global __cxa_end_cleanup\n"
++asm ("  .section .text.__cxa_end_cleanup\n"
++"	.global __cxa_end_cleanup\n"
+ "	.type __cxa_end_cleanup, \"function\"\n"
+ "__cxa_end_cleanup:\n"
+ "	stmfd\tsp!, {r1, r2, r3, r4}\n"





More information about the Openembedded-commits mailing list