* infrun.c (wait_for_inferior): Move "have_waited" label

outside of #ifdef conditionals.  Don't trash the wait status
        if we get a signal and the current instruction is nullified.
Fixes long standing problem on the PA (spurious SIGTRAPs)..
This commit is contained in:
Jeff Law 1996-04-24 06:36:10 +00:00
parent a0e1eb4225
commit 894d8e6946
2 changed files with 36 additions and 5 deletions

View File

@ -1,3 +1,14 @@
Wed Apr 24 00:32:55 1996 Jeffrey A Law (law@cygnus.com)
* infrun.c (wait_for_inferior): Move "have_waited" label
outside of #ifdef conditionals. Don't trash the wait status
if we get a signal and the current instruction is nullified.
Mon Apr 22 20:17:01 1996 Fred Fish <fnf@cygnus.com>
* Makefile.in (VERSION): Bump version number to 4.16.1
* NEWS: Update for 4.16 release.
Mon Apr 22 16:32:29 1996 Stan Shebs <shebs@andros.cygnus.com>
* monitor.h: Clean up comment formatting.

View File

@ -200,6 +200,8 @@ extern int one_stepped; /* From machine dependent code */
extern void single_step (); /* Same. */
#endif /* NO_SINGLE_STEP */
extern void write_pc_pid PARAMS ((CORE_ADDR, int));
/* Things to clean up if we QUIT out of resume (). */
/* ARGSUSED */
@ -457,7 +459,10 @@ wait_for_inferior ()
CORE_ADDR stop_func_start;
CORE_ADDR stop_func_end;
char *stop_func_name;
CORE_ADDR prologue_pc = 0, tmp;
#if 0
CORE_ADDR prologue_pc = 0;
#endif
CORE_ADDR tmp;
struct symtab_and_line sal;
int remove_breakpoints_on_following_step = 0;
int current_line;
@ -498,9 +503,12 @@ wait_for_inferior ()
else
pid = target_wait (-1, &w);
#ifdef HAVE_NONSTEPPABLE_WATCHPOINT
/* Gross.
We goto this label from elsewhere in wait_for_inferior when we want
to continue the main loop without calling "wait" and trashing the
waitstatus contained in W. */
have_waited:
#endif
flush_cached_frames ();
@ -712,8 +720,20 @@ wait_for_inferior ()
if (INSTRUCTION_NULLIFIED)
{
resume (1, 0);
continue;
struct target_waitstatus tmpstatus;
target_resume (pid, 1, TARGET_SIGNAL_0);
/* We may have received a signal that we want to pass to
the inferior; therefore, we must not clobber the waitstatus
in W. So we call wait ourselves, then continue the loop
at the "have_waited" label. */
if (target_wait_hook)
target_wait_hook (pid, &tmpstatus);
else
target_wait (pid, &tmpstatus);
goto have_waited;
}
#ifdef HAVE_STEPPABLE_WATCHPOINT