Dazu muss ich allerdings eine andere Funktion in der Datei auskommentieren (?!?).
Der Fehler liegt anscheinend immer im PageFaultHandler (es scheint nicht möglich, darauf zuzugreifen..)
Folgendes funktioniert:
Code: Alles auswählen
unsigned short count;
void NewDir(unsigned int* dest)
{
//###Inhalt ist nicht wichtig.
}
/*unsigned int *NewPageDir()
{
// (...) ###ZUR ÜBERSICHTLICHKEIT => gekürzt
return NewDir;//Gibt physikalische Adresse zurück!
}*/
// (...) ###ANDERE FUNKTIONEN
void PageFault_handler(struct regs *r)
{
// ###etc....
Code: Alles auswählen
unsigned short count;
void NewDir(unsigned int* dest)
{
//###Inhalt ist nicht wichtig.
}
////////////////#############FUNKTION ist nun nicht mehr auskommentiert
unsigned int *NewPageDir()
{
// (...) ###ZUR ÜBERSICHTLICHKEIT => gekürzt
return NewDir;//Gibt physikalische Adresse zurück!
}
// (...) ###ANDERE FUNKTIONEN
void PageFault_handler(struct regs *r)
{
// ###etc....
Sobal eine Funktion mehr in die Datei kommt, funktioniert es nicht mehr (keine Warnung, nichts, aber die CPU bekommt einen Triple Fault und der Rechner startet neu).
Jetzt habe ich mir die Ausgabe des Linkers mal angesehen...
So sieht es aus, wenn keine Funktion mit drinnen ist, alles also einwandfrei funktioniert:
Code: Alles auswählen
(...)
.text 0x000000000010279c 0xac mboot.o
0x00000000001027c2 UseMultiBootInfo
0x000000000010279c ExtractInitRamDisk
.text 0x0000000000102848 0x3d8 paging.o
0x0000000000102968 PGoff_SetPageEntry
0x000000000010288f GetPTEntry
0x00000000001029a7 PGoff_GetPageEntry
0x00000000001029cb IdentityMap_Dir
0x0000000000102848 SetPTEntry
0x0000000000102aae Init_Paging
0x00000000001028bb NewDir
0x000000000010293f Switch_Page_Directory
0x0000000000102b3b PageFault_handler
.text 0x0000000000102c20 0x51d phys-mm.o
(...)
Code: Alles auswählen
(...)
.text 0x000000000010279c 0xac mboot.o
0x00000000001027c2 UseMultiBootInfo
0x000000000010279c ExtractInitRamDisk
.text 0x0000000000102848 0x44a paging.o
0x00000000001029da PGoff_SetPageEntry
0x000000000010288f GetPTEntry
0x0000000000102a19 PGoff_GetPageEntry
0x0000000000102a3d IdentityMap_Dir
0x0000000000102848 SetPTEntry
0x0000000000102b20 Init_Paging
0x000000000010293f NewPageDir (ZUSÄTZLICHE FUNKTION)
0x00000000001028bb NewDir
0x00000000001029b1 Switch_Page_Directory
0x0000000000102bad PageFault_handler
*fill* 0x0000000000102c92 0x2 00 (SONSTIGE ÄNDERUNG)
.text 0x0000000000102c94 0x51d phys-mm.o
(...)
Es wird ein Bereich zusätzlich mit 0 gefüllt:
Code: Alles auswählen
*fill* 0x0000000000102c92 0x2 00 (SONSTIGE ÄNDERUNG)
---------
Ein Makro...muss ich mal nachgucken, aber das würde doch eigntl zumindest zu einem Linkerfehler führen, oder?fat-lobyte hat geschrieben:Vielleicht ist einer der Funktionen die zwischen einer Zeile über dem Fehler und dem Anfang des auskommentierten Codes ein Makro, dass entweder Fehler enthält oder das Makro wurde falsch verwendet.
Außerdem könnte es sein, dass eine dieser Funktionen oder eine Variable nicht deklariert ist, oder vielleicht fehlt irgendwo eine Klammer oder ein Semikolon.
Das wird dir nicht viel Weiterhelfen, aber das sind die möglichkeiten, wie so etwas passieren kann.
Ein Semikolon oder eine Klammer ist es nicht.
Das würde gcc ja bemerken. Ich habe höchste Warnstufe eingestellt, ich bekomme also jede noch so kleine Warnung.
Es hilft schonmal in dem Sinne, dass du dir Gedanken dazu gemacht hast.
Ich fühle mich nun nicht mehr so alleine
