zakmckraken
06-01-2011, 16:25
Ciao a tutti!
Sto realizzando seguendo vari tutorial un piccolo sistema operativo (solo per farmi del male.. lo chiamerei quasi sodomOS :P ) con bootloader, kernel, supporto a tastiera e seriali.
Tutto bene sinche sono arrivato a dover implementare il CRT. Si potrei utilizzare le cose standard, ma non imparo nulla... :P
Allora, nell'esempio di CRT che ho recuperato (per VS) ci sono queste simpatiche pragma (ps odio i #pragma...)
// __xc_a points to beginning of initializer table
#pragma data_seg(".CRT$XCA")
_PVFV __xc_a[] = { 0 };
// __xc_z points to end of initializer table
#pragma data_seg(".CRT$XCZ")
_PVFV __xc_z[] = { 0 };
//Select the default data segment again (.data) for the rest of the unit
#pragma data_seg()
//Now, move the CRT data into .data section so we can read/write to it
#pragma comment(linker, "/merge:.CRT=.data")
Per quanto mi pare di capire tutto questo dovrebbe creare essere equivalente a definire delle zone extra all'interno del file (come le .data,.bss etc in asm) ed infine ...boh...
Peraltro sembra che i data segments indicati siano specifici per i compilatori M$ (http://blogs.msdn.com/b/vcblog/archive/2006/10/20/crt-initialization.aspx per l'inizializzazione, ovviamente del CRT.
Obiettivo e tradurre tutto questo su gcc (mingw per la precisione)...
So che sembro masochista, pero preferisco farmi male cosi piuttosto che in altri modi :P
Grazie per il supporto (anche solo morale...talvolta ispira anche quello!!)
PS sono 2 giorni che rotolo tra google, forum, msdn, libri etc senza grossi successi :( a parte i sorgenti di reactos e qualche altro...)
Zak
(il minimo numero di apostrofi/accenti e stato usato in questo post)
Sto realizzando seguendo vari tutorial un piccolo sistema operativo (solo per farmi del male.. lo chiamerei quasi sodomOS :P ) con bootloader, kernel, supporto a tastiera e seriali.
Tutto bene sinche sono arrivato a dover implementare il CRT. Si potrei utilizzare le cose standard, ma non imparo nulla... :P
Allora, nell'esempio di CRT che ho recuperato (per VS) ci sono queste simpatiche pragma (ps odio i #pragma...)
// __xc_a points to beginning of initializer table
#pragma data_seg(".CRT$XCA")
_PVFV __xc_a[] = { 0 };
// __xc_z points to end of initializer table
#pragma data_seg(".CRT$XCZ")
_PVFV __xc_z[] = { 0 };
//Select the default data segment again (.data) for the rest of the unit
#pragma data_seg()
//Now, move the CRT data into .data section so we can read/write to it
#pragma comment(linker, "/merge:.CRT=.data")
Per quanto mi pare di capire tutto questo dovrebbe creare essere equivalente a definire delle zone extra all'interno del file (come le .data,.bss etc in asm) ed infine ...boh...
Peraltro sembra che i data segments indicati siano specifici per i compilatori M$ (http://blogs.msdn.com/b/vcblog/archive/2006/10/20/crt-initialization.aspx per l'inizializzazione, ovviamente del CRT.
Obiettivo e tradurre tutto questo su gcc (mingw per la precisione)...
So che sembro masochista, pero preferisco farmi male cosi piuttosto che in altri modi :P
Grazie per il supporto (anche solo morale...talvolta ispira anche quello!!)
PS sono 2 giorni che rotolo tra google, forum, msdn, libri etc senza grossi successi :( a parte i sorgenti di reactos e qualche altro...)
Zak
(il minimo numero di apostrofi/accenti e stato usato in questo post)