⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sim-resume.c

📁 gdb-6.0 linux 下的调试工具
💻 C
字号:
/* Generic simulator resume.   Copyright (C) 1997 Free Software Foundation, Inc.   Contributed by Cygnus Support.This file is part of GDB, the GNU debugger.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public License alongwith this program; if not, write to the Free Software Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */#include "sim-main.h"#include "sim-assert.h"/* Halt the simulator after just one instruction */static voidhas_stepped (SIM_DESC sd,	     void *data){  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);  sim_engine_halt (sd, NULL, NULL, NULL_CIA, sim_stopped, SIM_SIGTRAP);}/* Generic resume - assumes the existance of sim_engine_run */voidsim_resume (SIM_DESC sd,	    int step,	    int siggnal){  sim_engine *engine = STATE_ENGINE (sd);  jmp_buf buf;  int jmpval;  ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);  /* we only want to be single stepping the simulator once */  if (engine->stepper != NULL)    {      sim_events_deschedule (sd, engine->stepper);      engine->stepper = NULL;    }  if (step)    engine->stepper = sim_events_schedule (sd, 1, has_stepped, sd);  sim_module_resume (sd);  /* run/resume the simulator */  engine->jmpbuf = &buf;  jmpval = setjmp (buf);  if (jmpval == sim_engine_start_jmpval      || jmpval == sim_engine_restart_jmpval)    {      int last_cpu_nr = sim_engine_last_cpu_nr (sd);      int next_cpu_nr = sim_engine_next_cpu_nr (sd);      int nr_cpus = sim_engine_nr_cpus (sd);      int sig_to_deliver;      sim_events_preprocess (sd, last_cpu_nr >= nr_cpus, next_cpu_nr >= nr_cpus);      if (next_cpu_nr >= nr_cpus)	next_cpu_nr = 0;      /* Only deliver the SIGGNAL [sic] the first time through - don't         re-deliver any SIGGNAL during a restart.  NOTE: A new local         variable is used to avoid problems with the automatic         variable ``siggnal'' being trashed by a long jump.  */      if (jmpval == sim_engine_start_jmpval)	sig_to_deliver = siggnal;      else	sig_to_deliver = 0;#ifdef SIM_CPU_EXCEPTION_RESUME      {	sim_cpu* cpu = STATE_CPU (sd, next_cpu_nr);	SIM_CPU_EXCEPTION_RESUME(sd, cpu, sig_to_deliver);      }#endif      sim_engine_run (sd, next_cpu_nr, nr_cpus, sig_to_deliver);    }  engine->jmpbuf = NULL;  sim_module_suspend (sd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -