1/*
2 * Copyright 2018 Google, Inc.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright

--- 18 unchanged lines hidden (view full) ---

27 * Authors: Gabe Black
28 */
29
30#include "base/logging.hh"
31#include "systemc/core/process.hh"
32#include "systemc/core/scheduler.hh"
33#include "systemc/ext/core/sc_main.hh"
34#include "systemc/ext/core/sc_process_handle.hh"
35#include "systemc/ext/utils/sc_report_handler.hh"
36
37namespace sc_core
38{
39
40const char *
41sc_unwind_exception::what() const throw()
42{
43 return _isReset ? "RESET" : "KILL";

--- 148 unchanged lines hidden (view full) ---

192sc_process_handle::terminated() const
193{
194 return _gem5_process ? _gem5_process->terminated() : false;
195}
196
197const sc_event &
198sc_process_handle::terminated_event() const
199{
199 static sc_event non_event;
200 return _gem5_process ? _gem5_process->terminatedEvent() : non_event;
200 if (!_gem5_process) {
201 SC_REPORT_WARNING("(W570) attempt to use an empty "
202 "process handle ignored", "terminated_event()");
203 static sc_event non_event;
204 return non_event;
205 }
206 return _gem5_process->terminatedEvent();
207}
208
209
210void
211sc_process_handle::suspend(sc_descendent_inclusion_info include_descendants)
212{
207 if (!_gem5_process)
213 if (!_gem5_process) {
214 SC_REPORT_WARNING("(W570) attempt to use an empty "
215 "process handle ignored", "suspend()");
216 return;
217 }
218 _gem5_process->suspend(include_descendants == SC_INCLUDE_DESCENDANTS);
219}
220
221void
222sc_process_handle::resume(sc_descendent_inclusion_info include_descendants)
223{
215 if (!_gem5_process)
224 if (!_gem5_process) {
225 SC_REPORT_WARNING("(W570) attempt to use an empty "
226 "process handle ignored", "resume()");
227 return;
228 }
229 _gem5_process->resume(include_descendants == SC_INCLUDE_DESCENDANTS);
230}
231
232void
233sc_process_handle::disable(sc_descendent_inclusion_info include_descendants)
234{
223 if (!_gem5_process)
235 if (!_gem5_process) {
236 SC_REPORT_WARNING("(W570) attempt to use an empty "
237 "process handle ignored", "disable()");
238 return;
239 }
240 _gem5_process->disable(include_descendants == SC_INCLUDE_DESCENDANTS);
241}
242
243void
244sc_process_handle::enable(sc_descendent_inclusion_info include_descendants)
245{
231 if (!_gem5_process)
246 if (!_gem5_process) {
247 SC_REPORT_WARNING("(W570) attempt to use an empty "
248 "process handle ignored", "enable()");
249 return;
250 }
251 _gem5_process->enable(include_descendants == SC_INCLUDE_DESCENDANTS);
252}
253
254void
255sc_process_handle::kill(sc_descendent_inclusion_info include_descendants)
256{
239 if (!_gem5_process)
257 if (!_gem5_process) {
258 SC_REPORT_WARNING("(W570) attempt to use an empty "
259 "process handle ignored", "kill()");
260 return;
261 }
262 _gem5_process->kill(include_descendants == SC_INCLUDE_DESCENDANTS);
263}
264
265void
266sc_process_handle::reset(sc_descendent_inclusion_info include_descendants)
267{
247 if (!_gem5_process)
268 if (!_gem5_process) {
269 SC_REPORT_WARNING("(W570) attempt to use an empty "
270 "process handle ignored", "reset()");
271 return;
272 }
273 _gem5_process->reset(include_descendants == SC_INCLUDE_DESCENDANTS);
274}
275
276bool
277sc_process_handle::is_unwinding()
278{
279 if (!_gem5_process) {
256 //TODO This should generate a systemc style warning if the handle is
257 //invalid.
280 SC_REPORT_WARNING("(W570) attempt to use an empty "
281 "process handle ignored", "is_unwinding()");
282 return false;
259 } else {
260 return _gem5_process->isUnwinding();
283 }
284 return _gem5_process->isUnwinding();
285}
286
287const sc_event &
288sc_process_handle::reset_event() const
289{
267 static sc_event non_event;
268 return _gem5_process ? _gem5_process->resetEvent() : non_event;
290 if (!_gem5_process) {
291 SC_REPORT_WARNING("(W570) attempt to use an empty "
292 "process handle ignored", "reset()");
293 static sc_event non_event;
294 return non_event;
295 }
296 return _gem5_process->resetEvent();
297}
298
299
300void
301sc_process_handle::sync_reset_on(
302 sc_descendent_inclusion_info include_descendants)
303{
276 if (!_gem5_process)
304 if (!_gem5_process) {
305 SC_REPORT_WARNING("(W570) attempt to use an empty "
306 "process handle ignored", "sync_reset_on()");
307 return;
308 }
309 _gem5_process->syncResetOn(include_descendants == SC_INCLUDE_DESCENDANTS);
310}
311
312void
313sc_process_handle::sync_reset_off(
314 sc_descendent_inclusion_info include_descendants)
315{
285 if (!_gem5_process)
316 if (!_gem5_process) {
317 SC_REPORT_WARNING("(W570) attempt to use an empty "
318 "process handle ignored", "sync_reset_off()");
319 return;
320 }
321 _gem5_process->syncResetOff(include_descendants == SC_INCLUDE_DESCENDANTS);
322}
323
324
325sc_process_handle
326sc_get_current_process_handle()
327{
328 if (sc_is_running())

--- 14 unchanged lines hidden ---