Subject: ptrace() problems
To: NetBSD Current Users Mailing List <current-users@sun-lamp.cs.berkeley.edu>
From: Andy Heffernan <ahh@netcom.com>
List: current-users
Date: 11/29/1993 22:05:05
The Amiga port recently synced with the current tree and I'm
having some trouble getting gdb working again with the new ptrace()
code in kern/sys_process.c.
In debugging, I notice the following code in pread():
int
pread(procp, addr, retval)
struct proc *procp;
unsigned int addr;
unsigned int *retval;
{
[...]
vm_offset_t kva;
[...]
/* Find space in kernel_map for the page we're interested in */
rv = vm_map_find(kernel_map, object, off, &kva, PAGE_SIZE, TRUE);
[...]
What I'm trying to highlight here is that pread() is passing a
pointer to a local variable which is never initialized to anything.
vm_map_find() will dereference the passed pointer and use the resulting
value for various compares. This may explain the somewhat random
behavior I am seeing.
The other thing worth noting is that pread() passes back a
VM-system error code (the value in rv) to ptrace(), which in turn
returns it to the caller. These numbers are in different error-code
spaces, which seems somewhat problematical (KERN_NO_SPACE turns into
ESRCH, for example).
Have I missed something important here?
Thanks.
--
------------------------------------------------------------------------
Andy Heffernan ahh@netcom.com
------------------------------------------------------------------------------