* sim-resume.c (sim_resume): Add local variable sig_to_deliver to
avoid possible longjmp problems with automatic variable siggnal.
This commit is contained in:
parent
7c43edc1d2
commit
39248af88f
2 changed files with 16 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2002-07-15 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
|
* sim-resume.c (sim_resume): Add local variable sig_to_deliver to
|
||||||
|
avoid possible longjmp problems with automatic variable siggnal.
|
||||||
|
|
||||||
2002-07-14 Andrew Cagney <ac131313@redhat.com>
|
2002-07-14 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
From 2002-07-11 Momchil Velikov <velco@fadata.bg>:
|
From 2002-07-11 Momchil Velikov <velco@fadata.bg>:
|
||||||
|
|
|
@ -65,24 +65,29 @@ sim_resume (SIM_DESC sd,
|
||||||
int last_cpu_nr = sim_engine_last_cpu_nr (sd);
|
int last_cpu_nr = sim_engine_last_cpu_nr (sd);
|
||||||
int next_cpu_nr = sim_engine_next_cpu_nr (sd);
|
int next_cpu_nr = sim_engine_next_cpu_nr (sd);
|
||||||
int nr_cpus = sim_engine_nr_cpus (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);
|
sim_events_preprocess (sd, last_cpu_nr >= nr_cpus, next_cpu_nr >= nr_cpus);
|
||||||
if (next_cpu_nr >= nr_cpus)
|
if (next_cpu_nr >= nr_cpus)
|
||||||
next_cpu_nr = 0;
|
next_cpu_nr = 0;
|
||||||
|
|
||||||
/* Only deliver the siggnal ]sic] the first time through - don't
|
/* Only deliver the SIGGNAL [sic] the first time through - don't
|
||||||
re-deliver any siggnal during a restart. */
|
re-deliver any SIGGNAL during a restart. NOTE: A new local
|
||||||
if (jmpval == sim_engine_restart_jmpval)
|
variable is used to avoid problems with the automatic
|
||||||
siggnal = 0;
|
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
|
#ifdef SIM_CPU_EXCEPTION_RESUME
|
||||||
{
|
{
|
||||||
sim_cpu* cpu = STATE_CPU (sd, next_cpu_nr);
|
sim_cpu* cpu = STATE_CPU (sd, next_cpu_nr);
|
||||||
SIM_CPU_EXCEPTION_RESUME(sd, cpu, siggnal);
|
SIM_CPU_EXCEPTION_RESUME(sd, cpu, sig_to_deliver);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sim_engine_run (sd, next_cpu_nr, nr_cpus, siggnal);
|
sim_engine_run (sd, next_cpu_nr, nr_cpus, sig_to_deliver);
|
||||||
}
|
}
|
||||||
engine->jmpbuf = NULL;
|
engine->jmpbuf = NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue