"Paul Phillips" pphillips@ivue.com writes:
1.) Why are you calculating the address of the table by subtracting out EMULIB_CODE_ADDRESS (Which is 0xA0008000?) ?
The emulation library is relocated to address 0xa0008000 and idt_table is a symbol of the emulation library. If you have a look at the symbol table you will find
a00084a8 A idt_table
So ((unsigned long)&idt_table - EMULIB_CODE_ADDRESS) is the offset of the idt within our emulation library.
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?
We have to copy the code to ensure that it is page aligned. The special page is mapped into the address space of every unix process when it raises its first page fault. Every unix process (L4Linux process) starts at a fixed address, so we know, that the very first page fault will request the emulation library page.
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.
If my memory serves right, someone else had the same problem. For some strange reason L4Linux raised a page fault at this point and the page fault could not be resolved by the underlying pager. The L4Linux server now hangs in an endless loop trying to resolve the page fault. But I'm not sure about that. Michael?
There is a possibility to monitor all page faults in the system, but I don't know, how you activate that.
Jean
l4-hackers@os.inf.tu-dresden.de