diff mbox

[AArch64/testsuite] Restrict pic-small.c by a new directive "check_effective_target_aarch64_small_fpic"

Message ID n99ioa5b7er.fsf@arm.com
State New
Headers show

Commit Message

Jiong Wang June 30, 2015, 2:17 p.m. UTC
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.wang@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.

Comments

James Greenhalgh July 1, 2015, 8:38 a.m. UTC | #1
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.wang@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
diff mbox

Patch

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