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

David Decotigny David.Decotigny at free.fr
Ven 29 Juil 13:43:53 CEST 2005


Bonjour,

stephane duverger wrote:
> 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.

Oui. La definition de "un objet machin est aligne sur X octets" est tout 
simplement "le premier champ de machin est aligne sur X octets".

Dans notre cas, comme ce champ base_addr est le premier de la structure 
(de memoire, j'ai pas le code sous les yeux), c'est donc la structure 
dans son ensemble qui sera alignee sur 8 octets. Et reciproquement.

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

Je ne comprends pas cette remarque.

Si je dis :
<<
   Je declare une struct toto avec un attribut "align(8)";
   puis:
   J'instancie un objet obj de type "struct toto";
 >>
Alors obj sera aligne sur 8 octets. C'est par definition equivalent a 
dire que le premier champ de obj sera aligne sur 8 octets.

Bonne journee,


Plus d'informations sur la liste de diffusion Sos