[SOS] Bug supposé a l'initialisation de la GDT.
Christophe Lucas
clucas at altern.org
Jeu 28 Juil 19:13:07 CEST 2005
romain a écrit :
> Bonjour,
> Je suis tous neuf sur cette news amors bonjours a tous !
> je m'appelle romain je suis en region parisienne, 26 piges pationné
> d'info et d'electronique</mylife>
>
> Je sais pas si j'ai trouvé des buggs sur SOS ou si je ne pige pas tous
> , voila je m'explique!
>
>
> 1/ Dans la macro BUILD_GDTE on n'affecte pas les bits de la base 31 à
> 34 (sos_ui8_t base_paged_addr_31_24;)
> #define BUILD_GDTE(descr_privilege_level,is_code) ...
> (Coup de bol que la base soit à 0 ;), ce doit etre un oublie )
>
>
> 2/la strucutre x86_gdt_register bizarement dimensionnée !
>
> struct x86_gdt_register {
> sos_ui16_t limit;
> sos_ui32_t base_addr;
> } __attribute__((packed, aligned(8)));
>
> 16 + 32 = 48 soit 6 octets a passer au processeur (spec intel ) !
Justement la spec Intel donne les réponses à tes questions. Il est dit
que l'adresse de base de la GDT doit être aligné sur 8 octect d'où le
__attribute__ ((aligned(8)));
De plus, oui oui le registre gdtr est bien de 48bits. C'est un "pseudo
registre".
> Ici elle est aligné sur 8, si je ne m'abuse, cela indique que gcc
> place cette structure sur 8 octets (modulo 8 octets pour
> l'optimisation...).
> du coup il y'a 2 octets en rab ! il vont ou ? enfin comment le
> processeur les comprend quand on fait
> lgdtl (gdtr) ????
>
Cf volume 3, chapitre 3, paragraphe 5.
> à premiere vu je dirais que le pad est mis a la fin (si non sos ne
> marcherais pas correctement). en fait j'en sais rien, je voudrais etre
> eclairé sur ce point !
> [LIM H] [LIM L] [BASE H] [BASE H] [BASE L] [BASE L] [PAD?] [PAD ?]
>
> Si c'est le cas, pourquoi aligné sur 8 et pas sur 6 ce bout de
> structure ?? je ne vois pas !!
>
Parce que simplement, c'est ce qui est dit dans la spécification Intel
(The base address of the GDT should be aligned on an eight-byte boundary...)
> Merci de m'aiclairer
>
> Bon courage à vous, Merci pour ces fabuleuses sources tres instructives.
>
> Romain
Plus d'informations sur la liste de diffusion Sos