# llvm-objdump - LLVM's object file dumper

:::{program} llvm-objdump
:::

## SYNOPSIS

{program}`llvm-objdump` \[*commands*\] \[*options*\] \[*filenames...*\]

## DESCRIPTION

The {program}`llvm-objdump` utility prints the contents of object files and
final linked images named on the command line. If no file name is specified,
{program}`llvm-objdump` will attempt to read from *a.out*. If *-* is used as a
file name, {program}`llvm-objdump` will process a file on its standard input
stream.

## COMMANDS

At least one of the following commands are required, and some commands can be
combined with other commands:

:::{option} -a, --archive-headers
Display the information contained within an archive's headers.
:::

:::{option} -d, --disassemble
Disassemble all executable sections found in the input files. On some
architectures (AArch64, PowerPC, x86), all known instructions are disassembled by
default. On the others, {option}`--mcpu` or {option}`--mattr` is needed to
enable some instruction sets. Disabled instructions are displayed as
`<unknown>`.
:::

:::{option} -D, --disassemble-all
Disassemble all sections found in the input files.
:::

:::{option} --disassemble-symbols=<symbol1[,symbol2,...]>
Disassemble only the specified symbols. Takes demangled symbol names when
{option}`--demangle` is specified, otherwise takes mangled symbol names.
Implies {option}`--disassemble`.

Each argument is split on commas. To select a symbol whose name contains commas,
use {option}`--disassemble` with a symbol argument instead.
:::

:::{option} --disassemble=<symbol>
Disassemble only the specified symbol. Takes a demangled symbol name when
{option}`--demangle` is specified, otherwise takes a mangled symbol name.
Implies {option}`--disassemble`.

The argument is a single symbol name. To select multiple symbols, specify this
option multiple times or use {option}`--disassemble-symbols`.
:::

:::{option} --dwarf=<value>
Dump the specified DWARF debug sections. The supported values are:

`frames` - .debug_frame
:::

:::{option} -f, --file-headers
Display the contents of the overall file header.
:::

:::{option} --fault-map-section
Display the content of the fault map section.
:::

:::{option} -h, --headers, --section-headers
Display summaries of the headers for each section.
:::

:::{option} --help
Display usage information and exit. Does not stack with other commands.
:::

:::{option} -p, --private-headers
Display format-specific file headers.
:::

:::{option} -r, --reloc
Display the relocation entries in the file.
:::

:::{option} -R, --dynamic-reloc
Display the dynamic relocation entries in the file.
:::

:::{option} --raw-clang-ast
Dump the raw binary contents of the clang AST section.
:::

:::{option} -s, --full-contents
Display the contents of each section.
:::

:::{option} -t, --syms
Display the symbol table.
:::

:::{option} -T, --dynamic-syms
Display the contents of the dynamic symbol table.
:::

:::{option} -u, --unwind-info
Display the unwind info of the input(s).

This operation is only currently supported for COFF and Mach-O object files.
:::

:::{option} -v, --version
Display the version of the {program}`llvm-objdump` executable. Does not stack
with other commands.
:::

:::{option} -x, --all-headers
Display all available header information. Equivalent to specifying
{option}`--archive-headers`, {option}`--file-headers`,
{option}`--private-headers`, {option}`--reloc`, {option}`--section-headers`,
and {option}`--syms`.
:::

## OPTIONS

{program}`llvm-objdump` supports the following options:

:::{option} --adjust-vma=<offset>
Increase the displayed address in disassembly or section header printing by
the specified offset.
:::

:::{option} --arch-name=<string>
Specify the target architecture when disassembling. Use {option}`--version`
for a list of available targets.
:::

:::{option} --build-id=<string>
Look up the object using the given build ID, specified as a hexadecimal
string. The found object is handled as if it were an input filename.
:::

:::{option} -C, --demangle
Demangle symbol names in the output.
:::

:::{option} --debug-file-directory <path>
Provide a path to a directory with a `.build-id` subdirectory to search for
debug information for stripped binaries. Multiple instances of this argument
are searched in the order given.
:::

:::{option} --debug-indent=<width>
Distance to indent the source-level variable or inlined function display,
relative to the start of the disassembly. Defaults to 52 characters.
:::

:::{option} --debug-inlined-funcs[=<format>]
Print the locations of inlined functions alongside disassembly.
`format` may be `ascii`, `limits-only`, or `unicode`, defaulting to
`unicode` if omitted.
:::

:::{option} --debug-vars[=<format>]
Print the locations (in registers or memory) of source-level variables
alongside disassembly. `format` may be `ascii` or `unicode`, defaulting
to `unicode` if omitted.
:::

:::{option} --debuginfod, --no-debuginfod
Whether or not to try debuginfod lookups for debug binaries. Unless specified,
debuginfod is only enabled if libcurl was compiled in (`LLVM_ENABLE_CURL`)
and at least one server URL was provided by the environment variable
`DEBUGINFOD_URLS`.
:::

:::{option} -j, --section=<section1[,section2,...]>
Perform commands on the specified sections only. For Mach-O use
`segment,section` to specify the section name.
:::

:::{option} -l, --line-numbers
When disassembling, display source line numbers. Implies
{option}`--disassemble`.
:::

:::{option} -M, --disassembler-options=<opt1[,opt2,...]>
Pass target-specific disassembler options. Available options:

- `reg-names-std`: ARM only (default). Print in ARM 's instruction set documentation, with r13/r14/r15 replaced by sp/lr/pc.
- `reg-names-raw`: ARM only. Use r followed by the register number.
- `no-aliases`: AArch64 and RISC-V only. Print raw instruction mnemonic instead of pseudo instruction mnemonic.
- `numeric`: RISC-V only. Print raw register names instead of ABI mnemonic. (e.g. print x1 instead of ra)
- `att`: x86 only (default). Print in the AT&T syntax.
- `intel`: x86 only. Print in the intel syntax.
:::

:::{option} --disassembler-color=<mode>
Enable or disable disassembler color output.

- `off`: Disable disassembler color output.
- `on`: Enable disassembler color output.
- `terminal`: Enable disassembler color output if the terminal supports it (default).
:::

:::{option} --mcpu=<cpu-name>
Target a specific CPU type for disassembly. Specify `--mcpu=help` to display
available CPUs.
:::

:::{option} --mattr=<a1,+a2,-a3,...>
Enable/disable target-specific attributes. Specify `--mattr=help` to display
the available attributes.
:::

:::{option} -mllvm <arg>
Specify an argument to forward to LLVM's CommandLine library.
:::

:::{option} --no-leading-addr, --no-addresses
When disassembling, do not print leading addresses for instructions or inline
relocations.
:::

:::{option} --no-print-imm-hex
Do not use hex format for immediate values in disassembly output.
:::

:::{option} --no-show-raw-insn
When disassembling, do not print the raw bytes of each instruction.
:::

:::{option} --offloading
Display the content of the LLVM offloading sections and HIP offload bundles.
:::

:::{option} --prefix=<prefix>
When disassembling with the {option}`--source` option, prepend `prefix` to
absolute paths.
:::

:::{option} --prefix-strip=<level>
When disassembling with the {option}`--source` option, strip out `level`
initial directories from absolute paths. This option has no effect without
{option}`--prefix`.
:::

:::{option} --source-dir <dir>
When disassembling with the {option}`--source` option, add `dir` to the
front of the source search path when looking up source files. For each source
file, llvm-objdump tries the path from the debug info, then each search
directory with the full path appended, then each search directory with only
the file name.
This option may be specified multiple times; each `--source-dir` adds one
directory. Options on the command line are searched in first to last order.
:::

:::{option} --substitute-path <from> <to>
When disassembling with the {option}`--source` option, replace `from` with
`to` at the start of the directory part of source file paths when looking up
sources. A rule is applied only if `from` ends at a directory separator in
the path. This option may be specified multiple times; rules are evaluated in
the order given and the first matching rule is used, as in GDB
`set substitute-path`.
:::

:::{option} --print-imm-hex
Use hex format when printing immediate values in disassembly output (default).
:::

:::{option} -S, --source
When disassembling, display source interleaved with the disassembly. Implies
{option}`--disassemble`.
:::

:::{option} --show-all-symbols
Show all symbols during disassembly, even if multiple symbols are defined at
the same location.
:::

:::{option} --show-lma
Display the LMA column when dumping ELF section headers. Defaults to off
unless any section has different VMA and LMAs.
:::

:::{option} --start-address=<address>
When disassembling, only disassemble from the specified address.

When printing relocations, only print the relocations patching offsets from at least `address`.

When printing symbols, only print symbols with a value of at least `address`.
:::

:::{option} --stop-address=<address>
When disassembling, only disassemble up to, but not including the specified address.

When printing relocations, only print the relocations patching offsets up to `address`.

When printing symbols, only print symbols with a value up to `address`.
:::

:::{option} --symbolize-operands, --no-symbolize-operands
When disassembling, symbolize a branch target operand to print a label instead of a real address.

When printing a PC-relative global symbol reference, print it as an offset from the leading symbol.

When a bb-address-map section is present (i.e., the object file is built with
`-fbasic-block-address-map`), labels are retrieved from that section
instead. If a pgo-analysis-map is present alongside the bb-address-map, any
available analyses are printed after the relevant block label. By default,
any analysis with a special representation (i.e. BlockFrequency,
BranchProbability, etc) are printed as raw hex values.

Only supported for AArch64, BPF, PowerPC, RISC-V, and X86. Enabled by default
for BPF; use `--no-symbolize-operands` to disable.

Example:

: A non-symbolized branch instruction with a local target and pc-relative memory access like

```none
cmp eax, dword ptr [rip + 4112]
jge 0x20117e <_start+0x25>
```

might become

```none
<L0>:
  cmp eax, dword ptr <g>
  jge      <L0>
```
:::

:::{option} --pretty-pgo-analysis-map
When using {option}`--symbolize-operands` with bb-address-map and
pgo-analysis-map, print analyses using the same format as their analysis
passes would. An example of pretty format would be printing block frequencies
relative to the entry block, the same as BFI.

Only works when {option}`--symbolize-operands` is enabled.
:::

:::{option} --triple=<string>
Target triple to disassemble for, see `--version` for available targets.
:::

:::{option} -w, --wide
Ignored for compatibility with GNU objdump.
:::

::::{option} --x86-asm-syntax=<style>
Deprecated.
When used with {option}`--disassemble`, choose style of code to emit from
X86 backend. Supported values are:

:::{option} att
AT&T-style assembly
:::

:::{option} intel
Intel-style assembly
:::

The default disassembly style is **att**.
::::

:::{option} -z, --disassemble-zeroes
Do not skip blocks of zeroes when disassembling.
:::

:::{option} @<FILE>
Read command-line options and commands from response file `<FILE>`.
:::

## MACH-O ONLY OPTIONS AND COMMANDS

:::{option} --arch=<architecture>
Specify the architecture to disassemble. see `--version` for available
architectures.
:::

:::{option} --archive-member-offsets
Print the offset to each archive member for Mach-O archives (requires
{option}`--archive-headers`).
:::

:::{option} --bind
Display binding info
:::

:::{option} --data-in-code
Display the data in code table.
:::

:::{option} --dis-symname=<name>
Disassemble just the specified symbol's instructions.
:::

:::{option} --chained-fixups
Print chained fixup information.
:::

:::{option} --dyld-info
Print bind and rebase information used by dyld to resolve external
references in a final linked binary.
:::

:::{option} --dylibs-used
Display the shared libraries used for linked files.
:::

:::{option} --dsym=<string>
Use .dSYM file for debug info.
:::

:::{option} --dylib-id
Display the shared library's ID for dylib files.
:::

:::{option} --exports-trie
Display exported symbols.
:::

:::{option} --function-starts [=<addrs|names|both>]
Print the function starts table for Mach-O objects. Either `addrs`
(default) to print only the addresses of functions, `names` to print only
the names of the functions (when available), or `both` to print the
names beside the addresses.
:::

:::{option} -g
Print line information from debug info if available.
:::

:::{option} --full-leading-addr
Print the full leading address when disassembling.
:::

:::{option} --indirect-symbols
Display the indirect symbol table.
:::

:::{option} --info-plist
Display the info plist section as strings.
:::

:::{option} --lazy-bind
Display lazy binding info.
:::

:::{option} --link-opt-hints
Display the linker optimization hints.
:::

:::{option} -m, --macho
Use Mach-O specific object file parser. Commands and other options may behave
differently when used with `--macho`.
:::

:::{option} --no-leading-headers
Do not print any leading headers.
:::

:::{option} --no-symbolic-operands
Do not print symbolic operands when disassembling.
:::

:::{option} --non-verbose
Display the information for Mach-O objects in non-verbose or numeric form.
:::

:::{option} --objc-meta-data
Display the Objective-C runtime meta data.
:::

:::{option} --private-header
Display only the first format specific file header.
:::

:::{option} --rebase
Display rebasing information.
:::

:::{option} --rpaths
Display runtime search paths for the binary.
:::

:::{option} --universal-headers
Display universal headers.
:::

:::{option} --weak-bind
Display weak binding information.
:::

## XCOFF ONLY OPTIONS AND COMMANDS

:::{option} --symbol-description
Add symbol description to disassembly output.
:::

:::{option} --traceback-table
Decode traceback table in disassembly output. Implies {option}`--disassemble`.
:::

## BUGS

To report bugs, please visit \<<https://github.com/llvm/llvm-project/labels/tools:llvm-objdump/>>.

## SEE ALSO

{manpage}`llvm-nm(1)`, {manpage}`llvm-otool(1)`, {manpage}`llvm-readelf(1)`,
{manpage}`llvm-readobj(1)`
