]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
IBM Z: Define NO_PROFILE_COUNTERS
authorIlya Leoshkevich <iii@linux.ibm.com>
Thu, 17 Jun 2021 12:18:17 +0000 (14:18 +0200)
committerIlya Leoshkevich <iii@linux.ibm.com>
Tue, 5 Oct 2021 12:49:42 +0000 (14:49 +0200)
s390 glibc does not need counters in the .data section, since it stores
edge hits in its own data structure.  Therefore counters only waste
space and confuse diffing tools (e.g. kpatch), so don't generate them.

gcc/ChangeLog:

* config/s390/s390.c (s390_function_profiler): Ignore labelno
parameter.
* config/s390/s390.h (NO_PROFILE_COUNTERS): Define.

gcc/testsuite/ChangeLog:

* gcc.target/s390/mnop-mcount-m31-mzarch.c: Adapt to the new
prologue size.
* gcc.target/s390/mnop-mcount-m64.c: Likewise.

(cherry picked from commit a1c1b7a888a)

gcc/config/s390/s390.c
gcc/config/s390/s390.h
gcc/testsuite/gcc.target/s390/mnop-mcount-m31-mzarch.c
gcc/testsuite/gcc.target/s390/mnop-mcount-m64.c

index c5d4c439bcc7ffc4bbcea84bc6386bce477e3a3f..a863dfce9a2666a01ccacd3857a5b0f95b8f80d7 100644 (file)
@@ -13120,33 +13120,25 @@ output_asm_nops (const char *user, int hw)
     }
 }
 
-/* Output assembler code to FILE to increment profiler label # LABELNO
-   for profiling a function entry.  */
+/* Output assembler code to FILE to call a profiler hook.  */
 
 void
-s390_function_profiler (FILE *file, int labelno)
+s390_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
 {
-  rtx op[8];
-
-  char label[128];
-  ASM_GENERATE_INTERNAL_LABEL (label, "LP", labelno);
+  rtx op[4];
 
   fprintf (file, "# function profiler \n");
 
   op[0] = gen_rtx_REG (Pmode, RETURN_REGNUM);
   op[1] = gen_rtx_REG (Pmode, STACK_POINTER_REGNUM);
   op[1] = gen_rtx_MEM (Pmode, plus_constant (Pmode, op[1], UNITS_PER_LONG));
-  op[7] = GEN_INT (UNITS_PER_LONG);
-
-  op[2] = gen_rtx_REG (Pmode, 1);
-  op[3] = gen_rtx_SYMBOL_REF (Pmode, label);
-  SYMBOL_REF_FLAGS (op[3]) = SYMBOL_FLAG_LOCAL;
+  op[3] = GEN_INT (UNITS_PER_LONG);
 
-  op[4] = gen_rtx_SYMBOL_REF (Pmode, flag_fentry ? "__fentry__" : "_mcount");
+  op[2] = gen_rtx_SYMBOL_REF (Pmode, flag_fentry ? "__fentry__" : "_mcount");
   if (flag_pic)
     {
-      op[4] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op[4]), UNSPEC_PLT);
-      op[4] = gen_rtx_CONST (Pmode, op[4]);
+      op[2] = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, op[2]), UNSPEC_PLT);
+      op[2] = gen_rtx_CONST (Pmode, op[2]);
     }
 
   if (flag_record_mcount)
@@ -13160,20 +13152,19 @@ s390_function_profiler (FILE *file, int labelno)
        warning (OPT_Wcannot_profile, "nested functions cannot be profiled "
                 "with %<-mfentry%> on s390");
       else
-       output_asm_insn ("brasl\t0,%4", op);
+       output_asm_insn ("brasl\t0,%2", op);
     }
   else if (TARGET_64BIT)
     {
       if (flag_nop_mcount)
-       output_asm_nops ("-mnop-mcount", /* stg */ 3 + /* larl */ 3 +
-                        /* brasl */ 3 + /* lg */ 3);
+       output_asm_nops ("-mnop-mcount", /* stg */ 3 + /* brasl */ 3 +
+                        /* lg */ 3);
       else
        {
          output_asm_insn ("stg\t%0,%1", op);
          if (flag_dwarf2_cfi_asm)
-           output_asm_insn (".cfi_rel_offset\t%0,%7", op);
-         output_asm_insn ("larl\t%2,%3", op);
-         output_asm_insn ("brasl\t%0,%4", op);
+           output_asm_insn (".cfi_rel_offset\t%0,%3", op);
+         output_asm_insn ("brasl\t%0,%2", op);
          output_asm_insn ("lg\t%0,%1", op);
          if (flag_dwarf2_cfi_asm)
            output_asm_insn (".cfi_restore\t%0", op);
@@ -13182,15 +13173,14 @@ s390_function_profiler (FILE *file, int labelno)
   else
     {
       if (flag_nop_mcount)
-       output_asm_nops ("-mnop-mcount", /* st */ 2 + /* larl */ 3 +
-                        /* brasl */ 3 + /* l */ 2);
+       output_asm_nops ("-mnop-mcount", /* st */ 2 + /* brasl */ 3 +
+                        /* l */ 2);
       else
        {
          output_asm_insn ("st\t%0,%1", op);
          if (flag_dwarf2_cfi_asm)
-           output_asm_insn (".cfi_rel_offset\t%0,%7", op);
-         output_asm_insn ("larl\t%2,%3", op);
-         output_asm_insn ("brasl\t%0,%4", op);
+           output_asm_insn (".cfi_rel_offset\t%0,%3", op);
+         output_asm_insn ("brasl\t%0,%2", op);
          output_asm_insn ("l\t%0,%1", op);
          if (flag_dwarf2_cfi_asm)
            output_asm_insn (".cfi_restore\t%0", op);
index 3b87616042047bd49624e515405fb7199af46cf7..fb16a455a035f1833839d339d625a8a5a2bfb675 100644 (file)
@@ -787,6 +787,8 @@ CUMULATIVE_ARGS;
 
 #define PROFILE_BEFORE_PROLOGUE 1
 
+#define NO_PROFILE_COUNTERS 1
+
 
 /* Trampolines for nested functions.  */
 
index b2ad9f5bced19d04dc4f91365b12c16bc0f8fda1..874ceb96fe8af28f75fbb762cab0f78b67de228d 100644 (file)
@@ -4,5 +4,5 @@
 void
 profileme (void)
 {
-  /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(10 halfwords\\)\n.*brcl\t0,0\n.*brcl\t0,0\n.*brcl\t0,0\n.*bcr\t0,0" } } */
+  /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(7 halfwords\\)\n.*brcl\t0,0\n.*brcl\t0,0\n.*bcr\t0,0" } } */
 }
index c0e3c4e91b1b58b30f836797c5e9008f6ed08d66..0d45834abdd9e982f1edb739349fe25b8fb8c7e6 100644 (file)
@@ -4,5 +4,5 @@
 void
 profileme (void)
 {
-  /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(12 halfwords\\)\n.*brcl\t0,0\n.*brcl\t0,0\n.*brcl\t0,0\n.*brcl\t0,0" } } */
+  /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(9 halfwords\\)\n.*brcl\t0,0\n.*brcl\t0,0\n.*brcl\t0,0" } } */
 }