[llvm-dev] Get elements from a getelementptr constant expression

Andrew Santosa via llvm-dev llvm-dev at lists.llvm.org
Sat Jun 3 19:31:41 PDT 2017



If what is needed is to simply extract the operands of a getelementptr
constant expression, I wrote a simple example here:
https://github.com/analysis-examples/gep-expr-example


Best,
Andrew
On Wednesday, 31 May 2017, 19:53, via llvm-dev <llvm-dev at lists.llvm.org> wrote:


Message: 8
Date: Tue, 30 May 2017 22:13:09 -0400
From: Damilola Orikogbo via llvm-dev <llvm-dev at lists.llvm.org>
To: llvm-dev at lists.llvm.org
Subject: [llvm-dev] Get elements from a getelementptr constant
    expression
Message-ID:
    <CAJJs-5kRu1r1L8zy56Vv1g78Uijj-EoJ4_z689cgXd=2vMugWA at mail.gmail.com>
Content-Type: text/plain; charset="utf-8"


Hi,

I have this instruction,

store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x
i8*]* @_ZTV9Rectangle, i32 0, i32 2) to i32 (...)**), i32 (...)*** %5,
align 8

and was wondering how to access the indices of the getelementptr. How would
i print out all pointers stored from index 0 to 5.

Cheers,

Dami

-------------- next part --------------

An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170530/4bd0d076/attachment-0001.html>

------------------------------


Message: 9
Date: Tue, 30 May 2017 23:20:02 -0400
From: Damilola Orikogbo via llvm-dev <llvm-dev at lists.llvm.org>
To: Tim Northover <t.p.northover at gmail.com>, llvm-dev at lists.llvm.org
Subject: Re: [llvm-dev] Get elements from a getelementptr constant
    expression
Message-ID:
    <CAJJs-5=nn1JRNWoENCB3Q2coqmr=V1rDJzcQTMTRQTnF6pg1dg at mail.gmail.com>
Content-Type: text/plain; charset="utf-8"


Hello,

I apologize, I am new to the list-serve (joined on the 25th) and am not
quite sure how it works.

I didn't reply to Hans because the llvm/ clang distribution I have
installed doesn't allow me to use that command line option, I will respond
in a bit.  And I asked anther question simply because no one replied to my
first question.

I have been using llvm for about a week, so I am not sure how to ask my
question succinctly but I am trying, please bear with me.

In reply to your response, I will try that out tomorrow and hopefully be
able to make some headway.

I have been searching previous emails and have found that some people have
cast the getelementptr in the Instruction i posted in this original email
thread to a constantexpr or GEPOperator and have been able to get
information that way, but I can't quite seem to figure it out.

*Ex email thread:*
https://groups.google.com/forum/#!topic/llvm-dev/_F-PFACaHbU
<https://groups.google.com/forum/#!topic/llvm-dev/_F-PFACaHbU>

If anyone has tried this approach and could provide some more information
going this route, I would appreciate that as well.

Cheers,

Dami

On Tue, May 30, 2017 at 10:37 PM, Tim Northover <t.p.northover at gmail.com>

wrote:


> Hi,

>

> On 30 May 2017 at 19:13, Damilola Orikogbo via llvm-dev

> <llvm-dev at lists.llvm.org> wrote:

> >  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x

> > i8*]* @_ZTV9Rectangle, i32 0, i32 2) to i32 (...)**), i32 (...)*** %5,

> align

> > 8

> >

> > and was wondering how to access the indices of the getelementptr. How

> would

> > i print out all pointers stored from index 0 to 5.

>

> You really need to start replying to your own threads. The one I

> noticed this morning was particularly useless compared to your message

> from 25th May, and you didn't even clarify your problem for Hans after

> he replied.

>

> That said, if you'd identified a vtable you would insert code to GEP

> element N and then pass the result to something like a printf

> expecting a %p. Of course you need to know in advance that your vtable

> contains 5 entries.

>

> So you'd create a bunch of instructions looking vaguely like:

>

>     call void @printf(@WHATEVER_FOR_PERCENT_P, bitcast(i8**

> getelementptr inbounds([5 x i8*], [5 x i8*]* @_ZTV9Rectangle, i32 0,

> i32 N) to i8*)

>

> The chances are you won't always have a @_ZTV* global as a base though

> (that's the entire point of dynamic dispatch). In which case you'd

> have to create a bunch of instructions like:

>

>     %tmp = getelementptr inbounds [5 * i8*], [5 x i8*]* %vtable, i32 0,

> i32 N

>     %tmp1 = bitcast i8** %tmp to i8*

>     call void @printf(@WHATEVER_FOR_PERCENT_P, %tmp1)

>

> Tim.

>

-------------- next part --------------

An HTML attachment was scrubbed...

URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170530/dafec7d9/attachment-0001.html>


------------------------------


Message: 10

Date: Tue, 30 May 2017 23:23:42 -0400

From: Damilola Orikogbo via llvm-dev <llvm-dev at lists.llvm.org>

To: Hans Wennborg <hans at chromium.org>, llvm-dev at lists.llvm.org

Subject: Re: [llvm-dev] Dumping the Vtable

Message-ID:

    <CAJJs-5k1+GJPrDanMXE3-VPvFa6dBDhTqSnoJidyxhqyjzMXrw at mail.gmail.com>

Content-Type: text/plain; charset="utf-8"


Hi Hans,


Thanks for the reply. I apologize for the unclear question. I am new to

using clang and llvm.


I have tried this but the version I have for some reason won't allow me to

use this command line option. Furthermore, I am trying to get this

information via the IR  and writing a pass to get this information to use

at a later point.



-Dami


On Tue, May 30, 2017 at 12:56 PM, Hans Wennborg <hans at chromium.org> wrote:


> Hi Damilola,

>

> On Mon, May 29, 2017 at 5:20 AM, Damilola Orikogbo via llvm-dev

> <llvm-dev at lists.llvm.org> wrote:

> > Can someone help me with how to dump the vtable and the vptr addresses

> > within it?

>

> I'm not sure if this answers your question exactly, but you can pass

> "-Xclang -fdump-vtable-layouts" to ask Clang to dump the layout of

> generated vtables. For example:

>

> $ cat /tmp/a.cc

> struct S {

>   virtual void f() {};

> };

>

> void f(S * s) {

>   s->f();

> }

> $ bin/clang++ -c /tmp/a.cc -Xclang -fdump-vtable-layouts

> Vtable for 'S' (3 entries).

>    0 | offset_to_top (0)

>    1 | S RTTI

>        -- (S, 0) vtable address --

>    2 | void S::f()

>

> VTable indices for 'S' (1 entries).

>    0 | void S::f()

>

>

>  - Hans

>

-------------- next part --------------

An HTML attachment was scrubbed...

URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170530/b8cc0e82/attachment-0001.html>


More information about the llvm-dev mailing list