Я пытаюсь сделать свой собственный системный вызов для 64-битной Linux-системы. но он продолжает говорить мне, что у меня плохой тип. Компилятор пытается косвенно обращаться к buf? У меня такое чувство, что я испортил свои входные ограничения. Мне просто нужен адрес buf по адресу %2
.inline asm type несоответствие
ошибка:
test.c: Assembler messages:
test.c:28: Error: operand type mismatch for `movq'
static int myread(int fd, char *buf, int size) {
register int bytes;
asm(
"movq $0, %%rax\n"
"movq %1, %%rdi\n"
"movq %2, %%rsi\n"
"movq %3, %%rdx\n"
"syscall\n"
"movq %%rax, %0"
: "=r" (bytes)
: "m" (fd), "m" (buf), "m" (size)
: "%rax", "%rdi", "%rsi", "%rdx"
);
return bytes;
}
Вы получите эти ошибки, если 'int' является 32-разрядным целым числом. – Mysticial