123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354 |
- 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)`
|