Re: How to access the virtual table?

2014-09-12 Thread Swati Rathi

On Friday 12 September 2014 12:14 PM, Jan Hubicka wrote:

I am trying to access the virtual table.
My pass is hooked after pass_ipa_pta.

Consider Class A which contains virtual function.
An object created as :
 A a;
is translated in GIMPLE as
 struct A a;

 From variable "a" we can get its type which is "struct A".
I tried to see how the dump_vtable function access the table.

To access the virtual table for class A, Below is the code which I tried.

 tree t = TREE_TYPE (a);
 tree binfo = TYPE_BINFO (t);
 tree vtab = BINFO_VTABLE (binfo);

 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL
(vtab)), ix, value)

Using the above iterator, entries of the virtual table should be accessible.
However, I am not able to do so.

You can check dump_tree (vtab) to see if you are seeing an VAR_DECL.  
BINFO_VTABLE
is usually POINTER_PLUS_EXPR, so you want to access DECL_INITIAL
of TREE_OPERAND (vtab) in that case.

If you want to access an virtual method with given token (position in vtable),
you can just use gimple_get_virt_method_for_binfo (or borrow code from there
for things you need).

Thanks a lot. This helped.



Honza

Kindly inform me the way to access the virtual table.
Also how to fetch the functions from that virtual table?

Regards,
Swati




Re: How to access the virtual table?

2014-09-11 Thread Jan Hubicka
> 
> I am trying to access the virtual table.
> My pass is hooked after pass_ipa_pta.
> 
> Consider Class A which contains virtual function.
> An object created as :
> A a;
> is translated in GIMPLE as
> struct A a;
> 
> From variable "a" we can get its type which is "struct A".
> I tried to see how the dump_vtable function access the table.
> 
> To access the virtual table for class A, Below is the code which I tried.
> 
> tree t = TREE_TYPE (a);
> tree binfo = TYPE_BINFO (t);
> tree vtab = BINFO_VTABLE (binfo);
> 
> FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL
> (vtab)), ix, value)
> 
> Using the above iterator, entries of the virtual table should be accessible.
> However, I am not able to do so.

You can check dump_tree (vtab) to see if you are seeing an VAR_DECL.  
BINFO_VTABLE
is usually POINTER_PLUS_EXPR, so you want to access DECL_INITIAL
of TREE_OPERAND (vtab) in that case.

If you want to access an virtual method with given token (position in vtable),
you can just use gimple_get_virt_method_for_binfo (or borrow code from there
for things you need).

Honza
> 
> Kindly inform me the way to access the virtual table.
> Also how to fetch the functions from that virtual table?
> 
> Regards,
> Swati


How to access the virtual table?

2014-09-11 Thread Swati Rathi


I am trying to access the virtual table.
My pass is hooked after pass_ipa_pta.

Consider Class A which contains virtual function.
An object created as :
A a;
is translated in GIMPLE as
struct A a;

From variable "a" we can get its type which is "struct A".
I tried to see how the dump_vtable function access the table.

To access the virtual table for class A, Below is the code which I tried.

tree t = TREE_TYPE (a);
tree binfo = TYPE_BINFO (t);
tree vtab = BINFO_VTABLE (binfo);

FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (vtab)), 
ix, value)


Using the above iterator, entries of the virtual table should be accessible.
However, I am not able to do so.

Kindly inform me the way to access the virtual table.
Also how to fetch the functions from that virtual table?

Regards,
Swati