aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2009-01-14 19:37:02 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2009-01-14 19:37:02 +0000
commit670dc171dc322921c0b8f291f26849d346d16acb (patch)
tree69062a60004716ed6def8e19eabcc69f6ced88ba
parented8a0bc47c8aa359f417360d8443770b02327e1c (diff)
downloadgcc-670dc171dc322921c0b8f291f26849d346d16acb.zip
gcc-670dc171dc322921c0b8f291f26849d346d16acb.tar.gz
gcc-670dc171dc322921c0b8f291f26849d346d16acb.tar.bz2
long-calls-1.c: Tolerate the lack of sibling calls and/or PLT markers.
* 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. From-SVN: r143381
-rw-r--r--gcc/testsuite/ChangeLog11
-rw-r--r--gcc/testsuite/gcc.target/arm/long-calls-1.c56
-rw-r--r--gcc/testsuite/gcc.target/arm/long-calls-2.c46
-rw-r--r--gcc/testsuite/gcc.target/arm/long-calls-3.c127
-rw-r--r--gcc/testsuite/gcc.target/arm/long-calls-4.c113
5 files changed, 197 insertions, 156 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 30441e6..95015b3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+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.
+
2009-01-14 Daniel Jacobowitz <dan@codesourcery.com>
Nathan Froyd <froydnj@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>
diff --git a/gcc/testsuite/gcc.target/arm/long-calls-1.c b/gcc/testsuite/gcc.target/arm/long-calls-1.c
index 7c2e7fe..587f6d6 100644
--- a/gcc/testsuite/gcc.target/arm/long-calls-1.c
+++ b/gcc/testsuite/gcc.target/arm/long-calls-1.c
@@ -38,8 +38,14 @@ DO_TESTS_CALL_ATTR (weak_, EXTERN_CALL, weak)
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" } } */
diff --git a/gcc/testsuite/gcc.target/arm/long-calls-2.c b/gcc/testsuite/gcc.target/arm/long-calls-2.c
index c63f8ab..8ce2404 100644
--- a/gcc/testsuite/gcc.target/arm/long-calls-2.c
+++ b/gcc/testsuite/gcc.target/arm/long-calls-2.c
@@ -38,8 +38,14 @@ DO_TESTS_CALL_ATTR (weak_, EXTERN_CALL, weak)
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" } } */
diff --git a/gcc/testsuite/gcc.target/arm/long-calls-3.c b/gcc/testsuite/gcc.target/arm/long-calls-3.c
index 9281715..bd1891c 100644
--- a/gcc/testsuite/gcc.target/arm/long-calls-3.c
+++ b/gcc/testsuite/gcc.target/arm/long-calls-3.c
@@ -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" } } */
+ In the regular expressions below:
+
+ * The PLT marker is optional, even though we are using -fpic,
+ because it is not used (or required) on some targets.
-/* { 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" } } */
+ * 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_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\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\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 "\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_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\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\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 "\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_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" } } */
+/* { 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" } } */
diff --git a/gcc/testsuite/gcc.target/arm/long-calls-4.c b/gcc/testsuite/gcc.target/arm/long-calls-4.c
index facf85c..dc184b8 100644
--- a/gcc/testsuite/gcc.target/arm/long-calls-4.c
+++ b/gcc/testsuite/gcc.target/arm/long-calls-4.c
@@ -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" } } */
+ In the regular expressions below:
+
+ * The PLT marker is optional, even though we are using -fpic,
+ because it is not used (or required) on some targets.
-/* { 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" } } */
+ * 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_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\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-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 "\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_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?\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-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 "\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_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" } } */
+/* { 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" } } */