24cfad13af4e4c5b86258cc988a676b2a7d8b3d3
1 /* This file is part of the GDB simulators.
3 Copyright (C) 1997, Free Software Foundation
4 Condtributed by Cyngnus Solutions.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
40 engine_init (SIM_DESC sd
)
42 memset (&STATE_CPU (sd
, 0)->reg
, 0, sizeof STATE_CPU (sd
, 0)->reg
);
43 memset (&STATE_CPU (sd
, 0)->cia
, 0, sizeof STATE_CPU (sd
, 0)->cia
);
44 CPU_STATE (STATE_CPU (sd
, 0)) = sd
;
48 /* Mechanisms for stopping/restarting the simulation */
51 engine_error (SIM_DESC sd
,
53 instruction_address cia
,
59 sim_io_evprintf (sd
, fmt
, ap
);
64 sim_io_eprintf (sd
, "\n");
65 engine_halt (sd
, cpu
, cia
, sim_stopped
, SIGABRT
);
68 sim_io_error (sd
, " - aborting simulation");
72 engine_halt (SIM_DESC sd
,
74 instruction_address cia
,
79 sim_io_error (sd
, "engine_halt - bad longjmp");
81 sd
->siggnal
= siggnal
;
86 longjmp (sd
->path_to_halt
, 1);
90 engine_restart (SIM_DESC sd
,
92 instruction_address cia
)
95 sim_io_error (sd
, "engine_restart - bad longjmp");
98 longjmp(sd
->path_to_restart
, 1);
103 engine_run_until_stop (SIM_DESC sd
,
104 volatile int *keep_running
)
106 if (!setjmp (sd
->path_to_halt
))
108 instruction_address cia
;
109 sim_cpu
*cpu
= STATE_CPU (sd
, 0);
111 setjmp (sd
->path_to_restart
);
116 instruction_word insn
= IMEM (cia
);
117 cia
= idecode_issue (sd
, insn
, cia
);
119 while (*keep_running
);
120 engine_halt (sd
, cpu
, cia
, sim_stopped
, SIGINT
);
126 engine_step (SIM_DESC sd
)
128 if (!setjmp (sd
->path_to_halt
))
130 instruction_address cia
;
131 instruction_word insn
;
132 sim_cpu
*cpu
= STATE_CPU (sd
, 0);
134 setjmp (sd
->path_to_restart
);
138 cia
= idecode_issue (sd
, insn
, cia
);
139 engine_halt (sd
, cpu
, cia
, sim_stopped
, SIGTRAP
);