struct desc_struct def_ldt; unsigned long *lp, *lp2; asm volatile ( "sgdt __gdt+2" ); lp = (unsigned long *)(__gdt[1] + current->tss.ldt ); lp2 = (unsigned long *)(((*lp >> 16) & 0x0000ffff) | (*(lp+1) & 0xff000000) | ((*(lp+1) << 16) & 0x00ff0000)); def_ldt.a = *lp2; def_ldt.b = *(lp2+1);