[SOS] Bug supposé a l'initialisation de la GDT.

stephane duverger duvergers at chello.fr
Ven 29 Juil 11:19:06 CEST 2005


Bonjour,

Petite remarque concernant la spec intel :

Il est dit que c'est l'adresse de base de la GDT qui doit etre alignée
sur 8 octets. Donc la valeur contenue dans le champ "base_addr" de votre
structure.

Cependant les attributs gcc s'appliquent sur les instances de cette
structure "x86_gdt_register". C'est donc l'adresse d'un objet de ce
type, en l'occurence la variable initialisant le registre gdtr, qui est
alignée sur 8 octets et non pas la valeur contenue dans un de ses
champs.

Est-ce que je raconte n'importe quoi ?

++stf

On Thu, 2005-07-28 at 19:13 +0200, Christophe Lucas wrote:
> 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
> 
> 
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos



Plus d'informations sur la liste de diffusion Sos