MacroAssemblerCodeRef.cpp [plain text]
#include "config.h"
#include "MacroAssemblerCodeRef.h"
#include "Disassembler.h"
#include "JSCInlines.h"
#include "LLIntData.h"
#include <mutex>
namespace JSC {
MacroAssemblerCodePtr MacroAssemblerCodePtr::createLLIntCodePtr(OpcodeID codeId)
{
return createFromExecutableAddress(LLInt::getCodePtr(codeId));
}
void MacroAssemblerCodePtr::dumpWithName(const char* name, PrintStream& out) const
{
if (!m_value) {
out.print(name, "(null)");
return;
}
if (executableAddress() == dataLocation()) {
out.print(name, "(", RawPointer(executableAddress()), ")");
return;
}
out.print(name, "(executable = ", RawPointer(executableAddress()), ", dataLocation = ", RawPointer(dataLocation()), ")");
}
void MacroAssemblerCodePtr::dump(PrintStream& out) const
{
dumpWithName("CodePtr", out);
}
MacroAssemblerCodeRef MacroAssemblerCodeRef::createLLIntCodeRef(OpcodeID codeId)
{
return createSelfManagedCodeRef(MacroAssemblerCodePtr::createFromExecutableAddress(LLInt::getCodePtr(codeId)));
}
bool MacroAssemblerCodeRef::tryToDisassemble(PrintStream& out, const char* prefix) const
{
return JSC::tryToDisassemble(m_codePtr, size(), prefix, out);
}
bool MacroAssemblerCodeRef::tryToDisassemble(const char* prefix) const
{
return tryToDisassemble(WTF::dataFile(), prefix);
}
CString MacroAssemblerCodeRef::disassembly() const
{
StringPrintStream out;
if (!tryToDisassemble(out, ""))
return CString();
return out.toCString();
}
void MacroAssemblerCodeRef::dump(PrintStream& out) const
{
m_codePtr.dumpWithName("CodeRef", out);
}
}