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 <[email protected]>
>
> 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