Google大神其實可以找到解答,
所謂system call是透過OS的system call handler
去執行對應的system call routine來達成。
system call handler ==> assembly code
system call routine ==> C code
而system call handler在call他的routine時,
會把general purpose register的值push到stack,
這時候routine就要從stack來pop出他要的參數。
當assembly code呼叫C function,並以stack傳參數時,
在C function的prototype前面就要加上"asmlinkage"。
※ 引述《RouterHsieh (醉臥美人膝,醒掌天下權)》之銘言:
: 就小弟所知,用asmlinkage當修飾字的話,
: 該函數的參數在傳遞時會從stack讀取而非從register。
: 一般而言,似乎只要是system call都會加上這個修飾字。
: 那我想問的是,之所以會有這樣的需求,
: 其原因是否跟使用volatile是類似的呢?
: 這問題想了一天了而且也有孤狗過,不過沒找到一個確切的理由或者說法就是了囧
: 還請板上的高手們多多指教(拜)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.225.172