Ignore:
Timestamp:
Jul 24, 2013, 9:04:05 PM (12 years ago)
Author:
[email protected]
Message:

fourthTier: JSC's disassembly infrastructure should be able to disassemble the code that LLVM generates
https://bugs.webkit.org/show_bug.cgi?id=118148

Source/JavaScriptCore:

Reviewed by Anders Carlsson.

Oh boy. UDis86 cannot disassemble the AVX (or whatever it's called) stuff
that LLVM generates for floating point. So the right decision is to
switch to the LLVM disassembler, right? Wrong!! LLVM's disassembler
cannot disassemble the load-from-absolute-address-into-%rax instructions
that our JIT generates quite a lot of.

So, this keeps the UDis86 disassembler, but adds the LLVM disassembler,
and requires the caller of disassemble() to hint which one is likely to
be less wrong for the given code.

Maybe in the future LLVM will catch up to UDis86, but it's definitely not
there right now.

This now allows us to disassemble all of the code that LLVM generates.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • disassembler/Disassembler.cpp:

(JSC::disassemble):

  • disassembler/Disassembler.h:

(JSC::tryToDisassemble):
(JSC):

  • disassembler/LLVMDisassembler.cpp: Added.

(JSC):
(JSC::symbolLookupCallback):
(JSC::tryToDisassembleWithLLVM):

  • disassembler/LLVMDisassembler.h: Added.

(JSC):
(JSC::tryToDisassembleWithLLVM):

  • disassembler/UDis86Disassembler.cpp:

(JSC::tryToDisassembleWithUDis86):

  • disassembler/UDis86Disassembler.h: Added.

(JSC):
(JSC::tryToDisassembleWithUDis86):

  • disassembler/X86Disassembler.cpp: Added.

(JSC):
(JSC::tryToDisassemble):

  • ftl/FTLAbbreviatedTypes.h:
  • ftl/FTLCompile.cpp:

(JSC::FTL::compile):

  • ftl/FTLJITCode.h:
  • ftl/FTLJITFinalizer.h:
  • ftl/FTLLLVMHeaders.h: Removed.
  • ftl/FTLLink.cpp:
  • runtime/InitializeThreading.cpp:

(JSC::initializeThreadingOnce):

  • runtime/Options.h:

(JSC):

Source/WTF:

Reviewed by Anders Carlsson.

We now use LLVM for two things: disassembler and FTL. Separate out the question
of whether we have LLVM (HAVE(LLVM)) from whether we want to use the LLVM
disassembler (USE(LLVM_DISASSEMBLER)) and whether we enable the FTL
(ENABLE(FTL_JIT)).

Also move the cruft for including LLVM headers into WTF since now we use it in
a bunch of places, not all related to FTL. There's no obvious place to put that
file in JSC so I put it in WTF.

  • WTF.xcodeproj/project.pbxproj:
  • wtf/LLVMHeaders.h: Copied from Source/JavaScriptCore/ftl/FTLLLVMHeaders.h.
  • wtf/Platform.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/disassembler/UDis86Disassembler.cpp

    r135640 r153256  
    11/*
    2  * Copyright (C) 2012 Apple Inc. All rights reserved.
     2 * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2525
    2626#include "config.h"
    27 #include "Disassembler.h"
     27#include "UDis86Disassembler.h"
    2828
    2929#if USE(UDIS86)
     
    3434namespace JSC {
    3535
    36 bool tryToDisassemble(const MacroAssemblerCodePtr& codePtr, size_t size, const char* prefix, PrintStream& out)
     36bool tryToDisassembleWithUDis86(const MacroAssemblerCodePtr& codePtr, size_t size, const char* prefix, PrintStream& out, InstructionSubsetHint)
    3737{
    3838    ud_t disassembler;
Note: See TracChangeset for help on using the changeset viewer.