[llvm-dev] Determine the offset of a vtable ptr

Tim Northover via llvm-dev llvm-dev at lists.llvm.org
Fri May 3 00:17:54 PDT 2019


Hi Bjoern,

On Fri, 3 May 2019 at 08:02, Gaier, Bjoern via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> For this I created two classes A & B which both used virtual functions. Now I created a class C which inherits A & B. In my simple understanding of C++ class 'C' would have two additional vtable pointers for A & B - and I would want to know there offset.

The canonical documentation for this is here (at least on most
non-Windows platforms):
https://itanium-cxx-abi.github.io/cxx-abi/abi.html

There are a couple of Clang options that can help you by printing out
where Clang thinks these things are: "-Xclang -fdump-record-layouts"
prints the layout of every struct that's actually used in a source
file, and "-Xclang -fdump-vtable-layouts" prints what pointers Clang
puts at each location in the vtables it generates.

> So... Is that possible? And how would I do this via llvm::Module?

There's nothing in Module to help you determine the offsets, you have
to know or discover them by implementing the C++ ABI. Once you do know
the offsets you obviously use a getelementptr instruction to access
the pointers stored there.

Cheers.

Tim.


More information about the llvm-dev mailing list