32-bit virtual machine only supports 64-bit instructions

Is it possible my 32-bit (i686) VM does not support 32-bit instructions?

I am getting SIGILL in a 32-bit ipp library when running on a test VM.

lscpu:

Architecture: i686 CPU op-mode(s): 64-bit CPU(s): 2 Thread(s) per core: 1 Core(s) per socket: 1 CPU socket(s): 2 Vendor ID: GenuineIntel CPU family: 6 Model: 45 Stepping: 7 CPU MHz: 1995.192 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 20480K

Is it in "op-mode: 64bit" that this virtual machine only supports 64-bit instructions? My (64bit) desktop baremetal reports: CPU op-mode(s): 32-bit, 64-bit

which implies that I am 64bit

not a superset 32bit

and that my i686 VM is actually not capable of executing 32bit instructions

?

Is this logic correct? If so, I'm sure I suspect this is the reason for the 32bit ipp SIGILL (does it call a 32bit instruction and fail?)

+3


source to share


1 answer


As long as you can run a 32-bit OS inside your virtual machine, your virtual processor supports Intel 32-bit instructions. Most likely these are errors in your library that lead to SIGILL. Attaching a debugger and looking at the actual command bytes (opcode) should plan for more light on what might go wrong.



To answer your second question, no, Intel 64 (or AMD64) is not a strict superset of Intel 32 architecture. Some instructions are not encoded or do not imply a new meaning. The most prominent example is 0x40-0x4F, which were INC and DEC on 32-bit systems, but are parts of the opcode (so-called REX prefix) in the Inlte 64 architecture. But in the case of using a virtual machine that abstracts the host architecture from the target architecture, it really doesn't matter.

0


source







All Articles