Tôi đang đi viết một thư viện thay thế trọng lượng nhẹ libc để tôi có thể hiểu rõ hơn về giao diện ứng dụng hạt nhân. Nhiệm vụ đầu tiên rõ ràng là nhận được một số trình bao bọc gọi hệ thống tại chỗ. Tôi đã thành công có 1 đến 3 đối số wrappers làm việc nhưng tôi đang đấu tranh với một đối số 4 varient. Dưới đây là điểm khởi đầu của tôi:Hạn chế đăng ký r10 trong gcc inline x86_64 assembly
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;
}
Trình biên dịch mang lại cho tôi những lỗi sau:
error: matching constraint references invalid operand number
chức năng _syscall3 tôi hoạt động tốt nhưng doesnt r10 sử dụng hoặc có một danh sách clobber.
Mọi suy nghĩ?
Mẹo hay. Đây là một tính năng tuyệt vời mà thực sự giúp thiết lập lắp ráp nội tuyến GCC ngoài. Đây là tài liệu liên quan: https://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html – linguamachina