lvc/vtable-dumper

Undecorated v-table entries for inline virtual functions

lvc opened this issue · 0 comments

lvc commented

Sometimes the dladdr function fails to find some symbol names in the v-table.

Output of vtable-dumper /usr/lib64/libQt5Gui.so.5.4.2:

Vtable for QImageTextureGlyphCache
_ZTV23QImageTextureGlyphCache: 10 entries
0     (int (*)(...)) 0
8     (int (*)(...)) (& _ZTI23QImageTextureGlyphCache)
16    (int (*)(...)) QImageTextureGlyphCache::~QImageTextureGlyphCache()
24    (int (*)(...)) QImageTextureGlyphCache::~QImageTextureGlyphCache()
32    (int (*)(...)) QImageTextureGlyphCache::createTextureData(int, int)
40    (int (*)(...)) QImageTextureGlyphCache::resizeTextureData(int, int)
48    (int (*)(...)) 0x32d210
56    (int (*)(...)) QImageTextureGlyphCache::fillTexture(QTextureGlyphCache::Coord const&, unsigned int, QFixed)
64    (int (*)(...)) 0x32d220
72    (int (*)(...)) 0x32d230

The tool can't find symbol names for 0x32d210, 0x32d220 and 0x32d230.

The g++ -fdump-class-hierarchy ./qtextureglyphcache_p.h returns for this class:

Vtable for QImageTextureGlyphCache
QImageTextureGlyphCache::_ZTV23QImageTextureGlyphCache: 10u entries
0     (int (*)(...))0
8     (int (*)(...))(& _ZTI23QImageTextureGlyphCache)
16    (int (*)(...))QImageTextureGlyphCache::~QImageTextureGlyphCache
24    (int (*)(...))QImageTextureGlyphCache::~QImageTextureGlyphCache
32    (int (*)(...))QImageTextureGlyphCache::createTextureData
40    (int (*)(...))QImageTextureGlyphCache::resizeTextureData
48    (int (*)(...))QTextureGlyphCache::glyphPadding
56    (int (*)(...))QImageTextureGlyphCache::fillTexture
64    (int (*)(...))QTextureGlyphCache::maxTextureWidth
72    (int (*)(...))QTextureGlyphCache::maxTextureHeight

The QTextureGlyphCache::* inline virtual methods names are missed in the vtable-dumper output.