00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "core/kmaster.h"
00019
00020 void lidt(IDT *idt)
00021 {
00022 __asm__ __volatile__ ("lidt (%0)"::"p"(idt));
00023 }
00024
00025
00026 void sidt(IDT *idt)
00027 {
00028 __asm__ __volatile__ ("sidt %0"::"m"(*idt));
00029 }
00030
00031 void lgdt(GDT *gdt)
00032 {
00033 __asm__ __volatile__ ("lgdt (%0)"::"p"(gdt));
00034 }
00035
00036 void sgdt(GDT *gdt)
00037 {
00038 __asm__ __volatile__ ("sgdt %0"::"m"(*gdt));
00039 }
00040
00041 void kdump()
00042 {
00043 int i;
00044 DD _addr[9];
00045 char *regs[] = {"EAX:","EBX:","ECX:","EDX:","ESI:","EDI:","ESP:","EBP:","EIP:"};
00046 char *sregs[] = {" CS:"," DS:"," SS:"," ES:"," FS:"," GS:"};
00047
00048 __asm__ __volatile__ ("":"=a"(_addr[0]),"=b"(_addr[1]),"=c"(_addr[2]), \
00049 "=d"(_addr[3]),"=S"(_addr[4]),"=D"(_addr[5]));
00050
00051 __asm__ __volatile__ ("movl %%esp, %0":"=m"(_addr[6]));
00052 __asm__ __volatile__ ("movl %%ebp, %0":"=m"(_addr[7]));
00053 __asm__ __volatile__ ("movl 8(%%esp), %%eax":"=a"(_addr[8]));
00054
00055 kprintln();
00056
00057 for(i=0; i<6;i++)
00058 {
00059 kprint("\t");
00060 kprint(regs[i]);
00061 kprint("\t");
00062 }
00063
00064 kprintln();
00065
00066 for(i=0; i<6;i++)
00067 {
00068 kprint(" ");
00069 kprintnum(_addr[i],16);
00070 _addr[i] = 0;
00071 }
00072
00073 kprintln();
00074
00075 for(i=6; i<9;i++)
00076 {
00077 kprint("\t");
00078 kprint(regs[i]);
00079 kprint("\t");
00080 }
00081
00082 kprintln();
00083
00084 for(i=6; i<9;i++)
00085 {
00086 kprint(" ");
00087 kprintnum(_addr[i],16);
00088 _addr[i] = 0;
00089 }
00090
00091 kprintln();
00092
00093 for(i=0; i<6;i++)
00094 {
00095 kprint("\t");
00096 kprint(sregs[i]);
00097 kprint("\t");
00098 }
00099
00100 kprintln();
00101
00102 __asm__ __volatile__ ("mov %%cs, %0":"=m"(_addr[0]));
00103 __asm__ __volatile__ ("mov %%ds, %0":"=m"(_addr[1]));
00104 __asm__ __volatile__ ("mov %%ss, %0":"=m"(_addr[2]));
00105 __asm__ __volatile__ ("mov %%es, %0":"=m"(_addr[3]));
00106 __asm__ __volatile__ ("mov %%fs, %0":"=m"(_addr[4]));
00107 __asm__ __volatile__ ("mov %%gs, %0":"=m"(_addr[5]));
00108
00109 for(i=0; i<6;i++)
00110 {
00111 kprint(" ");
00112 kprintnum(_addr[i],16);
00113 }
00114
00115 kprintln();
00116 }
00117
00118
00119
00120
00121
00122