aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2003-06-14 17:11:57 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2003-06-14 17:11:57 +0000
commit2fbe6bc2ba00c56ea66269ba842278764bd89c8e (patch)
tree5a5cf91052b1e5ff3956a086b21a786d293ce969 /gcc
parent75d2580c0cc46323711df161593281bceb50a99d (diff)
downloadgcc-2fbe6bc2ba00c56ea66269ba842278764bd89c8e.zip
gcc-2fbe6bc2ba00c56ea66269ba842278764bd89c8e.tar.gz
gcc-2fbe6bc2ba00c56ea66269ba842278764bd89c8e.tar.bz2
re PR target/3724 ([ARM]Illegal instruction when profiling optimized code on arm-linux)
PR target/3724 * arm/linux-elf.h (PROFILE_HOOK): Define. From-SVN: r67950
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/arm/linux-elf.h5
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4713756..480e734 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2003-06-14 Richard Earnshaw <rearnsha@arm.com>
+ PR target/3724
+ * arm/linux-elf.h (PROFILE_HOOK): Define.
+
+2003-06-14 Richard Earnshaw <rearnsha@arm.com>
+
PR target/11183
* arm.h (CANNOT_CHANGE_MODE_CLASS): Define.
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index 5da2b24..1a86e45 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -120,5 +120,10 @@
fprintf (STREAM, "\tbl\tmcount%s\n", NEED_PLT_RELOC ? "(PLT)" : ""); \
}
+/* The linux profiler clobbers the link register. Make sure the
+ prologue knows to save it. */
+#define PROFILE_HOOK(X) \
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, LR_REGNUM)))
+
#undef CC1_SPEC
#define CC1_SPEC "%{profile:-p}"