S/390: Implement -mrecord-mcount
authorIlya Leoshkevich <iii@linux.ibm.com>
Mon, 16 Jul 2018 14:36:21 +0000 (14:36 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Mon, 16 Jul 2018 14:36:21 +0000 (14:36 +0000)
This is the counterpart of the i386 feature introduced by
39a5a6a4: Add direct support for Linux kernel __fentry__ patching.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

* config/s390/s390.c (s390_function_profiler): Generate
__mcount_loc section.
* config/s390/s390.opt: Add the new option.

2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>

* testsuite/gcc.target/s390/mrecord-mcount.c: New testcase.

From-SVN: r262733

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/config/s390/s390.opt
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/mrecord-mcount.c [new file with mode: 0644]

index de108a529ce7148524e71aec48e48e2eb54b30a4..808a237604eb18fb22698cb134a1b9ccf04174d3 100644 (file)
@@ -1,3 +1,9 @@
+2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
+
+       * gcc/config/s390/s390.c (s390_function_profiler): Generate
+       __mcount_loc section.
+       * gcc/config/s390/s390.opt: Add the new option.
+
 2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
 
        * common.opt: Add the new warning.
index 3a406b955a0e83a699bd8fe909f09fe033482f48..600501c1e277450e1b6613100e1425b790451431 100644 (file)
@@ -13151,6 +13151,9 @@ s390_function_profiler (FILE *file, int labelno)
       op[4] = gen_rtx_CONST (Pmode, op[4]);
     }
 
+  if (flag_record_mcount)
+    fprintf (file, "1:\n");
+
   if (flag_fentry)
     {
       if (cfun->static_chain_decl)
@@ -13204,6 +13207,13 @@ s390_function_profiler (FILE *file, int labelno)
       output_asm_insn ("basr\t%0,%0", op);
       output_asm_insn ("l\t%0,%1", op);
     }
+
+  if (flag_record_mcount)
+    {
+      fprintf (file, "\t.section __mcount_loc, \"a\",@progbits\n");
+      fprintf (file, "\t.%s 1b\n", TARGET_64BIT ? "quad" : "long");
+      fprintf (file, "\t.previous\n");
+    }
 }
 
 /* Encode symbol attributes (local vs. global, tls model) of a SYMBOL_REF
index 59e97d031b49159a382cdfec462cc448eaa6f50e..9a3ed651450bcea3b7a641ec46ac7df5bed852ef 100644 (file)
@@ -298,3 +298,7 @@ mfentry
 Target Report Var(flag_fentry)
 Emit profiling counter call at function entry before prologue. The compiled
 code will require a 64-bit CPU and glibc 2.29 or newer to run.
+
+mrecord-mcount
+Target Report Var(flag_record_mcount)
+Generate __mcount_loc section with all _mcount and __fentry__ calls.
index e0503f265ff7e46543d6dc14e39f94cca65c9609..07c87a623cf7c4fe7c2448d3e1e7bf19130d49b2 100644 (file)
@@ -1,3 +1,7 @@
+2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
+
+       * testsuite/gcc.target/s390/mrecord-mcount.c: New testcase.
+
 2018-07-16  Ilya Leoshkevich  <iii@linux.ibm.com>
 
        * gcc.target/s390/mfentry-m64.c: New testcase.
diff --git a/gcc/testsuite/gcc.target/s390/mrecord-mcount.c b/gcc/testsuite/gcc.target/s390/mrecord-mcount.c
new file mode 100644 (file)
index 0000000..d8a23ff
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-pg -mrecord-mcount" } */
+
+void
+profileme (void)
+{
+  /* { dg-final { scan-assembler ".section __mcount_loc, \"a\",@progbits" } } */
+  /* { dg-final { scan-assembler ".quad 1b" } } */
+  /* { dg-final { scan-assembler ".previous" } } */
+}