aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-03-21 20:35:31 +0100
committerLars Knoll <lars.knoll@digia.com>2013-03-21 22:43:55 +0100
commit188db3422046bf49f283e08220f9c61f1fa3a233 (patch)
treef157bdad95ae8acbead7a57a54a9292659f44bae /src
parent96ef0e4010b1be01a7b89c136ae9c518eb8492db (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.cpp18
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