| # 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. |
| |