diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h
index 1d45cceaf824cc0299eb1c3b7ed84f6cd938e8ba..5c2070bd8dabd82aa4cde319169da6efa43bf341 100644
--- a/src/plugins/debugger/debuggerconstants.h
+++ b/src/plugins/debugger/debuggerconstants.h
@@ -237,6 +237,7 @@ enum ModelRoles
 
     // Modules
     RequestReloadModulesRole,
+    RequestExamineModulesRole,
     RequestModuleSymbolsRole,
     RequestAllSymbolsRole,
     RequestOpenFileRole,
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 33293a2c2efa02117169565fac9b4c34c40c9040..fc8448fbcc2b54cf33edb65bc739053e071abeed 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -136,6 +136,7 @@ public:
     virtual void activateFrame(int index) { Q_UNUSED(index); }
 
     virtual void reloadModules() {}
+    virtual void examineModules() {}
     virtual void loadSymbols(const QString &moduleName)
         { Q_UNUSED(moduleName); }
     virtual void loadAllSymbols() {}
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 616aed00d6aba4803c297f14af48b0ad32a06f56..0f08f312ccf549033500848024b1e2a5b8c104c7 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2672,6 +2672,27 @@ void GdbEngine::handleModulesList(const GdbResponse &response)
 }
 
 
+void GdbEngine::examineModules()
+{
+    foreach (Module module, modulesHandler()->modules()) {
+        if (module.symbolsType == Module::UnknownType) {
+            QProcess proc;
+            qDebug() << _("objdump -h \"%1\"").arg(module.moduleName);
+            proc.start(_("objdump -h \"%1\"").arg(module.moduleName));
+            if (!proc.waitForStarted())
+                continue;
+            if (!proc.waitForFinished())
+                continue;
+            QByteArray ba = proc.readAllStandardOutput();
+            if (ba.contains(".gdb_index"))
+                module.symbolsType = Module::FastSymbols;
+            else
+                module.symbolsType = Module::PlainSymbols;
+            modulesHandler()->updateModule(module.moduleName, module);
+        }
+    }
+}
+
 //////////////////////////////////////////////////////////////////////
 //
 // Source files specific stuff
diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h
index 37f9eccd05c17e929a8ee04f728a4b65ef4d2550..f75ccf3a10b123831051afc9c3fd09afd5bb38c2 100644
--- a/src/plugins/debugger/gdb/gdbengine.h
+++ b/src/plugins/debugger/gdb/gdbengine.h
@@ -368,6 +368,7 @@ private: ////////// View & Data Stuff //////////
     virtual void loadAllSymbols();
     virtual void requestModuleSymbols(const QString &moduleName);
     virtual void reloadModules();
+    virtual void examineModules();
     void reloadModulesInternal();
     void handleModulesList(const GdbResponse &response);
 
diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp
index f813c1643b722331e57e21be965049c4001dc2cd..26c8faf6df2dd1e6188e1b5a25b804630f93e5af 100644
--- a/src/plugins/debugger/moduleshandler.cpp
+++ b/src/plugins/debugger/moduleshandler.cpp
@@ -70,9 +70,10 @@ public:
     bool setData(const QModelIndex &index, const QVariant &value, int role);
 
     void clearModel();
-    void addModule(const Module &m);
+    void addModule(const Module &module);
     void removeModule(const QString &moduleName);
-    void setModules(const Modules &m);
+    void setModules(const Modules &modules);
+    void updateModule(const QString &moduleName, const Module &module);
 
     const Modules &modules() const { return m_modules; }
 
@@ -167,6 +168,10 @@ bool ModulesModel::setData(const QModelIndex &index, const QVariant &value, int
             m_engine->reloadModules();
             return true;
 
+        case RequestExamineModulesRole:
+            m_engine->examineModules();
+            return true;
+
         case RequestModuleSymbolsRole:
             m_engine->loadSymbols(value.toString());
             return true;
@@ -216,12 +221,19 @@ void ModulesModel::removeModule(const QString &moduleName)
 {
     const int index = indexOfModule(moduleName);
     QTC_ASSERT(index != -1, return);
-
     beginRemoveRows(QModelIndex(), index, index);
     m_modules.removeAt(index);
     endRemoveRows();
 }
 
+void ModulesModel::updateModule(const QString &moduleName, const Module &module)
+{
+    const int index = indexOfModule(moduleName);
+    QTC_ASSERT(index != -1, return);
+    m_modules[index] = module;
+    reset();
+}
+
 //////////////////////////////////////////////////////////////////
 //
 // ModulesHandler
@@ -255,6 +267,11 @@ void ModulesHandler::removeModule(const QString &moduleName)
     m_model->removeModule(moduleName);
 }
 
+void ModulesHandler::updateModule(const QString &moduleName, const Module &module)
+{
+    m_model->updateModule(moduleName, module);
+}
+
 void ModulesHandler::setModules(const Modules &modules)
 {
     m_model->setModules(modules);
diff --git a/src/plugins/debugger/moduleshandler.h b/src/plugins/debugger/moduleshandler.h
index 78fa67cba52e098347fb41ac45a3233cfa21dda1..4517320054e8c8489454a45b8a95608e749669bb 100644
--- a/src/plugins/debugger/moduleshandler.h
+++ b/src/plugins/debugger/moduleshandler.h
@@ -110,6 +110,7 @@ public:
     void setModules(const Modules &modules);
     void addModule(const Module &module);
     void removeModule(const QString &moduleName);
+    void updateModule(const QString &moduleName, const Module &module);
 
     Modules modules() const;
     void removeAll();
diff --git a/src/plugins/debugger/moduleswindow.cpp b/src/plugins/debugger/moduleswindow.cpp
index cb821f7bd6dd041fb81ae934133bf29fdb9b08e6..509af16db11a2220d8f562564f4da1329d447450 100644
--- a/src/plugins/debugger/moduleswindow.cpp
+++ b/src/plugins/debugger/moduleswindow.cpp
@@ -107,35 +107,55 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev)
         model()->data(index, EngineCapabilitiesRole).toInt();
 
     QMenu menu;
-    QAction *act0 = new QAction(tr("Update Module List"), &menu);
-    act0->setEnabled(enabled && (capabilities & ReloadModuleCapability));
-    QAction *act3 = new QAction(tr("Show Source Files for Module \"%1\"").arg(name), &menu);
-    act3->setEnabled(enabled && (capabilities & ReloadModuleCapability));
-    QAction *act4 = new QAction(tr("Load Symbols for All Modules"), &menu);
-    act4->setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
-    QAction *act5 = 0;
-    QAction *act6 = 0;
-    QAction *act7 = 0;
+
+    QAction *actUpdateModuleList
+        = new QAction(tr("Update Module List"), &menu);
+    actUpdateModuleList
+        ->setEnabled(enabled && (capabilities & ReloadModuleCapability));
+
+    QAction *actShowSourceFiles
+        = new QAction(tr("Show Source Files for Module \"%1\"").arg(name), &menu);
+    actShowSourceFiles
+        ->setEnabled(enabled && (capabilities & ReloadModuleCapability));
+
+    QAction *actLoadSymbolsForAllModules
+        = new QAction(tr("Load Symbols for All Modules"), &menu);
+    actLoadSymbolsForAllModules
+        -> setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
+
+    QAction *actExamineAllModules
+        = new QAction(tr("Examine All Modules"), &menu);
+    actExamineAllModules
+        -> setEnabled(enabled && (capabilities & ReloadModuleSymbolsCapability));
+
+    QAction *actLoadSymbolsForModule = 0;
+    QAction *actEditFile = 0;
+    QAction *actShowSymbols = 0;
     if (name.isEmpty()) {
-        act5 = new QAction(tr("Load Symbols for Module"), &menu);
-        act5->setEnabled(false);
-        act6 = new QAction(tr("Edit File"), &menu);
-        act6->setEnabled(false);
-        act7 = new QAction(tr("Show Symbols"), &menu);
-        act7->setEnabled(false);
+        actLoadSymbolsForModule = new QAction(tr("Load Symbols for Module"), &menu);
+        actLoadSymbolsForModule->setEnabled(false);
+        actEditFile = new QAction(tr("Edit File"), &menu);
+        actEditFile->setEnabled(false);
+        actShowSymbols = new QAction(tr("Show Symbols"), &menu);
+        actShowSymbols->setEnabled(false);
     } else {
-        act5 = new QAction(tr("Load Symbols for Module \"%1\"").arg(name), &menu);
-        act5->setEnabled(capabilities & ReloadModuleSymbolsCapability);
-        act6 = new QAction(tr("Edit File \"%1\"").arg(name), &menu);
-        act7 = new QAction(tr("Show Symbols in File \"%1\"").arg(name), &menu);
+        actLoadSymbolsForModule
+            = new QAction(tr("Load Symbols for Module \"%1\"").arg(name), &menu);
+        actLoadSymbolsForModule
+            ->setEnabled(capabilities & ReloadModuleSymbolsCapability);
+        actEditFile
+            = new QAction(tr("Edit File \"%1\"").arg(name), &menu);
+        actShowSymbols
+            = new QAction(tr("Show Symbols in File \"%1\"").arg(name), &menu);
     }
 
-    menu.addAction(act0);
-    //menu.addAction(act3); // FIXME
-    menu.addAction(act4);
-    menu.addAction(act5);
-    menu.addAction(act6);
-    //menu.addAction(act7); // FIXME
+    menu.addAction(actUpdateModuleList);
+    //menu.addAction(actShowSourceFiles); // FIXME
+    menu.addAction(actLoadSymbolsForAllModules);
+    menu.addAction(actExamineAllModules);
+    menu.addAction(actLoadSymbolsForModule);
+    menu.addAction(actEditFile);
+    //menu.addAction(actShowSymbols); // FIXME
     menu.addSeparator();
     QAction *actAdjustColumnWidths =
         menu.addAction(tr("Adjust Column Widths to Contents"));
@@ -148,21 +168,23 @@ void ModulesWindow::contextMenuEvent(QContextMenuEvent *ev)
 
     QAction *act = menu.exec(ev->globalPos());
 
-    if (act == act0) {
+    if (act == actUpdateModuleList) {
         setModelData(RequestReloadModulesRole);
     } else if (act == actAdjustColumnWidths) {
         resizeColumnsToContents();
     } else if (act == actAlwaysAdjustColumnWidth) {
         setAlwaysResizeColumnsToContents(!m_alwaysResizeColumnsToContents);
-    //} else if (act == act3) {
+    //} else if (act == actShowSourceFiles) {
     //    emit displaySourceRequested(name);
-    } else if (act == act4) {
+    } else if (act == actLoadSymbolsForAllModules) {
         setModelData(RequestAllSymbolsRole);
-    } else if (act == act5) {
+    } else if (act == actExamineAllModules) {
+        setModelData(RequestExamineModulesRole);
+    } else if (act == actLoadSymbolsForModule) {
         setModelData(RequestModuleSymbolsRole, name);
-    } else if (act == act6) {
+    } else if (act == actEditFile) {
         setModelData(RequestOpenFileRole, name);
-    } else if (act == act7) {
+    } else if (act == actShowSymbols) {
         setModelData(RequestModuleSymbolsRole, name);
     }
 }