https://gcc.gnu.org/g:203bce172aba0f09cea8a7853403c99956674b6a

commit r14-11648-g203bce172aba0f09cea8a7853403c99956674b6a
Author: Ard Biesheuvel <a...@kernel.org>
Date:   Thu Apr 10 14:26:41 2025 +0200

    i386: Enable -mnop-mcount for -fpic with PLTs [PR119386]
    
    -mnop-mcount can be trivially enabled for -fPIC codegen as long as PLTs
    are being used, given that the instruction encodings are identical, only
    the target may resolve differently depending on how the linker decides
    to incorporate the object file.
    
    So relax the option check, and add a test to ensure that 5-byte NOPs are
    emitted when -mnop-mcount is being used.
    
    Signed-off-by: Ard Biesheuvel <a...@kernel.org>
    
    gcc/ChangeLog:
    
            PR target/119386
            * config/i386/i386-options.cc: Permit -mnop-mcount when
            using -fpic with PLTs.
    
    gcc/testsuite/ChangeLog:
    
            PR target/119386
            * gcc.target/i386/pr119386-3.c: New test.
    
    (cherry picked from commit 6b4569a3ebdd0df44d87d67a18272ec0b878f2ee)

Diff:
---
 gcc/config/i386/i386-options.cc            |  4 ++--
 gcc/testsuite/gcc.target/i386/pr119386-3.c | 10 ++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
index 57c83a9aa1c7..81dd217ab727 100644
--- a/gcc/config/i386/i386-options.cc
+++ b/gcc/config/i386/i386-options.cc
@@ -2842,8 +2842,8 @@ ix86_option_override_internal (bool main_args_p,
   if (flag_nop_mcount)
     error ("%<-mnop-mcount%> is not compatible with this target");
 #endif
-  if (flag_nop_mcount && flag_pic)
-    error ("%<-mnop-mcount%> is not implemented for %<-fPIC%>");
+  if (flag_nop_mcount && flag_pic && !flag_plt)
+    error ("%<-mnop-mcount%> is not implemented for %<-fno-plt%>");
 
   /* Accept -msseregparm only if at least SSE support is enabled.  */
   if (TARGET_SSEREGPARM_P (opts->x_target_flags)
diff --git a/gcc/testsuite/gcc.target/i386/pr119386-3.c 
b/gcc/testsuite/gcc.target/i386/pr119386-3.c
new file mode 100644
index 000000000000..287410b951a4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr119386-3.c
@@ -0,0 +1,10 @@
+/* PR target/119386 */
+/* { dg-do compile { target *-*-linux* } } */
+/* { dg-options "-O2 -fpic -pg -mnop-mcount" } */
+/* { dg-final { scan-assembler ".byte\[ \t\]+0x0f, 0x1f, 0x44, 0x00, 0x00" } } 
*/
+
+int
+main ()
+{
+  return 0;
+}

Reply via email to