diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-03-21 20:35:31 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-03-21 22:43:55 +0100 |
commit | 188db3422046bf49f283e08220f9c61f1fa3a233 (patch) | |
tree | f157bdad95ae8acbead7a57a54a9292659f44bae /src | |
parent | 96ef0e4010b1be01a7b89c136ae9c518eb8492db (diff) |
Improve readability of disassembly
Replace the addresses of identifier strings with their actual values.
Change-Id: Icbe905ced7949913655575cac39fcf9250672f7f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/v4/qv4isel_masm.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/v4/qv4isel_masm.cpp b/src/v4/qv4isel_masm.cpp index 43721da753..d83541c107 100644 --- a/src/v4/qv4isel_masm.cpp +++ b/src/v4/qv4isel_masm.cpp @@ -402,7 +402,8 @@ void Assembler::generateBinOp(V4IR::AluOp operation, V4IR::Temp* target, V4IR::T binOpFinished.link(this); } #if OS(LINUX) -static void printDisassembledOutputWithCalls(const char* output, const QHash<void*, const char*>& functions) +static void printDisassembledOutputWithCalls(const char* output, const QHash<void*, const char*>& functions, + const QVector<String*> &identifiers) { QByteArray processedOutput(output); for (QHash<void*, const char*>::ConstIterator it = functions.begin(), end = functions.end(); @@ -411,6 +412,13 @@ static void printDisassembledOutputWithCalls(const char* output, const QHash<voi ptrString.prepend("0x"); processedOutput = processedOutput.replace(ptrString, it.value()); } + for (QVector<String*>::ConstIterator it = identifiers.begin(), end = identifiers.end(); + it != end; ++it) { + QByteArray ptrString = QByteArray::number(quintptr(*it), 16); + ptrString.prepend("0x"); + QByteArray replacement = "\"" + (*it)->toQString().toUtf8() + "\""; + processedOutput = processedOutput.replace(ptrString, replacement); + } fprintf(stderr, "%s\n", processedOutput.constData()); } #endif @@ -475,13 +483,19 @@ void Assembler::link(VM::Function *vmFunc) #endif QByteArray name = _function->name->toUtf8(); + if (name.isEmpty()) { + name = QByteArray::number(quintptr(_function), 16); + name.prepend("IR::Function(0x"); + name.append(")"); + } vmFunc->codeRef = linkBuffer.finalizeCodeWithDisassembly("%s", name.data()); WTF::setDataFile(stderr); #if OS(LINUX) fclose(disasmStream); #if CPU(X86) || CPU(X86_64) - printDisassembledOutputWithCalls(disasmOutput, functions); + QHash<void*, String*> idents; + printDisassembledOutputWithCalls(disasmOutput, functions, _vmFunction->identifiers); #endif free(disasmOutput); #endif |