[Mono-dev] Mono dtrace provider?

Andreas Färber andreas.faerber at web.de
Sun Jan 13 19:28:48 EST 2008


Hey,

Am 13.01.2008 um 19:12 schrieb Miguel de Icaza:

>
>> Mono however uses libtool+automake for building: First, there seem to
>> be PIC and non-PIC .o files generated; then most .o files are  
>> compiled
>> into .a archives; and finally, all these .o files are handled
>> automagically by libtool/automake/whatever so it's difficult to add
>> such manual build steps.
>
> PIC files are only used when you embed Mono into a third party
> application (when you use -lmono).   The static case is what Mono uses
> if you invoke it as a runtime from the command line ("mono app.exe")

Both were being compiled here, and if I don't link this stub I get an  
unresolved symbol error. This only goes away if I pass the .o file  
(mini.o) to dtrace -G too, and then suddenly the generated .o file  
(mono-dtrace.o) is no longer readable by gobjdump though `file' still  
identifies it as ELF object file. Some ELF headers are supposedly  
being added/modified by dtrace, but documentation is very vague on  
this, and same thing happens for a test app where DTrace works  
afterwards.

I'm testing this btw with /usr/sbin/dtrace -P mono'$target' -c 'mono/ 
mini/mono ../test.exe' (as root), and "doesn't work" refers to:

dtrace: invalid probe specifier mono$target: probe description  
mono12345::: does not match any probes

whereas it's supposed to write:

dtrace: description 'mono$target' matched 1 probe


>> I thought data/ would be an obvious choice for the .d file, and chose
>> mono/utils for the generated header and object file but the object
>> file seems to depend on all object files with the probes, here mini.o
>
> Hand written information can go into the data directory;   Source code
> generated by a tool should be generated at compile time.

Okay, sure, that's what I already do. Is mono/utils a suitable place  
for such a compile-time generated header, or should it go directly  
into mono/mini where the existing trace.(h|c) files live? It just  
needs to be built before we use it anywhere, obviously, and dtrace -G  
apparently needs the object files where the probes are used.


Today I figured out that my mono-dtrace.o file was not being archived  
into libmono-static.a by ar. I fixed this with a severe hack, manually  
generating a .lo file as input for _LIBADD, see attached. Results are  
no better though. Configuring --with-static-mono=no made no difference  
either.

I've already checked with a hello world program that it's not related  
to compiling with gcc or with -g -O2 flags.

It seems virtually no other project using DTrace is using libtool ...  
the ones I'm aware of are Mozilla (autoconf only), Ruby (autoconf  
only), Perl (shell-script-generated Makefile); for Apache and PHP  
people built it as module/extension library, avoiding their project's  
build system. The only DTrace provider apparently using libtool is  
this one:
http://hg.tangent.org/skeleton-mysql-engine/
Open MPI, using libtool, was reported to be working on DTrace support  
(in a message to the author of the above) but I see nothing in 1.2.5  
or SVN HEAD.

Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dtrace-hack2.diff
Type: application/octet-stream
Size: 3077 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20080114/36f93251/attachment.obj 
-------------- next part --------------





More information about the Mono-devel-list mailing list