aboutsummaryrefslogtreecommitdiff
path: root/gdb/lynx-nat.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/lynx-nat.c')
-rw-r--r--gdb/lynx-nat.c74
1 files changed, 40 insertions, 34 deletions
diff --git a/gdb/lynx-nat.c b/gdb/lynx-nat.c
index 28ef6b6..e76406f 100644
--- a/gdb/lynx-nat.c
+++ b/gdb/lynx-nat.c
@@ -287,8 +287,8 @@ fetch_inferior_registers (int regno)
int i;
errno = 0;
- retval = ptrace (PTRACE_GETREGS, inferior_pid, (PTRACE_ARG3_TYPE) & ec,
- 0);
+ retval = ptrace (PTRACE_GETREGS, PIDGET (inferior_ptid),
+ (PTRACE_ARG3_TYPE) & ec, 0);
if (errno)
perror_with_name ("ptrace(PTRACE_GETREGS)");
@@ -340,8 +340,8 @@ fetch_inferior_registers (int regno)
int i;
errno = 0;
- retval = ptrace (PTRACE_GETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) & fc,
- 0);
+ retval = ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
+ (PTRACE_ARG3_TYPE) & fc, 0);
if (errno)
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
@@ -396,8 +396,8 @@ store_inferior_registers (int regno)
8 * REGISTER_RAW_SIZE (O0_REGNUM));
errno = 0;
- retval = ptrace (PTRACE_SETREGS, inferior_pid, (PTRACE_ARG3_TYPE) & ec,
- 0);
+ retval = ptrace (PTRACE_SETREGS, PIDGET (inferior_ptid),
+ (PTRACE_ARG3_TYPE) & ec, 0);
if (errno)
perror_with_name ("ptrace(PTRACE_SETREGS)");
}
@@ -444,8 +444,8 @@ store_inferior_registers (int regno)
/* We read fcontext first so that we can get good values for fq_t... */
errno = 0;
- retval = ptrace (PTRACE_GETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) & fc,
- 0);
+ retval = ptrace (PTRACE_GETFPREGS, PIDGET (inferior_ptid),
+ (PTRACE_ARG3_TYPE) & fc, 0);
if (errno)
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
@@ -455,8 +455,8 @@ store_inferior_registers (int regno)
fc.fsr = read_register (FPS_REGNUM);
errno = 0;
- retval = ptrace (PTRACE_SETFPREGS, inferior_pid, (PTRACE_ARG3_TYPE) & fc,
- 0);
+ retval = ptrace (PTRACE_SETFPREGS, PIDGET (inferior_ptid),
+ (PTRACE_ARG3_TYPE) & fc, 0);
if (errno)
perror_with_name ("ptrace(PTRACE_SETFPREGS)");
}
@@ -508,7 +508,7 @@ fetch_inferior_registers (int regno)
else
reglo = reghi = regno;
- ecp = registers_addr (inferior_pid);
+ ecp = registers_addr (PIDGET (inferior_ptid));
for (regno = reglo; regno <= reghi; regno++)
{
@@ -524,7 +524,7 @@ fetch_inferior_registers (int regno)
unsigned int reg;
errno = 0;
- reg = ptrace (ptrace_fun, inferior_pid,
+ reg = ptrace (ptrace_fun, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) (ecp + regmap[regno] + i), 0);
if (errno)
perror_with_name ("ptrace(PTRACE_PEEKUSP)");
@@ -559,7 +559,7 @@ store_inferior_registers (int regno)
else
reglo = reghi = regno;
- ecp = registers_addr (inferior_pid);
+ ecp = registers_addr (PIDGET (inferior_ptid));
for (regno = reglo; regno <= reghi; regno++)
{
@@ -579,7 +579,7 @@ store_inferior_registers (int regno)
reg = *(unsigned int *) &registers[REGISTER_BYTE (regno) + i];
errno = 0;
- ptrace (ptrace_fun, inferior_pid,
+ ptrace (ptrace_fun, PIDGET (inferior_ptid),
(PTRACE_ARG3_TYPE) (ecp + regmap[regno] + i), reg);
if (errno)
perror_with_name ("ptrace(PTRACE_POKEUSP)");
@@ -591,12 +591,13 @@ store_inferior_registers (int regno)
/* Wait for child to do something. Return pid of child, or -1 in case
of error; store status through argument pointer OURSTATUS. */
-int
-child_wait (int pid, struct target_waitstatus *ourstatus)
+ptid_t
+child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
{
int save_errno;
int thread;
union wait status;
+ int pid;
while (1)
{
@@ -622,7 +623,7 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
return -1;
}
- if (pid != PIDGET (inferior_pid)) /* Some other process?!? */
+ if (pid != PIDGET (inferior_ptid)) /* Some other process?!? */
continue;
thread = status.w_tid; /* Get thread id from status */
@@ -630,26 +631,27 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
/* Initial thread value can only be acquired via wait, so we have to
resort to this hack. */
- if (TIDGET (inferior_pid) == 0 && thread != 0)
+ if (TIDGET (inferior_ptid) == 0 && thread != 0)
{
- inferior_pid = BUILDPID (inferior_pid, thread);
- add_thread (inferior_pid);
+ inferior_ptid = MERGEPID (PIDGET (inferior_ptid), thread);
+ add_thread (inferior_ptid);
}
- pid = BUILDPID (pid, thread);
+ ptid = BUILDPID (pid, thread);
/* We've become a single threaded process again. */
if (thread == 0)
- inferior_pid = pid;
+ inferior_ptid = ptid;
/* Check for thread creation. */
if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
- && !in_thread_list (pid))
+ && !in_thread_list (ptid))
{
int realsig;
- realsig = ptrace (PTRACE_GETTRACESIG, pid, (PTRACE_ARG3_TYPE) 0, 0);
+ realsig = ptrace (PTRACE_GETTRACESIG, PIDGET (ptid),
+ (PTRACE_ARG3_TYPE) 0, 0);
if (realsig == SIGNEWTHREAD)
{
@@ -657,7 +659,7 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
realsig -- the code in wait_for_inferior expects SIGTRAP. */
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
ourstatus->value.sig = TARGET_SIGNAL_0;
- return pid;
+ return ptid;
}
else
error ("Signal for unknown thread was not SIGNEWTHREAD");
@@ -666,15 +668,16 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
/* Check for thread termination. */
else if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
- && in_thread_list (pid))
+ && in_thread_list (ptid))
{
int realsig;
- realsig = ptrace (PTRACE_GETTRACESIG, pid, (PTRACE_ARG3_TYPE) 0, 0);
+ realsig = ptrace (PTRACE_GETTRACESIG, PIDGET (ptid),
+ (PTRACE_ARG3_TYPE) 0, 0);
if (realsig == SIGTHREADEXIT)
{
- ptrace (PTRACE_CONT, PIDGET (pid), (PTRACE_ARG3_TYPE) 0, 0);
+ ptrace (PTRACE_CONT, PIDGET (ptid), (PTRACE_ARG3_TYPE) 0, 0);
continue;
}
}
@@ -705,14 +708,16 @@ child_wait (int pid, struct target_waitstatus *ourstatus)
store_waitstatus (ourstatus, status.w_status);
#endif
- return pid;
+ return ptid;
}
}
/* Return nonzero if the given thread is still alive. */
int
-child_thread_alive (int pid)
+child_thread_alive (ptid_t ptid)
{
+ int pid = PIDGET (ptid);
+
/* Arggh. Apparently pthread_kill only works for threads within
the process that calls pthread_kill.
@@ -730,9 +735,10 @@ child_thread_alive (int pid)
If SIGNAL is nonzero, give it that signal. */
void
-child_resume (int pid, int step, enum target_signal signal)
+child_resume (ptid_t ptid, int step, enum target_signal signal)
{
int func;
+ int pid = PIDGET (ptid);
errno = 0;
@@ -740,7 +746,7 @@ child_resume (int pid, int step, enum target_signal signal)
we only want to step/continue a single thread. */
if (pid == -1)
{
- pid = inferior_pid;
+ pid = PIDGET (inferior_ptid);
func = step ? PTRACE_SINGLESTEP : PTRACE_CONT;
}
else
@@ -766,11 +772,11 @@ child_resume (int pid, int step, enum target_signal signal)
buffer. */
char *
-child_pid_to_str (int pid)
+child_pid_to_str (ptid_t ptid)
{
static char buf[40];
- sprintf (buf, "process %d thread %d", PIDGET (pid), TIDGET (pid));
+ sprintf (buf, "process %d thread %d", PIDGET (ptid), TIDGET (ptid));
return buf;
}