*参照元 [#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS