[llvm-dev] Structure Padding and GetElementPtr

Reid Kleckner via llvm-dev llvm-dev at lists.llvm.org
Wed Dec 28 18:50:25 PST 2016


Only Clang really knows the original structure layout. You can pass
'-Xclang -fdump-record-layouts', though, to see the layout during
compilation. The DICompositeType metadata produced when compiling with
debug info might contain enough information to describe the original layout.

On Wed, Dec 28, 2016 at 6:44 PM, Hong Hu via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> 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
>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161228/24e3a6e4/attachment.html>


More information about the llvm-dev mailing list