re PR target/70496 (inadvertent change to ASM_APP_OFF for .arm / .thumb directives.)

Fix PR target/70496

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
after the inline assembler block. Thanks to Jim Wilson for pointing it
out on the linaro list.

Fixed thusly and a test is added. Tested arm-none-eabi cross and
applied.

Ramana

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

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

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

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

From-SVN: r234675
This commit is contained in:
Ramana Radhakrishnan 2016-04-01 14:58:53 +00:00 committed by Ramana Radhakrishnan
parent 9553dd73e1
commit 41d146597c
4 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2016-04-01 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/70496
* config/arm/arm.h (ASM_APP_OFF): Handle TARGET_ARM
and TARGET_THUMB.
2016-04-01 Nathan Sidwell <nathan@acm.org>
* tree.def (TRY_CATCH_EXPR): Correct documentation.

View File

@ -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

View File

@ -1,3 +1,8 @@
2016-04-01 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR target/70496
* gcc.target/arm/pr70496.c: New test.
2016-04-01 Nathan Sidwell <nathan@acm.org>
PR c++/68475

View File

@ -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:");
}