__asm__ __volatile__("sgdt %0": "=m" (gdt_desc): :"memory"); 
store_gdt(&gdt_desc); 
static void doublefault_fn(void){	struct Xgt_desc_struct gdt_desc = {0, 0};	unsigned long gdt, tss;	__asm__ __volatile__("sgdt %0": "=m" (gdt_desc): :"memory");	gdt = gdt_desc.address;	printk("double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size);	if (ptr_ok(gdt)) {		gdt += GDT_ENTRY_TSS << 3;		tss = *(u16 *)(gdt+2);		tss += *(u8 *)(gdt+4) << 16;		tss += *(u8 *)(gdt+7) << 24;		printk("double fault, tss at %08lx\n", tss);		if (ptr_ok(tss)) {			struct tss_struct *t = (struct tss_struct *)tss;			printk("eip = %08lx, esp = %08lx\n", t->eip, t->esp);			printk("eax = %08lx, ebx = %08lx, ecx = %08lx, edx = %08lx\n",				t->eax, t->ebx, t->ecx, t->edx);			printk("esi = %08lx, edi = %08lx\n",				t->esi, t->edi);		}	}	for (;;) /* nothing */;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/4d37e7e3fd851428dede4d05d3e69d03795a744a/doublefault.c/buggy/arch/i386/kernel/doublefault.c