在前一篇文章中,我們認識了 GNU 間接函式(GNU indirect function)的運作機制,然而,正如在那篇文章中說過的,使用 GNU 間接函式必須在實作解析器函式時注意許多細節,增加了使用上的難度。不過,如果只是要替特定硬體提供更快速的實作,GCC 提供了一個更方便的方法(目前只支援 x86)——函式多版本化(function multiversioning),也就是這篇文章所要介紹的。
2017年4月23日 星期日
2017年4月15日 星期六
GNU indirect function 的運作機制
有時候為了提高程式的效能,對於同一個函式,根據執行時的環境,我們在實作上可能會有兩種以上的選擇,在傳統的方法中,我們可能會選擇使用函式指標來做這件事,然而,管理這些函式指標通常相當麻煩,尤其是當這個函式還要提供給其他函式庫使用的時候。但在 GNU/Linux 上,我們可以在某些情況,使用另一個更方便的方法——GNU 間接函式(GNU indirect function)。
此外,GNU 間接函式也是 GCC 的函式多版本化(function multiversioning)機制的實作基礎,如果想要了解函式多版本化的運作方式,提前弄清楚 GNU 間接函式也是必要的。
在本文中,會以 x86-64 為例,解釋 GNU 間接函式的運作機制。
標籤:
compiler
,
dynamic linker
,
ELF
,
Linux
,
x86-64
2017年4月3日 星期一
什麼是 Linux vDSO 與 vsyscall?——發展過程
在現今的 x86 Linux 上,無論 32 位元還是 64 位元系統,我們都可以找到 vDSO 或 vsyscall 的蹤跡,然而,在網路上卻很難找到仔細討論的文章,有時候,即便找到了一些以前的文章,在對照現今的 Linux 核心原始碼時,總會覺得這樣或那樣的似是而非,因此,我決定追溯歷史,弄清楚這些差異源自哪裡。
標籤:
Linux
,
system call
,
x86-32
,
x86-64
訂閱:
文章
(
Atom
)