I am trying to boot L4-Linux using the Fiasco microkernel. The microkernel boots fine, but when L4Linux is booting, in module chead.c you have the code:
 /* create idt */
  {
    extern long idt_table;
    struct entry_t {unsigned short w0, w1,w2,w3;} ;
    struct entry_t *entries =
      (struct entry_t *)((unsigned long)emu_lib_text +
    ((unsigned long)&idt_table - EMULIB_CODE_ADDRESS));
    unsigned short int tmp;
    int i;
 
    for (i=0; i<20; i++, entries++)
      {
 tmp = entries->w1;
 entries->w1 = entries->w3;
 entries->w3 = tmp;
      }
  }
My system hangs when it attempts to execute this code. I understand why you are swapping the shorts in the table (swapping the offset bytes with the selector bytes) but there are a couple of things I don't understand  Several questions:
1.) Why are you calculating the address of the table by subtracting out EMULIB_CODE_ADDRESS (Which is 0xA0008000?) ?
2.) How & why is the emulator code moved to "special page". Where is the "special page" set up since paging isn't set up until after this code is executed?
3.) Any clue why this is hanging here?  I should have a remote debugger set up soon, but I have -nokdb set and I don't get any kernel panics or reg dumps. The system just hangs.
 
Thanks in advance!!  
 
Paul Phillips