Skip to content
  • fpizlo@apple.com's avatar
    It should be possible to look at disassembly · 01c2a197
    fpizlo@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=89319
    
    Source/JavaScriptCore: 
    
    Reviewed by Sam Weinig.
            
    This imports the udis86 disassembler library. The library is placed
    behind an abstraction in disassembler/Disassembler.h, so that we can
    in the future use other disassemblers (for other platforms) whenever
    appropriate. As a first step, the disassembler is being invoked for
    DFG verbose dumps.
            
    If we ever want to merge a new version of udis86 in the future, I've
    made notes about changes I made to the library in
    disassembler/udis86/differences.txt.
    
    * CMakeLists.txt:
    * DerivedSources.make:
    * GNUmakefile.list.am:
    * JavaScriptCore.pri:
    * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
    * JavaScriptCore.xcodeproj/project.pbxproj:
    * dfg/DFGJITCompiler.cpp:
    (JSC::DFG::JITCompiler::compile):
    (JSC::DFG::JITCompiler::compileFunction):
    * disassembler: Added.
    * disassembler/Disassembler.h: Added.
    (JSC):
    (JSC::tryToDisassemble):
    * disassembler/UDis86Disassembler.cpp: Added.
    (JSC):
    (JSC::tryToDisassemble):
    * disassembler/udis86: Added.
    * disassembler/udis86/differences.txt: Added.
    * disassembler/udis86/itab.py: Added.
    (UdItabGenerator):
    (UdItabGenerator.__init__):
    (UdItabGenerator.toGroupId):
    (UdItabGenerator.genLookupTable):
    (UdItabGenerator.genLookupTableList):
    (UdItabGenerator.genInsnTable):
    (genItabH):
    (genItabH.UD_ITAB_H):
    (genItabC):
    (genItab):
    (main):
    * disassembler/udis86/optable.xml: Added.
    * disassembler/udis86/ud_opcode.py: Added.
    (UdOpcodeTables):
    (UdOpcodeTables.sizeOfTable):
    (UdOpcodeTables.nameOfTable):
    (UdOpcodeTables.updateTable):
    (UdOpcodeTables.Insn):
    (UdOpcodeTables.Insn.__init__):
    (UdOpcodeTables.Insn.__init__.opcode):
    (UdOpcodeTables.parse):
    (UdOpcodeTables.addInsnDef):
    (UdOpcodeTables.print_table):
    (UdOpcodeTables.print_tree):
    * disassembler/udis86/ud_optable.py: Added.
    (UdOptableXmlParser):
    (UdOptableXmlParser.parseDef):
    (UdOptableXmlParser.parse):
    (printFn):
    (parse):
    (main):
    * disassembler/udis86/udis86.c: Added.
    (ud_init):
    (ud_disassemble):
    (ud_set_mode):
    (ud_set_vendor):
    (ud_set_pc):
    (ud):
    (ud_insn_asm):
    (ud_insn_off):
    (ud_insn_hex):
    (ud_insn_ptr):
    (ud_insn_len):
    * disassembler/udis86/udis86.h: Added.
    * disassembler/udis86/udis86_decode.c: Added.
    (eff_adr_mode):
    (ud_lookup_mnemonic):
    (decode_prefixes):
    (modrm):
    (resolve_operand_size):
    (resolve_mnemonic):
    (decode_a):
    (decode_gpr):
    (resolve_gpr64):
    (resolve_gpr32):
    (resolve_reg):
    (decode_imm):
    (decode_modrm_reg):
    (decode_modrm_rm):
    (decode_o):
    (decode_operand):
    (decode_operands):
    (clear_insn):
    (resolve_mode):
    (gen_hex):
    (decode_insn):
    (decode_3dnow):
    (decode_ssepfx):
    (decode_ext):
    (decode_opcode):
    (ud_decode):
    * disassembler/udis86/udis86_decode.h: Added.
    (ud_itab_entry_operand):
    (ud_itab_entry):
    (ud_lookup_table_list_entry):
    (sse_pfx_idx):
    (mode_idx):
    (modrm_mod_idx):
    (vendor_idx):
    (is_group_ptr):
    (group_idx):
    * disassembler/udis86/udis86_extern.h: Added.
    * disassembler/udis86/udis86_input.c: Added.
    (inp_buff_hook):
    (inp_file_hook):
    (ud):
    (ud_set_user_opaque_data):
    (ud_get_user_opaque_data):
    (ud_set_input_buffer):
    (ud_set_input_file):
    (ud_input_skip):
    (ud_input_end):
    (ud_inp_next):
    (ud_inp_back):
    (ud_inp_peek):
    (ud_inp_move):
    (ud_inp_uint8):
    (ud_inp_uint16):
    (ud_inp_uint32):
    (ud_inp_uint64):
    * disassembler/udis86/udis86_input.h: Added.
    * disassembler/udis86/udis86_itab_holder.c: Added.
    * disassembler/udis86/udis86_syn-att.c: Added.
    (opr_cast):
    (gen_operand):
    (ud_translate_att):
    * disassembler/udis86/udis86_syn-intel.c: Added.
    (opr_cast):
    (gen_operand):
    (ud_translate_intel):
    * disassembler/udis86/udis86_syn.c: Added.
    * disassembler/udis86/udis86_syn.h: Added.
    (mkasm):
    * disassembler/udis86/udis86_types.h: Added.
    (ud_operand):
    (ud):
    * jit/JITCode.h:
    (JITCode):
    (JSC::JITCode::tryToDisassemble):
    
    Source/WebCore: 
    
    Reviewed by Sam Weinig.
            
    Just fixing EFL's build system now that JSC has a new directory.
    
    * CMakeLists.txt:
    
    Source/WTF: 
    
    Reviewed by Sam Weinig.
            
    Made changes to Assertions.h to make it friendly to C code again.
            
    Added ENABLE(DISASSEMBLER) and USE(UDIS86) logic to Platform.h.
    
    * wtf/Assertions.h:
    * wtf/Platform.h:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@120745 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    01c2a197