kasm.c

00001 /***************************************************************************
00002                           kasm.c  -  description
00003                              -------------------
00004     begin                : Sat Dec 13 2003
00005     copyright            : (C) 2003 by Dynacube Team
00006     email                : mdshah82@yahoo.com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
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 

Generated on Thu Jul 27 23:52:26 2006 for Dynacube by  doxygen 1.4.7