में आर 10 रजिस्टर को रोकना मुझे बहुत हल्का वजन libc प्रतिस्थापन लाइब्रेरी लिखने पर जाना है ताकि मैं कर्नेल - एप्लिकेशन इंटरफ़ेस को बेहतर ढंग से समझ सकूं। पहला कार्य स्पष्ट रूप से कुछ सिस्टम कॉल रैपर को जगह में प्राप्त कर रहा है। मैंने सफलतापूर्वक 1 से 3 तर्क रैपर काम कर लिए हैं लेकिन मैं 4 तर्क भिन्नता के साथ संघर्ष कर रहा हूं। यहाँ मेरी प्रारंभिक बिंदु है:जीसीसी इनलाइन x86_64 असेंबली
long _syscall4(long type, long a1, long a2, long a3, long a4)
{
long ret;
asm
(
"syscall"
: "=a"(ret)
: "a"(type), "D"(a1), "S"(a2), "d"(a3), "r10"(a4)
: "c", "r11"
);
return ret;
}
संकलक मुझे निम्न त्रुटि देता है:
error: matching constraint references invalid operand number
मेरे _syscall3 समारोह काम करता है ठीक लेकिन does not उपयोग R10 या पीटना सूची है।
किसी भी विचार?
ग्रेट टिप। यह एक शानदार विशेषता है जो वास्तव में जीसीसी इनलाइन असेंबलर को अलग करने में मदद करती है। यहां प्रासंगिक दस्तावेज है: https://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html – linguamachina