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