* procfs.c (procfs_wait): Fix argument name to match 4 Jan changes.

* Move target_signal_from_host, target_signal_to_host, and
	store_waitstatus from inftarg.c to target.c.  procfs needs them.
	* target.c: Include "wait.h" and <signal.h>.
	* target.h, infrun.c (proceed), proceed callers: Pass new code
	TARGET_SIGNAL_DEFAULT instead of -1.  This avoids problems with
	enums being treated as unsigned and is cleaner.
	* infrun.c (signals_info): Don't print TARGET_SIGNAL_DEFAULT or
	TARGET_SIGNAL_0.
	* infcmd.c (signal_command), infrun.c (signals_info):
	Don't allow user to specify numeric equivalent of
	TARGET_SIGNAL_DEFAULT.
This commit is contained in:
Jim Kingdon
1994-01-06 16:34:51 +00:00
parent 588d1d685c
commit 45dc9be388
14 changed files with 40 additions and 50 deletions

View File

@@ -2174,48 +2174,33 @@ do_detach (signal)
attach_flag = 0;
}
/*
/* emulate wait() as much as possible.
Wait for child to do something. Return pid of child, or -1 in case
of error; store status in *OURSTATUS.
LOCAL FUNCTION
Not sure why we can't
just use wait(), but it seems to have problems when applied to a
process being controlled with the /proc interface.
procfs_wait -- emulate wait() as much as possible
Wait for child to do something. Return pid of child, or -1 in case
of error; store status through argument pointer STATUS.
We have a race problem here with no obvious solution. We need to let
the inferior run until it stops on an event of interest, which means
that we need to use the PIOCWSTOP ioctl. However, we cannot use this
ioctl if the process is already stopped on something that is not an
event of interest, or the call will hang indefinitely. Thus we first
use PIOCSTATUS to see if the process is not stopped. If not, then we
use PIOCWSTOP. But during the window between the two, if the process
stops for any reason that is not an event of interest (such as a job
control signal) then gdb will hang. One possible workaround is to set
an alarm to wake up every minute of so and check to see if the process
is still running, and if so, then reissue the PIOCWSTOP. But this is
a real kludge, so has not been implemented. FIXME: investigate
alternatives.
SYNOPSIS
int procfs_wait (int pid, int *statloc)
DESCRIPTION
Try to emulate wait() as much as possible. Not sure why we can't
just use wait(), but it seems to have problems when applied to a
process being controlled with the /proc interface.
NOTES
We have a race problem here with no obvious solution. We need to let
the inferior run until it stops on an event of interest, which means
that we need to use the PIOCWSTOP ioctl. However, we cannot use this
ioctl if the process is already stopped on something that is not an
event of interest, or the call will hang indefinitely. Thus we first
use PIOCSTATUS to see if the process is not stopped. If not, then we
use PIOCWSTOP. But during the window between the two, if the process
stops for any reason that is not an event of interest (such as a job
control signal) then gdb will hang. One possible workaround is to set
an alarm to wake up every minute of so and check to see if the process
is still running, and if so, then reissue the PIOCWSTOP. But this is
a real kludge, so has not been implemented. FIXME: investigate
alternatives.
FIXME: Investigate why wait() seems to have problems with programs
being control by /proc routines.
*/
FIXME: Investigate why wait() seems to have problems with programs
being control by /proc routines. */
static int
procfs_wait (pid, statloc)
procfs_wait (pid, ourstatus)
int pid;
struct target_waitstatus *ourstatus;
{

View File

@@ -407,7 +407,7 @@ adapt_create_inferior (execfile, args, env)
expect_prompt ();
#else
insert_breakpoints (); /* Needed to get correct instruction in cache */
proceed(entry_pt, -1, 0);
proceed(entry_pt, TARGET_SIGNAL_DEFAULT, 0);
#endif
} else {

View File

@@ -285,7 +285,7 @@ eb_create_inferior (execfile, args, env)
target_terminal_inferior ();
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed ((CORE_ADDR)entry_pt, -1, 0); /* Let 'er rip... */
proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0); /* Let 'er rip... */
}
/* Translate baud rates from integers to damn B_codes. Unix should

View File

@@ -1616,7 +1616,8 @@ es1800_create_inferior (execfile, args, env)
/* trap_expected = 0; */
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed ((CORE_ADDR) entry_pt, -1, 0); /* Let 'er rip... */
/* Let 'er rip... */
proceed ((CORE_ADDR) entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}

View File

@@ -485,7 +485,7 @@ hms_create_inferior (execfile, args, env)
expect_prompt ();
insert_breakpoints (); /* Needed to get correct instruction in cache */
proceed (entry_pt, -1, 0);
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
/* Open a connection to a remote debugger.

View File

@@ -1339,7 +1339,7 @@ mips_create_inferior (execfile, args, env)
/* FIXME: Should we set inferior_pid here? */
proceed (entry_pt, -1, 0);
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
/* Clean up after a process. Actually nothing to do. */

View File

@@ -180,7 +180,7 @@ Assuming you are at NYU debuging a kernel, i.e., no need to download.\n\n");
init_wait_for_inferior ();
clear_proceed_status ();
stop_soon_quietly = 1;
proceed(-1,-1,0);
proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
normal_stop ();
}
/**************************************************** REMOTE_MOURN_INFERIOR */

View File

@@ -309,7 +309,9 @@ monitor_create_inferior (execfile, args, env)
target_terminal_inferior ();
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed ((CORE_ADDR)entry_pt, -1, 0); /* Let 'er rip... */
/* Let 'er rip... */
proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
/* Open a connection to a remote debugger.

View File

@@ -609,7 +609,8 @@ nindy_create_inferior (execfile, args, env)
target_terminal_inferior ();
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed ((CORE_ADDR)entry_pt, -1, 0); /* Let 'er rip... */
/* Let 'er rip... */
proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
static void

View File

@@ -196,7 +196,7 @@ gdbsim_create_inferior (exec_file, args, env)
inferior_pid = 42;
insert_breakpoints (); /* Needed to get correct instruction in cache */
proceed (entry_pt, -1, 0);
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
/* The open routine takes the rest of the parameters from the command,

View File

@@ -267,7 +267,8 @@ st2000_create_inferior (execfile, args, env)
target_terminal_inferior ();
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed ((CORE_ADDR)entry_pt, -1, 0); /* Let 'er rip... */
/* Let 'er rip... */
proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
/* Open a connection to a remote debugger.

View File

@@ -167,7 +167,7 @@ udi_create_inferior (execfile, args, env)
init_wait_for_inferior ();
clear_proceed_status ();
proceed(-1,-1,0);
proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
}
static void

View File

@@ -235,7 +235,7 @@ vx_create_inferior (exec_file, args, env)
stop_soon_quietly = 0;
/* insert_step_breakpoint (); FIXME, do we need this? */
proceed(-1, -1, 0);
proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
}
/* Fill ARGSTRUCT in argc/argv form with the arguments from the

View File

@@ -158,7 +158,7 @@ sim_create_inferior (execfile, args, env)
sim_clear_breakpoints ();
init_wait_for_inferior ();
insert_breakpoints ();
proceed (entry_pt, -1, 0);
proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
}
#if 0
static void