From 6e86da58fbbb2ce096a304b49af5e502273bfca3 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Wed, 24 Oct 2012 23:30:22 +0000 Subject: [PATCH] Add a bit of documentation on the annotated disassembly output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166639 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/MarkedUpDisassembly.rst | 88 ++++++++++++++++++++++++++++++++++++ docs/subsystems.rst | 6 +++ 2 files changed, 94 insertions(+) create mode 100644 docs/MarkedUpDisassembly.rst diff --git a/docs/MarkedUpDisassembly.rst b/docs/MarkedUpDisassembly.rst new file mode 100644 index 00000000000..e1282e102eb --- /dev/null +++ b/docs/MarkedUpDisassembly.rst @@ -0,0 +1,88 @@ +.. _marked_up_disassembly: + +======================================= +LLVM's Optional Rich Disassembly Output +======================================= + +.. contents:: + :local: + +Introduction +============ + +LLVM's default disassembly output is raw text. To allow consumers more ability +to introspect the instructions' textual representation or to reformat for a more +user friendly display there is an optional rich disassembly output. + +This optional output is sufficient to reference into individual portions of the +instruction text. This is intended for clients like disassemblers, list file +generators, and pretty-printers, which need more than the raw instructions and +the ability to print them. + +To provide this functionality the assembly text is marked up with annotations. +The markup is simple enough in syntax to be robust even in the case of version +mismatches between consumers and producers. That is, the syntax generally does +not carry semantics beyond "this text has an annotation," so consumers can +simply ignore annotations they do not understand or do not care about. + +After calling ``LLVMCreateDisasm()`` to create a disassembler context the +optional output is enable with this call: + +.. code-block:: c + + LLVMSetDisasmOptions(DC, LLVMDisassembler_Option_UseMarkup); + +Then subsequent calls to ``LLVMDisasmInstruction()`` will return output strings +with the marked up annotations. + +Instruction Annotations +======================= + +.. _contextual markups: + +Contextual markups +------------------ + +Annoated assembly display will supply contextual markup to help clients more +efficiently implement things like pretty printers. Most markup will be target +independent, so clients can effectively provide good display without any target +specific knowledge. + +Annotated assembly goes through the normal instruction printer, but optionally +includes contextual tags on portions of the instruction string. An annotation +is any '<' '>' delimited section of text(1). + +.. code-block:: bat + + annotation: '<' tag-name tag-modifier-list ':' annotated-text '>' + tag-name: identifier + tag-modifier-list: comma delimited identifier list + +The tag-name is an identifier which gives the type of the annotation. For the +first pass, this will be very simple, with memory references, registers, and +immediates having the tag names "mem", "reg", and "imm", respectively. + +The tag-modifier-list is typically additional target-specific context, such as +register class. + +Clients should accept and ignore any tag-names or tag-modifiers they do not +understand, allowing the annotations to grow in richness without breaking older +clients. + +For example, a possible annotation of an ARM load of a stack-relative location +might be annotated as: + +.. code-block:: nasm + + ldr , , ]> + + +1: For assembly dialects in which '<' and/or '>' are legal tokens, a literal token is escaped by following immediately with a repeat of the character. For example, a literal '<' character is output as '<<' in an annotated assembly string. + +C API Details +------------- + +The intended consumers of this information use the C API, therefore the new C +API function for the disassembler will be added to provide an option to produce +disassembled instructions with annotations, ``LLVMSetDisasmOptions()`` and the +``LLVMDisassembler_Option_UseMarkup`` option (see above). diff --git a/docs/subsystems.rst b/docs/subsystems.rst index 6f77b79fbe2..80d0eed6633 100644 --- a/docs/subsystems.rst +++ b/docs/subsystems.rst @@ -17,6 +17,7 @@ Subsystem Documentation TableGenFundamentals DebuggingJITedCode GoldPlugin + MarkedUpDisassembly * `Writing an LLVM Pass `_ @@ -98,3 +99,8 @@ Subsystem Documentation architecture. .. _`Howto: Implementing LLVM Integrated Assembler`: http://www.embecosm.com/download/ean10.html + +* :ref:`marked_up_disassembly` + + This document describes the optional rich disassembly output syntax. + -- 2.34.1