mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 14:46:07 +00:00

`--disassemble`/`--cdis` parses input bytes as decimal, 0bbin, 0ooct, or 0xhex. While the hexadecimal digit form is most commonly used, requiring a 0x prefix for each byte (`0x48 0x29 0xc3`) is cumbersome. Tools like xxd -p and rz-asm use a plain hex dump form without the 0x prefix or space separator. This patch adds --hex to disassemble such hex bytes with optional whitespace. ``` % rz-asm -a x86 -b 64 -d 4829c34829c4 sub rbx, rax sub rsp, rax % llvm-mc -triple=x86_64 --cdis --hex --output-asm-variant=1 <<< 4829c34829c4 .text sub rbx, rax sub rsp, rax ``` Pull Request: https://github.com/llvm/llvm-project/pull/119992
173 lines
4.5 KiB
ReStructuredText
173 lines
4.5 KiB
ReStructuredText
llvm-mc - LLVM Machine Code Playground
|
|
======================================
|
|
|
|
.. program:: llvm-mc
|
|
|
|
SYNOPSIS
|
|
--------
|
|
|
|
:program:`llvm-mc` [*options*] [*filename*]
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
|
|
The :program:`llvm-mc` command takes assembly code for a specified architecture
|
|
as input and generates an object file or executable.
|
|
|
|
:program:`llvm-mc` provides a set of tools for working with machine code,
|
|
such as encoding instructions and displaying internal representations,
|
|
disassembling strings to bytes, etc.
|
|
|
|
The choice of architecture for the output assembly code is automatically
|
|
determined from the input file, unless the :option:`--arch` option is used to
|
|
override the default.
|
|
|
|
OPTIONS
|
|
-------
|
|
|
|
If the :option:`-o` option is omitted, then :program:`llvm-mc` will send its
|
|
output to standard output if the input is from standard input. If the
|
|
:option:`-o` option specifies "``-``", then the output will also be sent to
|
|
standard output.
|
|
|
|
If no :option:`-o` option is specified and an input file other than "``-``" is
|
|
specified, then :program:`llvm-mc` creates the output filename by taking the
|
|
input filename, removing any existing ``.s`` extension, and adding a ``.o``
|
|
suffix.
|
|
|
|
Other :program:`llvm-mc` options are described below.
|
|
|
|
End-user Options
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
.. option:: --help
|
|
|
|
Display available options (--help-hidden for more).
|
|
|
|
.. option:: -o <filename>
|
|
|
|
Use ``<filename>`` as the output filename. See the summary above for more
|
|
details.
|
|
|
|
.. option:: --arch=<string>
|
|
|
|
Target arch to assemble for, see -version for available targets.
|
|
|
|
.. option:: --as-lex
|
|
|
|
Apply the assemblers "lexer" to break the input into tokens and print each of
|
|
them out. This is intended to help develop and test an assembler
|
|
implementation.
|
|
|
|
.. option:: --assemble
|
|
|
|
Assemble assembly file (default), and print the result to assembly. This is
|
|
useful to design and test instruction parsers, and can be a useful tool when
|
|
combined with other llvm-mc flags. For example, this option may be useful to
|
|
transcode assembly from different dialects, e.g. on Intel where you can use
|
|
-output-asm-variant=1 to translate from AT&T to Intel assembly syntax. It can
|
|
also be combined with --show-encoding to understand how instructions are
|
|
encoded.
|
|
|
|
.. option:: --disassemble
|
|
|
|
Parse a series of hex bytes, and print the result out as assembly syntax.
|
|
|
|
.. option:: --mdis
|
|
|
|
Marked up disassembly of string of hex bytes.
|
|
|
|
.. option:: --cdis
|
|
|
|
Colored disassembly of string of hex bytes.
|
|
|
|
.. option:: --filetype=[asm,null,obj]
|
|
|
|
Sets the output filetype. Setting this flag to `asm` will make the tool output
|
|
text assembly. Setting this flag to `obj` will make the tool output an object
|
|
file. Setting it to `null` causes no output to be created and can be used for
|
|
timing purposes. The default value is `asm`.
|
|
|
|
.. option:: -g
|
|
|
|
Generate DWARF debugging info for assembly source files.
|
|
|
|
.. option:: --hex
|
|
|
|
Take raw hexadecimal bytes as input for disassembly. Whitespace is ignored.
|
|
|
|
.. option:: --large-code-model
|
|
|
|
Create CFI directives that assume the code might be more than 2 GB.
|
|
|
|
.. option:: --main-file-name=<string>
|
|
|
|
Specify the name we should consider the input file.
|
|
|
|
|
|
.. option:: --masm-hexfloats
|
|
|
|
Enable MASM-style hex float initializers (3F800000r).
|
|
|
|
|
|
.. option:: -mattr=a1,+a2,-a3,...
|
|
Target specific attributes (-mattr=help for details).
|
|
|
|
.. option:: --mcpu=<cpu-name>
|
|
|
|
Target a specific cpu type (-mcpu=help for details).
|
|
|
|
.. option:: --triple=<string>
|
|
|
|
Target triple to assemble for, see -version for available targets.
|
|
|
|
.. option:: --split-dwarf-file=<filename>
|
|
|
|
DWO output filename.
|
|
|
|
.. option:: --show-inst-operands
|
|
|
|
Show instructions operands as parsed.
|
|
|
|
.. option:: --show-inst
|
|
|
|
Show internal instruction representation.
|
|
|
|
.. option:: --show-encoding
|
|
|
|
Show instruction encodings.
|
|
|
|
.. option:: --save-temp-labels
|
|
|
|
Don't discard temporary labels.
|
|
|
|
.. option:: --relax-relocations
|
|
|
|
Emit R_X86_64_GOTPCRELX instead of R_X86_64_GOTPCREL.
|
|
|
|
.. option:: --print-imm-hex
|
|
|
|
Prefer hex format for immediate values.
|
|
|
|
.. option:: --preserve-comments
|
|
|
|
Preserve Comments in outputted assembly.
|
|
|
|
.. option:: --output-asm-variant=<uint>
|
|
|
|
Syntax variant to use for output printing. For example, on x86 targets
|
|
--output-asm-variant=0 prints in AT&T syntax, and --output-asm-variant=1
|
|
prints in Intel/MASM syntax.
|
|
|
|
.. option:: --compress-debug-sections=[none|zlib|zstd]
|
|
|
|
Choose DWARF debug sections compression.
|
|
|
|
|
|
EXIT STATUS
|
|
-----------
|
|
|
|
If :program:`llvm-mc` succeeds, it will exit with 0. Otherwise, if an error
|
|
occurs, it will exit with a non-zero value.
|
|
|