aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCatherine Moore <clm@cygnus.com>1999-01-13 14:32:39 +0000
committerCatherine Moore <clm@gcc.gnu.org>1999-01-13 09:32:39 -0500
commitc11145f6995c09869e75cd7946bea6b2f0ca969d (patch)
tree8bda4394f7aa870f436c5abb337ebdf44731d0c5
parent31ee9d6c10cf0088adbb3f81bfcf4e40159d5ac2 (diff)
downloadgcc-c11145f6995c09869e75cd7946bea6b2f0ca969d.zip
gcc-c11145f6995c09869e75cd7946bea6b2f0ca969d.tar.gz
gcc-c11145f6995c09869e75cd7946bea6b2f0ca969d.tar.bz2
arm.c (output_func_epilogue): Check TARGET_ABORT_NORETURN before generating a call to abort for volatile...
* config/arm.c (output_func_epilogue): Check TARGET_ABORT_NORETURN before generating a call to abort for volatile functions. * config/arm.h (ARM_FLAG_ABORT_NORETURN): Define. (TARGET_ABORT_NORETURN): Define. (abort-on-noreturn): New option. From-SVN: r24653
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/arm/arm.c2
-rw-r--r--gcc/config/arm/arm.h9
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8342b55..a11bfc0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Wed Jan 13 16:16:44 1999 Catherine Moore <clm@cygnus.com>
+
+ * config/arm.c (output_func_epilogue): Check TARGET_ABORT_NORETURN
+ before generating a call to abort for volatile functions.
+ * config/arm.h (ARM_FLAG_ABORT_NORETURN): Define.
+ (TARGET_ABORT_NORETURN): Define.
+ (abort-on-noreturn): New option.
+
Wed Jan 13 13:30:08 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* cccp.c (xstrdup): Renamed from `savestring'. All callers changed.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 7d0f5ca..bcbf33c 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -5006,7 +5006,7 @@ output_func_epilogue (f, frame_size)
goto epilogue_done;
/* A volatile function should never return. Call abort. */
- if (volatile_func)
+ if (TARGET_ABORT_NORETURN && volatile_func)
{
rtx op = gen_rtx (SYMBOL_REF, Pmode, "abort");
assemble_external_libcall (op);
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index f47f653..3c29f1c 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -312,6 +312,10 @@ extern char *target_fp_name;
big-endian (for backwards compatibility with older versions of GCC). */
#define ARM_FLAG_LITTLE_WORDS (0x2000)
+/* Nonzero if a call to abort should be generated if a noreturn
+function tries to return. */
+#define ARM_FLAG_ABORT_NORETURN (0x8000)
+
#define TARGET_APCS (target_flags & ARM_FLAG_APCS_FRAME)
#define TARGET_POKE_FUNCTION_NAME (target_flags & ARM_FLAG_POKE)
#define TARGET_FPE (target_flags & ARM_FLAG_FPE)
@@ -327,6 +331,7 @@ extern char *target_fp_name;
#define TARGET_BIG_END (target_flags & ARM_FLAG_BIG_END)
#define TARGET_THUMB_INTERWORK (target_flags & ARM_FLAG_THUMB)
#define TARGET_LITTLE_WORDS (target_flags & ARM_FLAG_LITTLE_WORDS)
+#define TARGET_ABORT_NORETURN (target_flags & ARM_FLAG_ABORT_NORETURN)
/* SUBTARGET_SWITCHES is used to add flags on a per-config basis.
Bit 31 is reserved. See riscix.h. */
@@ -377,6 +382,10 @@ extern char *target_fp_name;
{"thumb-interwork", ARM_FLAG_THUMB, \
"Support calls between THUMB and ARM instructions sets" }, \
{"no-thumb-interwork", -ARM_FLAG_THUMB, "" }, \
+ {"abort-on-noreturn", ARM_FLAG_ABORT_NORETURN, \
+ "Generate a call to abort if a noreturn function returns"}, \
+ {"no-abort-on-noreturn", -ARM_FLAG_ABORT_NORETURN, ""}, \
+
SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT } \
}