This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PowerPC: gettimeofday optimization by using IFUNC


On 03/05/2013 12:06 PM, Richard Henderson wrote:
> On 03/05/2013 04:22 AM, Adhemerval Zanella wrote:
>> +/* Macro to return vdso_xxx value on IFUNC implementations.
>> +   On PPC64 the returned value is actually an OPD entry.  */
>> +#if defined(__PPC64__) || defined(__powerpc64__)
>> +#define PTR_IFUNC_RET(value)  &value
>> +#else
>> +#define PTR_IFUNC_RET(value)  value
>> +#endif
>> +
> We are talking about function symbols in C right?  These two expressions are
> identical due to function pointer decomposition.
>
>
> r~
>
Not in this case: without the '&' on PPC64 the vDSO function address will be
returned instead of ODP entry and then elf_ifunc_invoke will fail to correct
resolve the symbol. On PPC32 this is not need, the vDSO address is returned
instead.

Here is the disassemble of the IFUNC resolver with my latest patch:

Dump of assembler code for function __gettimeofday:
=> 0x00000fffb7ed7700 <+0>:     nop
   0x00000fffb7ed7704 <+4>:     ld      r9,-14952(r2)
   0x00000fffb7ed7708 <+8>:     addi    r3,r2,-14952
   0x00000fffb7ed770c <+12>:    cmpdi   cr7,r9,0
   0x00000fffb7ed7710 <+16>:    bnelr   cr7
   0x00000fffb7ed7714 <+20>:    addis   r3,r2,-1
   0x00000fffb7ed7718 <+24>:    addi    r3,r3,-5200
   0x00000fffb7ed771c <+28>:    blr

And here it is the resolver with '#define PTR_IFUNC_RET(value)  value':

=> 0x00000fffb7ed7700 <+0>:     nop
   0x00000fffb7ed7704 <+4>:     ld      r3,-14952(r2)
   0x00000fffb7ed7708 <+8>:     cmpdi   cr7,r3,0
   0x00000fffb7ed770c <+12>:    bnelr   cr7
   0x00000fffb7ed7710 <+16>:    addis   r3,r2,-1
   0x00000fffb7ed7714 <+20>:    addi    r3,r3,-5200
   0x00000fffb7ed7718 <+24>:    blr

The addi instruction will correctly point to ODP entry instead of the vDSO entry.




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]