This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH,testsuite] fix gcc.target/arm/long-calls-*.c in Thumb-2 mode


The patch below fixes several failures for tests on Thumb-2 targets.

- GCC doesn't (currently) generate sibling calls in Thumb-2 mode;

- The tests are looking for PLT markers, which don't get generated for
  Thumb-2, and may eventually not get generated for ARM mode.

Neither of these things is core to the tests themselves: the tests are
looking for the presence of short or long calls.

Tested on arm-none-eabi.  OK to commit?

-Nathan

2009-01-14  Mark Mitchell  <mark@codesourcery.com>

	* gcc.target/arm/long-calls-1.c: Tolerate the lack of sibling
	calls and/or PLT markers.
	* gcc.target/arm/long-calls-2.c: Tolerate the lack of sibling
	calls and/or PLT markers.
	* gcc.target/arm/long-calls-3.c: Tolerate the lack of sibling
	calls and/or PLT markers.
	* gcc.target/arm/long-calls-4.c: Tolerate the lack of sibling
	calls and/or PLT markers.

Index: gcc.target/arm/long-calls-1.c
===================================================================
--- gcc.target/arm/long-calls-1.c	(revision 143377)
+++ gcc.target/arm/long-calls-1.c	(working copy)
@@ -38,8 +38,14 @@ DO_TESTS_CALL_ATTR (weak_, EXTERN_CALL, 
 DO_TESTS_CALL_ATTR (static_, STATIC_CALL,)
 
 
-/* Calls to remote_* should honor the call type sttribute,
-   with "short" being the default.  */
+/* Calls to remote_* should honor the call type attribute,
+   with "short" being the default.
+
+   In the regular expressions below:
+   
+   * We allow both "b" and "bl" in some cases to allow for the
+     possibility of sibling calls.  As of this writing, GCC does not
+     use sibling calls in Thumb-2 mode.  */
 
 /* { dg-final { scan-assembler "\tbl\tremote_n1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tremote_n2\n" } } */
@@ -59,46 +65,46 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
    should be short.  */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_n1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_n2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_n3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_l1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_l1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_l1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tstrong_l2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_l3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_l3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s3\n" } } */
 
 
-/* Calls to weak_* should honor the call type sttribute,
+/* Calls to weak_* should honor the call type attribute,
    with "short" being the default.  */
 
 /* { dg-final { scan-assembler "\tbl\tweak_n1\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_n2\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_n3\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n3\n" } } */
 
 /* { dg-final { scan-assembler-not "\tbl?\tweak_l1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tweak_l2\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tweak_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tweak_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s3\n" } } */
 
 
 /* Calls to static_*2 calls should honor the call type attribute,
@@ -106,21 +112,21 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
    should be short.  */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_n1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_n2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_n3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_l1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tstatic_l2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_l3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s3\n" } } */
Index: gcc.target/arm/long-calls-2.c
===================================================================
--- gcc.target/arm/long-calls-2.c	(revision 143377)
+++ gcc.target/arm/long-calls-2.c	(working copy)
@@ -38,8 +38,14 @@ DO_TESTS_CALL_ATTR (weak_, EXTERN_CALL, 
 DO_TESTS_CALL_ATTR (static_, STATIC_CALL,)
 
 
-/* Calls to remote_* should honor the call type sttribute,
-   with "long" being the default.  */
+/* Calls to remote_* should honor the call type attribute,
+   with "long" being the default.
+
+   In the regular expressions below:
+   
+   * We allow both "b" and "bl" in some cases to allow for the
+     possibility of sibling calls.  As of this writing, GCC does not
+     use sibling calls in Thumb-2 mode.  */
 
 /* { dg-final { scan-assembler-not "\tbl\tremote_n1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl\tremote_n2\n" } } */
@@ -59,26 +65,26 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
    should be short.  */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_n1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl\tstrong_n2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_n3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_l1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_l1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_l1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tstrong_l2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_l3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_l3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstrong_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstrong_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s3\n" } } */
 
 
-/* Calls to weak_* should honor the call type sttribute,
+/* Calls to weak_* should honor the call type attribute,
    with "long" being the default.  */
 
 /* { dg-final { scan-assembler-not "\tbl?\tweak_n1\n" } } */
@@ -90,11 +96,11 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
 /* { dg-final { scan-assembler-not "\tbl?\tweak_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tweak_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tweak_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s3\n" } } */
 
 
 /* Calls to static_*2 calls should honor the call type attribute,
@@ -102,20 +108,20 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
    should be short.  */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_n1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tstatic_n2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_n3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_l1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l1\n" } } */
 /* { dg-final { scan-assembler-not "\tbl?\tstatic_l2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_l3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l3\n" } } */
 
 /* { dg-final { scan-assembler "\tbl\tstatic_s1\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s1\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s1\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_s2\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s2\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s2\n" } } */
 /* { dg-final { scan-assembler "\tbl\tstatic_s3\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s3\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s3\n" } } */
Index: gcc.target/arm/long-calls-3.c
===================================================================
--- gcc.target/arm/long-calls-3.c	(revision 143377)
+++ gcc.target/arm/long-calls-3.c	(working copy)
@@ -39,79 +39,88 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
 
 
 /* Calls to remote_*, strong_* and weak_* should honor the call type
-   sttribute, with "short" being the default.  */
+   attribute, with "short" being the default.  
 
-/* { dg-final { scan-assembler "\tbl\tremote_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl\tremote_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tremote_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_s3\\(PLT\\)\n" } } */
-
-
-/* { dg-final { scan-assembler "\tbl\tstrong_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_n3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl\tstrong_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tstrong_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstrong_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_s3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s3\\(PLT\\)\n" } } */
-
-
-/* { dg-final { scan-assembler "\tbl\tweak_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_n3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tweak_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_s3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s3\\(PLT\\)\n" } } */
+   In the regular expressions below:
+   
+   * The PLT marker is optional, even though we are using -fpic,
+     because it is not used (or required) on bare-metal targets.
+
+   * We allow both "b" and "bl" in some cases to allow for the
+     possibility of sibling calls.  As of this writing, GCC does not
+     use sibling calls in Thumb-2 mode.  */
+
+/* { dg-final { scan-assembler "\tbl\tremote_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl\tremote_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tremote_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_s3(\\(PLT\\))?\n" } } */
+
+
+/* { dg-final { scan-assembler "\tbl\tstrong_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_n3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl\tstrong_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tstrong_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstrong_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_s3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s3(\\(PLT\\))?\n" } } */
+
+
+/* { dg-final { scan-assembler "\tbl\tweak_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_n3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tweak_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_s3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s3(\\(PLT\\))?\n" } } */
 
 
 /* Calls to static_*2 calls should honor the call type attribute,
    with "short" being the default.  Calls to other static_* functions
    should be short.  */
 
-/* { dg-final { scan-assembler "\tbl\tstatic_n1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_n2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_n3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n3(\\(PLT\\))\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstatic_l1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstatic_l2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_l3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l3(\\(PLT\\))\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstatic_s1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_s2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_s3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s3(\\(PLT\\))\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_n1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_n2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_n3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n3((\\(PLT\\))?)\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstatic_l1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstatic_l2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_l3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l3((\\(PLT\\))?)\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstatic_s1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_s2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_s3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s3((\\(PLT\\))?)\n" } } */
Index: gcc.target/arm/long-calls-4.c
===================================================================
--- gcc.target/arm/long-calls-4.c	(revision 143377)
+++ gcc.target/arm/long-calls-4.c	(working copy)
@@ -39,72 +39,81 @@ DO_TESTS_CALL_ATTR (static_, STATIC_CALL
 
 
 /* Calls to remote_*, strong_* and weak_* should honor the call type
-   sttribute, with "long" being the default.  */
+   attribute, with "long" being the default.  
 
-/* { dg-final { scan-assembler-not "\tbl\tremote_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl\tremote_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl\tremote_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tremote_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tremote_s3\\(PLT\\)\n" } } */
-
-
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstrong_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstrong_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstrong_s3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tstrong_s3\\(PLT\\)\n" } } */
-
-
-/* { dg-final { scan-assembler-not "\tbl?\tweak_n1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_n2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_n3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tweak_l3\\(PLT\\)\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tweak_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s1\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s2\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tbl\tweak_s3\\(PLT\\)\n" } } */
-/* { dg-final { scan-assembler "\tb\tweak_s3\\(PLT\\)\n" } } */
+   In the regular expressions below:
+   
+   * The PLT marker is optional, even though we are using -fpic,
+     because it is not used (or required) on bare-metal targets.
+
+   * We allow both "b" and "bl" in some cases to allow for the
+     possibility of sibling calls.  As of this writing, GCC does not
+     use sibling calls in Thumb-2 mode.  */
+
+/* { dg-final { scan-assembler-not "\tbl\tremote_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl\tremote_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl\tremote_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tremote_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tremote_s3(\\(PLT\\))?\n" } } */
+
+
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstrong_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstrong_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstrong_s3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstrong_s3(\\(PLT\\))?\n" } } */
+
+
+/* { dg-final { scan-assembler-not "\tbl?\tweak_n1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_n2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_n3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tweak_l3(\\(PLT\\))?\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tweak_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s1(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s2(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl\tweak_s3(\\(PLT\\))?\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tweak_s3(\\(PLT\\))?\n" } } */
 
 
 /* Calls to static_*2 calls should honor the call type attribute,
    with "long" being the default.  Calls to other static_* functions
    should be short.  */
 
-/* { dg-final { scan-assembler "\tbl\tstatic_n1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstatic_n2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_n3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_n3(\\(PLT\\))\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstatic_l1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler-not "\tbl?\tstatic_l2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_l3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_l3(\\(PLT\\))\n" } } */
-
-/* { dg-final { scan-assembler "\tbl\tstatic_s1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s1(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_s2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s2(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tbl\tstatic_s3(\\(PLT\\))\n" } } */
-/* { dg-final { scan-assembler "\tb\tstatic_s3(\\(PLT\\))\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_n1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstatic_n2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_n3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_n3((\\(PLT\\))?)\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstatic_l1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler-not "\tbl?\tstatic_l2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_l3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_l3((\\(PLT\\))?)\n" } } */
+
+/* { dg-final { scan-assembler "\tbl\tstatic_s1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s1((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_s2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s2((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl\tstatic_s3((\\(PLT\\))?)\n" } } */
+/* { dg-final { scan-assembler "\tbl?\tstatic_s3((\\(PLT\\))?)\n" } } */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]