[ create a new paste ] login | about

Link: http://codepad.org/q8Qkp9M3    [ raw code | fork ]

C, pasted on Apr 14:
#include <stdint.h>
#include "gdt.h"

/* GDT with 5 entries and the GDT pointer */
struct gdt_entry_t gdt[5];  /* GDT */
struct gdt_ptr_t   gdt_ptr; /* Pointer to the GDT */

void
kernel_main()
{
  gdt_ptr.limit = (sizeof (struct gdt_entry_t) * 5) - 1;
  gdt_ptr.base  = (uint32_t) &gdt;

  set_gdt_gate(&gdt[0], 0, 0, 0, 0);                /* Null segment */
  set_gdt_gate(&gdt[1], 0, 0xFFFFFFFF, 0x9A, 0xCF); /* Code segment */
  set_gdt_gate(&gdt[2], 0, 0xFFFFFFFF, 0x92, 0xCF); /* Data segment */
  set_gdt_gate(&gdt[3], 0, 0xFFFFFFFF, 0xFA, 0xCF); /* User mode code segment */
  set_gdt_gate(&gdt[4], 0, 0xFFFFFFFF, 0xF2, 0xCF); /* User mode data segment */

  flush_gdt((uint32_t) &gdt_ptr);
  
  for(;;)
  {
  }
}


Create a new paste based on this one


Comments: