[lttng-dev] tracepoint provider: static versus dynamic linking (TRACEPOINT_PROBE_DYNAMIC_LINKAGE)

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Fri May 3 11:33:28 EDT 2013


Hi David,

Sorry for the late reply,

* David Bryant (david.bryant at quantum.com) wrote:
> Hello,
>
> What are the pros and cons of static versus dynamic linking of the  
> tracepoint provider? I can't find much information looking around.

static linking: no need to use LD_PRELOAD.

dynamic linking: can ship tracepoint provider as separate .so, packaging
separately from the instrumented application.

> Are their any licensing related issues? For example, is closed-source  
> software not allowed to use static linking?

The headers used to build the tracepoint providers are MIT-licensed, so
there is absolutely no licensing issue here with static linking of
tracepoint providers with closed-source apps. However, liblttng-ust per
se is _always_ dynamically linked.

Thanks,

Mathieu

>
> Is it just an optimisation - allowing the program to run without probes  
> connected?
>
> Thanks,
> Dave
>
>
> Notes from my digging of how it works:
>
> Looking at the preprocessor output of sample.c without/with  
> TRACEPOINT_PROBE_DYNAMIC_LINKAGE defined I see:
>
> $ diff -u sample.i.static sample.i.dynamic
> --- sample.i.static    2012-11-08 13:29:04.049059515 +1030
> +++ sample.i.dynamic    2012-11-08 13:29:04.169062438 +1030
> @@ -746,7 +746,7 @@
>  struct tracepoint __tracepoint_sample_component___message  
> __attribute__((section("__tracepoints"))) = {
>      __tp_strtab_sample_component___message,
>      0,
>      ((void *)0),
> -    &__tracepoint_provider_sample_component,
> +    ((void *)0),
>      "char *, text",
>  };
>
> (line breaks added by me).
>
> So the "int * tracepoint::tracepoint_provider_ref" member is set to  
> ((void *)0) in struct tracepoint:
>
> struct tracepoint {
>  const char *name;
>  int state;
>  struct tracepoint_probe *probes;
>  int *tracepoint_provider_ref;         /* XXX */
>  const char *signature;
>  char padding[16];
> };
>
> So the static version is not dependent on the symbol  
> "__tracepoint_provider_sample_component". Running  
> LD_PRELOAD=libprovider.so ./sample (somehow?) reinstates that symbol.  
> (Can't quite see how that works).
>
> ----------------------------------------------------------------------
> The information contained in this transmission may be confidential. Any disclosure, copying, or further distribution of confidential information is not permitted unless such privilege is explicitly granted in writing by Quantum. Quantum reserves the right to have electronic communications, including email and attachments, sent across its networks filtered through anti virus and spam software programs and retain such messages in order to comply with applicable data security and retention requirements. Quantum is not responsible for the proper and complete transmission of the substance of this communication or for any delay in its receipt.
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list