RELOC_HIDE

/*                                                                                                                                                      
 * This macro obfuscates arithmetic on a variable address so that gcc                                                                                   
 * shouldn't recognize the original var, and make assumptions about it.                                                                                 
 *                                                                                                                                                      
 * This is needed because the C standard makes it undefined to do                                                                                       
 * pointer arithmetic on "objects" outside their boundaries and the                                                                                     
 * gcc optimizers assume this is the case. In particular they                                                                                           
 * assume such arithmetic does not wrap.                                                                                                                
 *                                                                                                                                                      
 * A miscompilation has been observed because of this on PPC.                                                                                           
 * To work around it we hide the relationship of the pointer and the object                                                                             
 * using this macro.                                                                                                                                    
 *                                                                                                                                                      
 * Versions of the ppc64 compiler before 4.1 had a bug where use of                                                                                     
 * RELOC_HIDE could trash r30. The bug can be worked around by changing                                                                                 
 * the inline assembly constraint from =g to =r, in this particular                                                                                     
 * case either is valid.                                                                                                                                
 */                                                                                                                                                     
#define RELOC_HIDE(ptr, off)                    \                                                                                                       
  ({ unsigned long __ptr;                   \                                                                                                           
    __asm__ ("" : "=r"(__ptr) : "0"(ptr));      \                                                                                                       

    (typeof(ptr)) (__ptr + (off)); }) 


作用:隐藏的指针和对象的关系


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值