// make sure that a valid object is set, at least dummy with empty name void CachegrindLoader::ensureObject() { if (currentObject) return; currentObject = _data->object(_emptyString); currentPartObject = currentObject->partObject(_part); }
TraceObject* CachegrindLoader::compressedObject(const QString& name) { if ((name[0] != '(') || !name[1].isDigit()) return _data->object(checkUnknown(name)); // compressed format using _objectVector int p = name.indexOf(')'); if (p<2) { error(QStringLiteral("Invalid compressed ELF object ('%1')").arg(name)); return 0; } int index = name.midRef(1, p-1).toInt(); TraceObject* o = 0; p++; while((name.length()>p) && name.at(p).isSpace()) p++; if (name.length()>p) { if (_objectVector.size() <= index) { int newSize = index * 2; #if TRACE_LOADER qDebug() << " CachegrindLoader: objectVector enlarged to " << newSize; #endif _objectVector.resize(newSize); } QString realName = checkUnknown(name.mid(p)); o = (TraceObject*) _objectVector.at(index); if (o && (o->name() != realName)) { error(QStringLiteral("Redefinition of compressed ELF object index %1 (was '%2') to %3") .arg(index).arg(o->name()).arg(realName)); } o = _data->object(realName); _objectVector.replace(index, o); } else { if ((_objectVector.size() <= index) || ( (o=(TraceObject*)_objectVector.at(index)) == 0)) { error(QStringLiteral("Undefined compressed ELF object index %1").arg(index)); return 0; } } return o; }
void CachegrindLoader::setCalledObject(const QString& name) { currentCalledObject = compressedObject(name); if (!currentCalledObject) { error(QStringLiteral("Invalid specification of called ELF object, setting to unknown")); currentCalledObject = _data->object(_emptyString); } currentCalledPartObject = currentCalledObject->partObject(_part); }
void CachegrindLoader::setObject(const QString& name) { currentObject = compressedObject(name); if (!currentObject) { error(QString("Invalid ELF object specification, setting to unknown")); currentObject = _data->object(_emptyString); } currentPartObject = currentObject->partObject(_part); currentFunction = 0; currentPartFunction = 0; }