[lttng-dev] Making 32-bit user-space events on a 64-bit Linux system

Thibault, Daniel Daniel.Thibault at drdc-rddc.gc.ca
Wed Oct 2 10:35:04 EDT 2013


-----Message d'origine-----
De : Woegerer, Paul [mailto:Paul_Woegerer at mentor.com] 
Envoyé : 2 octobre 2013 03:38

> The 64-bit version of lttng-tools works just fine with both, 32-bit and 64-bit userspace applications. No need to compile it as 32-bit variant.
> Instrumented 32-bit applications automatically use the 32-bit lttng-consumerd (from the lttng-ust 32-bit build), instrumented 64-bit 
> applications automatically use the 64-bit lttng-consumerd (from the lttng-ust 64-bit build).

   But lttng-consumerd is in the lttng-tools package, not lttng-ust ?!  This prevents my lttng-sessiond from using a 32-bit lttng-consumerd, as you'll see below.

> BTW, when you compile for the "-m32" multilib, it's better to use the following:
> $ ./configure CC="gcc -m32"
> This way also the linking steps (performed by libtool) of your build will know that you are building for m32 (on your x86_64 system) and you don't need e.g. "--libdir ....".

   That's what I did, but I still felt I needed to specify libdir so the install did not overwrite the 64-bit libraries (liblttng-ctl.so, liblttng-ust.so, etc.).

> For more information see:
> http://doc.opensuse.org/documentation/html/openSUSE/opensuse-reference/cha.64bit.html#sec.64bit.biarch
> or
> https://developer.mozilla.org/en/docs/Compiling_32-bit_Firefox_on_a_Linux_64-bit_OS

   I have seen the second one, which was moderately useul.  I'll look into the first one, thanks.

> > More generally, how does one add tracepoints to a 32-bit application running on a 64-bit system?
>
> You simply compile your instrumented application to 32-bit the same way you did it for the lttng-ust package (CC="gcc -m32").
>
> Paul Woegerer, SW Development Engineer

   Indeed, once lttng-ust has been done in 32-bits, I can use the 'make static32' I quoted at the beginning of the thread like this:

$ LDFLAGS=-L/usr/local/lib32 make static 32

   And then run the sample app like this:

$ LD_PRELOAD=/usr/local/lib32/liblttng-ust.so ./sample_static32

   (I could dump the LD_PRELOAD by adding /usr/local/lib32 to my PATH)

   But my running lttng-sessiond (enable-event -u -a) complains:

Error: Consumer socket fd -1 not found in consumer obj 0x7ffd4000b650

   My guess is I'll need to launch lttng-sessiond with the -u and -U options to point it to the 32-bit lttng-consumerd...Once I can get the 32-bit lttng-tools to compile and install it.

Daniel U. Thibault
Protection des systèmes et contremesures (PSC) | Systems Protection & Countermeasures (SPC)
Cyber sécurité pour les missions essentielles (CME) | Mission Critical Cyber Security (MCCS)
R & D pour la défense Canada - Valcartier (RDDC Valcartier) | Defence R&D Canada - Valcartier (DRDC Valcartier)
2459 route de la Bravoure
Québec QC  G3J 1X5
CANADA
Vox : (418) 844-4000 x4245
Fax : (418) 844-4538
NAC : 918V QSDJ <http://www.travelgis.com/map.asp?addr=918V%20QSDJ>
Gouvernement du Canada | Government of Canada
<http://www.valcartier.drdc-rddc.gc.ca/>



More information about the lttng-dev mailing list