diff options
author | Catherine Moore <clm@cygnus.com> | 1999-01-13 14:32:39 +0000 |
---|---|---|
committer | Catherine Moore <clm@gcc.gnu.org> | 1999-01-13 09:32:39 -0500 |
commit | c11145f6995c09869e75cd7946bea6b2f0ca969d (patch) | |
tree | 8bda4394f7aa870f436c5abb337ebdf44731d0c5 | |
parent | 31ee9d6c10cf0088adbb3f81bfcf4e40159d5ac2 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 2 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 9 |
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 } \ } |