PDA

View Full Version : [C] Crt+OS custom (per embedded x86) e differenze tra gcc e vc


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)

zakmckraken
06-01-2011, 21:48
Dopo ulteriori ricerche, sono finito per caso su una pagina di OSDev (http://wiki.osdev.org/C%2B%2B_Bare_Bones dove viene descritta la chiamata dei costruttori statici...che mi sembra sia quanto descritto nel documento da M$DN di cui sopra.