Vladimir Kotal
2011-Apr-14 10:19 UTC
[dtrace-discuss] compilation, types and include files
Hi again,
I am trying to construct set of scripts with common translator
definitions stored in separate header file (so that all the scripts can
use it):
$ cat xlate.h
#include <sys/types.h>
inline string state_string[int32_t state] state == 0 ? "initial" :
state == 1 ? "other" :
state == 2 ? "next" :
"<unknown>";
$ cat state.d
#!/usr/sbin/dtrace -I. -Cs
#include "xlate.h"
BEGIN
{
printf("%s", state_string[1]);
}
However, it fails with:
$ chmod +x ./state.d
$ ./state.d
dtrace: no probes specified
$ dtrace -I. -Cs state.d
dtrace: failed to compile script state.d: "./xlate.h", line 8: failed
to
resolve type string: Unknown type name
If I concatenate the 2 files together it works fine:
$ cat concat.d
inline string state_string[int32_t state] state == 0 ? "initial" :
state == 1 ? "other" :
state == 2 ? "next" :
"<unknown>";
BEGIN
{
printf("%s", state_string[1]);
}
$ dtrace -s concat.d
dtrace: script ''concat.d'' matched 1 probe
CPU ID FUNCTION:NAME
1 1 :BEGIN other
^C
Any clues what I am doing wrong ?
v.
Adam Leventhal
2011-Apr-14 17:35 UTC
[dtrace-discuss] compilation, types and include files
> #!/usr/sbin/dtrace -I. -CsThe kernel only picks up one argument from the #! line. You can use #pragma incdir instead of the -I option. Adam -- Adam Leventhal, Delphix http://dtrace.org/blogs/ahl 275 Middlefield Road, Suite 50 Menlo Park, CA 94025 http://www.delphix.com
Vladimir Kotal
2011-Apr-27 10:01 UTC
[dtrace-discuss] compilation, types and include files
On 04/14/11 07:35 PM, Adam Leventhal wrote:>> #!/usr/sbin/dtrace -I. -Cs > > The kernel only picks up one argument from the #! line. You can use > #pragma incdir instead of the -I option.I can''t get this to work. If I remove the include line and header from state.d and run it like this: dtrace -I. -Cs state.d it reports the same error: dtrace: failed to compile script state.d: "./xlate.h", line 7: failed to resolve type string: Unknown type name Even if I remove the include <sys/types.h> from xlate.h and convert all int<x>_t types to plain int it reports the same: dtrace: failed to compile script state.d: "./xlate.h", line 5: failed to resolve type string: Unknown type name I also tried the incdir pragma option but this failed too: $ cat state.d #pragma D option incdir=. #pragma D option cpp #include "xlate.h" BEGIN { printf("%s", state_string[1]); } $ dtrace -s state.d dtrace: failed to compile script state.d: line 1: failed to set option ''incdir'' to ''.'': Option cannot be used from within a D program Maybe I should try to avoid the string type ? v.