From aa992ce717568eb88b324d39429e52df04a42eb1 Mon Sep 17 00:00:00 2001
From: Iain Sandoe <iain@sandoe.co.uk>
Date: Thu, 23 May 2019 20:51:04 +0000
Subject: [PATCH] darwin, x86 - disable '-mfentry' for the port.

This can't work without special support because placing
the call directly after the function label breaks the
ABI requirement that call sites are 16byte aligned.

gcc/

2019-05-23  Iain Sandoe  <iain@sandoe.co.uk>

       * config/i386/darwin.h: Reject -mfentry*.
       * doc/sourcebuild.texi: Document mfentry target support.

gcc/testsuite/

2019-05-23  Iain Sandoe  <iain@sandoe.co.uk>

       * lib/target-supports.exp (check_effective_target_mfentry): New.
       * gcc.target/i386/fentry-override.c: Require effective target mfentry.
       * gcc/testsuite/gcc.target/i386/fentry.c: Likewise
       * gcc.target/i386/fentryname1.c: Likewise
       * gcc.target/i386/fentryname2.c: Likewise
       * gcc.target/i386/fentryname3.c: Likewise
       * gcc.target/i386/nop-mcount.c: Likewise
       * gcc.target/i386/pr82699-2.c: Likewise
       * gcc.target/i386/pr82699-4.c: Likewise
       * gcc.target/i386/pr82699-5.c: Likewise
       * gcc.target/i386/pr82699-6.c: Likewise
       * gcc.target/i386/returninst1.c: Likewise
       * gcc.target/i386/returninst2.c: Likewise
       * gcc.target/i386/returninst3.c : Likewise

From-SVN: r271580
---
 gcc/ChangeLog                                   |  5 +++++
 gcc/config/i386/darwin.h                        |  3 ++-
 gcc/doc/sourcebuild.texi                        |  4 ++++
 gcc/testsuite/ChangeLog                         | 17 +++++++++++++++++
 gcc/testsuite/gcc.target/i386/fentry-override.c |  1 +
 gcc/testsuite/gcc.target/i386/fentry.c          |  1 +
 gcc/testsuite/gcc.target/i386/fentryname1.c     |  1 +
 gcc/testsuite/gcc.target/i386/fentryname2.c     |  1 +
 gcc/testsuite/gcc.target/i386/fentryname3.c     |  1 +
 gcc/testsuite/gcc.target/i386/nop-mcount.c      |  1 +
 gcc/testsuite/gcc.target/i386/pr82699-2.c       |  1 +
 gcc/testsuite/gcc.target/i386/pr82699-4.c       |  1 +
 gcc/testsuite/gcc.target/i386/pr82699-5.c       |  1 +
 gcc/testsuite/gcc.target/i386/pr82699-6.c       |  1 +
 gcc/testsuite/gcc.target/i386/returninst1.c     |  1 +
 gcc/testsuite/gcc.target/i386/returninst2.c     |  1 +
 gcc/testsuite/gcc.target/i386/returninst3.c     |  1 +
 gcc/testsuite/lib/target-supports.exp           | 11 +++++++++++
 18 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9a6e4a31ad4..ccdda927f711 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-23  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * config/i386/darwin.h: Reject -mfentry*.
+       * doc/sourcebuild.texi: Document mfentry target support.
+
 2019-05-23  Bill Schmidt  <wschmidt@linux.ibm.com>
 
 	* config/rs6000/rs6000.c (rs6000_global_entry_point_needed_p):
diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h
index fe11ec9efac3..11284283304e 100644
--- a/gcc/config/i386/darwin.h
+++ b/gcc/config/i386/darwin.h
@@ -132,7 +132,8 @@ extern int darwin_emit_branch_islands;
 #define CC1_SPEC "%(cc1_cpu) \
   %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \
   %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \
-  %{mx32:%eDarwin is not an mx32 platform}" \
+  %{mx32:%eDarwin is not an mx32 platform} \
+  %{mfentry*:%eDarwin does not support -mfentry or associated options}" \
   DARWIN_CC1_SPEC
 
 #undef ASM_SPEC
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index cf12d7483712..546af7f7261b 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2382,6 +2382,10 @@ Target supports compiling @code{aes} instructions.
 @item fma4
 Target supports compiling @code{fma4} instructions.
 
+@item mfentry
+Target supports the @code{-mfentry} option that alters the
+position of profiling calls such that they precede the prologue.
+
 @item ms_hook_prologue
 Target supports attribute @code{ms_hook_prologue}.
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f8ab7b767e66..d39d7f1bc957 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,20 @@
+2019-05-23  Iain Sandoe  <iain@sandoe.co.uk>
+
+       * lib/target-supports.exp (check_effective_target_mfentry): New.
+       * gcc.target/i386/fentry-override.c: Require effective target mfentry.
+       * gcc/testsuite/gcc.target/i386/fentry.c: Likewise
+       * gcc.target/i386/fentryname1.c: Likewise
+       * gcc.target/i386/fentryname2.c: Likewise
+       * gcc.target/i386/fentryname3.c: Likewise
+       * gcc.target/i386/nop-mcount.c: Likewise
+       * gcc.target/i386/pr82699-2.c: Likewise
+       * gcc.target/i386/pr82699-4.c: Likewise
+       * gcc.target/i386/pr82699-5.c: Likewise
+       * gcc.target/i386/pr82699-6.c: Likewise
+       * gcc.target/i386/returninst1.c: Likewise
+       * gcc.target/i386/returninst2.c: Likewise
+       * gcc.target/i386/returninst3.c : Likewise
+
 2019-05-23  Bill Schmidt  <wschmidt@linux.ibm.com>
 
 	* gcc.target/powerpc/localentry-1.c: New file.
diff --git a/gcc/testsuite/gcc.target/i386/fentry-override.c b/gcc/testsuite/gcc.target/i386/fentry-override.c
index 7bc5fc451505..efba1bf2cff8 100644
--- a/gcc/testsuite/gcc.target/i386/fentry-override.c
+++ b/gcc/testsuite/gcc.target/i386/fentry-override.c
@@ -1,5 +1,6 @@
 /* Test -mfentry override */
 /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-mfentry" } */
 /* { dg-final { scan-assembler-not "__fentry__" } } */
 /* Origin: Andi Kleen */
diff --git a/gcc/testsuite/gcc.target/i386/fentry.c b/gcc/testsuite/gcc.target/i386/fentry.c
index 2449e75fb5d7..28edd104f18b 100644
--- a/gcc/testsuite/gcc.target/i386/fentry.c
+++ b/gcc/testsuite/gcc.target/i386/fentry.c
@@ -1,5 +1,6 @@
 /* Test -mfentry */
 /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-fprofile -mfentry" } */
 /* { dg-final { scan-assembler "__fentry__" } } */
 /* Origin: Andi Kleen */
diff --git a/gcc/testsuite/gcc.target/i386/fentryname1.c b/gcc/testsuite/gcc.target/i386/fentryname1.c
index 6d2e76d223a6..1265342b954f 100644
--- a/gcc/testsuite/gcc.target/i386/fentryname1.c
+++ b/gcc/testsuite/gcc.target/i386/fentryname1.c
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -mfentry-name=foo" } */
 /* { dg-final { scan-assembler "call.*foo" } } */
 /* { dg-final { scan-assembler "call.*bar" } } */
diff --git a/gcc/testsuite/gcc.target/i386/fentryname2.c b/gcc/testsuite/gcc.target/i386/fentryname2.c
index 7d102bfccbcd..c51c5d1ff716 100644
--- a/gcc/testsuite/gcc.target/i386/fentryname2.c
+++ b/gcc/testsuite/gcc.target/i386/fentryname2.c
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -mrecord-mcount -mfentry-section=foo" } */
 /* { dg-final { scan-assembler "section.*foo" } } */
 /* { dg-final { scan-assembler "section.*bar" } } */
diff --git a/gcc/testsuite/gcc.target/i386/fentryname3.c b/gcc/testsuite/gcc.target/i386/fentryname3.c
index 777f4e4b0ffb..56881090a9c7 100644
--- a/gcc/testsuite/gcc.target/i386/fentryname3.c
+++ b/gcc/testsuite/gcc.target/i386/fentryname3.c
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry"  } */
 /* { dg-final { scan-assembler "section.*__entry_loc" } } */
 /* { dg-final { scan-assembler "0x0f, 0x1f, 0x44, 0x00, 0x00" } } */
diff --git a/gcc/testsuite/gcc.target/i386/nop-mcount.c b/gcc/testsuite/gcc.target/i386/nop-mcount.c
index a8e14bce5514..a5f8d27fda43 100644
--- a/gcc/testsuite/gcc.target/i386/nop-mcount.c
+++ b/gcc/testsuite/gcc.target/i386/nop-mcount.c
@@ -1,5 +1,6 @@
 /* Test -mnop-mcount */
 /* { dg-do compile { target { *-*-linux* && nonpic } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -mrecord-mcount -mnop-mcount" } */
 /* { dg-final { scan-assembler-not "__fentry__" } } */
 /* Origin: Andi Kleen */
diff --git a/gcc/testsuite/gcc.target/i386/pr82699-2.c b/gcc/testsuite/gcc.target/i386/pr82699-2.c
index 07a4ccbdbf48..c43cf441e067 100644
--- a/gcc/testsuite/gcc.target/i386/pr82699-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr82699-2.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target *-*-linux* } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-O2 -fno-pic -fcf-protection -pg -mfentry -fasynchronous-unwind-tables" } */
 /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
 
diff --git a/gcc/testsuite/gcc.target/i386/pr82699-4.c b/gcc/testsuite/gcc.target/i386/pr82699-4.c
index 3cc03dbf13e7..719566b358b4 100644
--- a/gcc/testsuite/gcc.target/i386/pr82699-4.c
+++ b/gcc/testsuite/gcc.target/i386/pr82699-4.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-O2 -fpic -fcf-protection -pg -mfentry -fasynchronous-unwind-tables" } */
 /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
 
diff --git a/gcc/testsuite/gcc.target/i386/pr82699-5.c b/gcc/testsuite/gcc.target/i386/pr82699-5.c
index 0c547e25f03a..ac3c1ae760aa 100644
--- a/gcc/testsuite/gcc.target/i386/pr82699-5.c
+++ b/gcc/testsuite/gcc.target/i386/pr82699-5.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target *-*-linux* } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-O2 -fcf-protection -mfentry -fasynchronous-unwind-tables" } */
 /* { dg-additional-options "-fno-pic" { target ia32 } } */
 /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr82699-6.c b/gcc/testsuite/gcc.target/i386/pr82699-6.c
index ff6bae7d1ea3..0b595f4a1c95 100644
--- a/gcc/testsuite/gcc.target/i386/pr82699-6.c
+++ b/gcc/testsuite/gcc.target/i386/pr82699-6.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target *-*-linux* } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-fno-pic -O2 -fcf-protection -pg -mfentry -mrecord-mcount -mnop-mcount -fasynchronous-unwind-tables" } */
 /* { dg-final { scan-assembler-times {\t\.cfi_startproc\n\tendbr} 1 } } */
 
diff --git a/gcc/testsuite/gcc.target/i386/returninst1.c b/gcc/testsuite/gcc.target/i386/returninst1.c
index d7ecc41bc650..133fdeef5aa1 100644
--- a/gcc/testsuite/gcc.target/i386/returninst1.c
+++ b/gcc/testsuite/gcc.target/i386/returninst1.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -minstrument-return=call -mrecord-return" } */
 /* { dg-final { scan-assembler "call.*__return__" } } */
 /* { dg-final { scan-assembler "section.*return_loc" } } */
diff --git a/gcc/testsuite/gcc.target/i386/returninst2.c b/gcc/testsuite/gcc.target/i386/returninst2.c
index 4724b40b2580..3629310a59a7 100644
--- a/gcc/testsuite/gcc.target/i386/returninst2.c
+++ b/gcc/testsuite/gcc.target/i386/returninst2.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -minstrument-return=nop5 -mrecord-return" } */
 /* { dg-final { scan-assembler-times "0x0f, 0x1f, 0x44, 0x00, 0x00" 3 } } */
 /* { dg-final { scan-assembler "section.*return_loc" } } */
diff --git a/gcc/testsuite/gcc.target/i386/returninst3.c b/gcc/testsuite/gcc.target/i386/returninst3.c
index 14b4445b1c69..b84cc77e12bc 100644
--- a/gcc/testsuite/gcc.target/i386/returninst3.c
+++ b/gcc/testsuite/gcc.target/i386/returninst3.c
@@ -1,4 +1,5 @@
 /* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target mfentry } */
 /* { dg-options "-pg -mfentry -minstrument-return=call" } */
 /* { dg-final { scan-assembler-not "call.*__return__" } } */
 
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 3bd6e8157154..4bcf1a1c8f77 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -9359,3 +9359,14 @@ proc check_effective_target_llvm_binutils { } {
 	      expr { [istarget amdgcn*-*-*]
 		     || [check_effective_target_offload_gcn] }}]
 }
+
+# Return 1 if the compiler supports '-mfentry'.
+
+proc check_effective_target_mfentry { } {
+    if { !([istarget i?86-*-*] || [istarget x86_64-*-*]) } {
+        return 0
+    }
+    return [check_no_compiler_messages mfentry object {
+	        void foo (void) { }
+    } "-mfentry"]
+}
-- 
GitLab