2015-06-05 48 views

回答

2

這是一個函數原型,否則被稱爲聲明。實現(定義如果您選擇)位於內核源代碼中。您可以在您的本地FreeBSD計算機上找到online或(如果您選擇安裝源代碼)(在/usr/src/sys下)。實際上有幾個副本,具體取決於內核編譯的硬件。 (順便說一下,函數名是「老」—我在二十世紀八十年代中期遇到過它們,並且在那個時候它們是衆所周知的)。

內核源代碼包含這些函數的多個實現,具體取決於硬件平臺。例如,在FreeBSD 10中,amd64版本是用匯編語言編寫的(例如參見/usr/src/sys/amd64/amd64/support.S中的SVN)。在同一版本中,我發現只有一個用C編寫的實現(在powerpc子樹下),而在當前源中,已被重寫。因此,要知道「哪裏」是源代碼,您必須進行一些研究並找到適用於您的硬件平臺和FreeBSD發行版的相應源代碼。

__nonnull是一個編譯器指令,告訴它確保給定的參數顯然不是空指針。例如,見這些郵件列表評論:

+0

你知道哪裏是copyout的實際功能體()爲AMD64,FreeBSD的10.1?我知道它必須在一些文件中,但找不到它。 – WindChaser

+1

它在'sys/amd64/amd64/support.S'中,請參閱這裏http://fxr.watson.org/fxr/source/amd64/amd64/support.S#L227 – nos

+0

任何簡單的方法來攔截(記錄或更改複製的字節)函數'copyout()'?用匯編語言(%rdi,%rsi,%rdx)攔截它似乎很難。 – WindChaser