Tag
Xin hat geschrieben:Wandert der EIP nicht gleich weiter, wenn er etwas gelesen hat? In dem Fall knallt er vor JMP.
104005: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%ebp)
Scheinbar ist ebp nicht korrekt gesetzt?
Der gegebene EIP ist abhängig vom Interrupt, der Auftritt. Bei einem PageFault zeigt er auf die Anweisung, die den Fehler hervorgerufen hat:
Intel Dev Man hat geschrieben:To allow the restarting of program or task following the handling of an exception or
an interrupt, all exceptions (except aborts) are guaranteed to report exceptions on
an instruction boundary. All interrupts are guaranteed to be taken on an instruction
boundary.
For fault-class exceptions, the return instruction pointer (saved when the processor
generates an exception) points to the faulting instruction.
Mich wundert nur, warum der EIP mitten in eine Anweisung hinein zeigt und nicht auf sie, wie es normalerweise sein sollte....
Xin hat geschrieben:O0 optimiert nicht, wenn ich mich recht entsinne, O schon. Vielleicht geht bei der Optimierung an der Stelle etwas verloren?
Wenn Du die Assemblercodes an der Stelle vergleichst, gibt es da Unterschiede?
Ja, da gibt es gewaltige Unterschiede.
Nur als Anmerkung, zum Verdeutlichen:
Bei O0, wenn also nicht opitmiert wird, kommen Fehler.
Verwende ich nur O, funktioniert alles einwandfrei.
Dann sieht der Assemblercode an der Stelle auch ganz anders aus. Auf jedenfall gibts dann deutlich weniger Assemblercode (insgesamt).
Das ist gerade das, was mich wundert. Das es beim "Nichtoptimieren" kracht.
-----------------Edit:
Hatte einen kleinen Unfall (Ordner auf die Tastatur gedrückt => Enter Taste dauernd an.)
Danach (ich habe eigntl alles wieder zusammengebastelt) ging erstmal nichts mehr.
Bzw es kamen die gleichen Fehler wie zuvor, es wurde aber wirklich nichts verändert.
Habe nun auch im Makefile im Ordner basic-kernel (das makefile für basic-kernel.c) verändert (siehe oben).
Nun geht wieder alles als wär nichts gewesen?
Ich versteh die Welt nicht mehr...