|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Different esps
> about line 329 in traps.c:
>
> fault_in_hypervisor:
> + printk("fault_in_hypervisor 2\n");
> + printk("dom %d : esp1 %08lx, ss %08lx\n",current->domain,
> current->thread.esp1, current->thread.ss1);
> +
> + execution_context_t ctxt;
> + memcpy(&ctxt,
> + get_execution_context(),
> + sizeof(execution_context_t));
> +
> + printk("eip %p esp %p eip %p addr %p flags %x\n", ctxt.eip,
> ctxt.esp, gtb->eip, addr, ctxt.eflags);
The EIP/ESP values you are printing aren't up to date. You should be
printing regs->eip and regs->esp.
Also something like:
struct pt_regs *guest_regs = (struct pt_regs *)(current->thread.esp1-1);
<print guest_regs->esp, guest_regs->eip>
> 0xc3a91ff8 appears to be where ctxt.esp is pointing if you push some
> values. The dual 0 eips worry me as well, I have not registered any
> event-callbacks for the domain, perhaps that is the reason? But should I
> not be allowed to run without registering for interrupts in a brand-new
> domain? To me this looks like an interrupt-delivery gone bad.
Maybe an exception of some kind? Did you fill in the trap_table
(virtual IDT) in full_execution_context?
-- Keir
|
|
|
|
|