[llvm-dev] Structure Padding and GetElementPtr

Hong Hu via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 28 18:44:10 PST 2016


Thanks, Eli.

Next question is how to get the layout of the original C++ class from LLVM
IR?

Regards,
Hu Hong

On 29 December 2016 at 01:57, Friedman, Eli <efriedma at codeaurora.org> wrote:

> On 12/28/2016 5:41 AM, Hong Hu via llvm-dev wrote:
>
> Hi all,
>
> I'm writing a pass to understand the memory access to C++ class members.
> For each GetElementPtr instruction, I check the second index to the class
> pointer, to figure out which member it is intended to access.
>
> However, due to the structure padding, there are some fake members
> inserted into the structure. For example, when GEP works on the 5th element
> of the padded structure, it may in fact works on the originally 3rd one, if
> there are two paddings before the original 3rd member.
>
> Is there any way to map this "5th" access to the original "3rd" one? For
> example, some APIs to tell whether one member is a real member, or a padded
> one?
>
>
> I would suggest converting the index of the struct GEP into an offset in
> bytes; see StructLayout::getElementOffset.  You can then compare that to
> the layout of the original C++ class.
>
> -Eli
>
> --
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161229/d782fa4c/attachment.html>


More information about the llvm-dev mailing list