|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
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
 |   
 
 | 
    | 
  
  
    |   | 
    |