2013-03-01 08:58:27 +01:00
|
|
|
llvm-symbolizer - convert addresses into source code locations
|
|
|
|
==============================================================
|
|
|
|
|
[docs][tools] Add missing "program" tags to rst files
Sphinx allows for definitions of command-line options using
`.. option <name>` and references to those options via `:option:<name>`.
However, it looks like there is no scoping of these options by default,
meaning that links can end up pointing to incorrect documents. See for
example the llvm-mca document, which contains references to -o that,
prior to this patch, pointed to a different document. What's worse is
that these links appear to be non-deterministic in which one is picked
(on my machine, some references end up pointing to opt, whereas on the
live docs, they point to llvm-dwarfdump, for example).
The fix is to add the .. program <name> tag. This essentially namespaces
the options (definitions and references) to the named program, ensuring
that the links are kept correct.
Reviwed by: andreadb
Differential Revision: https://reviews.llvm.org/D63873
llvm-svn: 364538
2019-06-27 15:24:46 +02:00
|
|
|
.. program:: llvm-symbolizer
|
|
|
|
|
2013-03-01 08:58:27 +01:00
|
|
|
SYNOPSIS
|
|
|
|
--------
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
:program:`llvm-symbolizer` [*options*] [*addresses...*]
|
2013-03-01 08:58:27 +01:00
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
-----------
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
:program:`llvm-symbolizer` reads object file names and addresses from the
|
|
|
|
command-line and prints corresponding source code locations to standard output.
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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.
|
|
|
|
|
2019-12-18 19:19:47 +01:00
|
|
|
:program:`llvm-symbolizer` parses options from the environment variable
|
|
|
|
``LLVM_SYMBOLIZER_OPTS`` after parsing options from the command line.
|
|
|
|
``LLVM_SYMBOLIZER_OPTS`` is primarily useful for supplementing the command-line
|
|
|
|
options when :program:`llvm-symbolizer` is invoked by another program or
|
|
|
|
runtime.
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
EXAMPLES
|
2013-03-01 08:58:27 +01:00
|
|
|
--------
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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:
|
|
|
|
|
2013-03-01 08:58:27 +01:00
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ cat addr.txt
|
2019-06-26 13:42:03 +02:00
|
|
|
0x4004a0
|
|
|
|
0x400490
|
|
|
|
0x4004d0
|
|
|
|
$ llvm-symbolizer --obj=test.elf < addr.txt
|
2013-03-01 08:58:27 +01:00
|
|
|
main
|
2019-06-26 13:42:03 +02:00
|
|
|
/tmp/test.cpp:15:0
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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
|
2013-06-28 10:15:40 +02:00
|
|
|
|
2013-12-24 20:33:22 +01:00
|
|
|
$ cat addr2.txt
|
2019-06-26 13:42:03 +02:00
|
|
|
test.elf 0x4004a0
|
|
|
|
inlined.elf 0x400480
|
|
|
|
|
|
|
|
$ llvm-symbolizer < addr2.txt
|
2013-12-24 20:33:22 +01:00
|
|
|
main
|
2019-06-26 13:42:03 +02:00
|
|
|
/tmp/test.cpp:15:0
|
2013-06-28 10:15:40 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
foo()
|
|
|
|
/tmp/test.cpp:8:10
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Example 4 - CODE and DATA prefixes:
|
2014-05-17 02:07:48 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. code-block:: console
|
2013-12-24 20:33:22 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
$ llvm-symbolizer --obj=test.elf "CODE 0x400490" "DATA 0x601028"
|
|
|
|
baz()
|
|
|
|
/tmp/test.cpp:11:0
|
2019-04-19 12:17:52 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
bar
|
|
|
|
6295592 4
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
$ cat addr3.txt
|
|
|
|
CODE test.elf 0x4004a0
|
|
|
|
DATA inlined.elf 0x601028
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
$ llvm-symbolizer < addr3.txt
|
|
|
|
main
|
|
|
|
/tmp/test.cpp:15:0
|
2019-04-19 12:17:52 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
bar
|
|
|
|
6295592 4
|
|
|
|
|
2020-03-20 21:28:50 +01:00
|
|
|
Example 5 - path-style options:
|
|
|
|
|
|
|
|
This example uses the same source file as above, but the source file's
|
|
|
|
full path is /tmp/foo/test.cpp and is compiled as follows. The first case
|
|
|
|
shows the default absolute path, the second --basenames, and the third
|
|
|
|
shows --relativenames.
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
$ pwd
|
|
|
|
/tmp
|
|
|
|
$ clang -g foo/test.cpp -o test.elf
|
|
|
|
$ llvm-symbolizer --obj=test.elf 0x4004a0
|
|
|
|
main
|
|
|
|
/tmp/foo/test.cpp:15:0
|
|
|
|
$ llvm-symbolizer --obj=test.elf 0x4004a0 --basenames
|
|
|
|
main
|
|
|
|
test.cpp:15:0
|
|
|
|
$ llvm-symbolizer --obj=test.elf 0x4004a0 --relativenames
|
|
|
|
main
|
|
|
|
foo/test.cpp:15:0
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
OPTIONS
|
|
|
|
-------
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. 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
|
|
|
|
|
2020-03-20 21:28:50 +01:00
|
|
|
Print just the file's name without any directories, instead of the
|
|
|
|
absolute path.
|
|
|
|
|
|
|
|
.. option:: --relativenames
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2020-03-20 21:28:50 +01:00
|
|
|
Print the file's path relative to the compilation directory, instead
|
|
|
|
of the absolute path. If the command-line to the compiler included
|
|
|
|
the full path, this will be the same as the default.
|
|
|
|
|
2019-04-19 12:17:52 +02:00
|
|
|
.. _llvm-symbolizer-opt-C:
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --demangle, -C
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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.
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --dwp <path>
|
2019-01-21 11:00:57 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Use the specified DWP file at ``<path>`` for any CUs that have split DWARF
|
|
|
|
debug data.
|
2019-01-21 11:00:57 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --fallback-debug-path <path>
|
2019-04-19 12:17:52 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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.
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. _llvm-symbolizer-opt-f:
|
2013-03-01 08:58:27 +01:00
|
|
|
|
2020-02-26 11:24:50 +01:00
|
|
|
.. option:: --functions [=<none|short|linkage>], -f
|
2013-06-28 10:15:40 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Specify the way function names are printed (omit function name, print short
|
|
|
|
function name, or print full linkage name, respectively). Defaults to
|
|
|
|
``linkage``.
|
2013-06-28 10:15:40 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --help, -h
|
2014-10-17 02:50:19 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Show help and usage for this command.
|
2014-10-17 02:50:19 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --help-list
|
2015-11-11 23:14:58 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Show help and usage for this command without grouping the options into categories.
|
2014-10-17 02:50:19 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. _llvm-symbolizer-opt-i:
|
2015-11-11 23:14:58 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --inlining, --inlines, -i
|
2015-11-11 21:41:43 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
If a source code location is in an inlined function, prints all the inlined
|
|
|
|
frames. Defaults to true.
|
2019-01-22 11:24:32 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --no-demangle
|
2019-01-22 11:24:32 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Don't print demangled function names.
|
2019-01-25 12:49:21 +01:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --obj <path>, --exe, -e
|
|
|
|
|
|
|
|
Path to object file to be symbolized. If ``-`` is specified, read the object
|
|
|
|
directly from the standard input stream.
|
2019-01-25 12:49:21 +01:00
|
|
|
|
2019-04-19 12:17:52 +02:00
|
|
|
.. _llvm-symbolizer-opt-output-style:
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --output-style <LLVM|GNU>
|
2019-04-19 12:14:18 +02:00
|
|
|
|
|
|
|
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:
|
|
|
|
|
2019-07-10 15:40:45 +02:00
|
|
|
* Does not print the column of a source code location.
|
2019-04-19 12:14:18 +02:00
|
|
|
|
|
|
|
* 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
|
2019-06-26 13:42:03 +02:00
|
|
|
topmost caller when inlined frames are not shown and :option:`--use-symbol-table`
|
2019-04-19 12:14:18 +02:00
|
|
|
is on.
|
|
|
|
|
2020-01-24 02:51:33 +01:00
|
|
|
* Prints an address's debug-data discriminator when it is non-zero. One way to
|
|
|
|
produce discriminators is to compile with clang's -fdebug-info-for-profiling.
|
|
|
|
|
2019-04-19 12:14:18 +02:00
|
|
|
.. code-block:: console
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
$ 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
|
|
|
|
|
2020-01-24 02:51:33 +01:00
|
|
|
$ clang -g -fdebug-info-for-profiling test.cpp -o profiling.elf
|
|
|
|
$ llvm-symbolizer --output-style=GNU --obj=profiling.elf 0x401167 -p -i=0
|
|
|
|
main at /tmp/test.cpp:15 (discriminator 2)
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --pretty-print, -p
|
|
|
|
|
|
|
|
Print human readable output. If :option:`--inlining` is specified, the
|
|
|
|
enclosing scope is prefixed by (inlined by).
|
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
.. code-block:: console
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ 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
|
2019-06-26 13:42:03 +02:00
|
|
|
|
|
|
|
.. option:: --print-address, --addresses, -a
|
|
|
|
|
|
|
|
Print address before the source code location. Defaults to false.
|
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
.. code-block:: console
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ llvm-symbolizer --obj=inlined.elf --print-address 0x4004be
|
|
|
|
0x4004be
|
|
|
|
baz()
|
|
|
|
/tmp/test.cpp:11:18
|
|
|
|
main
|
|
|
|
/tmp/test.cpp:15:0
|
2019-04-19 12:14:18 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ 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
|
2019-04-19 12:14:18 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
.. option:: --print-source-context-lines <N>
|
2019-04-19 12:14:18 +02:00
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
Print ``N`` lines of source context for each symbolized address.
|
2019-04-19 12:14:18 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
.. code-block:: console
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ 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 : }
|
2019-06-26 13:42:03 +02:00
|
|
|
|
|
|
|
.. _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.
|
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
.. code-block:: console
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ 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
|
2019-06-26 13:42:03 +02:00
|
|
|
|
|
|
|
.. option:: --version
|
|
|
|
|
|
|
|
Print version information for the tool.
|
2019-04-19 12:14:18 +02:00
|
|
|
|
2019-06-21 13:49:20 +02:00
|
|
|
.. option:: @<FILE>
|
|
|
|
|
2019-06-26 13:42:03 +02:00
|
|
|
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.
|
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
.. code-block:: console
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ cat addr.txt
|
|
|
|
/tmp/mach_universal_binary:i386 0x1f84
|
|
|
|
/tmp/mach_universal_binary:x86_64 0x100000f24
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
$ llvm-symbolizer < addr.txt
|
|
|
|
_main
|
|
|
|
/tmp/source_i386.cc:8
|
2019-06-26 13:42:03 +02:00
|
|
|
|
2020-02-26 11:29:47 +01:00
|
|
|
_main
|
|
|
|
/tmp/source_x86_64.cc:8
|
2019-06-26 13:42:03 +02:00
|
|
|
|
|
|
|
.. 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.
|
2019-06-21 13:49:20 +02:00
|
|
|
|
2013-03-01 08:58:27 +01:00
|
|
|
EXIT STATUS
|
|
|
|
-----------
|
|
|
|
|
2019-06-12 13:41:43 +02:00
|
|
|
:program:`llvm-symbolizer` returns 0. Other exit codes imply an internal program
|
|
|
|
error.
|
2019-06-26 13:42:03 +02:00
|
|
|
|
|
|
|
SEE ALSO
|
|
|
|
--------
|
|
|
|
|
|
|
|
:manpage:`llvm-addr2line(1)`
|