aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2018-07-18 06:58:39 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2018-07-18 06:58:39 +0000
commit0559979c6428e3b0dd5f181634a3c6775b3babd6 (patch)
treed107e6e1628b1c3efcebdb08c7ade3f7219f77e6 /gcc
parent97f132350479327123dc157b66c8a2a2fddeacfd (diff)
downloadgcc-0559979c6428e3b0dd5f181634a3c6775b3babd6.zip
gcc-0559979c6428e3b0dd5f181634a3c6775b3babd6.tar.gz
gcc-0559979c6428e3b0dd5f181634a3c6775b3babd6.tar.bz2
S/390: Add CFI for mcount call sequences
2018-07-18 Ilya Leoshkevich <iii@linux.ibm.com> * config/s390/s390.c (s390_function_profiler): Generate CFI. From-SVN: r262850
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/s390/s390.c19
2 files changed, 22 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0249082..9ed75cd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-18 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ * config/s390/s390.c (s390_function_profiler): Generate CFI.
+
2018-07-17 Jeff Law <law@redhat.com>
* config/arm/arm.c (get_label_padding): Update for recent
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 60afe41..a579e9d 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -13154,7 +13154,7 @@ output_asm_nops (const char *user, int hw)
void
s390_function_profiler (FILE *file, int labelno)
{
- rtx op[7];
+ rtx op[8];
char label[128];
ASM_GENERATE_INTERNAL_LABEL (label, "LP", labelno);
@@ -13164,6 +13164,7 @@ s390_function_profiler (FILE *file, int labelno)
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);
@@ -13197,9 +13198,13 @@ s390_function_profiler (FILE *file, int labelno)
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 ("lg\t%0,%1", op);
+ if (flag_dwarf2_cfi_asm)
+ output_asm_insn (".cfi_restore\t%0", op);
}
}
else if (TARGET_CPU_ZARCH)
@@ -13210,9 +13215,13 @@ s390_function_profiler (FILE *file, int labelno)
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 ("l\t%0,%1", op);
+ if (flag_dwarf2_cfi_asm)
+ output_asm_insn (".cfi_restore\t%0", op);
}
}
else if (!flag_pic)
@@ -13226,6 +13235,8 @@ s390_function_profiler (FILE *file, int labelno)
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 ("bras\t%2,%l6", op);
output_asm_insn (".long\t%4", op);
output_asm_insn (".long\t%3", op);
@@ -13235,6 +13246,8 @@ s390_function_profiler (FILE *file, int labelno)
output_asm_insn ("l\t%2,4(%2)", op);
output_asm_insn ("basr\t%0,%0", op);
output_asm_insn ("l\t%0,%1", op);
+ if (flag_dwarf2_cfi_asm)
+ output_asm_insn (".cfi_restore\t%0", op);
}
}
else
@@ -13249,6 +13262,8 @@ s390_function_profiler (FILE *file, int labelno)
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 ("bras\t%2,%l6", op);
targetm.asm_out.internal_label (file, "L",
CODE_LABEL_NUMBER (op[5]));
@@ -13261,6 +13276,8 @@ s390_function_profiler (FILE *file, int labelno)
output_asm_insn ("a\t%2,4(%2)", op);
output_asm_insn ("basr\t%0,%0", op);
output_asm_insn ("l\t%0,%1", op);
+ if (flag_dwarf2_cfi_asm)
+ output_asm_insn (".cfi_restore\t%0", op);
}
}