[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--