|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] Problems setting up GDT in custom builder
In having problems getting a custom built GDT which I set up in my custom
builder to work. Im putting aside 16 frames for the GDT, and initialising it
with the values that I need (one descriptor for CS at 6, one for DS at 3).
The GDT seems to get getting the correct values. The CS segment is the same as
the default FLAT_GUESTOS_CS. The DS is slightly different, since I need my
data segment to start at 0x6000.
My GDT is at 0x593000 and gdb shows the contents of entry 3 and entry
260(FLAT_GUESTOS_DS) as follows.
(gdb) x/2x 0x593000+(0x3*0x8)
0x593018: 0x6000c3f9 0x00cfb300
(gdb) x/2x 0x593000+(260*0x8)
0x593820: 0x0000c3ff 0x00cfb300
Almost identical exept that base (B0-B15) are 6000. The limit is slightly
different but that should affect anything.
I set the domain to use the new descriptors in the builder.
<SNIP>
* [ECX,EDX,EDI,EBP are zero]
* EFLAGS = IF | 2 (bit 1 is reserved and should always be 1)
*/
ctxt->cpu_ctxt.ds = DS_SELECTOR; /*FLAT_GUESTOS_DS;*/
ctxt->cpu_ctxt.es = FLAT_GUESTOS_DS;
ctxt->cpu_ctxt.fs = FLAT_GUESTOS_DS;
ctxt->cpu_ctxt.gs = FLAT_GUESTOS_DS;
ctxt->cpu_ctxt.ss = FLAT_GUESTOS_DS;
ctxt->cpu_ctxt.cs = CS_SELECTOR; /*FLAT_GUESTOS_CS;*/
ctxt->cpu_ctxt.eip = dsi.processes[KERNEL].entry;
<ENDSNIP>
<SNIP2>
#define DS_SELECTOR 0x19 /* 00011 | 001 */
#define CS_SELECTOR 0x31 /* 00110 | 001 */
<ENDSNIP2>
full source:
http://secure.bleurgh.com/svn/xen/trunk/tools/libxc/xc_minix_build.c
To me this looks like it should work perfectly, but when I try to run my
kernel on it, mov instructions seem to be using 0x0 (physical addr) as their
base.
Could anyone point out my mistake. It's driving me nuts :)
Regards
Ivan Kelly
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-devel] Problems setting up GDT in custom builder,
Ivan Kelly <=
|
|
|
|
|