From 670dc171dc322921c0b8f291f26849d346d16acb Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Wed, 14 Jan 2009 19:37:02 +0000 Subject: [PATCH] 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 --- gcc/testsuite/ChangeLog | 11 ++ gcc/testsuite/gcc.target/arm/long-calls-1.c | 56 +++++---- gcc/testsuite/gcc.target/arm/long-calls-2.c | 46 ++++--- gcc/testsuite/gcc.target/arm/long-calls-3.c | 127 +++++++++++--------- gcc/testsuite/gcc.target/arm/long-calls-4.c | 113 +++++++++-------- 5 files changed, 197 insertions(+), 156 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 30441e674d0..95015b36e42 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2009-01-14 Mark Mitchell + + * 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 Nathan Froyd Joseph Myers diff --git a/gcc/testsuite/gcc.target/arm/long-calls-1.c b/gcc/testsuite/gcc.target/arm/long-calls-1.c index 7c2e7fe1c71..587f6d6f25b 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 c63f8abec3b..8ce2404c1f7 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 92817156370..bd1891c008b 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 facf85c73b6..dc184b8f8be 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" } } */ -- 2.30.2