2004-02-25 Roland McGrath <roland@redhat.com>
* target.h (struct target_ops): New member `read_auxv'. * server.c (handle_query): Handle qPart:auxv:read: query using that. * linux-low.c (linux_read_auxv): New function. (linux_target_ops): Initialize `read_auxv' member to that.
This commit is contained in:
parent
802188a76c
commit
aa691b87c2
3 changed files with 62 additions and 9 deletions
|
@ -597,7 +597,7 @@ linux_wait_for_event (struct thread_info *child)
|
|||
|
||||
/* If we were single-stepping, we definitely want to report the
|
||||
SIGTRAP. The single-step operation has completed, so also
|
||||
clear the stepping flag; in general this does not matter,
|
||||
clear the stepping flag; in general this does not matter,
|
||||
because the SIGTRAP will be reported to the client, which
|
||||
will give us a new action for this thread, but clear it for
|
||||
consistency anyway. It's safe to clear the stepping flag
|
||||
|
@ -841,7 +841,7 @@ linux_resume_one_process (struct inferior_list_entry *entry,
|
|||
|
||||
check_removed_breakpoint (process);
|
||||
|
||||
if (debug_threads && the_low_target.get_pc != NULL)
|
||||
if (debug_threads && the_low_target.get_pc != NULL)
|
||||
{
|
||||
fprintf (stderr, " ");
|
||||
(long) (*the_low_target.get_pc) ();
|
||||
|
@ -1283,11 +1283,11 @@ linux_read_memory (CORE_ADDR memaddr, char *myaddr, int len)
|
|||
/* Round starting address down to longword boundary. */
|
||||
register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
|
||||
/* Round ending address up; get number of longwords that makes. */
|
||||
register int count
|
||||
= (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
|
||||
register int count
|
||||
= (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
|
||||
/ sizeof (PTRACE_XFER_TYPE);
|
||||
/* Allocate buffer of that many longwords. */
|
||||
register PTRACE_XFER_TYPE *buffer
|
||||
register PTRACE_XFER_TYPE *buffer
|
||||
= (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
|
||||
|
||||
/* Read all the longwords */
|
||||
|
@ -1381,6 +1381,32 @@ linux_send_signal (int signum)
|
|||
kill (signal_pid, signum);
|
||||
}
|
||||
|
||||
/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
|
||||
to debugger memory starting at MYADDR. */
|
||||
|
||||
static int
|
||||
linux_read_auxv (CORE_ADDR offset, char *myaddr, unsigned int len)
|
||||
{
|
||||
char filename[PATH_MAX];
|
||||
int fd, n;
|
||||
|
||||
snprintf (filename, sizeof filename, "/proc/%d/auxv", inferior_pid);
|
||||
|
||||
fd = open (filename, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (offset != (CORE_ADDR) 0
|
||||
&& lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
|
||||
n = -1;
|
||||
else
|
||||
n = read (fd, myaddr, len);
|
||||
|
||||
close (fd);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
static struct target_ops linux_target_ops = {
|
||||
linux_create_inferior,
|
||||
|
@ -1396,6 +1422,7 @@ static struct target_ops linux_target_ops = {
|
|||
linux_write_memory,
|
||||
linux_look_up_symbols,
|
||||
linux_send_signal,
|
||||
linux_read_auxv,
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue