reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146
  147
  148
  149
  150
  151
  152
  153
  154
  155
  156
  157
  158
  159
  160
  161
  162
  163
  164
  165
  166
  167
  168
  169
  170
  171
  172
  173
  174
  175
  176
  177
  178
  179
  180
  181
  182
  183
  184
  185
  186
  187
  188
  189
  190
  191
  192
  193
  194
  195
  196
  197
  198
  199
  200
  201
  202
  203
  204
  205
  206
  207
  208
  209
  210
  211
  212
  213
  214
  215
  216
  217
  218
  219
  220
  221
  222
  223
  224
  225
  226
  227
  228
  229
  230
  231
  232
  233
  234
  235
  236
  237
  238
  239
  240
  241
  242
  243
  244
  245
  246
  247
  248
  249
  250
  251
  252
  253
  254
  255
  256
  257
  258
  259
  260
  261
  262
  263
  264
  265
  266
  267
  268
  269
  270
  271
  272
  273
  274
  275
  276
  277
  278
  279
  280
  281
  282
  283
  284
  285
  286
  287
  288
  289
  290
  291
  292
  293
  294
  295
  296
  297
  298
  299
  300
  301
  302
  303
  304
  305
  306
  307
  308
  309
  310
  311
  312
  313
  314
  315
  316
  317
  318
  319
  320
  321
  322
  323
  324
  325
  326
  327
  328
  329
  330
  331
  332
  333
  334
  335
  336
  337
  338
  339
  340
  341
  342
  343
  344
  345
  346
  347
  348
  349
  350
  351
  352
  353
  354
llvm-symbolizer - convert addresses into source code locations
==============================================================

.. program:: llvm-symbolizer

SYNOPSIS
--------

:program:`llvm-symbolizer` [*options*] [*addresses...*]

DESCRIPTION
-----------

:program:`llvm-symbolizer` reads object file names and addresses from the
command-line and prints corresponding source code locations to standard output.

If no address is specified on the command-line, it reads the addresses from
standard input. If no object file is specified on the command-line, but
addresses are, or if at any time an input value is not recognized, the input is
simply echoed to the output.

A positional argument or standard input value can be preceded by "DATA" or
"CODE" to indicate that the address should be symbolized as data or executable
code respectively. If neither is specified, "CODE" is assumed. DATA is
symbolized as address and symbol size rather than line number.

Object files can be specified together with the addresses either on standard
input or as positional arguments on the command-line, following any "DATA" or
"CODE" prefix.

EXAMPLES
--------

All of the following examples use the following two source files as input. They
use a mixture of C-style and C++-style linkage to illustrate how these names are
printed differently (see :option:`--demangle`).

.. code-block:: c

  // test.h
  extern "C" inline int foz() {
    return 1234;
  }

.. code-block:: c

  // test.cpp
  #include "test.h"
  int bar=42;

  int foo() {
    return bar;
  }

  int baz() {
    volatile int k = 42;
    return foz() + k;
  }

  int main() {
    return foo() + baz();
  }

These files are built as follows:

.. code-block:: console

  $ clang -g test.cpp -o test.elf
  $ clang -g -O2 test.cpp -o inlined.elf

Example 1 - addresses and object on command-line:

.. code-block:: console

  $ llvm-symbolizer --obj=test.elf 0x4004d0 0x400490
  foz
  /tmp/test.h:1:0

  baz()
  /tmp/test.cpp:11:0

Example 2 - addresses on standard input:

.. code-block:: console

  $ cat addr.txt
  0x4004a0
  0x400490
  0x4004d0
  $ llvm-symbolizer --obj=test.elf < addr.txt
  main
  /tmp/test.cpp:15:0

  baz()
  /tmp/test.cpp:11:0

  foz
  /tmp/./test.h:1:0

Example 3 - object specified with address:

.. code-block:: console

  $ llvm-symbolizer "test.elf 0x400490" "inlined.elf 0x400480"
  baz()
  /tmp/test.cpp:11:0

  foo()
  /tmp/test.cpp:8:10

  $ cat addr2.txt
  test.elf 0x4004a0
  inlined.elf 0x400480

  $ llvm-symbolizer < addr2.txt
  main
  /tmp/test.cpp:15:0

  foo()
  /tmp/test.cpp:8:10

Example 4 - CODE and DATA prefixes:

.. code-block:: console

  $ llvm-symbolizer --obj=test.elf "CODE 0x400490" "DATA 0x601028"
  baz()
  /tmp/test.cpp:11:0

  bar
  6295592 4

  $ cat addr3.txt
  CODE test.elf 0x4004a0
  DATA inlined.elf 0x601028

  $ llvm-symbolizer < addr3.txt
  main
  /tmp/test.cpp:15:0

  bar
  6295592 4

OPTIONS
-------

.. option:: --adjust-vma <offset>

  Add the specified offset to object file addresses when performing lookups.
  This can be used to perform lookups as if the object were relocated by the
  offset.

.. option:: --basenames, -s

  Strip directories when printing the file path.

.. _llvm-symbolizer-opt-C:

.. option:: --demangle, -C

  Print demangled function names, if the names are mangled (e.g. the mangled
  name `_Z3bazv` becomes `baz()`, whilst the non-mangled name `foz` is printed
  as is). Defaults to true.

.. option:: --dwp <path>

  Use the specified DWP file at ``<path>`` for any CUs that have split DWARF
  debug data.

.. option:: --fallback-debug-path <path>

  When a separate file contains debug data, and is referenced by a GNU debug
  link section, use the specified path as a basis for locating the debug data if
  it cannot be found relative to the object.

.. _llvm-symbolizer-opt-f:

.. option:: --functions [<none|short|linkage>], -f

  Specify the way function names are printed (omit function name, print short
  function name, or print full linkage name, respectively). Defaults to
  ``linkage``.

.. option:: --help, -h

  Show help and usage for this command.

.. option:: --help-list

  Show help and usage for this command without grouping the options into categories.

.. _llvm-symbolizer-opt-i:

.. option:: --inlining, --inlines, -i

  If a source code location is in an inlined function, prints all the inlined
  frames. Defaults to true.

.. option:: --no-demangle

  Don't print demangled function names.

.. option:: --obj <path>, --exe, -e

  Path to object file to be symbolized. If ``-`` is specified, read the object
  directly from the standard input stream.

.. _llvm-symbolizer-opt-output-style:

.. option:: --output-style <LLVM|GNU>

  Specify the preferred output style. Defaults to ``LLVM``. When the output
  style is set to ``GNU``, the tool follows the style of GNU's **addr2line**.
  The differences from the ``LLVM`` style are:
  
  * Does not print the column of a source code location.

  * Does not add an empty line after the report for an address.

  * Does not replace the name of an inlined function with the name of the
    topmost caller when inlined frames are not shown and :option:`--use-symbol-table`
    is on.

  .. code-block:: console

    $ llvm-symbolizer --obj=inlined.elf 0x4004be 0x400486 -p
    baz() at /tmp/test.cpp:11:18
     (inlined by) main at /tmp/test.cpp:15:0

    foo() at /tmp/test.cpp:6:3

    $ llvm-symbolizer --output-style=LLVM --obj=inlined.elf 0x4004be 0x400486 -p -i=0
    main at /tmp/test.cpp:11:18

    foo() at /tmp/test.cpp:6:3

    $ llvm-symbolizer --output-style=GNU --obj=inlined.elf 0x4004be 0x400486 -p -i=0
    baz() at /tmp/test.cpp:11
    foo() at /tmp/test.cpp:6

.. option:: --pretty-print, -p

  Print human readable output. If :option:`--inlining` is specified, the
  enclosing scope is prefixed by (inlined by).

.. code-block:: console

  $ llvm-symbolizer --obj=inlined.elf 0x4004be --inlining --pretty-print
  baz() at /tmp/test.cpp:11:18
   (inlined by) main at /tmp/test.cpp:15:0

.. option:: --print-address, --addresses, -a

  Print address before the source code location. Defaults to false.

.. code-block:: console

  $ llvm-symbolizer --obj=inlined.elf --print-address 0x4004be
  0x4004be
  baz()
  /tmp/test.cpp:11:18
  main
  /tmp/test.cpp:15:0

  $ llvm-symbolizer --obj=inlined.elf 0x4004be --pretty-print --print-address
  0x4004be: baz() at /tmp/test.cpp:11:18
   (inlined by) main at /tmp/test.cpp:15:0

.. option:: --print-source-context-lines <N>

  Print ``N`` lines of source context for each symbolized address.

.. code-block:: console

  $ llvm-symbolizer --obj=test.elf 0x400490 --print-source-context-lines=2
  baz()
  /tmp/test.cpp:11:0
  10  :   volatile int k = 42;
  11 >:   return foz() + k;
  12  : }

.. _llvm-symbolizer-opt-use-symbol-table:

.. option:: --use-symbol-table

  Prefer function names stored in symbol table to function names in debug info
  sections. Defaults to true.

.. option:: --verbose

  Print verbose line and column information.

.. code-block:: console

  $ llvm-symbolizer --obj=inlined.elf --verbose 0x4004be
  baz()
    Filename: /tmp/test.cpp
  Function start line: 9
    Line: 11
    Column: 18
  main
    Filename: /tmp/test.cpp
  Function start line: 14
    Line: 15
    Column: 0

.. option:: --version

  Print version information for the tool.

.. option:: @<FILE>

  Read command-line options from response file `<FILE>`.

MACH-O SPECIFIC OPTIONS
-----------------------

.. option:: --default-arch <arch>

  If a binary contains object files for multiple architectures (e.g. it is a
  Mach-O universal binary), symbolize the object file for a given architecture.
  You can also specify the architecture by writing ``binary_name:arch_name`` in
  the input (see example below). If the architecture is not specified in either
  way, the address will not be symbolized. Defaults to empty string.

.. code-block:: console

  $ cat addr.txt
  /tmp/mach_universal_binary:i386 0x1f84
  /tmp/mach_universal_binary:x86_64 0x100000f24

  $ llvm-symbolizer < addr.txt
  _main
  /tmp/source_i386.cc:8

  _main
  /tmp/source_x86_64.cc:8

.. option:: --dsym-hint <path/to/file.dSYM>

  If the debug info for a binary isn't present in the default location, look for
  the debug info at the .dSYM path provided via this option. This flag can be
  used multiple times.

EXIT STATUS
-----------

:program:`llvm-symbolizer` returns 0. Other exit codes imply an internal program
error.

SEE ALSO
--------

:manpage:`llvm-addr2line(1)`