[Kos-dev] C++ pour les drivers ... une mauvaise idee ?
Thomas Petazzoni
kos-dev@enix.org
Mon, 10 Sep 2001 19:49:45 +0200
This is a multi-part message in MIME format.
--------------74EC75EA377CBDBE44D175DD
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
salut,
nous sommes a priori d'accord pour dire que nous preferons utiliser le C
plutot que le C++ pour coder les drivers de KOS pour diverses raisons,
dont :
- maitriser completement l'instanciation des objets, le referencement
des interfaces, et limiter la porte de l'heritage (pas d'heritage
multiple). bref on veut maitriser ce qu'on fait.
- on a envie de se faire chier a faire une moulinette pour le fun
En gros c'est nos deux arguments. J'ai eu recemment des nouvelles
d'anoman, qui est venu avec d2, victor et moi a bordeaux. Il tente aussi
de faire un loader, mais qui permet de linker des fichiers ecrits en
C++. Et bin ce n'est pas une mince affaire. Je vous laisse juger :
Soit le module machin.cc qui fait pas grand chose (heritage, surcharge,
instanciation) :
int printl(char *, ...);
class class_abstraite {
virtual void fonction() = 0;
};
class class_herite : public class_abstraite {
virtual void fonction() { printl("hello"); };
};
int init(void)
{
class_herite *my_class = new class_herite;
return 0;
}
quand on compile par g++ -c -o machin.o machin.cc on se rend bien compte
apres un petit coup d'objdump ou de elf_info qu'utiliser des modules
C++ ce n'est pas une mince affaire :
Vous trouverez ci joint le resultat d'un elf_info sur un tel fichier.
Voila ce n'etait pas passionant comme information, mais ca peut etre
utile.
Merci beaucoup
thomas
--
PETAZZONI Thomas
thomas.petazzoni@meridon.com UIN : 34937744
Projet KOS : http://kos.enix.org
Page Perso : http://www.enix.org/~thomas/
--------------74EC75EA377CBDBE44D175DD
Content-Type: text/plain; charset=us-ascii;
name="elf_info_results"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="elf_info_results"
Elf32 ELF header de machin.o, octets lus: 52
Identificateur ELF reconnu
e_ident[EI_CLASS] 1
e_ident[EI_DATA] 1
e_ident[EI_VERSION] 1
e_type 1
e_machine 3
e_version 1
e_entry 0x0
e_phoff 0x0
e_shoff 0x5e4
e_flags 0
e_ehsize 0x34
e_phentsize 0x0
e_phnum 0
e_shentsize 0x28
e_shnum 29
e_shstrndx 26
Read section 0 -- 0 octets lues
Read section 1 -- 138 octets lues
Read section 2 -- 56 octets lues
Read section 3 -- 0 octets lues
Read section 4 -- 0 octets lues
Read section 5 -- 20 octets lues
Read section 6 -- 39 octets lues
Read section 7 -- 50 octets lues
Read section 8 -- 40 octets lues
Read section 9 -- 57 octets lues
Read section 10 -- 56 octets lues
Read section 11 -- 37 octets lues
Read section 12 -- 16 octets lues
Read section 13 -- 16 octets lues
Read section 14 -- 16 octets lues
Read section 15 -- 18 octets lues
Read section 16 -- 8 octets lues
Read section 17 -- 37 octets lues
Read section 18 -- 16 octets lues
Read section 19 -- 16 octets lues
Read section 20 -- 16 octets lues
Read section 21 -- 32 octets lues
Read section 22 -- 48 octets lues
Read section 23 -- 208 octets lues
Read section 24 -- 56 octets lues
Read section 25 -- 47 octets lues
Read section 26 -- 685 octets lues
Read section 27 -- 608 octets lues
Read section 28 -- 357 octets lues
Section Type Flag Offset Size Info Link Addr
--------------------- ---- ---- ------ ---- ---- ---- ----
0. *UNDEF* 0 0 0x0 0x0 0x0 0x0 0x0
1. .text 1 6 0x40 0x8a 0x0 0x0 0x0
2. .rel.text 9 0 0xe34 0x38 0x1 0x1b 0x0
3. .data 1 3 0xcc 0x0 0x0 0x0 0x0
4. .bss 8 3 0xcc 0x0 0x0 0x0 0x0
5. .note 7 0 0xcc 0x14 0x0 0x0 0x0
6. .rodata 1 2 0xe0 0x27 0x0 0x0 0x0
7. .gnu.linkonce.t.__tf15class_abstraite 1 6 0x110 0x32 0x0 0x0 0x0
8. .rel.gnu.linkonce.t.__tf15class_abstraite 9 0 0xe6c 0x28 0x7 0x1b 0x0
9. .gnu.linkonce.t.__tf12class_herite 1 6 0x150 0x39 0x0 0x0 0x0
10. .rel.gnu.linkonce.t.__tf12class_herite 9 0 0xe94 0x38 0x9 0x1b 0x0
11. .gnu.linkonce.t.__12class_herite 1 6 0x18c 0x25 0x0 0x0 0x0
12. .rel.gnu.linkonce.t.__12class_herite 9 0 0xecc 0x10 0xb 0x1b 0x0
13. .gnu.linkonce.d.__vt_12class_herite 1 3 0x1b4 0x10 0x0 0x0 0x0
14. .rel.gnu.linkonce.d.__vt_12class_herite 9 0 0xedc 0x10 0xd 0x1b 0x0
15. .gnu.linkonce.t.__15class_abstraite 1 6 0x1c4 0x12 0x0 0x0 0x0
16. .rel.gnu.linkonce.t.__15class_abstraite 9 0 0xeec 0x8 0xf 0x1b 0x0
17. .gnu.linkonce.t.fonction__12class_herite 1 6 0x1e0 0x25 0x0 0x0 0x0
18. .rel.gnu.linkonce.t.fonction__12class_herite 9 0 0xef4 0x10 0x11 0x1b 0x0
19. .gnu.linkonce.d.__vt_15class_abstraite 1 3 0x208 0x10 0x0 0x0 0x0
20. .rel.gnu.linkonce.d.__vt_15class_abstraite 9 0 0xf04 0x10 0x13 0x1b 0x0
21. .gcc_except_table 1 3 0x218 0x20 0x0 0x0 0x0
22. .rel.gcc_except_table 9 0 0xf14 0x30 0x15 0x1b 0x0
23. .eh_frame 1 3 0x238 0xd0 0x0 0x0 0x0
24. .rel.eh_frame 9 0 0xf44 0x38 0x17 0x1b 0x0
25. .comment 1 0 0x308 0x2f 0x0 0x0 0x0
26. .shstrtab 3 0 0x337 0x2ad 0x0 0x0 0x0
27. .symtab 2 0 0xa6c 0x260 0x14 0x1c 0x0
28. .strtab 3 0 0xccc 0x165 0x0 0x0 0x0
Symbol Table Section .symtab(27)
38 symboles (x 16 octets), name section .strtab(28)
Name Bind Type Section Value Size
------------------- ---- ---- ------------------ ----- ----
0. (0) 0 0 *UNDEF*(0) 0x0 0x0
1. machin.cc(1) 0 4 *ABS*(65521) 0x0 0x0
2. (0) 0 3 .text(1) 0x0 0x0
3. (0) 0 3 .data(3) 0x0 0x0
4. (0) 0 3 .bss(4) 0x0 0x0
5. gcc2_compiled.(11) 0 0 .text(1) 0x0 0x0
6. (0) 0 3 .rodata(6) 0x0 0x0
7. (0) 0 3 .gnu.linkonce.t.__tf15class_abstraite(7) 0x0 0x0
8. (0) 0 3 .gnu.linkonce.t.__tf12class_herite(9) 0x0 0x0
9. (0) 0 3 .gnu.linkonce.t.__12class_herite(11) 0x0 0x0
10. (0) 0 3 .gnu.linkonce.d.__vt_12class_herite(13) 0x0 0x0
11. (0) 0 3 .gnu.linkonce.t.__15class_abstraite(15) 0x0 0x0
12. (0) 0 3 .gnu.linkonce.t.fonction__12class_herite(17) 0x0 0x0
13. (0) 0 3 .gnu.linkonce.d.__vt_15class_abstraite(19) 0x0 0x0
14. (0) 0 3 .gcc_except_table(21) 0x0 0x0
15.__EXCEPTION_TABLE__(26) 0 0 .gcc_except_table(21) 0x0 0x0
16. (0) 0 3 .eh_frame(23) 0x0 0x0
17.__FRAME_BEGIN__(46) 0 0 .eh_frame(23) 0x0 0x0
18. (0) 0 3 .note(5) 0x0 0x0
19. (0) 0 3 .comment(25) 0x0 0x0
20. __throw(62) 1 0 *UNDEF*(0) 0x0 0x0
21. main(70) 1 2 .text(1) 0x0 0x8a
22. __builtin_new(75) 1 0 *UNDEF*(0) 0x0 0x0
23.__12class_herite(89) 2 2 .gnu.linkonce.t.__12class_herite(11) 0x0 0x25
24.__builtin_delete(106) 1 0 *UNDEF*(0) 0x0 0x0
25. terminate__Fv(123) 1 0 *UNDEF*(0) 0x0 0x0
26.__ti15class_abstraite(137) 1 1 *COMMON*(65522) 0x4 0x8
27.__tf15class_abstraite(159) 2 2 .gnu.linkonce.t.__tf15class_abstraite(7) 0x0 0x32
28. __rtti_user(181) 1 0 *UNDEF*(0) 0x0 0x0
29.__ti12class_herite(193) 1 1 *COMMON*(65522) 0x4 0xc
30.__tf12class_herite(212) 2 2 .gnu.linkonce.t.__tf12class_herite(9) 0x0 0x39
31. __rtti_si(231) 1 0 *UNDEF*(0) 0x0 0x0
32.__15class_abstraite(241) 2 2 .gnu.linkonce.t.__15class_abstraite(15) 0x0 0x12
33.__vt_12class_herite(261) 2 1 .gnu.linkonce.d.__vt_12class_herite(13) 0x0 0x10
34.fonction__12class_herite(281) 2 2 .gnu.linkonce.t.fonction__12class_herite(17) 0x0 0x25
35.__vt_15class_abstraite(306) 2 1 .gnu.linkonce.d.__vt_15class_abstraite(19) 0x0 0x10
36. printl__FPce(329) 1 0 *UNDEF*(0) 0x0 0x0
37. __pure_virtual(342) 1 0 *UNDEF*(0) 0x0 0x0
Relocation Info Section .rel.text(2)
Section .text(1) - Symbol Section .symtab(27)
relocations 7
Offset Symbol Type
-------- ------------------ ----
0. 0x0000000d __builtin_new(22) 2
1. 0x00000021 __12class_herite(23) 2
2. 0x00000034 __throw(20) 2
3. 0x00000043 __builtin_delete(24) 2
4. 0x0000006b __builtin_delete(24) 2
5. 0x00000079 __throw(20) 2
6. 0x00000081 terminate__Fv(25) 2
Relocation Info Section .rel.gnu.linkonce.t.__tf15class_abstraite(8)
Section .gnu.linkonce.t.__tf15class_abstraite(7) - Symbol Section .symtab(27)
relocations 5
Offset Symbol Type
-------- ------------------ ----
0. 0x00000008 __ti15class_abstraite(26) 1
1. 0x00000013 (6) 1
2. 0x00000018 __ti15class_abstraite(26) 1
3. 0x0000001d __rtti_user(28) 2
4. 0x00000025 __ti15class_abstraite(26) 1
Relocation Info Section .rel.gnu.linkonce.t.__tf12class_herite(10)
Section .gnu.linkonce.t.__tf12class_herite(9) - Symbol Section .symtab(27)
relocations 7
Offset Symbol Type
-------- ------------------ ----
0. 0x00000008 __ti12class_herite(29) 1
1. 0x00000010 __tf15class_abstraite(27) 2
2. 0x0000001a __ti15class_abstraite(26) 1
3. 0x0000001f (6) 1
4. 0x00000024 __ti12class_herite(29) 1
5. 0x00000029 __rtti_si(31) 2
6. 0x00000031 __ti12class_herite(29) 1
Relocation Info Section .rel.gnu.linkonce.t.__12class_herite(12)
Section .gnu.linkonce.t.__12class_herite(11) - Symbol Section .symtab(27)
relocations 2
Offset Symbol Type
-------- ------------------ ----
0. 0x0000000f __15class_abstraite(32) 2
1. 0x00000018 __vt_12class_herite(33) 1
Relocation Info Section .rel.gnu.linkonce.d.__vt_12class_herite(14)
Section .gnu.linkonce.d.__vt_12class_herite(13) - Symbol Section .symtab(27)
relocations 2
Offset Symbol Type
-------- ------------------ ----
0. 0x00000004 __tf12class_herite(30) 1
1. 0x00000008 fonction__12class_herite(34) 1
Relocation Info Section .rel.gnu.linkonce.t.__15class_abstraite(16)
Section .gnu.linkonce.t.__15class_abstraite(15) - Symbol Section .symtab(27)
relocations 1
Offset Symbol Type
-------- ------------------ ----
0. 0x00000008 __vt_15class_abstraite(35) 1
Relocation Info Section .rel.gnu.linkonce.t.fonction__12class_herite(18)
Section .gnu.linkonce.t.fonction__12class_herite(17) - Symbol Section .symtab(27)
relocations 2
Offset Symbol Type
-------- ------------------ ----
0. 0x0000000e (6) 1
1. 0x00000013 printl__FPce(36) 2
Relocation Info Section .rel.gnu.linkonce.d.__vt_15class_abstraite(20)
Section .gnu.linkonce.d.__vt_15class_abstraite(19) - Symbol Section .symtab(27)
relocations 2
Offset Symbol Type
-------- ------------------ ----
0. 0x00000004 __tf15class_abstraite(27) 1
1. 0x00000008 __pure_virtual(37) 1
Relocation Info Section .rel.gcc_except_table(22)
Section .gcc_except_table(21) - Symbol Section .symtab(27)
relocations 6
Offset Symbol Type
-------- ------------------ ----
0. 0x00000000 (2) 1
1. 0x00000004 (2) 1
2. 0x00000008 (2) 1
3. 0x0000000c (2) 1
4. 0x00000010 (2) 1
5. 0x00000014 (2) 1
Relocation Info Section .rel.eh_frame(24)
Section .eh_frame(23) - Symbol Section .symtab(27)
relocations 7
Offset Symbol Type
-------- ------------------ ----
0. 0x0000000c (14) 1
1. 0x00000020 (2) 1
2. 0x00000048 (7) 1
3. 0x00000064 (8) 1
4. 0x00000080 (9) 1
5. 0x000000a0 (11) 1
6. 0x000000b8 (12) 1
--------------74EC75EA377CBDBE44D175DD--