<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="gmail_quote"><div></div></div></blockquote><br></div>I think I'm getting closer to why it's not supported on the guest:<br><br>./lguest 64 ../../../diffs/linux-2.6.35.8/vmlinux<div class="im"><br>
lguest: unhandled trap 13 at 0x1001081 (0x10)<br><br></div> 1081: ea 88 10 00 00 10 00 ljmp $0x10,$0x1088<br><br></div></blockquote><div><br> So I think the problem is in<br><br>ENTRY(startup_32)<br> /* test KEEP_SEGMENTS flag to see if the bootloader is asking<br>
us to not reload segments */<br> testb $(1<<6), BP_loadflags(%esi)<br> jnz 2f<br><br>/*<br> * Set segments to known values.<br> */<br> lgdt pa(boot_gdt_descr)<br> movl $(__BOOT_DS),%eax<br>
movl %eax,%ds<br> movl %eax,%es<br> movl %eax,%fs<br> movl %eax,%gs<br>2:<br><br>and<br><br>#ifdef CONFIG_PAX_KERNEXEC_WAT<br> movl $pa(boot_gdt),%edi<br> movl $__LOAD_PHYSICAL_ADDR,%eax<br>
movw %ax,__BOOT_CS + 2(%edi)<br> rorl $16,%eax<br> movb %al,__BOOT_CS + 4(%edi)<br> movb %ah,__BOOT_CS + 7(%edi)<br> rorl $16,%eax<br> ljmp $(__BOOT_CS),$1f<br><br><br>Since it does not set lgdt due to the paravirt boot code setting "don't reset segments" it's not initialized properly.<br>
<br>If I make the reset of lgdt unconditional it doesn't work (probably due to requiring the need of the hypervisor to make that change :-). If I #ifdef out the initial ljmp it dies at <br><br># ./lguest 64 ../../../diffs/linux-2.6.35.8/vmlinux<br>
lguest: unhandled trap 14 at 0x100ad26 (0xffffffdc)<br><br> set_early_handler handler=early_protection_fault,trapno=13<br> set_early_handler handler=early_page_fault,trapno=14<br><br>Checking addresses near by it:<br>
<br>00008d20 <irqfd_inject>:<br> 8d20: 55 push %ebp<br> 8d21: 89 e5 mov %esp,%ebp<br> 8d23: 83 ec 0c sub $0xc,%esp<br> 8d26: 89 5d f8 mov %ebx,-0x8(%ebp)<br>
<br>emulator_set_cached_descriptor:<br> ad24: 09 d0 or %edx,%eax<br> ad26: 89 45 dc mov %eax,-0x24(%ebp)<br><br>0000bd20 <ftrace_raw_output_kvm_nested_vmrun>:<br>
bd20: 55 push %ebp<br> bd21: 83 e9 14 sub $0x14,%ecx<br> bd24: 89 e5 mov %esp,%ebp<br> bd26: 83 ec 34 sub $0x34,%esp<br>
<br>So I'm not sure... need to work out how to get more indepth debugging information for it, for me to be able to work out what the problems are :\ <br><br>I can't even get KERNEXEC working on a real machine either (model name : Intel(R) Atom(TM) CPU N270 @ 1.60GHz) :/<br>
<br>I'll try getting PAE/NX working instead for the time being and come back to kernexec later.<br><br><br></div></div>