diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 2bd893c29fff6c6f5db6ed7c43424df9bc788ea0..616aed00d6aba4803c297f14af48b0ad32a06f56 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -2639,7 +2639,8 @@ void GdbEngine::handleModulesList(const GdbResponse &response)
             if (line.startsWith(__("0x"))) {
                 ts >> module.startAddress >> module.endAddress >> symbolsRead;
                 module.moduleName = ts.readLine().trimmed();
-                module.symbolsRead = (symbolsRead == __("Yes"));
+                module.symbolsRead =
+                    (symbolsRead == __("Yes") ? Module::ReadOk : Module::ReadFailed);
                 modules.append(module);
             } else if (line.trimmed().startsWith(__("No"))) {
                 // gdb 6.4 symbianelf
@@ -2658,7 +2659,8 @@ void GdbEngine::handleModulesList(const GdbResponse &response)
             foreach (const GdbMi &item, response.data.children()) {
                 Module module;
                 module.moduleName = QString::fromLocal8Bit(item.findChild("path").data());
-                module.symbolsRead = (item.findChild("state").data() == "Y");
+                module.symbolsRead = (item.findChild("state").data() == "Y")
+                        ? Module::ReadOk : Module::ReadFailed;
                 module.startAddress = _(item.findChild("loaded_addr").data());
                 //: End address of loaded module
                 module.endAddress = tr("<unknown>", "address");
diff --git a/src/plugins/debugger/moduleshandler.cpp b/src/plugins/debugger/moduleshandler.cpp
index a01dfecefdb65ff1f289776c7fc95f1de9aa4bfa..f813c1643b722331e57e21be965049c4001dc2cd 100644
--- a/src/plugins/debugger/moduleshandler.cpp
+++ b/src/plugins/debugger/moduleshandler.cpp
@@ -80,14 +80,11 @@ private:
     int indexOfModule(const QString &name) const;
 
     DebuggerEngine *m_engine;
-    const QVariant m_yes;
-    const QVariant m_no;
     Modules m_modules;
 };
 
 ModulesModel::ModulesModel(ModulesHandler *parent, DebuggerEngine *engine)
-  : QAbstractItemModel(parent),
-    m_engine(engine), m_yes(tr("yes")), m_no(tr("no"))
+  : QAbstractItemModel(parent), m_engine(engine)
 {}
 
 QVariant ModulesModel::headerData(int section,
@@ -98,6 +95,7 @@ QVariant ModulesModel::headerData(int section,
             tr("Module name") + "        ",
             tr("Module path") + "        ",
             tr("Symbols read") + "        ",
+            tr("Symbols type") + "        ",
             tr("Start address") + "        ",
             tr("End address") + "        "
         };
@@ -134,13 +132,25 @@ QVariant ModulesModel::data(const QModelIndex &index, int role) const
             break;
         case 2:
             if (role == Qt::DisplayRole)
-                return module.symbolsRead ? m_yes : m_no;
+                switch (module.symbolsRead) {
+                    case Module::UnknownReadState: return tr("unknown");
+                    case Module::ReadFailed: return tr("no");
+                    case Module::ReadOk: return tr("yes");
+                }
             break;
         case 3:
             if (role == Qt::DisplayRole)
-                return module.startAddress;
+                switch (module.symbolsType) {
+                    case Module::UnknownType: return tr("unknown");
+                    case Module::PlainSymbols: return tr("plain");
+                    case Module::FastSymbols: return tr("fast");
+                }
             break;
         case 4:
+            if (role == Qt::DisplayRole)
+                return module.startAddress;
+            break;
+        case 5:
             if (role == Qt::DisplayRole)
                 return module.endAddress;
             break;
diff --git a/src/plugins/debugger/moduleshandler.h b/src/plugins/debugger/moduleshandler.h
index ca2dbd95ecdccd2b02cb709a736541bac7ef1e46..78fa67cba52e098347fb41ac45a3233cfa21dda1 100644
--- a/src/plugins/debugger/moduleshandler.h
+++ b/src/plugins/debugger/moduleshandler.h
@@ -70,12 +70,23 @@ typedef QList<Symbol> Symbols;
 class Module
 {
 public:
-    Module() : symbolsRead(false) {}
+    Module() : symbolsRead(UnknownReadState), symbolsType(UnknownType) {}
 
 public:
+    enum SymbolReadState {
+        UnknownReadState,  // Not tried.
+        ReadFailed,        // Tried to read, but failed.
+        ReadOk,            // Dwarf index available.
+    };
+    enum SymbolType {
+        UnknownType,       // Unknown.
+        PlainSymbols,      // Ordinary symbols available.
+        FastSymbols,       // Dwarf index available.
+    };
     QString moduleName;
     QString modulePath;
-    bool symbolsRead;
+    SymbolReadState symbolsRead;
+    SymbolType symbolsType;
     QString startAddress;
     QString endAddress;
 };