- 追加された行はこの色です。
- 削除された行はこの色です。
*参照元 [#zf6b8a4e]
#backlinks
*説明 [#k0808e19]
-パス: [[linux-2.6.33/]]
-パス: [[linux-2.6.33/include/linux/compiler-gcc.h]]
-FIXME: これは何?
--説明
**引数 [#g6808a3a]
-
--
**返り値 [#n642e2c1]
-
--
**参考 [#vd136d02]
*実装 [#abdcc068]
/*
* 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)); })
-
--
*コメント [#fc9494fd]