Also ich habe das jetzt mal versucht zu kompilieren, und es tritt auch nach mehrmaligen Korrekturversuchen, diese Reihe von Fehlern auf, die ich versucht habe teilweise zu analysieren.
Wenn ich diese Zeile Beispielsweise kompilieren möchte (Zeile 171):
vmm_map_page( (void*) ((uintptr_t) CURRENT_CONTEXT) , NEW_CONTEXT , (uintptr_t) context, PTE_PRESENT | PTE_WRITE );
wobei CURRENT_CONTEXT so definiert ist: #define CURRENT_CONTEXT (uintptr_t) ((1023 * 1024) + 1022)* PAGE_SIZE) // 0xFFFFE000
und NEW_CONTEXT so: #define NEW_CONTEXT (uintptr_t) ((1023 * 1024) + 1021)* PAGE_SIZE) // 0xFFFFD000
und context so: struct vmm_context* context = pmm_alloc();
erhalte ich folgenen Fehler:
vmm.c: In Funktion »vmm_create_context«:
vmm.c:171:5: Fehler: Zu wenige Argumente für Funktion »vmm_map_page«
vmm.c:50:5: Anmerkung: hier deklariert
vmm.c:171:57: Warnung: linker Operand des Komma-Ausdrucks hat keinen Effekt [-Wunused-value]
vmm.c:171:5: Warnung: Anweisung ohne Effekt [-Wunused-value]
vmm.c:171:59: Fehler: expected »;« before »)« token
vmm.c:171:59: Fehler: expected statement before »)« token
vmm.c:171:71: Fehler: expected expression before »,« token
vmm.c:171:71: Warnung: linker Operand des Komma-Ausdrucks hat keinen Effekt [-Wunused-value]
vmm.c:171:92: Warnung: linker Operand des Komma-Ausdrucks hat keinen Effekt [-Wunused-value]
vmm.c:171:71: Warnung: Anweisung ohne Effekt [-Wunused-value]
vmm.c:171:118: Fehler: expected statement before »)« token
Da ich mehrere solcher Zeilen habe, bekomme ich die Fehlerkette mehrmals.
Hier ist die Deklaration der Funktuion in Zeile 50:
int vmm_map_page(struct vmm_context* context, uintptr_t virt, uintptr_t phys, int flags) {
Also das mit den zuwenig Argumenten resultiert daraus, dass der Compiler innherhalb des Funktionsaufruf eine Parameterübergabe, als Kommaausdruck interpretiert, wenn ich das richtig verstehe, ich weiß nur nicht warum...