On Tue, Jun 30, 2015 at 03:17:00PM +0100, Jiong Wang wrote: > > 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?
OK, with a couple of very minor changes in the documentation/comments. > 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 s/assume/assumes/ > +# whether binutils support those new -fpic relocation modifiers, and assume s/support/supports/ > +# -fpic is supported is there is binutils support, as gcc configuration will s/is there is/if there is/ s/, as gcc/. GCC/ > +# enable -fpic for AArch64 on such case. s/on such case/in this case/ > 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 s/support/supports/ > +for AArch64 small memory model. > + > +@end table > + > @subsubsection MIPS-specific attributes > > @table @code Thanks, James > > 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. > > 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