[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