llvm/tools
Ahmed Bougacha 171ac8ca17 MC CFG: Add YAML MCModule representation to enable MC CFG testing.
Like yaml ObjectFiles, this will be very useful for testing the MC CFG
implementation (mostly MCObjectDisassembler), by matching the output
with YAML, and for potential users of the MC CFG, by using it as an input.

There isn't much to the actual format, it is just a serialization of the
MCModule class. Of note:
  - Basic block references (pred/succ, ..) are represented by the BB's
    start address.
  - Just as in the MC CFG, instructions are MCInsts with a size.
  - Operands have a prefix representing the type (only register and
    immediate supported here).
  - Instruction opcodes are represented by their names; enum values aren't
    stable, enum names mostly are: usually, a change to a name would need
    lots of changes in the backend anyway.
    Same with registers.

All in all, an example is better than 1000 words, here goes:

A simple binary:

  Disassembly of section __TEXT,__text:
  _main:
  100000f9c:      48 8b 46 08             movq    8(%rsi), %rax
  100000fa0:      0f be 00                movsbl  (%rax), %eax
  100000fa3:      3b 04 25 48 00 00 00    cmpl    72, %eax
  100000faa:      0f 8c 07 00 00 00       jl      7 <.Lend>
  100000fb0:      2b 04 25 48 00 00 00    subl    72, %eax
  .Lend:
  100000fb7:      c3                      ret

And the (pretty verbose) generated YAML:

  ---
  Atoms:
    - StartAddress:    0x0000000100000F9C
      Size:            20
      Type:            Text
      Content:
        - Inst:            MOV64rm
          Size:            4
          Ops:             [ RRAX, RRSI, I1, R, I8, R ]
        - Inst:            MOVSX32rm8
          Size:            3
          Ops:             [ REAX, RRAX, I1, R, I0, R ]
        - Inst:            CMP32rm
          Size:            7
          Ops:             [ REAX, R, I1, R, I72, R ]
        - Inst:            JL_4
          Size:            6
          Ops:             [ I7 ]
    - StartAddress:    0x0000000100000FB0
      Size:            7
      Type:            Text
      Content:
        - Inst:            SUB32rm
          Size:            7
          Ops:             [ REAX, REAX, R, I1, R, I72, R ]
    - StartAddress:    0x0000000100000FB7
      Size:            1
      Type:            Text
      Content:
        - Inst:            RET
          Size:            1
          Ops:             [  ]
  Functions:
    - Name:            __text
      BasicBlocks:
        - Address:         0x0000000100000F9C
          Preds:           [  ]
          Succs:           [ 0x0000000100000FB7, 0x0000000100000FB0 ]
     <snip>
  ...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188890 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-21 07:29:02 +00:00
..
bugpoint [bugpoint] Allow the user to specify the path to opt on the commandline. 2013-08-05 21:07:07 +00:00
bugpoint-passes [CMake] bugpoint-passes should not be built in "all", when LLVM_BUILD_TOOLS is OFF. 2013-01-22 01:44:00 +00:00
gold Revert r188188 and r188200. 2013-08-12 21:07:31 +00:00
llc Use function attributes to indicate that we don't want to realign the stack. 2013-08-01 21:42:05 +00:00
lli lli/RecordingMemoryManager.cpp: Make it complain if _GLOBAL_OFFSET_TABLE_ were not provided. 2013-08-21 02:37:14 +00:00
llvm-ar Add support for the 's' operation to llvm-ar. 2013-07-29 12:40:31 +00:00
llvm-as Add a wrapper for open. 2013-07-16 19:44:17 +00:00
llvm-bcanalyzer keep only the StringRef version of getFileOrSTDIN. 2013-06-25 05:28:34 +00:00
llvm-config Remove unused includes. 2013-06-26 13:54:34 +00:00
llvm-cov Remove accidental commit. 2012-11-07 18:39:32 +00:00
llvm-diff Manually update the dependencies in the Makefiles. It turns out that all 2013-03-26 03:45:47 +00:00
llvm-dis Add a wrapper for open. 2013-07-16 19:44:17 +00:00
llvm-dwarfdump llvm-dwarfdump: Add support for dumping the .debug_loc section 2013-06-19 21:37:13 +00:00
llvm-extract Add a wrapper for open. 2013-07-16 19:44:17 +00:00
llvm-jitlistener Manually update the dependencies in the Makefiles. It turns out that all 2013-03-26 03:45:47 +00:00
llvm-link Add a wrapper for open. 2013-07-16 19:44:17 +00:00
llvm-mc Improve llvm-mc disassembler mode and refactor ARM tests to use it 2013-07-19 10:05:04 +00:00
llvm-mcmarkup MC: Simple example parser for MC assembly markup. 2012-10-31 23:24:13 +00:00
llvm-nm Don't crash in 'llvm -s' when an archive has no symtab. 2013-07-10 20:14:22 +00:00
llvm-objdump MC CFG: Add YAML MCModule representation to enable MC CFG testing. 2013-08-21 07:29:02 +00:00
llvm-prof Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
llvm-readobj Remove byte order mark from source file. 2013-08-09 10:31:14 +00:00
llvm-rtdyld Unbreak llvm-rtdyld build. 2013-08-03 22:18:45 +00:00
llvm-shlib Use @rpath for libraries rather than @executable_path on OSX. 2013-08-02 01:51:52 +00:00
llvm-size Sort the #include lines for tools/... 2012-12-04 10:44:52 +00:00
llvm-stress Add a wrapper for open. 2013-07-16 19:44:17 +00:00
llvm-symbolizer llvm-symbolizer: add support for .gnu_debuglink section 2013-08-14 17:09:30 +00:00
lto Revert r188188 and r188200. 2013-08-12 21:07:31 +00:00
macho-dump Teach llvm-objdump with the -macho parser how to use the data in code table 2013-06-06 17:20:50 +00:00
obj2yaml Don't link with the archive library programs that don't use it. 2013-06-17 15:29:46 +00:00
opt Remove logic that decides whether to vectorize or not depending on O-levels 2013-08-13 15:51:25 +00:00
yaml2obj [Object] Split the ELF interface into 3 parts. 2013-08-08 22:27:13 +00:00
CMakeLists.txt Provide bootstrap support to build only llvm+clang when using cmake. 2013-06-26 08:05:08 +00:00
LLVMBuild.txt Remove the LLVM specific archive index. 2013-06-14 23:25:53 +00:00
Makefile Remove the LLVM specific archive index. 2013-06-14 23:25:53 +00:00