From 64f5af47c50af743fb0a58d5b074ee17d1101b22 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Tue, 29 May 2012 01:52:16 +0000 Subject: [PATCH] cris.h (TARGET_HAS_BREAK, [...]): New macros. * config/cris/cris.h (TARGET_HAS_BREAK, TARGET_TRAP_USING_BREAK8): New macros. * config/cris/cris.md ("trap"): Define, enabled for TARGET_TRAP_USING_BREAK8. * config/cris/cris.opt (mtrap-using-break8): New option. From-SVN: r187942 --- gcc/ChangeLog | 8 ++++++++ gcc/config/cris/cris.h | 5 +++++ gcc/config/cris/cris.md | 8 ++++++++ gcc/config/cris/cris.opt | 4 ++++ 4 files changed, 25 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5afb293197..513405ff202 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-05-29 Hans-Peter Nilsson + + * config/cris/cris.h (TARGET_HAS_BREAK, TARGET_TRAP_USING_BREAK8): + New macros. + * config/cris/cris.md ("trap"): Define, enabled for + TARGET_TRAP_USING_BREAK8. + * config/cris/cris.opt (mtrap-using-break8): New option. + 2012-05-28 Paolo Carlini PR c++/25137 diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index ff0be0041f0..edb5f97e18b 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -302,9 +302,14 @@ extern int cris_cpu_version; #define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG) #define TARGET_HAS_LZ (cris_cpu_version >= CRIS_CPU_ETRAX4) +#define TARGET_HAS_BREAK (cris_cpu_version >= CRIS_CPU_ETRAX4) #define TARGET_HAS_SWAP (cris_cpu_version >= CRIS_CPU_SVINTO) #define TARGET_V32 (cris_cpu_version >= CRIS_CPU_V32) +/* The "break" instruction was introduced with ETRAX 4. */ +#define TARGET_TRAP_USING_BREAK8 \ + (cris_trap_using_break8 == 2 ? TARGET_HAS_BREAK : cris_trap_using_break8) + /* Node: Storage Layout */ #define BITS_BIG_ENDIAN 0 diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md index b4ead76f38b..49f36e350da 100644 --- a/gcc/config/cris/cris.md +++ b/gcc/config/cris/cris.md @@ -3825,6 +3825,14 @@ "" "nop" [(set_attr "cc" "none")]) + +;; Same as the gdb trap breakpoint, will cause a SIGTRAP for +;; cris-linux* and crisv32-linux*, as intended. Will work in +;; freestanding environments with sufficient framework. +(define_insn "trap" + [(trap_if (const_int 1) (const_int 8))] + "TARGET_TRAP_USING_BREAK8" + "break 8") ;; We need to stop accesses to the stack after the memory is ;; deallocated. Unfortunately, reorg doesn't look at naked clobbers, diff --git a/gcc/config/cris/cris.opt b/gcc/config/cris/cris.opt index dc4ab57f010..3c2e338ffee 100644 --- a/gcc/config/cris/cris.opt +++ b/gcc/config/cris/cris.opt @@ -175,6 +175,10 @@ Target Report RejectNegative Joined Var(cris_max_stackframe_str) max-stackframe= Target Report RejectNegative Joined Undocumented Var(cris_max_stackframe_str) +mtrap-using-break8 +Target Report Var(cris_trap_using_break8) Init(2) +Emit traps as \"break 8\", default for CRIS v3 and up. If disabled, calls to abort() are used. + ; TARGET_SVINTO: Currently this just affects alignment. FIXME: ; Redundant with TARGET_ALIGN_BY_32, or put machine stuff here? ; This and the others below could just as well be variables and