मैंने पढ़ा है कि यह उन कार्यों के लिए उपयोग किया जाता है जो लिनक्स में सिस्टम कॉल लागू करते हैं। उदाहरण के लिए:'asmlinkage' संशोधक के लिए क्या मतलब है?
asmlinkage long sys_getjiffies(void)
{
return (long)get_jiffies_64();
}
और यह संकलक बताता है कि ढेर पर सभी समारोह तर्क पारित करने के लिए। लेकिन क्या यह पहले से ही मामला नहीं है? फ़ंक्शन तर्क आमतौर पर केवल स्टैक पर धक्का देकर पारित होते हैं। या यह है कि हम रजिस्टरों के माध्यम से कार्य तर्कों को पारित करने का जिक्र कर रहे हैं?
ध्यान दें कि लिनक्स कर्नेल कार्यों के पहले पैरामीटर डिफ़ॉल्ट रूप से 86 पर रजिस्टरों में पारित कर रहे हैं। X86-32 पर पहले 3 पैरामीटर '% eax','% edx' और '% ecx' में दिए गए हैं, बाकी क्रम में, बाकी स्टैक पर जाते हैं। परिवर्तनीय तर्क सूचियों वाले फ़ंक्शन एक अपवाद हैं, उन्हें x86-32 पर स्टैक पर उनके सभी तर्क मिलते हैं। X86-64 पर, पहले 6 पैरामीटर '% आरडीआई','% आरएसआई', '% rdx','% आरसीएक्स', '% आर 8','% आर 9' (यहां तक कि varargs के साथ कार्यों के लिए) में पारित किए जाते हैं, उस क्रम में, बाकी - ढेर पर। हालांकि सिस्टम कॉल विभिन्न सम्मेलनों का पालन करता है। – Eugene
(जारी) जैसा कि @ dirkgently उल्लेख किया गया है, 'asmlinkage' पैरामीटर गुजरने पर डिफ़ॉल्ट डिफेंशन को ओवरराइड करने का एक तरीका है। [एग्नेर फोग के मैनुअल] (http://www.agner.org/optimize/calling_conventions.pdf) में विभिन्न कॉलिंग सम्मेलनों का एक विस्तृत विवरण भी देखें। – Eugene
क्वारा में एक अच्छी व्याख्या है: [https://www.quora.com/Linux- कर्नेल/What-does-asmlinkage-mean-in-the-definition-of-system-calls ](https://www .quora.com/लिनक्स कर्नेल/क्या-क्या-asmlinkage-मतलब-इन-परिभाषा के- सिस्टम-कॉल)। –