I am running a 32-bit user program on a 64-bit kernel.
I need to read in a pointer from user space and then
use this pointer to access a string in user space.
The copyin of the initial pointer works fine but then
I can't find anyway to get dtrace to use that as a 32-bit
pointer.
Is there a 32-bit version of dtrace (and if so where)?
Is there some other way to overcome this problem?
Any help appreciated.
Diane
pid$target::match_fixed_name:entry
{
trace("enter match_fixed_name");
mydisk = arg0;
self->match_dname = (char *)arg1;
}
pid$target::match_fixed_name:return
{
trace("return");
printf("\ndevice name: %s",
copyinstr((uintptr_t)self->match_dname));
self->devid = (char *)copyin((intptr_t)mydisk, 4);
printf("\ndevice_id at %x, string: s", (uint_t)self->devid);
/* copyinstr((intptr_t)mydiskp)); */
printf("\nreturn value: %u", (uint64_t)arg1);
}
Ouput for the probe at it stands above.
0 -> match_fixed_name enter match_fixed_name
0 <- match_fixed_name return
device name: /dev/dsk/c2t0d0s0
device_id at ad65fa60, string: s
return value: 0
Output for the probe for when I uncomment the copyinstr:
0 -> match_fixed_name enter match_fixed_name
dtrace: error on enabled probe ID 2 (ID 94557:
pid9078:libdiskmgt.so.1:match_fixed_name:return): invalid address
(0xffffffffac3e4520) in action #5 at DIF offset 40
--
Diane Fallier RPE
Phone: 781/442-1214 (x21214)
[EMAIL PROTECTED]
_______________________________________________
dtrace-discuss mailing list
[email protected]