projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
2002-06-11 Daniel Jacobowitz <drow@mvista.com>
[deliverable/binutils-gdb.git]
/
gdb
/
lynx-nat.c
diff --git
a/gdb/lynx-nat.c
b/gdb/lynx-nat.c
index dba5559112c6f97898e9ed660b9b64287fd12dd0..9cd1672d3362e81760b88304176edfb3be8ca757 100644
(file)
--- a/
gdb/lynx-nat.c
+++ b/
gdb/lynx-nat.c
@@
-1,5
+1,6
@@
/* Native-dependent code for LynxOS.
/* Native-dependent code for LynxOS.
- Copyright 1993, 1994 Free Software Foundation, Inc.
+ Copyright 1993, 1994, 1995, 1996, 1999, 2000, 2001
+ Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-23,13
+24,14
@@
#include "inferior.h"
#include "target.h"
#include "gdbcore.h"
#include "inferior.h"
#include "target.h"
#include "gdbcore.h"
+#include "regcache.h"
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <sys/fpp.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <sys/fpp.h>
-static unsigned long registers_addr
PARAMS ((int pid)
);
-static void fetch_core_registers
PARAMS ((char *, unsigned, int, CORE_ADDR)
);
+static unsigned long registers_addr
(int pid
);
+static void fetch_core_registers
(char *, unsigned, int, CORE_ADDR
);
#define X(ENTRY)(offsetof(struct econtext, ENTRY))
#define X(ENTRY)(offsetof(struct econtext, ENTRY))
@@
-260,8
+262,7
@@
static int regmap[] =
It also handles knows where to find the I & L regs on the stack. */
void
It also handles knows where to find the I & L regs on the stack. */
void
-fetch_inferior_registers (regno)
- int regno;
+fetch_inferior_registers (int regno)
{
int whatregs = 0;
{
int whatregs = 0;
@@
-286,8
+287,8
@@
fetch_inferior_registers (regno)
int i;
errno = 0;
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)");
if (errno)
perror_with_name ("ptrace(PTRACE_GETREGS)");
@@
-319,15
+320,15
@@
fetch_inferior_registers (regno)
sp = read_register (SP_REGNUM);
sp = read_register (SP_REGNUM);
- target_
xfer
_memory (sp + FRAME_SAVED_I0,
+ target_
read
_memory (sp + FRAME_SAVED_I0,
®isters[REGISTER_BYTE (I0_REGNUM)],
®isters[REGISTER_BYTE (I0_REGNUM)],
- 8 * REGISTER_RAW_SIZE (I0_REGNUM)
, 0
);
+ 8 * REGISTER_RAW_SIZE (I0_REGNUM));
for (i = I0_REGNUM; i <= I7_REGNUM; i++)
register_valid[i] = 1;
for (i = I0_REGNUM; i <= I7_REGNUM; i++)
register_valid[i] = 1;
- target_
xfer
_memory (sp + FRAME_SAVED_L0,
+ target_
read
_memory (sp + FRAME_SAVED_L0,
®isters[REGISTER_BYTE (L0_REGNUM)],
®isters[REGISTER_BYTE (L0_REGNUM)],
- 8 * REGISTER_RAW_SIZE (L0_REGNUM)
, 0
);
+ 8 * REGISTER_RAW_SIZE (L0_REGNUM));
for (i = L0_REGNUM; i <= L0_REGNUM + 7; i++)
register_valid[i] = 1;
}
for (i = L0_REGNUM; i <= L0_REGNUM + 7; i++)
register_valid[i] = 1;
}
@@
-339,8
+340,8
@@
fetch_inferior_registers (regno)
int i;
errno = 0;
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)");
if (errno)
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
@@
-361,8
+362,7
@@
fetch_inferior_registers (regno)
this point. */
void
this point. */
void
-store_inferior_registers (regno)
- int regno;
+store_inferior_registers (int regno)
{
int whatregs = 0;
{
int whatregs = 0;
@@
-396,8
+396,8
@@
store_inferior_registers (regno)
8 * REGISTER_RAW_SIZE (O0_REGNUM));
errno = 0;
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)");
}
if (errno)
perror_with_name ("ptrace(PTRACE_SETREGS)");
}
@@
-412,27
+412,28
@@
store_inferior_registers (regno)
if (regno == -1 || regno == SP_REGNUM)
{
if (!register_valid[L0_REGNUM + 5])
if (regno == -1 || regno == SP_REGNUM)
{
if (!register_valid[L0_REGNUM + 5])
-
abort (
);
- target_
xfer
_memory (sp + FRAME_SAVED_I0,
+
internal_error (__FILE__, __LINE__, "failed internal consistency check"
);
+ target_
write
_memory (sp + FRAME_SAVED_I0,
®isters[REGISTER_BYTE (I0_REGNUM)],
®isters[REGISTER_BYTE (I0_REGNUM)],
- 8 * REGISTER_RAW_SIZE (I0_REGNUM)
, 1
);
+ 8 * REGISTER_RAW_SIZE (I0_REGNUM));
- target_
xfer
_memory (sp + FRAME_SAVED_L0,
+ target_
write
_memory (sp + FRAME_SAVED_L0,
®isters[REGISTER_BYTE (L0_REGNUM)],
®isters[REGISTER_BYTE (L0_REGNUM)],
- 8 * REGISTER_RAW_SIZE (L0_REGNUM)
, 1
);
+ 8 * REGISTER_RAW_SIZE (L0_REGNUM));
}
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
{
if (!register_valid[regno])
}
else if (regno >= L0_REGNUM && regno <= I7_REGNUM)
{
if (!register_valid[regno])
-
abort (
);
+
internal_error (__FILE__, __LINE__, "failed internal consistency check"
);
if (regno >= L0_REGNUM && regno <= L0_REGNUM + 7)
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (L0_REGNUM)
+ FRAME_SAVED_L0;
else
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (I0_REGNUM)
+ FRAME_SAVED_I0;
if (regno >= L0_REGNUM && regno <= L0_REGNUM + 7)
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (L0_REGNUM)
+ FRAME_SAVED_L0;
else
regoffset = REGISTER_BYTE (regno) - REGISTER_BYTE (I0_REGNUM)
+ FRAME_SAVED_I0;
- target_xfer_memory (sp + regoffset, ®isters[REGISTER_BYTE (regno)],
- REGISTER_RAW_SIZE (regno), 1);
+ target_write_memory (sp + regoffset,
+ ®isters[REGISTER_BYTE (regno)],
+ REGISTER_RAW_SIZE (regno));
}
}
}
}
@@
-443,8
+444,8
@@
store_inferior_registers (regno)
/* We read fcontext first so that we can get good values for fq_t... */
errno = 0;
/* 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)");
if (errno)
perror_with_name ("ptrace(PTRACE_GETFPREGS)");
@@
-454,8
+455,8
@@
store_inferior_registers (regno)
fc.fsr = read_register (FPS_REGNUM);
errno = 0;
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)");
}
if (errno)
perror_with_name ("ptrace(PTRACE_SETFPREGS)");
}
@@
-468,8
+469,7
@@
store_inferior_registers (regno)
saved context block. */
static unsigned long
saved context block. */
static unsigned long
-registers_addr (pid)
- int pid;
+registers_addr (int pid)
{
CORE_ADDR stblock;
int ecpoff = offsetof (st_t, ecp);
{
CORE_ADDR stblock;
int ecpoff = offsetof (st_t, ecp);
@@
-494,8
+494,7
@@
registers_addr (pid)
marking them as valid so we won't fetch them again. */
void
marking them as valid so we won't fetch them again. */
void
-fetch_inferior_registers (regno)
- int regno;
+fetch_inferior_registers (int regno)
{
int reglo, reghi;
int i;
{
int reglo, reghi;
int i;
@@
-509,7
+508,7
@@
fetch_inferior_registers (regno)
else
reglo = reghi = regno;
else
reglo = reghi = regno;
- ecp = registers_addr (
inferior_pid
);
+ ecp = registers_addr (
PIDGET (inferior_ptid)
);
for (regno = reglo; regno <= reghi; regno++)
{
for (regno = reglo; regno <= reghi; regno++)
{
@@
-525,7
+524,7
@@
fetch_inferior_registers (regno)
unsigned int reg;
errno = 0;
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)");
(PTRACE_ARG3_TYPE) (ecp + regmap[regno] + i), 0);
if (errno)
perror_with_name ("ptrace(PTRACE_PEEKUSP)");
@@
-540,14
+539,8
@@
fetch_inferior_registers (regno)
If REGNO is -1, do this for all registers.
Otherwise, REGNO specifies which register (so we can save time). */
If REGNO is -1, do this for all registers.
Otherwise, REGNO specifies which register (so we can save time). */
-/* Registers we shouldn't try to store. */
-#if !defined (CANNOT_STORE_REGISTER)
-#define CANNOT_STORE_REGISTER(regno) 0
-#endif
-
void
void
-store_inferior_registers (regno)
- int regno;
+store_inferior_registers (int regno)
{
int reglo, reghi;
int i;
{
int reglo, reghi;
int i;
@@
-561,7
+554,7
@@
store_inferior_registers (regno)
else
reglo = reghi = regno;
else
reglo = reghi = regno;
- ecp = registers_addr (
inferior_pid
);
+ ecp = registers_addr (
PIDGET (inferior_ptid)
);
for (regno = reglo; regno <= reghi; regno++)
{
for (regno = reglo; regno <= reghi; regno++)
{
@@
-581,7
+574,7
@@
store_inferior_registers (regno)
reg = *(unsigned int *) ®isters[REGISTER_BYTE (regno) + i];
errno = 0;
reg = *(unsigned int *) ®isters[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)");
(PTRACE_ARG3_TYPE) (ecp + regmap[regno] + i), reg);
if (errno)
perror_with_name ("ptrace(PTRACE_POKEUSP)");
@@
-593,14
+586,13
@@
store_inferior_registers (regno)
/* Wait for child to do something. Return pid of child, or -1 in case
of error; store status through argument pointer OURSTATUS. */
/* 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 (pid, ourstatus)
- 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 save_errno;
int thread;
union wait status;
+ int pid;
while (1)
{
while (1)
{
@@
-626,7
+618,7
@@
child_wait (pid, ourstatus)
return -1;
}
return -1;
}
- if (pid != PIDGET (inferior_p
id))
/* Some other process?!? */
+ if (pid != PIDGET (inferior_p
tid))
/* Some other process?!? */
continue;
thread = status.w_tid; /* Get thread id from status */
continue;
thread = status.w_tid; /* Get thread id from status */
@@
-634,26
+626,27
@@
child_wait (pid, ourstatus)
/* Initial thread value can only be acquired via wait, so we have to
resort to this hack. */
/* 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_p
t
id) == 0 && thread != 0)
{
{
- inferior_p
id = BUILDPID (inferior_pid
, thread);
- add_thread (inferior_pid);
+ inferior_p
tid = MERGEPID (PIDGET (inferior_ptid)
, thread);
+ add_thread (inferior_p
t
id);
}
}
- pid = BUILDPID (pid, thread);
+ p
t
id = BUILDPID (pid, thread);
/* We've become a single threaded process again. */
if (thread == 0)
/* We've become a single threaded process again. */
if (thread == 0)
- inferior_p
id = p
id;
+ inferior_p
tid = pt
id;
/* Check for thread creation. */
if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
/* Check for thread creation. */
if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
- && !in_thread_list (pid))
+ && !in_thread_list (p
t
id))
{
int realsig;
{
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)
{
if (realsig == SIGNEWTHREAD)
{
@@
-661,7
+654,7
@@
child_wait (pid, ourstatus)
realsig -- the code in wait_for_inferior expects SIGTRAP. */
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
ourstatus->value.sig = TARGET_SIGNAL_0;
realsig -- the code in wait_for_inferior expects SIGTRAP. */
ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
ourstatus->value.sig = TARGET_SIGNAL_0;
- return pid;
+ return p
t
id;
}
else
error ("Signal for unknown thread was not SIGNEWTHREAD");
}
else
error ("Signal for unknown thread was not SIGNEWTHREAD");
@@
-670,15
+663,16
@@
child_wait (pid, ourstatus)
/* Check for thread termination. */
else if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
/* Check for thread termination. */
else if (WIFSTOPPED (status)
&& WSTOPSIG (status) == SIGTRAP
- && in_thread_list (pid))
+ && in_thread_list (p
t
id))
{
int realsig;
{
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)
{
if (realsig == SIGTHREADEXIT)
{
- ptrace (PTRACE_CONT, PIDGET (pid), (PTRACE_ARG3_TYPE) 0, 0);
+ ptrace (PTRACE_CONT, PIDGET (p
t
id), (PTRACE_ARG3_TYPE) 0, 0);
continue;
}
}
continue;
}
}
@@
-709,15
+703,16
@@
child_wait (pid, ourstatus)
store_waitstatus (ourstatus, status.w_status);
#endif
store_waitstatus (ourstatus, status.w_status);
#endif
- return pid;
+ return p
t
id;
}
}
/* Return nonzero if the given thread is still alive. */
int
}
}
/* Return nonzero if the given thread is still alive. */
int
-child_thread_alive (pid)
- 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.
/* Arggh. Apparently pthread_kill only works for threads within
the process that calls pthread_kill.
@@
-735,12
+730,10
@@
child_thread_alive (pid)
If SIGNAL is nonzero, give it that signal. */
void
If SIGNAL is nonzero, give it that signal. */
void
-child_resume (pid, step, signal)
- int pid;
- int step;
- enum target_signal signal;
+child_resume (ptid_t ptid, int step, enum target_signal signal)
{
int func;
{
int func;
+ int pid = PIDGET (ptid);
errno = 0;
errno = 0;
@@
-748,7
+741,7
@@
child_resume (pid, step, signal)
we only want to step/continue a single thread. */
if (pid == -1)
{
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
func = step ? PTRACE_SINGLESTEP : PTRACE_CONT;
}
else
@@
-774,12
+767,11
@@
child_resume (pid, step, signal)
buffer. */
char *
buffer. */
char *
-lynx_pid_to_str (pid)
- int pid;
+child_pid_to_str (ptid_t ptid)
{
static char buf[40];
{
static char buf[40];
- sprintf (buf, "process %d thread %d", PIDGET (p
id), TIDGET (p
id));
+ sprintf (buf, "process %d thread %d", PIDGET (p
tid), TIDGET (pt
id));
return buf;
}
return buf;
}
@@
-798,11
+790,8
@@
lynx_pid_to_str (pid)
*/
static void
*/
static void
-fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
- char *core_reg_sect;
- unsigned core_reg_size;
- int which;
- CORE_ADDR reg_addr;
+fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
+ CORE_ADDR reg_addr)
{
struct st_entry s;
unsigned int regno;
{
struct st_entry s;
unsigned int regno;
@@
-826,13
+815,15
@@
fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
static struct core_fns lynx_core_fns =
{
static struct core_fns lynx_core_fns =
{
- bfd_target_unknown_flavour,
- fetch_core_registers,
- NULL
+ bfd_target_unknown_flavour, /* core_flavour */
+ default_check_format, /* check_format */
+ default_core_sniffer, /* core_sniffer */
+ fetch_core_registers, /* core_read_registers */
+ NULL /* next */
};
void
};
void
-_initialize_core_lynx ()
+_initialize_core_lynx (
void
)
{
add_core_fns (&lynx_core_fns);
}
{
add_core_fns (&lynx_core_fns);
}
This page took
0.030063 seconds
and
4
git commands to generate.