Commit 605090dc by Ilya Leoshkevich Committed by Andreas Krebbel

S/390: Implement -mrecord-mcount

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
parent 6902799c
2018-07-16 Ilya Leoshkevich <iii@linux.ibm.com> 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. * common.opt: Add the new warning.
* config/s390/s390.c (s390_function_profiler): Emit "brasl * config/s390/s390.c (s390_function_profiler): Emit "brasl
%r0,__fentry__" when -mfentry is specified. %r0,__fentry__" when -mfentry is specified.
......
...@@ -13151,6 +13151,9 @@ s390_function_profiler (FILE *file, int labelno) ...@@ -13151,6 +13151,9 @@ s390_function_profiler (FILE *file, int labelno)
op[4] = gen_rtx_CONST (Pmode, op[4]); op[4] = gen_rtx_CONST (Pmode, op[4]);
} }
if (flag_record_mcount)
fprintf (file, "1:\n");
if (flag_fentry) if (flag_fentry)
{ {
if (cfun->static_chain_decl) if (cfun->static_chain_decl)
...@@ -13204,6 +13207,13 @@ s390_function_profiler (FILE *file, int labelno) ...@@ -13204,6 +13207,13 @@ s390_function_profiler (FILE *file, int labelno)
output_asm_insn ("basr\t%0,%0", op); output_asm_insn ("basr\t%0,%0", op);
output_asm_insn ("l\t%0,%1", 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 /* Encode symbol attributes (local vs. global, tls model) of a SYMBOL_REF
......
...@@ -298,3 +298,7 @@ mfentry ...@@ -298,3 +298,7 @@ mfentry
Target Report Var(flag_fentry) Target Report Var(flag_fentry)
Emit profiling counter call at function entry before prologue. The compiled 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. 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.
2018-07-16 Ilya Leoshkevich <iii@linux.ibm.com> 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. * gcc.target/s390/mfentry-m64.c: New testcase.
2018-07-16 Hristian Kirtchev <kirtchev@adacore.com> 2018-07-16 Hristian Kirtchev <kirtchev@adacore.com>
......
/* { 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" } } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment