As discussed here

  https://gcc.gnu.org/ml/gcc-patches/2015-06/msg02151.html,

Since have enabled binutils feature detection when configuring gcc,
-fpic will not be enabled if there is no binutils support on those new
relocation modifiers, thus we should update the testcase pic-small.c,
only run it if check_effective_target_aarch64_small_fpic is true.

On AArch64, if -fpic is not supported, then we will fall back to -fPIC
silently.  So, we can't rely on the existed "check_effective_target_fpic" as
it assume compiler will give warning if -fpic not supported.  Here we
check whether binutils support those new -fpic relocation modifiers, and
assume -fpic is supported if there is binutils support, as gcc
configuration will enable -fpic for AArch64 on such case. This will not
apply if the test system is with new binutils and old gcc which is rare
and this patch will not handle.

OK for trunk?

Thanks.

2015-06-30  Jiong Wang  <jiong.w...@arm.com>

gcc/
  * doc/sourcebuild.texi (AArch64-specific attributes): New subsection.
  Document "aarch64_small_fpic".

gcc/testsuite/
  * lib/target-supports.exp (check_effective_target_aarch64_small_fpic): New 
function.
  * gcc.target/aarch64/pic-small.c: Restrict this test by
  check_effective_target_aarch64_small_fpic.
  
-- 
Regards,
Jiong

diff --git a/gcc/testsuite/gcc.target/aarch64/pic-small.c b/gcc/testsuite/gcc.target/aarch64/pic-small.c
index 874f81b..282e4d0 100644
--- a/gcc/testsuite/gcc.target/aarch64/pic-small.c
+++ b/gcc/testsuite/gcc.target/aarch64/pic-small.c
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-require-effective-target aarch64_small_fpic } */
 /* { dg-options "-O2 -fpic -fno-inline --save-temps" } */
 
 void abort ();
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index f0c209f..4c743c3 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -937,6 +937,26 @@ proc check_effective_target_fpic { } {
     return 0
 }
 
+# On AArch64, if -fpic is not supported, then we will fall back to -fPIC
+# silently.  So, we can't rely on above "check_effective_target_fpic" as it
+# assume compiler will give warning if -fpic not supported.  Here we check
+# whether binutils support those new -fpic relocation modifiers, and assume
+# -fpic is supported is there is binutils support, as gcc configuration will
+# enable -fpic for AArch64 on such case.
+#
+# "check_effective_target_aarch64_small_fpic" is dedicated for checking small
+# memory model -fpic relocation types.
+
+proc check_effective_target_aarch64_small_fpic { } {
+    if { [istarget aarch64*-*-*] } {
+	return [check_no_compiler_messages aarch64_small_fpic object {
+	    void foo (void) { asm ("ldr	x0, [x2, #:gotpage_lo15:globalsym]"); }
+	}]
+    } else {
+	return 0
+    }
+}
+
 # Return 1 if -shared is supported, as in no warnings or errors
 # emitted, 0 otherwise.
 
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 13f63d1..a0bab65 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1580,6 +1580,15 @@ ARM target prefers @code{LDRD} and @code{STRD} instructions over
 
 @end table
 
+@subsubsection AArch64-specific attributes
+
+@table @code
+@item aarch64_small_fpic
+Binutils installed on test system support relocation types required by -fpic
+for AArch64 small memory model.
+
+@end table
+
 @subsubsection MIPS-specific attributes
 
 @table @code

Reply via email to