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^^