2010-06-09 Khem Raj <raj.khem@gmail.com>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 15:34:45 +0000 (15:34 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Jun 2010 15:34:45 +0000 (15:34 +0000)
PR libstdc++/44461
* libsupc++/eh_arm.cc (__cxa_end_cleanup): Use .pushsection/.popsection
to emit inline assembly into .text section.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160488 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/eh_arm.cc

index 84eb514..2ea2b29 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-09  Khem Raj  <raj.khem@gmail.com>
+
+       PR libstdc++/44461
+       * libsupc++/eh_arm.cc (__cxa_end_cleanup): Use .pushsection/.popsection
+       to emit inline assembly into .text section.
+
 2010-06-09  Paolo Carlini  <paolo.carlini@oracle.com>
 
        Revert:
index 58997cc..e508ada 100644 (file)
@@ -157,22 +157,26 @@ __gnu_end_cleanup(void)
 // 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 ("  .pushsection .text.__cxa_end_cleanup\n"
+"      .global __cxa_end_cleanup\n"
 "      .type __cxa_end_cleanup, \"function\"\n"
 "      .thumb_func\n"
 "__cxa_end_cleanup:\n"
 "      push\t{r1, r2, r3, r4}\n"
 "      bl\t__gnu_end_cleanup\n"
 "      pop\t{r1, r2, r3, r4}\n"
-"      bl\t_Unwind_Resume @ Never returns\n");
+"      bl\t_Unwind_Resume @ Never returns\n"
+"      .popsection\n");
 #else
-asm (".global __cxa_end_cleanup\n"
+asm ("  .pushsection .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"
 "      bl\t__gnu_end_cleanup\n"
 "      ldmfd\tsp!, {r1, r2, r3, r4}\n"
-"      bl\t_Unwind_Resume @ Never returns\n");
+"      bl\t_Unwind_Resume @ Never returns\n"
+"      .popsection\n");
 #endif
 
 #endif