From 39248af88ff763d5996858f16e87c7c1e14facfd Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Mon, 15 Jul 2002 16:13:12 +0000 Subject: [PATCH] * sim-resume.c (sim_resume): Add local variable sig_to_deliver to avoid possible longjmp problems with automatic variable siggnal. --- sim/common/ChangeLog | 5 +++++ sim/common/sim-resume.c | 17 +++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 6ab7edf049..a55a55cb17 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,8 @@ +2002-07-15 Andrew Cagney + + * 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 From 2002-07-11 Momchil Velikov : diff --git a/sim/common/sim-resume.c b/sim/common/sim-resume.c index 8cf75d5d80..d7d61e73c1 100644 --- a/sim/common/sim-resume.c +++ b/sim/common/sim-resume.c @@ -65,24 +65,29 @@ sim_resume (SIM_DESC sd, 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. */ - if (jmpval == sim_engine_restart_jmpval) - siggnal = 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, siggnal); + SIM_CPU_EXCEPTION_RESUME(sd, cpu, sig_to_deliver); } #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;