I managed to get it working by hard-coding the offset (ugh!):

syscall::lstat64:return
/ self->stat && pid == $target /
{
        this->path = copyinstr(self->path);
        printf("Path: %s\n", this->path);

        this->stat =  copyin( self->stat + 0x34, sizeof(long long) );
        printf("File size: %lld\n", *((long long *)(this->stat)));

        self->stat = 0;
}

On 6 September 2011 09:51,  <casper....@oracle.com> wrote:
>
>
>>The size of the file (hex a8) appears at byte 34 which doesn't agree
>>with any of the different structs... (in struct stat32 it's at offset
>>30).
>
> I run the mdb command on SPARC, on x86 it is:
>
>> ::print -at "struct stat64_32"
> 0 struct stat64_32 {
>    0 dev32_t st_dev
>    4 int32_t [3] st_pad1
>    10 ino64_t st_ino
>    18 mode32_t st_mode
>    1c nlink32_t st_nlink
>    20 uid32_t st_uid
>    24 gid32_t st_gid
>    28 dev32_t st_rdev
>    2c int32_t [2] st_pad2
>    34 off64_t st_size          <--- offset 0x34
>    3c timestruc32_t st_atim {
>        3c time32_t tv_sec
>        40 int32_t tv_nsec
>    }
>    44 timestruc32_t st_mtim {
>        44 time32_t tv_sec
>        48 int32_t tv_nsec
>    }
>    4c timestruc32_t st_ctim {
>        4c time32_t tv_sec
>        50 int32_t tv_nsec
>    }
>    54 int32_t st_blksize
>    58 blkcnt64_t st_blocks
>    60 char [16] st_fstype
>    70 int32_t [8] st_pad4
> }
>
>
> Not sure about the why the code doesn't work.
>
> Casper
>
>
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to