User Guide

Intel® VTune™ Profiler User Guide

ID 766319
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

Analyze Statically Linked Binaries on Linux* Targets

To profile a statically linked binary file, temporary stop stripping the binary file during compilation and make sure the binary file exports the following symbols from system libraries:

  • _init() in the main executable: if you profile a tree of processes, consider using the strategy option.

  • libc.so:

    • A target exports setenv, getenv(), and __errno_location() symbols unconditionally.

    • If a target employs recv() API, it exports recv() and poll().

    • If a target employs sleep() or usleep() APIs, it exports sleep() or usleep() respectively, and nanosleep() symbol.

  • libpthread.so:

    • If a target employs pthread_create() API, it exports the following symbols:

      • pthread_create()

      • pthread_key_create()

      • pthread_setspecific()

      • pthread_getspecific()

      • pthread_self()

      • pthread_getattr_np()

      • pthread_attr_destroy()

      • pthread_attr_setstack()

      • pthread_attr_getstack()

      • pthread_attr_getstacksize()

      • pthread_attr_setstacksize()

      • If a target employs pthread_cancel() API, it exports the following symbols:

        • pthread_cancel()

        • _pthread_cleanup_push()

        • _pthread_cleanup_pop()

      • If a target employs _pthread_cleanup_push() or _pthread_cleanup_pop() API, it exports the following symbols:

        • _pthread_cleanup_push()

        • _pthread_cleanup_pop()

      • If a target employs pthread_mutex_lock() API, it exports pthread_mutex_lock() and pthread_mutex_trylock() symbol.

      • If a target employs pthread_spin_lock() API, it exports pthread_spin_lock() and pthread_spin_trylock() symbol.

  • libdl.so:

    If a target employs any of dlopen(), dlsym(), or dlclose() APIs, it exports all three of them simultaneously.

If the binary file does not export some of the symbols above, use the -u linker switch (for example, specify -Wl,-u__errno_location if you use compiler for linking) to include symbols into the binary file at the linking stage of compilation.