Re: virtual method structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> Maybe I should have given more info about my problem here. I was
>> specifically looking for the types and limits of these fields. I already
>> have a working solution to get method pointers and call them, even for
>> virtual methods. But I have one case where this fails. The problem seems
>> to be that the offset between object address and virtual table is bigger
>> than 0x9000. But the delta2 field seems to be a signed short, so it
>> can't hold this value bigger 0x7FFF. I was now wondering if this is
>> really a limitation or if I have to compute things differently. That's why
>> I was looking for a description of these fields.
>>
>>>Sorry, I don't know what pfn or delta2 are without more context.
>>
>> pfn should be the address of the normal method, or delta2 should
>> be the offset to the virtual table. In my case it has a value of -16000,
>> but that's not the real value, it's also not the limit, it's just some
>> value I don't know what to do with it.
>
>Where does delta2 come from?  Where do you see the name?  Where do you
>see the value?
>
>As far as I know the compiler never stores the offset between the
>object address and the virtual table.

If I have a virtual method

virtual unsigned long CClass::vMethod();

and do in the source

unsigned long (CClass::*pvm)() = &CClass::vMethod;

then pvm is a structure (or pointer to it) with the elements
short __delta
short __index
union __pfn_or_delta2
        void* pfn
        short __delta2

These names come directly out of the debug info, they nowhere appear
in the project's sources. I do see them in the elf file but I don't know if
the values are fixed or calculated at runtime.

pvm:(0,50)=s8__delta:(0,8),0,16;__index:(0,8),16,16;__pfn_or_delta2:(0,51)=u4__pfn:(0,52)=*(14,53),0,32;__delta2:(0,8),0,16;;,32,32;;

Thanks

bye  Fabi


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux