D — Änderungen 4497 → 4498

Zeile 16: Zeile 16:
  
 
Für die Konstruktoren:
 
Für die Konstruktoren:
−
<pre>
+
<asm>
 
static_ctors_loop:
 
static_ctors_loop:
 
   mov ebx, start_ctors
 
   mov ebx, start_ctors
Zeile 26: Zeile 26:
 
   cmp ebx, end_ctors
 
   cmp ebx, end_ctors
 
   jb .body
 
   jb .body
−
</pre>
+
</asm>
  
 
start_ctors ist dabei im Linker-Script angegeben.
 
start_ctors ist dabei im Linker-Script angegeben.
  
 
Für die Destruktoren:
 
Für die Destruktoren:
−
<pre>
+
<asm>
 
static_dtors_loop:
 
static_dtors_loop:
 
   mov ebx, start_dtors
 
   mov ebx, start_dtors
Zeile 41: Zeile 41:
 
   cmp ebx, end_dtors
 
   cmp ebx, end_dtors
 
   jb .body
 
   jb .body
−
</pre>
+
</asm>
  
 
end_dtors ist hier auch im Linker-Script angegeben.
 
end_dtors ist hier auch im Linker-Script angegeben.
Zeile 92: Zeile 92:
 
Um diesen Fehler vorzubeugen, sollte also zumindest eine Stub-Funktion erstellt werden:
 
Um diesen Fehler vorzubeugen, sollte also zumindest eine Stub-Funktion erstellt werden:
  
−
<pre>
+
<c>
 
extern(C) void _d_array_bounds(char filename, uint line) {}
 
extern(C) void _d_array_bounds(char filename, uint line) {}
−
</pre>
+
</c>
  
 
Zu Debugging-Zwecken kann hier natürlich auch eine echt Überprüfung gemacht werden.
 
Zu Debugging-Zwecken kann hier natürlich auch eine echt Überprüfung gemacht werden.
Zeile 102: Zeile 102:
 
Nichts weltbewegendes, wir geben ein einfaches 'D' auf dem Bildschirm aus:
 
Nichts weltbewegendes, wir geben ein einfaches 'D' auf dem Bildschirm aus:
  
−
<pre>
+
<c>
 
module kernel.main;
 
module kernel.main;
 
   
 
   
Zeile 124: Zeile 124:
 
     }
 
     }
 
}
 
}
−
</pre>
+
</c>
  
 
Man beachte das 'module kernel.main', wobei kernel der Name des Verzeichnisses ist, wo sich die Datei befindet.
 
Man beachte das 'module kernel.main', wobei kernel der Name des Verzeichnisses ist, wo sich die Datei befindet.
Zeile 132: Zeile 132:
 
Und hier der Start-Code mit Multiboot-Signatur und dem Konstruktor/Destruktor-Code von oben:
 
Und hier der Start-Code mit Multiboot-Signatur und dem Konstruktor/Destruktor-Code von oben:
  
−
<pre>
+
<asm>
 
global start
 
global start
 
extern main         
 
extern main         
Zeile 191: Zeile 191:
 
stack:
 
stack:
 
       resb      STACKSIZE
 
       resb      STACKSIZE
−
</pre>
+
</asm>
  
 
=== Erstellung ===
 
=== Erstellung ===
 
Erstellt wird das Ganze per
 
Erstellt wird das Ganze per
−
 
+
$ nasm -f elf -o ./obj/start.o ./src/kernel/start.asm
−
nasm -f elf -o ./obj/start.o ./src/kernel/start.asm
 
−
 
 
 
und
 
und
−
 
+
$ gdc -nostdlib -nodefaultlibs -g -c -o ./obj/kernel.main.o ./src/kernel/kernel.main.d
−
gdc -nostdlib -nodefaultlibs -g -c -o ./obj/kernel.main.o ./src/kernel/kernel.main.d
 
−
 
 
 
gelinkt wird's so:
 
gelinkt wird's so:
−
 
+
$ ld -T link.d -o dkernel ./obj/start.o ./obj/kernel.main.o
−
ld -T link.d -o dkernel ./obj/start.o ./obj/kernel.main.o