aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/elfreader.h
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2012-06-06 16:08:59 +0200
committerhjk <qthjk@ovi.com>2012-06-08 12:40:08 +0200
commit92c7dce14f4ba1ffd5f5c63f5268238a4cf57a5a (patch)
tree53761a7007e4f74d0bff40002e6979106e4cad59 /src/libs/utils/elfreader.h
parent79de09f2663f818bb07c24752e6520b19b28e6ec (diff)
debugger: more elf shuffling
Also distinguish between debuglink and buildid. Change-Id: I1b55d1df42576c004050d319f46fb8c2ced9c85f Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/libs/utils/elfreader.h')
-rw-r--r--src/libs/utils/elfreader.h41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/libs/utils/elfreader.h b/src/libs/utils/elfreader.h
index af65c42445a..bdb222b13d7 100644
--- a/src/libs/utils/elfreader.h
+++ b/src/libs/utils/elfreader.h
@@ -39,30 +39,28 @@
**
****************************************************************************/
-// This is essentially copied from Qt 5's
-// qtbase/src/corelib/plugin/qelfparser_p.{h,cpp}
-
#ifndef UTILS_ELFREADER_H
#define UTILS_ELFREADER_H
#include "utils_global.h"
#include <qendian.h>
-#include <qlist.h>
#include <qstring.h>
+#include <qvector.h>
namespace Utils {
enum DebugSymbolsType
{
- UnknownSymbols, // Unknown.
- NoSymbols, // No usable symbols.
- SeparateSymbols, // Symbols mentioned, but not in binary.
- PlainSymbols, // Ordinary symbols available.
- FastSymbols // Dwarf index available.
+ UnknownSymbols = 0, // Unknown.
+ NoSymbols = 1, // No usable symbols.
+ LinkedSymbols = 2, // Link to symols available.
+ BuildIdSymbols = 4, // BuildId available.
+ PlainSymbols = 8, // Ordinary symbols available.
+ FastSymbols = 16 // Dwarf index available.
};
-class QTCREATOR_UTILS_EXPORT ElfHeader
+class ElfSectionHeader
{
public:
QByteArray name;
@@ -73,15 +71,27 @@ public:
quint64 data;
};
-class QTCREATOR_UTILS_EXPORT ElfHeaders
+class ElfProgramHeader
+{
+public:
+ quint32 type;
+ quint64 offset;
+ quint64 filesz;
+ quint64 memsz;
+};
+
+class QTCREATOR_UTILS_EXPORT ElfData
{
public:
- ElfHeaders() : symbolsType(UnknownSymbols) {}
+ ElfData() : symbolsType(UnknownSymbols) {}
int indexOf(const QByteArray &name) const;
public:
+ QByteArray debugLink;
+ QByteArray buildId;
DebugSymbolsType symbolsType;
- QList<ElfHeader> headers;
+ QVector<ElfSectionHeader> sectionHeaders;
+ QVector<ElfProgramHeader> programHeaders;
};
class QTCREATOR_UTILS_EXPORT ElfReader
@@ -91,9 +101,10 @@ public:
enum Result { Ok, NotElf, Corrupt };
enum ElfEndian { ElfLittleEndian = 0, ElfBigEndian = 1 };
- ElfHeaders readHeaders();
+ ElfData readHeaders();
QByteArray readSection(const QByteArray &sectionName);
QString errorString() const { return m_errorString; }
+ QByteArray readCoreName();
private:
friend class ElfMapper;
@@ -102,7 +113,7 @@ private:
QString m_binary;
QString m_errorString;
ElfEndian m_endian;
- ElfHeaders m_headers;
+ ElfData m_elfData;
};
} // namespace Utils