mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-04-02 02:49:12 +00:00
This needs further investigation, but for now we can get the tested sources into the poky gcc harness Signed-off-by: Koen Kooi <k-kooi@ti.com>
87 lines
1.6 KiB
Diff
87 lines
1.6 KiB
Diff
|
|
http://gcc.gnu.org/ml/gcc-patches/2006-03/msg00038.html
|
|
|
|
* g++.dg/other/armv7m-1.C: New.
|
|
|
|
2010-07-26 Julian Brown <julian@codesourcery.com>
|
|
|
|
Merge from Sourcery G++ 4.4:
|
|
|
|
http://gcc.gnu.org/ml/gcc-patches/2006-04/msg00811.html
|
|
|
|
|
|
=== added file 'gcc/testsuite/g++.dg/other/armv7m-1.C'
|
|
--- old/gcc/testsuite/g++.dg/other/armv7m-1.C 1970-01-01 00:00:00 +0000
|
|
+++ new/gcc/testsuite/g++.dg/other/armv7m-1.C 2010-08-05 16:23:43 +0000
|
|
@@ -0,0 +1,69 @@
|
|
+/* { dg-do run { target arm*-*-* } } */
|
|
+/* Test Armv7m interrupt routines. */
|
|
+#include <stdlib.h>
|
|
+
|
|
+#ifdef __ARM_ARCH_7M__
|
|
+void __attribute__((interrupt))
|
|
+foo(void)
|
|
+{
|
|
+ long long n;
|
|
+ long p;
|
|
+ asm volatile ("" : "=r" (p) : "0" (&n));
|
|
+ if (p & 4)
|
|
+ abort ();
|
|
+ return;
|
|
+}
|
|
+
|
|
+void __attribute__((interrupt))
|
|
+bar(void)
|
|
+{
|
|
+ throw 42;
|
|
+}
|
|
+
|
|
+int main()
|
|
+{
|
|
+ int a;
|
|
+ int before;
|
|
+ int after;
|
|
+ volatile register int sp asm("sp");
|
|
+
|
|
+ asm volatile ("mov %0, sp\n"
|
|
+ "blx %2\n"
|
|
+ "mov %1, sp\n"
|
|
+ : "=&r" (before), "=r" (after) : "r" (foo)
|
|
+ : "memory", "cc", "r0", "r1", "r2", "r3", "ip", "lr");
|
|
+ if (before != after)
|
|
+ abort();
|
|
+ asm volatile ("mov %0, sp\n"
|
|
+ "sub sp, sp, #4\n"
|
|
+ "blx %2\n"
|
|
+ "add sp, sp, #4\n"
|
|
+ "mov %1, sp\n"
|
|
+ : "=&r" (before), "=r" (after) : "r" (foo)
|
|
+ : "memory", "cc", "r0", "r1", "r2", "r3", "ip", "lr");
|
|
+ if (before != after)
|
|
+ abort();
|
|
+ before = sp;
|
|
+ try
|
|
+ {
|
|
+ bar();
|
|
+ }
|
|
+ catch (int i)
|
|
+ {
|
|
+ if (i != 42)
|
|
+ abort();
|
|
+ }
|
|
+ catch (...)
|
|
+ {
|
|
+ abort();
|
|
+ }
|
|
+ if (before != sp)
|
|
+ abort();
|
|
+ exit(0);
|
|
+}
|
|
+#else
|
|
+int main()
|
|
+{
|
|
+ exit (0);
|
|
+}
|
|
+#endif
|
|
|