It's hard to be sure what the issue is, but let me give it a try.
I am going to assume that both systems are running 64-bit processors, if this is not true, them you can probably stop reading and should post the correction.
The registers in a 64-bit processor must be initialized, as even though you only require 32-bit versions in x86 or 8086 modes, the OS and software know that the processor is 64-bit. This in turn implements stacks and buffers to suit such a setup. It's complicated, but based on the OS little/big endian uses 64-bit segments forwards or backwards.
What is likely happening is by starting the 64-bit version you initialize the registers/buffers/pipelines, etc for use, with their initial values (null, 0 or ignore values-known as dirty bits) once this has been done and the system is 'primed' for 64-bit use, it can easily implement 32-bit software and stack segments, the same way a 32-bit processor implements 16- and 8-bit software. backwards compatability usually works, the other way around from a cold boot into a 32-bit version.. not always.
*The problem may not be the kernel itself, but rather the implementation approach it uses in using memory, and it does not initialize correctly.
Hope this helps or gives some insight.
|