qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] problems with freeBSD


From: Laszlo Ersek
Subject: Re: [Qemu-devel] problems with freeBSD
Date: Wed, 06 Mar 2013 16:56:09 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130216 Thunderbird/17.0.3

On 03/06/13 09:21, Dietmar Maurer wrote:
> Using qemu 1.4.0:
> 
>  
> 
> # qemu -hda test.raw -m 512 -cdrom
> pfSense-LiveCD-2.0.2-RELEASE-amd64-20121207-2239.iso
> 
>  
> 
> Results in:
> 
>  
> 
> trap 12: page fault while in kernel mode
> 
>
> 
> stopped at x86bios_emu_rdw+0x2f: movzwl (%rbx),%eax
> 
>  
> 
> Any ideas? Can somebody reproduce that?

I found this on the web:

351     static uint16_t
352     x86bios_emu_rdw(struct x86emu *emu, uint32_t addr)
353     {
354             uint16_t *va;
355     
356             va = x86bios_get_pages(addr, sizeof(*va));
357             if (va == NULL)
358                     x86bios_set_fault(emu, addr);
359     
360     #ifndef __NO_STRICT_ALIGNMENT
361             if ((addr & 1) != 0)
362                     return (le16dec(va));
363             else
364     #endif
365             return (le16toh(*va));
366     }

"movzwl (%rbx),%eax" reads the 16-bit word at %rbx, copies it into the
low 16 bits of %eax, and clears the rest of the bits in %eax.

This probably corresponds to the *va dereference at the end of the
function. (le16toh() is compiled out if the platform is little endian.)
Either x86bios_get_pages() returns garbage, or "addr" is garbage on input.

You'll have to trace back the callpath from x86bios_emu_rdw(), possibly
instrumenting it with printk()s (or whatever it's called in FreeBSD).

Laszlo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]