From fa68a545a870778e08db48610e47cfa53c19ddbe Mon Sep 17 00:00:00 2001 From: Pawel Polanski <pawel.3.polanski@nokia.com> Date: Fri, 20 Aug 2010 12:58:37 +0200 Subject: [PATCH] Executable's UID added to the DebuggerStartParameters. Used for debugging on SymbianOs --- src/plugins/debugger/debuggerengine.cpp | 3 ++- src/plugins/debugger/debuggerengine.h | 3 +++ .../qt-s60/s60deployconfiguration.cpp | 21 +++++++++++++++++++ .../qt-s60/s60deployconfiguration.h | 1 + .../qt-s60/s60devicerunconfiguration.cpp | 3 +++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 0e2bf0f9c11..13cd1c8cfc5 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -110,7 +110,8 @@ DebuggerStartParameters::DebuggerStartParameters() useTerminal(false), breakAtMain(false), toolChainType(ToolChain::UNKNOWN), - startMode(NoStartMode) + startMode(NoStartMode), + executableUid(0) {} void DebuggerStartParameters::clear() diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index d3ea8851127..a4c0a7c3e5a 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -99,6 +99,9 @@ public: QString dumperLibrary; QStringList dumperLibraryLocations; DebuggerStartMode startMode; + + // for SymbianOS debugging + quint32 executableUid; }; DEBUGGER_EXPORT QDebug operator<<(QDebug str, const DebuggerStartParameters &); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp index 824c883407e..649a2feec31 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp @@ -252,6 +252,27 @@ QString S60DeployConfiguration::localExecutableFileName() const return QDir::toNativeSeparators(localExecutable); } +quint32 S60DeployConfiguration::executableUid() const +{ + quint32 uid = 0; + QString executablePath(localExecutableFileName()); + if (!executablePath.isEmpty()) { + QFile file(executablePath); + if (file.open(QIODevice::ReadOnly)) { + // executable's UID is 4 bytes starting at 8. + const QByteArray data = file.read(12); + if (data.size() == 12) { + const unsigned char *d = reinterpret_cast<const unsigned char*>(data.data() + 8); + uid = *d++; + uid += *d++ << 8; + uid += *d++ << 16; + uid += *d++ << 24; + } + } + } + return uid; +} + bool S60DeployConfiguration::runSmartInstaller() const { DeployConfiguration *dc = target()->activeDeployConfiguration(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h index 1885cbe38d5..b109ba8e7e6 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h @@ -77,6 +77,7 @@ public: QStringList packageTemplateFileNames() const; QString appPackageTemplateFileName() const; QString localExecutableFileName() const; + quint32 executableUid() const; QVariantMap toMap() const; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index bf268838da7..5060d799762 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -593,6 +593,9 @@ S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *rc m_startParams->startMode = Debugger::StartInternal; m_startParams->toolChainType = rc->toolChainType(); m_startParams->executable = debugFileName; + m_startParams->executableUid = activeDeployConf->executableUid(); + + QTC_ASSERT(m_startParams->executableUid, return); // Prefer the '*.sym' file over the '.exe', which should exist at the same // location in debug builds -- GitLab