mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
011ee92bbc
If a stack trace or similar has a list of addresses from an executable or DSO loaded at a variable address (e.g. due to ASLR), the addresses will not directly correspond to the addresses stored in the object file. If a user wishes to use llvm-symbolizer, they have to subtract the load address from every address. This is somewhat inconvenient, especially as the output of --print-address will result in the adjusted address being listed, rather than the address coming from the stack trace, making it harder to map results between the two. This change adds a new switch to llvm-symbolizer --adjust-vma which takes an offset, which is then used to automatically do this calculation. The printed address remains the input address (allowing for easy mapping), whilst the specified offset is applied to the addresses when performing the lookup. The switch is conceptually similar to llvm-objdump's new switch of the same name (see D57051), which in turn mirrors a GNU switch. There is no equivalent switch in addr2line. Reviewed by: grimar Differential Revision: https://reviews.llvm.org/D57151 llvm-svn: 352195
136 lines
3.5 KiB
ReStructuredText
136 lines
3.5 KiB
ReStructuredText
llvm-symbolizer - convert addresses into source code locations
|
|
==============================================================
|
|
|
|
SYNOPSIS
|
|
--------
|
|
|
|
:program:`llvm-symbolizer` [options]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
:program:`llvm-symbolizer` reads object file names and addresses from standard
|
|
input and prints corresponding source code locations to standard output.
|
|
If object file is specified in command line, :program:`llvm-symbolizer`
|
|
processes only addresses from standard input, the rest is output verbatim.
|
|
This program uses debug info sections and symbol table in the object files.
|
|
|
|
EXAMPLE
|
|
--------
|
|
|
|
.. code-block:: console
|
|
|
|
$ cat addr.txt
|
|
a.out 0x4004f4
|
|
/tmp/b.out 0x400528
|
|
/tmp/c.so 0x710
|
|
/tmp/mach_universal_binary:i386 0x1f84
|
|
/tmp/mach_universal_binary:x86_64 0x100000f24
|
|
$ llvm-symbolizer < addr.txt
|
|
main
|
|
/tmp/a.cc:4
|
|
|
|
f(int, int)
|
|
/tmp/b.cc:11
|
|
|
|
h_inlined_into_g
|
|
/tmp/header.h:2
|
|
g_inlined_into_f
|
|
/tmp/header.h:7
|
|
f_inlined_into_main
|
|
/tmp/source.cc:3
|
|
main
|
|
/tmp/source.cc:8
|
|
|
|
_main
|
|
/tmp/source_i386.cc:8
|
|
|
|
_main
|
|
/tmp/source_x86_64.cc:8
|
|
$ cat addr2.txt
|
|
0x4004f4
|
|
0x401000
|
|
$ llvm-symbolizer -obj=a.out < addr2.txt
|
|
main
|
|
/tmp/a.cc:4
|
|
|
|
foo(int)
|
|
/tmp/a.cc:12
|
|
$cat addr.txt
|
|
0x40054d
|
|
$llvm-symbolizer -inlining -print-address -pretty-print -obj=addr.exe < addr.txt
|
|
0x40054d: inc at /tmp/x.c:3:3
|
|
(inlined by) main at /tmp/x.c:9:0
|
|
$llvm-symbolizer -inlining -pretty-print -obj=addr.exe < addr.txt
|
|
inc at /tmp/x.c:3:3
|
|
(inlined by) main at /tmp/x.c:9:0
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
.. option:: -obj, -exe, -e
|
|
|
|
Path to object file to be symbolized.
|
|
|
|
.. 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:: -use-symbol-table
|
|
|
|
Prefer function names stored in symbol table to function names
|
|
in debug info sections. Defaults to true.
|
|
|
|
.. option:: -demangle, -C
|
|
|
|
Print demangled function names. Defaults to true.
|
|
|
|
.. option:: -no-demangle
|
|
|
|
Don't print demangled function names.
|
|
|
|
.. option:: -inlining, -inlines, -i
|
|
|
|
If a source code location is in an inlined function, prints all the
|
|
inlnied frames. Defaults to true.
|
|
|
|
.. option:: -default-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 architecture by writing ``binary_name:arch_name`` in the
|
|
input (see example above). If architecture is not specified in either way,
|
|
address will not be symbolized. Defaults to empty string.
|
|
|
|
.. option:: -dsym-hint=<path/to/file.dSYM>
|
|
|
|
(Darwin-only flag). 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 the
|
|
``-dsym-hint`` flag. This flag can be used multiple times.
|
|
|
|
.. option:: -print-address, -addresses, -a
|
|
|
|
Print address before the source code location. Defaults to false.
|
|
|
|
.. option:: -pretty-print, -p
|
|
|
|
Print human readable output. If ``-inlining`` is specified, enclosing scope is
|
|
prefixed by (inlined by). Refer to listed examples.
|
|
|
|
.. option:: -basenames, -s
|
|
|
|
Strip directories when printing the file path.
|
|
|
|
.. option:: -adjust-vma=<offset>
|
|
|
|
Add the specified offset to object file addresses when performing lookups. This
|
|
can be used to simplify lookups when the object is not loaded at a dynamically
|
|
relocated address.
|
|
|
|
EXIT STATUS
|
|
-----------
|
|
|
|
:program:`llvm-symbolizer` returns 0. Other exit codes imply internal program error.
|