|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Un kernel col C++
Purtroppo mi trovo a dover riscriver daccapo il sistema operativo
![]() ![]() ![]() ![]() ![]() ![]() C'è solo un problema: quando provo a compilare, GCC mi dice: Codice:
bin/main.o: In function `__static_initialization_and_destruction_0(int, int)': bin/main.o(.text+0xa9): undefined reference to `__dso_handle' bin/main.o(.text+0xb5): undefined reference to `__cxa_atexit
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
spiacente, la mia palla di vetro si sintonizza sul canale delle televendite, non riesco ad aiutarti...
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
se è in c++ devi usare g++, non gcc
ma hai fatto un sistema operativo???? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
RI-EDIT
ho visto il post del kernel e mi sono ricordato!! allora, hai bisogno proprio di studiarti le varie opzioni di g++.
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo Ultima modifica di maxithron : 13-06-2004 alle 16:20. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Scusatemi, era solo un problema di GCC (comunque usavo "gcc -x c++": non sono così tanto stupido...)
Un sistema operativo? Ci ho già provato, ma in C. Ora mi chiede "__builtin_delete": devo creare una routine che elimini una classe creata all'interno del kernel? (tipo usando "free"? un sostituto del comando "delete" del C++?)
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Quote:
![]() ![]() Quote:
potresti spiegarmi meglio questo punto?
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
||
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
Non so se ho ben compreso il problema della __builtin_delete, ma ti riferisci ad un problema di distruttore?
__________________
"Utilizzando atomi pentavalenti drogheremo il silicio di tipo n; Utilizzando atomi trivalenti drogheremo il silicio di tipo p; Utilizzando della cannabis ci drogheremo noi e vedremo il silicio fare cose impossibili" - DSDT-HowTo |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non è semplice usare il c++ per fare un kernel. Il motivo principale è che il c++ tenta, dove può, di creare un layer di astrazione per la gestione della memoria (soprattutto per le classi).
Utilizzare il c++ per il kernel richiede una certa conoscenza di come il tuo compilatore c++ gestisca la memoria, in modo da creare l'ambiente di emulazione necessario. Nota che da compilatore a compilatore questo può variare. La "__builtin_delete" è solo un sintomo di quello che sto dicendo -- probabilmente, risolto questo problema, ne dovrai affrontare altri simili.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
(rispondo ad entrambi) Boh, non saprei, sono un po' "artigianale" nelle cose, io...
Comunque, ho creato una void __builtin_delete(void*) che fa qualcosa di strano (ma non cancella un bel niente... tanto per consumare bytes...). Ora ho uno strano problema: quello che programmo in Assembler in oggetti separati da alcuni archivi creati con AR non viene trovato dal GNU LD al momento del linking. Anche se con `objdump -d file` le funzioni ci sono. Non so come spiegarmi meglio, magari vi mando il sorgente e date un'occhiata a questo problemino.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 15-06-2004 alle 22:30. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]() ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
voglio vedere il cod
![]() ![]() ![]()
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
ld -r -o archivio.o file1.o file2.o ... Per qualche motivo, ld non riesce a soddisfare le dipendenze incrociate negli archivi .a. Puoi usare i file archivio .o così creati al posto dei file .a, specificandoli direttamente come oggetti normali; ad esempio: gcc -o programma main.o librerie/archivio.o L'uso con ld è analogo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Si, infatti LD mi dà un po' di problemi, ma stranamente mancava solo questo:
Codice:
extern "C" ![]() ![]() ![]() Ora va meglio, ma purtroppo la mia `inb` non funziona un granchè. Presto posterò anche l'intero codice, per la gioia di grandi e piccini ![]() ![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Volevo solo avvisarvi che presto inserirò il codice del mio kernel.
Vi avviso: è un pre-pre-pre-pre-pre-pre-alpha, quindi non aspettatevi un granchè... Cmq, ho un problemino col bootloader, poi vi spiegherò meglio.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#17 | |
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Per gli oggetti allocati nello heap invece una invocazione new dovrebbe essere analogo ad una malloc seguita dalla chiamata al costruttore e similmente una delete corrisponderebbe ad un operator ~ + free. Visto che operatore new e delete si possono ridefinire (tra l'altro e' l'unico caso in cui vedo utile ridefinire i due operatori globablmente) non dovrebbero esserci enormi differenze... o c'e' forse dell'altro ? ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Le eccezioni?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
L'unica cosa che capisco io di tutto questo è che scriversi una delete manualmente è una bella rottura... (non ho un minimo di conoscenze tecinche, sto ancora al liceo)
Cmq, per il bootloader, il problema è chiamare il kernel ad un mb di memoria: Codice:
mov $0x10000,%eax call *(%eax) P.S.: che razza di istruzione è "bt" in assembly?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Hm.. ho avuto una bella idea (bella per me, non so per voi): fare un sistema operativo tutti insieme! In questo forum, eccetto me
![]() ??
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:40.