Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: SSJ7Gohan am 14. December 2005, 21:19

Titel: Probleme mit GCC
Beitrag von: SSJ7Gohan am 14. December 2005, 21:19
Hm, ich habe folgenden C-Code:
struct Queue {
struct Queue *next;
void *object;
};

typedef struct Queue Queue;

extern inline Queue *queue_insert(Queue *after) {
Queue *nqueue = (Queue *)kalloc(sizeof(Queue));

if(after == 0) {
nqueue->next = nqueue;
}else{
debug_info("test\n");
nqueue->next = after->next;
after->next = nqueue;
}

return nqueue;
}

kalloc() macht das gleiche wie malloc()
debug_info() macht das gleiche wie die libc funktion printf.
Wenn ich jetzt das debug_info() auskommentiere und keinen anderen funktionsaufruf in die else-case einfüge, dann stürtzt mein Kernel ab.
Das Problem liegt offensichtlich an einer GCC Optimierung. Wenn ich -O3 benutze, funktioniert der Code nicht, bei -O1 oder -O2 funktioniert er. Weiß jemand an welcher Optimierung das liegt? Ich würde schon gerne -O3 benutzen^^
Titel: Probleme mit GCC
Beitrag von: Legend am 14. December 2005, 22:08
Tja, was macht der Assembler code?