diff options
author | Doug Evans <dje@google.com> | 1997-11-19 08:00:37 +0000 |
---|---|---|
committer | Doug Evans <dje@google.com> | 1997-11-19 08:00:37 +0000 |
commit | 1ebc7e0e243040693a2cf9b4d702d293ee5e6769 (patch) | |
tree | bee8e3cdc2aa4f35b3752bc7177a77307ed99590 /sim/common/sim-signal.c | |
parent | 35baf6dded272dffe04d48776f4990f99cbbf000 (diff) | |
download | fsf-binutils-gdb-1ebc7e0e243040693a2cf9b4d702d293ee5e6769.zip fsf-binutils-gdb-1ebc7e0e243040693a2cf9b4d702d293ee5e6769.tar.gz fsf-binutils-gdb-1ebc7e0e243040693a2cf9b4d702d293ee5e6769.tar.bz2 |
* sim-signal.c, sim-signal.h: New files.
* Make-common.in (sim-signal.o): Add rule for.
(SIM_NEW_COMMON_OBJS): Add sim-signal.o.
* sim-abort.c: Don't include <signal.h>.
* sim-basics.h: #include "sim-signal.h".
* sim-break.c: Don't include <signal.h>.
(sim_handle_breakpoint): Replace SIGTRAP with SIM_SIGTRAP.
* sim-core.c: Don't include <signal.h>.
(SIGBUS): Delete definition.
(sim_core_signal): Replace SIGSEGV,SIGBUS with SIM_SIGSEGV,SIM_SIGBUS.
* sim-engine.c: Don't include <signal.h>.
(sim_engine_abort): Replace SIGABRT with SIM_SIGABRT.
* sim-reason.c (sim_stop_reason): Call sim_signal_to_host.
* sim-resume.c: Don't include <signal.h>.
(SIGTRAP): Delete definition.
(has_stepped): Replace SIGTRAP with SIM_SIGTRAP.
* sim-stop.c: Don't include <signal.h>.
(control_c_simulation): Replace SIGINT with SIM_SIGINT.
* sim-watch.c: Don't include <signal.h>.
(handle_watchpoint): Replace SIGINT with SIM_SIGINT.
Diffstat (limited to 'sim/common/sim-signal.c')
-rw-r--r-- | sim/common/sim-signal.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/sim/common/sim-signal.c b/sim/common/sim-signal.c new file mode 100644 index 0000000..23d4c97 --- /dev/null +++ b/sim/common/sim-signal.c @@ -0,0 +1,83 @@ +/* Simulator signal support + Copyright (C) 1997 Free Software Foundation, Inc. + Contributed by Cygnus Support + +This file is part of the GNU Simulators. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include <signal.h> +#include "sim-main.h" + +/* Convert SIM_SIGFOO to SIGFOO. + What to do when the host doesn't have SIGFOO is handled on a case by case + basis. Generally, in the case of passing a value back to gdb, we want gdb + to not think the process has died (so it can be debugged at the point of + failure). */ + +#ifdef _MSC_VER +#ifndef SIGTRAP +#define SIGTRAP 5 +#endif +#ifndef SIGBUS +#define SIGBUS 10 +#endif +#endif + +int +sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL sig) +{ + switch (sig) + { + case SIM_SIGINT : + return SIGINT; + + case SIM_SIGABRT : + return SIGABRT; + + case SIM_SIGILL : +#ifdef SIGILL + return SIGILL; +#else + return SIGSEGV; +#endif + + case SIM_SIGTRAP : + return SIGTRAP; + + case SIM_SIGBUS : +#ifdef SIGBUS + return SIGBUS; +#else + return SIGSEGV; +#endif + + case SIM_SIGSEGV : + return SIGSEGV; + + case SIM_SIGXCPU : +#ifdef SIGXCPU + return SIGXCPU; +#endif + break; + } + + sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig); +#ifdef SIGHUP + return SIGHUP; /* FIXME: Suggestions? */ +#else + return 1; +#endif +} |