diff -ruN /tmp/sos-code-article8/extra/bootsect.S ../sos-code-article8/extra/bootsect.S
--- /tmp/sos-code-article8/extra/bootsect.S	2005-07-01 16:39:47.000000000 +0200
+++ ../sos-code-article8/extra/bootsect.S	2005-08-14 10:53:54.000000000 +0200
@@ -1,6 +1,6 @@
 
 /*
- * @(#) $Id: bootsect.S,v 1.11 2005/04/28 21:55:35 d2 Exp $
+ * @(#) $Id: bootsect.S,v 1.12 2005/08/13 13:47:31 d2 Exp $
  * Description : Bootsecteur en syntaxe AT&T
  * Auteurs : Thomas Petazzoni & Fabrice Gautier & Emmanuel Marty
  *	     Jerome Petazzoni & Bernard Cassagne & coffeeman
@@ -88,7 +88,7 @@
 #define LOAD_ADRESS 0x01000  	       /* 1er chargement du systeme */
 #define LOAD_SEG (LOAD_ADRESS>>4)      /* Segment du 1er chargement du */
 #define MAX_KERN_LEN (COPY_ADRESS-LOAD_ADRESS) /* Taille noyau maxi */
-#define MAX_KERN_SECTS ((MAX_KERN_LEN + 511) / 512) /* Nbre de secteurs maxi */
+#define MAX_KERN_SECTS ((MAX_KERN_LEN + 511) >> 9) /* Nbre de secteurs maxi */
 
 /* IMPORTANT : Cette valeur DOIT etre identique a l'adresse presente
 	       dans sos.lds ! */
@@ -153,7 +153,7 @@
 	int  $0x10
 
 	/* Verifie que le noyau n'est pas trop gros a charger */
-	cmpw $MAX_KERN_SECTS, (load_size)
+	cmpw $(MAX_KERN_SECTS), (load_size)
 	jb sizeOk
 	movw $toobig, %si
 	call message
diff -ruN /tmp/sos-code-article8/extra/dot.mkvars ../sos-code-article8/extra/dot.mkvars
--- /tmp/sos-code-article8/extra/dot.mkvars	2005-07-01 16:39:48.000000000 +0200
+++ ../sos-code-article8/extra/dot.mkvars	2005-08-14 10:53:54.000000000 +0200
@@ -3,10 +3,10 @@
 # and customize the CC/LD/... variables. You still need the mtools
 # installed and running
 
-CC := i586-gnu-gcc
-LD := i586-gnu-ld
-OBJCOPY := i586-gnu-objcopy
-STRIP := i586-gnu-strip
+CC := i586-pc-elf-gcc
+LD := i586-pc-elf-ld
+OBJCOPY := i586-pc-elf-objcopy
+STRIP := i586-pc-elf-strip
 CFLAGS += -g -O
 LIBGCC := $(shell $(CC) -print-libgcc-file-name) # To benefit from FP/64bits artihm.
 
diff -ruN /tmp/sos-code-article8/hwcore/gdt.c ../sos-code-article8/hwcore/gdt.c
--- /tmp/sos-code-article8/hwcore/gdt.c	2005-07-01 16:39:48.000000000 +0200
+++ ../sos-code-article8/hwcore/gdt.c	2005-08-14 10:53:55.000000000 +0200
@@ -48,7 +48,7 @@
   sos_ui8_t  granularity:1;         /* 0=limit in bytes, 1=limit in pages */
   
   sos_ui8_t  base_paged_addr_31_24; /* Base address bits 31..24 */
-} __attribute__ ((packed, aligned (8)));
+} __attribute__ ((packed, aligned(8)));
 
 
 /**
@@ -59,19 +59,26 @@
  * 3.5.1
  */
 struct x86_gdt_register {
-  /* The maximum GDT offset allowed to access an entry in the GDT */
-  sos_ui16_t  limit;
+  /** Intel doc says that the real GDT register (ie the "limit" field)
+      should be odd-word aligned. That's why we add a padding here.
+      Credits to Romain for having signalled this to us. */
+  sos_ui16_t  padding;
 
-  /* This is not exactly a "virtual" address, ie an adddress such as
-     those of instructions and data; this is a "linear" address, ie an
-     address in the paged memory. However, in SOS we configure the
-     segmented memory as a "flat" space: the 0-4GB segment-based (ie
-     "virtual") addresses directly map to the 0-4GB paged memory (ie
-     "linear"), so that the "linear" addresses are numerically equal
-     to the "virtual" addresses: this base_addr will thus be the same
-     as the address of the gdt array */
-  sos_ui32_t base_addr;
-} __attribute__((packed, aligned(8)));
+  /** The maximum GDT offset allowed to access an entry in the GDT */
+  sos_ui16_t  limit;
+  
+  /**
+   * This is not exactly a "virtual" address, ie an adddress such as
+   * those of instructions and data; this is a "linear" address, ie an
+   * address in the paged memory. However, in SOS we configure the
+   * segmented memory as a "flat" space: the 0-4GB segment-based (ie
+   * "virtual") addresses directly map to the 0-4GB paged memory (ie
+   * "linear"), so that the "linear" addresses are numerically equal
+   * to the "virtual" addresses: this base_addr will thus be the same
+   * as the address of the gdt array
+   */
+    sos_ui32_t base_addr;
+} __attribute__((packed, aligned(4)));
 
 
 /**
@@ -104,8 +111,10 @@
       .present=               1,                                \
       .limit_19_16=           0xf,                              \
       .custom=                0,                                \
+      .zero=                  0,                                \
       .op_size=               1,  /* 32 bits instr/data */      \
-      .granularity=           1   /* limit is in 4kB Pages */   \
+      .granularity=           1,  /* limit is in 4kB Pages */   \
+      .base_paged_addr_31_24= 0                                 \
   })
 
 
@@ -120,10 +129,14 @@
 				   register_kernel_tss */
 };
 
+
 sos_ret_t sos_gdt_subsystem_setup(void)
 {
   struct x86_gdt_register gdtr;
 
+  /* Put some garbage in the padding field of the GDTR */
+  gdtr.padding   = ~0;
+
   /* Address of the GDT */
   gdtr.base_addr = (sos_ui32_t) gdt;
 
@@ -145,7 +158,10 @@
                  movw %%ax,  %%fs \n\
                  movw %%ax,  %%gs"
 		:
-		:"m"(gdtr),
+		:"m"(gdtr.limit) /* The real beginning of the GDT
+				    register is /after/ the "padding"
+				    field, ie at the "limit"
+				    field. */,
 		 "i"(SOS_BUILD_SEGMENT_REG_VALUE(0, FALSE, SOS_SEG_KCODE)),
 		 "i"(SOS_BUILD_SEGMENT_REG_VALUE(0, FALSE, SOS_SEG_KDATA))
 		:"memory","eax");
@@ -170,6 +186,7 @@
       .present=               1,
       .limit_19_16=           0,    /* Size of a TSS is < 2^16 ! */
       .custom=                0,    /* Unused */
+      .zero=                  0,
       .op_size=               0,    /* See Intel x86 vol 3 figure 6-3 */
       .granularity=           1,    /* limit is in Bytes */
       .base_paged_addr_31_24= (tss_vaddr >> 24) & 0xff
diff -ruN /tmp/sos-code-article8/INSTALL ../sos-code-article8/INSTALL
--- /tmp/sos-code-article8/INSTALL	2005-07-01 16:39:50.000000000 +0200
+++ ../sos-code-article8/INSTALL	2005-08-14 10:53:53.000000000 +0200
@@ -121,9 +121,9 @@
 
 NOTE : recommended versions of the tools
 ----------------------------------------
- - OS           : Linux 2.6.11.7-d2-1 i686
- - gcc          : gcc (GCC) 3.3.6 (Debian 1:3.3.6-5)
- - GNU binutils : GNU ld version 2.15
+ - OS           : Linux 2.6.12.4-d2-v3 x86_64
+ - gcc          : i586-pc-elf-gcc (GCC) 3.4.4
+ - GNU binutils : GNU ld version 2.16
  - GNU make     : GNU Make 3.80
 
 Also tested with (on ppc/debian host):
diff -ruN /tmp/sos-code-article8/Makefile ../sos-code-article8/Makefile
--- /tmp/sos-code-article8/Makefile	2005-07-01 16:39:47.000000000 +0200
+++ ../sos-code-article8/Makefile	2005-08-14 10:53:53.000000000 +0200
@@ -56,7 +56,7 @@
 	./support/build_image.sh $@ $<
 
 $(KERNEL_LOAD): $(KERNEL_OBJ)
-	$(CP) $< $<.strip && $(STRIP) -sx $<.strip
+	$(CP) $< $<.strip && $(STRIP) -sx -R .comment $<.strip
 	gzip < $<.strip > $@
 
 $(KERNEL_OBJ): $(OBJECTS) ./support/sos.lds
diff -ruN /tmp/sos-code-article8/support/sos.lds ../sos-code-article8/support/sos.lds
--- /tmp/sos-code-article8/support/sos.lds	2005-07-01 16:39:50.000000000 +0200
+++ ../sos-code-article8/support/sos.lds	2005-08-14 10:53:56.000000000 +0200
@@ -110,16 +110,4 @@
     /* We take note of the end of the kernel: this is where the GPFM
        will begin */
     __e_kernel = .;
-
-    /* We don't care of the note, indent, comment, etc.. sections
-       generated by gcc */
-        /DISCARD/ :{
-                *(.note*)
-                *(.indent)
-                *(.comment)
-                *(.stab)
-                *(.stabstr)
-        }
-
 }
-
