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