我正在寫一個非常輕量級的libc替換庫,以便我能更好地理解內核 - 應用程序接口。第一個任務顯然是獲得一些系統調用包裝。我已經成功地獲得了1到3個參數包裝器,但我正在努力爭取4個參數變量。這裏是我的起點:在gcc內聯x86_64程序集中約束r10寄存器
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功能工作正常,但犯規的使用R10或有撞名單。
有什麼想法?
偉大的提示。這是一個非常棒的功能,它確實有助於將GCC內聯彙編程序分開設置。以下是相關文檔:https://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html – linguamachina