Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - bo-os

Seiten: [1]
1
Lowlevel-Coding / Re: Mein gcc spinnt...
« am: 05. July 2009, 19:29 »
da musst du dir bei mir keine Sorgen machen... Backups werden täglich angelegt!
Aber jetzt wars ja nicht viel zu verändern... musste ja nur an einer Stelle push ebx und pop ebx dazufügen ;-)
2
So, ich hab jetzt den Fehler gefunden, und wie es zu erwarten war, war es natürlich mein Fehler, aber was das für ein Fehler war... Grund für diese "Anomalien" war, dass ich in der Funktion (die ich selber in Assembler) geschrieben habe, um freie Pages zu finden, nicht den Wert von ebx gesichert habe, weil ich als dich die geschrieben hab noch nichts von flüchtigen und nicht-flüchtigen Registern gehört hatte.
Dadurch, dass der Compiler den Code immer anders optimiert hat, war das dann zwischendurch egal und das ganze hat geklappt, und manchmal eben nicht.

hach macht das Spass über 10 Stunden nach einem so dummen Fehler zu suchen...

Aber danke, die Tips haben mir geholfen das Problem zu finden.
3
Lowlevel-Coding / Re: Mein gcc spinnt...
« am: 05. July 2009, 14:00 »
das äußert sich, dass wenn die Methode mit physical=0x26000 aufgerufen wird, der entsprechende Eintrag in der PageTable nicht 0x26007, sondern 0x00007 ist, als würde
pageTable[pageNumber] = (u32)physical & 0xFFFFF000;gar nicht benutzt.

Ich hatte schonmal ein ähnliches Problem in dem Zusammenhang, nämlich in der Funktion, die die ersten 4MB auf sich selbst mappt.
Die Funktion
unsigned int count = 0;
while(count < 1024) {
   map(kernelPageDirectory, count * 0x1000, count * 0x1000, 7);
   count++;
}
hat nicht funktioniert, weil irgendwie die Veriable count nach dem Funktionsaufruf von map verändert war, aber wenn ich das geändert habe auf:
void* addr;
static unsigned int count = 0;
while(count < 1024) {
   addr = count * 0x1000;
   map(kernelPageDirectory, addr, addr, 7);
   count++
}
auf einmal schon.

Übrigens kompiliere ich mit:
gcc -ffreestanding -c -Os -o vmm.obj vmm.cbei einigen Optionen weiß ich nicht genau, was die machen - das habe ich aus einem Tutorial übernommen - vllt liegt es irgendwie daran!
4
Lowlevel-Coding / Mein gcc spinnt...
« am: 04. July 2009, 17:48 »
Moin zusammen,
ich hab folgendes Problem, von dem ich glaube, dass mein Compiler (DJGPP/gcc Version 4.32) dran schuld ist.
Die Methode
void map(unsigned int* pageDirectory, void* virtual, void* physical, unsigned int flags);mappt die virtuelle Addresse auf die physische u.s.w., das klappt eigendlich ohne Probleme aber nur mit einem Trick:
Die letzten Zeilen sind:
pageTable[pageNumber] = (u32)physical & 0xFFFFF000;
if(virtual == KERNEL_HEAP) {
debug(pageTable, (p)pageNumber, physical, (p)((u32)physical & 0xFFFFF000));
}
pageTable[pageNumber] = pageTable[pageNumber] | flags;
Diese if-Abfrage ist zwar seltsam, vor allem, da sie nie "auslöst" (ich kann zu 100% sagen, dass die Funktion debug nicht aufgerufen wird, da dann der Prozessor angehalten wird), aber wenn ich die if-Abfrage weglasse, dann funktioniert die Funktion nicht mehr!

Hoffe mein Problem ist verständlich ;-)
Seiten: [1]

Einloggen