Hi,

        While doing the unified asm rewrite - I inadvertently changed the
meaning of ASM_APP_OFF which causes failures when folks who know what
they are doing switch between arm and thumb states within a
function. The intent of the unified asm rewrite was not to affect any
inline assembler code in that it would remain in divided syntax by
default and switching back to unified asm in normal compiled code.

Thanks to Jim Wilson for pointing it out on the linaro toolchain list and
sorry about the breakage.

Tested arm-none-eabi cross with both arm and thumb multilibs and applied to 
trunk.

regards
Ramana

2016-04-01  Ramana Radhakrishnan  <ramana.radhakrish...@arm.com>

        PR target/70496
        * config/arm/arm.h (ASM_APP_OFF): Handle TARGET_ARM
        and TARGET_THUMB.

2016-04-01  Ramana Radhakrishnan  <ramana.radhakrish...@arm.com>

        PR target/70496
        * gcc.target/arm/pr70496.c: New test.




commit 767f1ecfa04beab3c01db38999bf2cfe170c2e93
Author: Ramana Radhakrishnan <ramana.radhakrish...@arm.com>
Date:   Fri Apr 1 11:14:59 2016 +0100

    Fix PR70496

diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 6352140..ad123dd 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -2037,7 +2037,8 @@ extern int making_const_table;
                    "\t.syntax divided\n")
 
 #undef  ASM_APP_OFF
-#define ASM_APP_OFF "\t.syntax unified\n"
+#define ASM_APP_OFF (TARGET_ARM ? "\t.arm\n\t.syntax unified\n" : \
+                    "\t.thumb\n\t.syntax unified\n")
 
 /* Output a push or a pop instruction (only used when profiling).
    We can't push STATIC_CHAIN_REGNUM (r12) directly with Thumb-1.  We know
diff --git a/gcc/testsuite/gcc.target/arm/pr70496.c 
b/gcc/testsuite/gcc.target/arm/pr70496.c
new file mode 100644
index 0000000..89957e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr70496.c
@@ -0,0 +1,12 @@
+/* { dg-do assemble } */
+/* { dg-options "-mthumb -O2" } */
+/* { dg-require-effective-target arm_thumb2_ok } */
+
+int i;
+void
+main (void)
+{
+  __asm__ volatile (".arm");
+  i = 0;
+  __asm__ volatile ("\n cbz r0, 2f\n2:");
+}

Reply via email to