Date: Tue, 15 Apr 2014 22:36:09 -0400 From: Mark Johnston <markj@freebsd.org> To: carlos antonio neira bustos <cneirabustos@gmail.com> Cc: "freebsd-dtrace@freebsd.org" <freebsd-dtrace@freebsd.org> Subject: Re: uaddr and friends Message-ID: <CAMw1wOw0SwAHRWCBTBX6FczU=cWZwri-p9--MdaC956WtZ5sGw@mail.gmail.com> In-Reply-To: <CACiB22hQ-9bBeFcFNeEfcrRu2MK0VxAUP1taHFCxJoW0eypxcg@mail.gmail.com> References: <CACiB22g4JHWhj9ZPWmKKg1FAF376J3TBcrOtgOFrs4JHkFvkOw@mail.gmail.com> <CAMw1wOxWUpCtrYhkp-NUfigPZUewpyesYzTYG2s=uHLmMXhQwg@mail.gmail.com> <CACiB22hQ-9bBeFcFNeEfcrRu2MK0VxAUP1taHFCxJoW0eypxcg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 15, 2014 at 10:15 PM, carlos antonio neira bustos <cneirabustos@gmail.com> wrote: > Hi Mark, > > I was looking at this document > https://wikis.oracle.com/display/DTrace/Actions+and+Subroutines#ActionsandSubroutines-%7B%7Busym%7D%7D > currently looking at the code uaddr is the same as usym, but according to > this document > > usym will print the symbol for a specified address. This is analogous to how > uaddr works, but without the hexadecimal offsets. > > uaddr: date`clock_val+0x1 > usym: date`clock_val > > > here are my outputs from usym and uaddr : > > root@bsd:/home/cneira # dtrace -n 'pid$target::main:{usym(uregs[R_PC])}' -c > ./test > dtrace: description 'pid$target::main:' matched 2 probes > abCPU ID FUNCTION:NAME > 0 56282 main:entry test`main > 0 56281 main:return test`main > dtrace: pid 10588 has exited > > root@bsd:/home/cneira # dtrace -n 'pid$target::main:{uaddr(uregs[R_PC])}' -c > ./test > dtrace: description 'pid$target::main:' matched 2 probes > abCPU ID FUNCTION:NAME > 0 56282 main:entry > test`main+0x1 > > 0 56281 main:return > test`main+0x23 > > dtrace: pid 10591 has exited > > As current is only using dt_print_usym for uaddr the output should not have > the hexadecimal offset specified in that documentation. > So I'm somewhat lost about which is the correct behavior , Do you have a > uaddr and usym output example in current to check this?, all my changes > were done in 10 prod release. You're right, dt_print_usym handles both usym and uaddr. In the usym case, there's some special handling which looks up the symbol name corresponding to the given pc, and then sets the pc variable to the address of the symbol. Then dtrace_uaddr2str only prints the offset from the symbol if that offset is non-zero, so in the uaddr case you get "+0x1" and "+0x23" above. > > Bests > > > > > > > > On Tue, Apr 15, 2014 at 10:09 PM, Mark Johnston <markj@freebsd.org> wrote: >> >> On Tue, Apr 15, 2014 at 8:35 PM, carlos antonio neira bustos >> <cneirabustos@gmail.com> wrote: >> > Hi All, >> > >> > I was looking at Dtrace todo list from >> > https://wiki.freebsd.org/DTraceTODO >> > and started to work on : Get uaddr(), ufunc(), umod(), and usym() action >> > funtions working. >> > I have the data recording action (uaddr) working now, here is an >> > example: >> >> Hi! >> >> Hm, these should have been (at least mostly) working since r258902: >> http://svnweb.freebsd.org/base?view=revision&revision=258902 >> >> > >> > root@bsd:/home/cneira # dtrace -n >> > 'pid$target::main:{uaddr(uregs[R_PC])}' >> > -c ./test >> > dtrace: description 'pid$target::main:' matched 2 probes >> > abCPU ID FUNCTION:NAME >> > 0 56282 main:entry >> > test`main+0x1 >> > >> > 0 56281 main:return >> > test`main+0x23 >> > >> > dtrace: pid 9687 has exited >> > >> > Here is the output of nm from the test binary I have used to check this >> > change. >> > >> > U _init_tls@@FBSD_1.0 >> > 08048380 T _start >> > 080483a0 t _start1 >> > 0804814c r abitag >> > U atexit@@FBSD_1.0 >> > 08048164 r crt_noinit_tag >> > 080485c0 T dosomething >> > 08049764 B environ >> > U exit@@FBSD_1.0 >> > 080484f0 t finalizer >> > 08048560 t frame_dummy >> > 08048590 T main >> > U putchar@@FBSD_1.0 >> > >> > >> > root@bsd:/home/cneira # dtrace -c ./test -n 'pid$target::main:entry{ >> > uaddr(0x080485c0); }' >> > dtrace: description 'pid$target::main:entry' matched 1 probe >> > abCPU ID FUNCTION:NAME >> > 0 56281 main:entry >> > test`dosomething >> > >> > dtrace: pid 9736 has exited >> > >> > I'll continue working on the rest, how do I submit a patch with these >> > changes ? >> >> Pasting it inline is generally fine if it's not too large. It's also >> ok to put it in a public directory somewhere and post a link to it. >> >> -Mark > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAMw1wOw0SwAHRWCBTBX6FczU=cWZwri-p9--MdaC956WtZ5sGw>