Discussion:
Escaping Special Characters in probe description and fullpath of module
Vasanth Bhat
2010-12-27 11:35:04 UTC
Permalink
Hi,

Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.

For example, I the following sample d-trace script which fails to
compile because of the special character '%'.This is part of the
libraryname ( /usr/lib/iconv/646%8859.so )

pid1061:646*%*8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}

When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"

I tried using "\" to escape "%". But that didn't help. How we handle
such cases?

Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)

Thanks
Vasanth
Adam Leventhal
2010-12-27 20:38:21 UTC
Permalink
Hey Vasanth,

You might try something like this:

pid1061:646?8859.so::entry
{
...
}

You might then his a problem in the pid provider itself; let me know
and we can work from there.

Adam
Hi,
      Is there a escape charater to escape the appeareance of special
characters like '%'   appearing as a part of probemode or probefunc.
For example,  I  the following  sample d-trace script which fails to compile
because of  the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
  printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help.  How we handle such
cases?
Also, on an another note, how do we obtain the  fullpath of the library
inside a d-script.  The "probemod"   by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
--
Adam Leventhal, Delphix                        http://dtrace.org/blogs/ahl
vasanth
2010-12-28 08:52:05 UTC
Permalink
Thanks Adam.

That works.

Does this means the probe will match for not just "646%8859.so",
but also for other module, like "646x8859.so" or "646a8859.so" etc.
Do I need to have the additional check for the specific module in the
predicate ( /probemod == "646%8859.so"/ )

Thanks
Vasanth
Post by Adam Leventhal
Hey Vasanth,
pid1061:646?8859.so::entry
{
...
}
You might then his a problem in the pid provider itself; let me know
and we can work from there.
Adam
Post by Vasanth Bhat
Hi,
Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.
For example, I the following sample d-trace script which fails to compile
because of the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help. How we handle such
cases?
Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
Adam Leventhal
2010-12-28 21:35:24 UTC
Permalink
Hey Vasanth,

Correct; I should have mentioned that use of the globbing character means that you could match other modules. As you say, using a predicate will protect you against erroneous matches.

Adam
Post by vasanth
Thanks Adam.
That works.
Does this means the probe will match for not just "646%8859.so", but also for other module, like "646x8859.so" or "646a8859.so" etc. Do I need to have the additional check for the specific module in the predicate ( /probemod == "646%8859.so"/ )
Thanks
Vasanth
Post by Adam Leventhal
Hey Vasanth,
pid1061:646?8859.so::entry
{
...
}
You might then his a problem in the pid provider itself; let me know
and we can work from there.
Adam
On Mon, Dec 27, 2010 at 6:35 AM, Vasanth Bhat
Post by Vasanth Bhat
Hi,
Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.
For example, I the following sample d-trace script which fails to compile
because of the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help. How we handle such
cases?
Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
--
Adam Leventhal, Delphix http://dtrace.org/blogs/ahl
--
Adam Leventhal, Delphix http://dtrace.org/blogs/ahl
vasanth
2010-12-29 08:37:40 UTC
Permalink
Thanks Adam.

Is there known list of other special characters which needs to be
handled this way.

Thanks
Vasanth
Post by Adam Leventhal
Hey Vasanth,
Correct; I should have mentioned that use of the globbing character means that you could match other modules. As you say, using a predicate will protect you against erroneous matches.
Adam
Post by vasanth
Thanks Adam.
That works.
Does this means the probe will match for not just "646%8859.so", but also for other module, like "646x8859.so" or "646a8859.so" etc. Do I need to have the additional check for the specific module in the predicate ( /probemod == "646%8859.so"/ )
Thanks
Vasanth
Post by Adam Leventhal
Hey Vasanth,
pid1061:646?8859.so::entry
{
...
}
You might then his a problem in the pid provider itself; let me know
and we can work from there.
Adam
On Mon, Dec 27, 2010 at 6:35 AM, Vasanth Bhat
Post by Vasanth Bhat
Hi,
Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.
For example, I the following sample d-trace script which fails to compile
because of the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help. How we handle such
cases?
Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
Adam Leventhal
2010-12-29 13:38:18 UTC
Permalink
Hi Vasanth,

You can find it in the libdtrace parser:
  http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_lex.l#69

RGX_PSPEC [-$:a-zA-Z_.?*\\\[\]!][-$:0-9a-zA-Z_.`?*\\\[\]!]*

That's an initial -$:a-zA-Z_.?*\[]! and then after that those same
characters plus 0-9 and `.

Adam
Post by vasanth
Thanks Adam.
Is there  known list of other  special characters which needs to be handled this way.
Thanks
Vasanth
Hey Vasanth,
Correct; I should have mentioned that use of the globbing character means that you could match other modules. As you say, using a predicate will protect you against erroneous matches.
Adam
Thanks Adam.
That works.
Does this means the probe will match for not just "646%8859.so", but also for other module, like "646x8859.so" or "646a8859.so" etc. Do I need to have the additional check for the specific module in the predicate ( /probemod == "646%8859.so"/ )
Thanks
Vasanth
Hey Vasanth,
pid1061:646?8859.so::entry
{
...
}
You might then his a problem in the pid provider itself; let me know
and we can work from there.
Adam
On Mon, Dec 27, 2010 at 6:35 AM, Vasanth Bhat
Hi,
Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.
For example, I the following sample d-trace script which fails to compile
because of the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help. How we handle such
cases?
Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
--
Adam Leventhal, Delphix                        http://dtrace.org/blogs/ahl
vasanth
2010-12-30 09:23:46 UTC
Permalink
Thanks Adam.

--Vasanth
Post by Adam Leventhal
Hi Vasanth,
http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libdtrace/common/dt_lex.l#69
RGX_PSPEC [-$:a-zA-Z_.?*\\\[\]!][-$:0-9a-zA-Z_.`?*\\\[\]!]*
That's an initial -$:a-zA-Z_.?*\[]! and then after that those same
characters plus 0-9 and `.
Adam
Post by vasanth
Thanks Adam.
Is there known list of other special characters which needs to be handled this way.
Thanks
Vasanth
Hey Vasanth,
Correct; I should have mentioned that use of the globbing character means that you could match other modules. As you say, using a predicate will protect you against erroneous matches.
Adam
Thanks Adam.
That works.
Does this means the probe will match for not just "646%8859.so", but also for other module, like "646x8859.so" or "646a8859.so" etc. Do I need to have the additional check for the specific module in the predicate ( /probemod == "646%8859.so"/ )
Thanks
Vasanth
Hey Vasanth,
pid1061:646?8859.so::entry
{
...
}
You might then his a problem in the pid provider itself; let me know
and we can work from there.
Adam
On Mon, Dec 27, 2010 at 6:35 AM, Vasanth Bhat
Hi,
Is there a escape charater to escape the appeareance of special
characters like '%' appearing as a part of probemode or probefunc.
For example, I the following sample d-trace script which fails to compile
because of the special character '%'.This is part of the libraryname (
/usr/lib/iconv/646%8859.so )
pid1061:646%8859.so::entry
{
printf("%s|%d|%s|%s\n",execname,pid,probemod,probefunc);
}
When tried to run it fails with error "dtrace: failed to compile script
/tmp/d-scripts/runscan_1061.d: line 8: syntax error near "%"
I tried using "\" to escape "%". But that didn't help. How we handle such
cases?
Also, on an another note, how do we obtain the fullpath of the library
inside a d-script. The "probemod" by default retuurns the module name
without the path. (libxyz.so)
Thanks
Vasanth
_______________________________________________
dtrace-discuss mailing list
--
Adam Leventhal, Delphix http://dtrace.org/blogs/ahl
Loading...