Michael Mueller
2009-Feb-26 11:34 UTC
[dtrace-discuss] syscall provider shows wrong kaio args?
Hi, For the kaio sys call (aioread) I found that the sycall provider does not show all arguments correctly, while good old truss does. Is this a bug?: DTrace script: /usr/sbin/dtrace -q -c tst -s /dev/fd/0 <<eof syscall::kaio:entry /arg0 == 0/ /* AIOREAD */ { printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x %d %d %d\n", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); } eof DTrace output: ------- *** dtrace: kaio read 0 3 0x20f70 2048 0 4096 0x1182001a03 178 0 0 ^ strange from arg4 on Truss output: ------------- kaio(AIOREAD, 3, 0x00020F70, 2048, 4096, 0xFFBFF920) = 0 ^ this is the correct address passed by tst.c Test program output: -------------------- aioread(fd 3, bufp 20f70, bufs 2048, offset 4096, whence 0, resultp ffbff920) C Program tst.c: ---------------- #include <stdio.h> #include <sys/types.h> #include <sys/asynch.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #define OFF 4096 #define L (2048) char buf[L]; int main() { int fd; aio_result_t r, *p; fd = open("/dbspaces/michaelm/RAW1", O_RDONLY); printf("aioread(fd %d, bufp %p, bufs %d, offset %d," " whence %d, resultp %p)\n", fd, buf, L, OFF, SEEK_SET, &r); if (aioread(fd, buf, L, OFF, SEEK_SET, &r)) perror("aioread"); }
Adam Leventhal
2009-Feb-26 16:21 UTC
[dtrace-discuss] syscall provider shows wrong kaio args?
Hey Michael, What version of Solaris are you running, and what bitness (32 or 64) are your process and kernel? Thanks. Adam On Feb 26, 2009, at 3:34 AM, Michael Mueller wrote:> Hi, > > For the kaio sys call (aioread) I found that the sycall provider > does not show all arguments correctly, while good old truss does. Is > this a bug?: > > DTrace script: > > /usr/sbin/dtrace -q -c tst -s /dev/fd/0 <<eof > syscall::kaio:entry > /arg0 == 0/ /* AIOREAD */ > { > printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x %d %d %d\n", > arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); > } > eof > > DTrace output: > ------- > > *** dtrace: kaio read 0 3 0x20f70 2048 0 4096 0x1182001a03 178 0 0 > ^ strange from arg4 on > > Truss output: > ------------- > > kaio(AIOREAD, 3, 0x00020F70, 2048, 4096, 0xFFBFF920) = 0 > ^ this is the correct > address passed by tst.c > > Test program output: > -------------------- > > aioread(fd 3, bufp 20f70, bufs 2048, offset 4096, whence 0, > resultp ffbff920) > > > C Program tst.c: > ---------------- > > #include <stdio.h> > #include <sys/types.h> > #include <sys/asynch.h> > #include <sys/stat.h> > #include <fcntl.h> > #include <unistd.h> > > #define OFF 4096 > #define L (2048) > char buf[L]; > > int > main() > { > int fd; > aio_result_t r, *p; > > fd = open("/dbspaces/michaelm/RAW1", O_RDONLY); > printf("aioread(fd %d, bufp %p, bufs %d, offset %d," > " whence %d, resultp %p)\n", fd, buf, L, OFF, SEEK_SET, > &r); > if (aioread(fd, buf, L, OFF, SEEK_SET, &r)) > perror("aioread"); > } > _______________________________________________ > dtrace-discuss mailing list > dtrace-discuss at opensolaris.org-- Adam Leventhal, Fishworks http://blogs.sun.com/ahl
Michael Mueller
2009-Feb-27 12:24 UTC
[dtrace-discuss] syscall provider shows wrong kaio args?
I tried on these systems, all with the same result: Solaris 10 6/06 SPARC, kernel 64 bit, app 32 bit, large file support Solaris 10 10/08 i386, kernel 64 bit, app 32 bit, large file support Solaris 10 10/08 i386, kernel 64 bit, app 64 bit Michael Adam Leventhal wrote:> Hey Michael, > > What version of Solaris are you running, and what bitness (32 or 64) are > your process and kernel? > Thanks. > > Adam > > On Feb 26, 2009, at 3:34 AM, Michael Mueller wrote: > >> Hi, >> >> For the kaio sys call (aioread) I found that the sycall provider does >> not show all arguments correctly, while good old truss does. Is this a >> bug?: >> >> DTrace script: >> >> /usr/sbin/dtrace -q -c tst -s /dev/fd/0 <<eof >> syscall::kaio:entry >> /arg0 == 0/ /* AIOREAD */ >> { >> printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x %d %d %d\n", >> arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); >> } >> eof >> >> DTrace output: >> ------- >> >> *** dtrace: kaio read 0 3 0x20f70 2048 0 4096 0x1182001a03 178 0 0 >> ^ strange from arg4 on >> >> Truss output: >> ------------- >> >> kaio(AIOREAD, 3, 0x00020F70, 2048, 4096, 0xFFBFF920) = 0 >> ^ this is the correct >> address passed by tst.c >> >> Test program output: >> -------------------- >> >> aioread(fd 3, bufp 20f70, bufs 2048, offset 4096, whence 0, >> resultp ffbff920) >> >> >> C Program tst.c: >> ---------------- >> >> #include <stdio.h> >> #include <sys/types.h> >> #include <sys/asynch.h> >> #include <sys/stat.h> >> #include <fcntl.h> >> #include <unistd.h> >> >> #define OFF 4096 >> #define L (2048) >> char buf[L]; >> >> int >> main() >> { >> int fd; >> aio_result_t r, *p; >> >> fd = open("/dbspaces/michaelm/RAW1", O_RDONLY); >> printf("aioread(fd %d, bufp %p, bufs %d, offset %d," >> " whence %d, resultp %p)\n", fd, buf, L, OFF, SEEK_SET, &r); >> if (aioread(fd, buf, L, OFF, SEEK_SET, &r)) >> perror("aioread"); >> } >> _______________________________________________ >> dtrace-discuss mailing list >> dtrace-discuss at opensolaris.org > > > -- > Adam Leventhal, Fishworks http://blogs.sun.com/ahl > >-- === Michael Mueller =================Web: http://www.michael-mueller-it.de ======================================
Adam Leventhal
2009-Feb-27 18:03 UTC
[dtrace-discuss] syscall provider shows wrong kaio args?
Hey Michael, I can reproduce that on the latest bits as well. Please file a bug and we''ll try to get this fixed. In the meantime, you can work around the problem by using the fbt provider: fbt::kaio:entry /args[0][0] == 0/ /* AIOREAD */ { printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x\n", args[0][0], args[0][1], args[0][2], args[0][3], args[0][4], args[0][5], args[0][6]); } *** dtrace: kaio read 0 3 0x8061280 2048 4096 0 0x804777c Note that the offset is a 64-bit that''s split between the 4th and 5th parameters. Please file a bug on bugs.opensolaris.org. Adam On Fri, Feb 27, 2009 at 01:24:16PM +0100, Michael Mueller wrote:> I tried on these systems, all with the same result: > > Solaris 10 6/06 SPARC, kernel 64 bit, app 32 bit, large file support > Solaris 10 10/08 i386, kernel 64 bit, app 32 bit, large file support > Solaris 10 10/08 i386, kernel 64 bit, app 64 bit > > Michael > > Adam Leventhal wrote: > > Hey Michael, > > > > What version of Solaris are you running, and what bitness (32 or 64) are > > your process and kernel? > > Thanks. > > > > Adam > > > > On Feb 26, 2009, at 3:34 AM, Michael Mueller wrote: > > > >> Hi, > >> > >> For the kaio sys call (aioread) I found that the sycall provider does > >> not show all arguments correctly, while good old truss does. Is this a > >> bug?: > >> > >> DTrace script: > >> > >> /usr/sbin/dtrace -q -c tst -s /dev/fd/0 <<eof > >> syscall::kaio:entry > >> /arg0 == 0/ /* AIOREAD */ > >> { > >> printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x %d %d %d\n", > >> arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); > >> } > >> eof > >> > >> DTrace output: > >> ------- > >> > >> *** dtrace: kaio read 0 3 0x20f70 2048 0 4096 0x1182001a03 178 0 0 > >> ^ strange from arg4 on > >> > >> Truss output: > >> ------------- > >> > >> kaio(AIOREAD, 3, 0x00020F70, 2048, 4096, 0xFFBFF920) = 0 > >> ^ this is the correct > >> address passed by tst.c > >> > >> Test program output: > >> -------------------- > >> > >> aioread(fd 3, bufp 20f70, bufs 2048, offset 4096, whence 0, > >> resultp ffbff920) > >> > >> > >> C Program tst.c: > >> ---------------- > >> > >> #include <stdio.h> > >> #include <sys/types.h> > >> #include <sys/asynch.h> > >> #include <sys/stat.h> > >> #include <fcntl.h> > >> #include <unistd.h> > >> > >> #define OFF 4096 > >> #define L (2048) > >> char buf[L]; > >> > >> int > >> main() > >> { > >> int fd; > >> aio_result_t r, *p; > >> > >> fd = open("/dbspaces/michaelm/RAW1", O_RDONLY); > >> printf("aioread(fd %d, bufp %p, bufs %d, offset %d," > >> " whence %d, resultp %p)\n", fd, buf, L, OFF, SEEK_SET, &r); > >> if (aioread(fd, buf, L, OFF, SEEK_SET, &r)) > >> perror("aioread"); > >> } > >> _______________________________________________ > >> dtrace-discuss mailing list > >> dtrace-discuss at opensolaris.org > > > > > > -- > > Adam Leventhal, Fishworks http://blogs.sun.com/ahl > > > > > > > -- > > === Michael Mueller =================> Web: http://www.michael-mueller-it.de > =====================================-- Adam Leventhal, Fishworks http://blogs.sun.com/ahl
Michael Mueller
2009-Mar-02 15:58 UTC
[dtrace-discuss] syscall provider shows wrong kaio args?
Hi Adam, I filed a bug. Synopsis: syscall provider shows wrong kaio args. Don''t know the bug id. Michael Adam Leventhal wrote:> Hey Michael, > > I can reproduce that on the latest bits as well. Please file a bug and we''ll > try to get this fixed. In the meantime, you can work around the problem by > using the fbt provider: > > fbt::kaio:entry > /args[0][0] == 0/ /* AIOREAD */ > { > printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x\n", > args[0][0], args[0][1], args[0][2], args[0][3], > args[0][4], args[0][5], args[0][6]); > } > > *** dtrace: kaio read 0 3 0x8061280 2048 4096 0 0x804777c > > Note that the offset is a 64-bit that''s split between the 4th and 5th > parameters. > > Please file a bug on bugs.opensolaris.org. > > Adam > > On Fri, Feb 27, 2009 at 01:24:16PM +0100, Michael Mueller wrote: >> I tried on these systems, all with the same result: >> >> Solaris 10 6/06 SPARC, kernel 64 bit, app 32 bit, large file support >> Solaris 10 10/08 i386, kernel 64 bit, app 32 bit, large file support >> Solaris 10 10/08 i386, kernel 64 bit, app 64 bit >> >> Michael >> >> Adam Leventhal wrote: >>> Hey Michael, >>> >>> What version of Solaris are you running, and what bitness (32 or 64) are >>> your process and kernel? >>> Thanks. >>> >>> Adam >>> >>> On Feb 26, 2009, at 3:34 AM, Michael Mueller wrote: >>> >>>> Hi, >>>> >>>> For the kaio sys call (aioread) I found that the sycall provider does >>>> not show all arguments correctly, while good old truss does. Is this a >>>> bug?: >>>> >>>> DTrace script: >>>> >>>> /usr/sbin/dtrace -q -c tst -s /dev/fd/0 <<eof >>>> syscall::kaio:entry >>>> /arg0 == 0/ /* AIOREAD */ >>>> { >>>> printf("*** dtrace: kaio read %d %d 0x%x %d %d %d 0x%x %d %d %d\n", >>>> arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); >>>> } >>>> eof >>>> >>>> DTrace output: >>>> ------- >>>> >>>> *** dtrace: kaio read 0 3 0x20f70 2048 0 4096 0x1182001a03 178 0 0 >>>> ^ strange from arg4 on >>>> >>>> Truss output: >>>> ------------- >>>> >>>> kaio(AIOREAD, 3, 0x00020F70, 2048, 4096, 0xFFBFF920) = 0 >>>> ^ this is the correct >>>> address passed by tst.c >>>> >>>> Test program output: >>>> -------------------- >>>> >>>> aioread(fd 3, bufp 20f70, bufs 2048, offset 4096, whence 0, >>>> resultp ffbff920) >>>> >>>> >>>> C Program tst.c: >>>> ---------------- >>>> >>>> #include <stdio.h> >>>> #include <sys/types.h> >>>> #include <sys/asynch.h> >>>> #include <sys/stat.h> >>>> #include <fcntl.h> >>>> #include <unistd.h> >>>> >>>> #define OFF 4096 >>>> #define L (2048) >>>> char buf[L]; >>>> >>>> int >>>> main() >>>> { >>>> int fd; >>>> aio_result_t r, *p; >>>> >>>> fd = open("/dbspaces/michaelm/RAW1", O_RDONLY); >>>> printf("aioread(fd %d, bufp %p, bufs %d, offset %d," >>>> " whence %d, resultp %p)\n", fd, buf, L, OFF, SEEK_SET, &r); >>>> if (aioread(fd, buf, L, OFF, SEEK_SET, &r)) >>>> perror("aioread"); >>>> } >>>> _______________________________________________ >>>> dtrace-discuss mailing list >>>> dtrace-discuss at opensolaris.org >>> >>> -- >>> Adam Leventhal, Fishworks http://blogs.sun.com/ahl >>> >>> >> >> -- >> >> === Michael Mueller =================>> Web: http://www.michael-mueller-it.de >> =====================================>-- === Michael Mueller =================Web: http://www.michael-mueller-it.de ======================================