1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00
llvm-mirror/lib/MC
Ahmed Bougacha b390121488 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>
  ...

llvm-svn: 188890
2013-08-21 07:29:02 +00:00
..
MCDisassembler Use pointers to the MCAsmInfo and MCRegInfo. 2013-06-18 07:20:20 +00:00
MCParser Fix style issues in AsmParser.cpp 2013-08-20 13:33:18 +00:00
CMakeLists.txt MC CFG: Add YAML MCModule representation to enable MC CFG testing. 2013-08-21 07:29:02 +00:00
ELFObjectWriter.cpp Put ELF COMDAT relocations into the relevant COMDAT group. 2013-07-10 20:58:17 +00:00
LLVMBuild.txt
MachObjectWriter.cpp [MC/Mach-O] Load commands are supposed to 8-byte aligned on 64-bit. 2013-01-22 03:42:49 +00:00
Makefile
MCAsmBackend.cpp Use llvm::array_lengthof to replace sizeof(array)/sizeof(array[0]). 2013-07-15 04:27:47 +00:00
MCAsmInfo.cpp DebugInfo: PR14404: Avoid truncating 64 bit values into 32 bits for ULEB128/SLEB128 generation 2013-06-23 18:31:11 +00:00
MCAsmInfoCOFF.cpp Remove unused DwarfSectionOffsetDirective string 2013-04-22 22:49:11 +00:00
MCAsmInfoDarwin.cpp
MCAsmStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00
MCAssembler.cpp Move assert above first use of variable that we'd be asserting on. 2013-08-07 18:51:09 +00:00
MCAtom.cpp MC CFG: Split MCBasicBlocks to mirror atom splitting. 2013-08-21 07:28:24 +00:00
MCCodeEmitter.cpp
MCCodeGenInfo.cpp
MCContext.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCDisassembler.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCDwarf.cpp Remove address spaces from MC. 2013-07-02 15:49:13 +00:00
MCELF.cpp ELF symbol table field st_other support, 2013-02-19 21:57:35 +00:00
MCELFObjectTargetWriter.cpp Cleanup relocation sorting for ELF. 2013-05-15 18:22:01 +00:00
MCELFStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00
MCExpr.cpp [PowerPC] Revert r185476 and fix up TLS variant kinds 2013-07-09 16:41:09 +00:00
MCExternalSymbolizer.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCFunction.cpp MC CFG: Split MCBasicBlocks to mirror atom splitting. 2013-08-21 07:28:24 +00:00
MCInst.cpp
MCInstPrinter.cpp Pacify GCC, which worries about falling off the end of the switch. 2013-08-02 09:37:20 +00:00
MCInstrAnalysis.cpp MC: Disassembled CFG reconstruction. 2013-05-24 01:07:04 +00:00
MCLabel.cpp
MCMachObjectTargetWriter.cpp
MCMachOStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00
MCModule.cpp MC CFG: Split MCBasicBlocks to mirror atom splitting. 2013-08-21 07:28:24 +00:00
MCModuleYAML.cpp MC CFG: Add YAML MCModule representation to enable MC CFG testing. 2013-08-21 07:29:02 +00:00
MCNullStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00
MCObjectDisassembler.cpp MC CFG: Support disassembly at arbitrary addresses in MCObjectDisassembler. 2013-08-21 07:28:55 +00:00
MCObjectFileInfo.cpp [-cxx-abi microsoft] Stick zero initialized symbols into the .bss section for COFF 2013-08-13 01:23:53 +00:00
MCObjectStreamer.cpp Add 'const' qualifiers to static const char* variables. 2013-07-16 01:17:10 +00:00
MCObjectSymbolizer.cpp MC: ObjectSymbolizer can now recognize external function stubs. 2013-08-21 07:28:13 +00:00
MCObjectWriter.cpp
MCPureStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00
MCRegisterInfo.cpp Make SubRegIndex size mandatory, following r183020. 2013-05-31 23:45:26 +00:00
MCRelocationInfo.cpp Follow up of the introduction of MCSymbolizer. 2013-05-24 22:51:52 +00:00
MCSection.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MCSectionCOFF.cpp MC: Implement COFF .linkonce directive 2013-07-06 12:13:10 +00:00
MCSectionELF.cpp Add support for subsections to the ELF assembler. Fixes PR8717. 2013-04-17 21:18:16 +00:00
MCSectionMachO.cpp Add support for subsections to the ELF assembler. Fixes PR8717. 2013-04-17 21:18:16 +00:00
MCStreamer.cpp Revert: Fix wrong code offset for unwind code SET_FPREG. 2013-07-08 04:48:34 +00:00
MCSubtargetInfo.cpp Use the new script to sort the includes of every file under lib. 2012-12-03 16:50:05 +00:00
MCSymbol.cpp
MCSymbolizer.cpp Add MCSymbolizer for symbolic/annotated disassembly. 2013-05-24 00:39:57 +00:00
MCValue.cpp
MCWin64EH.cpp Revert: Fix wrong code offset for unwind code SET_FPREG. 2013-07-08 04:48:34 +00:00
SubtargetFeature.cpp Symbol hygiene: Make sure declarations and definitions match, make helper functions static. 2012-10-20 12:53:26 +00:00
WinCOFFObjectWriter.cpp MC: Support larger COFF string tables 2013-07-29 12:30:12 +00:00
WinCOFFStreamer.cpp [CodeGen] prevent abnormal on invalid attributes 2013-08-09 01:52:03 +00:00