Ich schreibe eine sehr leichte libc - Ersatzbibliothek, damit ich die Kernel - Anwendungsschnittstelle besser verstehen kann. Die erste Aufgabe besteht eindeutig darin, einige Systemaufruf-Wrapper einzurichten. Ich habe erfolgreich 1 bis 3 Argument Wrapper arbeiten, aber ich habe mit einem 4-Argument-Variante zu kämpfen. Hier ist mein Ausgangspunkt:Einschränkung von r10 register in 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;
}
Der Compiler gibt mir die folgende Fehlermeldung:
error: matching constraint references invalid operand number
Meine _syscall3 Funktion funktioniert gut, aber doesnt Verwendung r10 oder eine clobber Liste haben.
Irgendwelche Gedanken?
Toller Tipp. Dies ist ein fantastisches Feature, das GCC Inline Assembler wirklich einzigartig macht. Hier ist die relevante Dokumentation: https://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html – linguamachina