I am trying to access strings in user land which are pointed to
by a structure. It may be something simple that I''m missing.
The following are the applicable portions of my dtrace script.
#! /usr/sbin/dtrace -s
#pragma D option flowindent
typedef struct disk {
char *device_id; /* string encoded device id */
void *devid; /* decoded device id */
char *kernel_name; /* handles drives w/ no devlinks */
char *volm_path;
char *product_id;
char *vendor_id;
/*controller_t **controllers;
path_t **paths;
alias_t *aliases;
struct disk *next;
int drv_type;
int removable;
int sync_speed;
int rpm;
int wide;
int cd_rom;
int volm_path_set;*/
} disk_t;
disk_t *tmp_disk;
pid$target::match_fixed_name:entry
/self->trace/
{
trace("enter match_fixed_name");
self->disk = (disk_t *)arg0;
self->match_dname = (char *)arg1;
}
pid$target::match_fixed_name:return
/self->trace/
{
trace("return match_fixed_name");
printf("\ndevice name:%s",
copyinstr((uintptr_t)self->match_dname));
tmp_disk = (disk_t *)copyin((uintptr_t)self->disk,
sizeof(disk_t));
printf("\ndevice_id %s, kernel name: %s",
copyinstr((uintptr_t)tmp_disk->device_id),
copyinstr((uintptr_t)tmp_disk->kernel_name));
printf("\nreturn value: %u", (uint64_t)arg0);
}
The error I am receiving is:
dtrace: error on enabled probe ID 8 (ID 98061:
pid23834:libdiskmgt.so.1:match_fixed_name:return): invalid address
(0xff) in action #4 at DIF offset 20
Probe 8 is the match_fixed_name:return probe above.
Any pointers/RTFMs would be helpful.
Diane
--
Diane Fallier RPE
Phone: 781/442-1214 (x21214)
diane.fallier at sun.com
Is your application 32 bit? If it is you should use dtrace -32. Otherwise dtrace assumes that the pointers in your struct disk are 64 bits. Michael Diane Fallier wrote:> I am trying to access strings in user land which are pointed to > by a structure. It may be something simple that I''m missing. > The following are the applicable portions of my dtrace script. > > #! /usr/sbin/dtrace -s > > #pragma D option flowindent > > typedef struct disk { > char *device_id; /* string encoded device id */ > void *devid; /* decoded device id */ > char *kernel_name; /* handles drives w/ no devlinks */ > char *volm_path; > char *product_id; > char *vendor_id; > /*controller_t **controllers; > path_t **paths; > alias_t *aliases; > struct disk *next; > int drv_type; > int removable; > int sync_speed; > int rpm; > int wide; > int cd_rom; > int volm_path_set;*/ > } disk_t; > > disk_t *tmp_disk; > > pid$target::match_fixed_name:entry > /self->trace/ > { > trace("enter match_fixed_name"); > self->disk = (disk_t *)arg0; > self->match_dname = (char *)arg1; > } > > pid$target::match_fixed_name:return > /self->trace/ > { > trace("return match_fixed_name"); > printf("\ndevice name:%s", > copyinstr((uintptr_t)self->match_dname)); > tmp_disk = (disk_t *)copyin((uintptr_t)self->disk, > sizeof(disk_t)); > printf("\ndevice_id %s, kernel name: %s", > copyinstr((uintptr_t)tmp_disk->device_id), > copyinstr((uintptr_t)tmp_disk->kernel_name)); > printf("\nreturn value: %u", (uint64_t)arg0); > } > > The error I am receiving is: > dtrace: error on enabled probe ID 8 (ID 98061: > pid23834:libdiskmgt.so.1:match_fixed_name:return): invalid address > (0xff) in action #4 at DIF offset 20 > > Probe 8 is the match_fixed_name:return probe above. > > Any pointers/RTFMs would be helpful. > > Diane-- === Michael Mueller =================Tel. + 49 8171 63600 Fax. + 49 8171 63615 Web: http://www.michael-mueller-it.de ======================================