[Vm-dev] 64bit: "This interpreter (vers. 68000) cannot read image file (vers. 274877913446)."

Andrew Gaylard ag at computer.org
Wed Oct 17 07:26:35 UTC 2007


Dave,

Thanks for the excellent feedback.

On 10/17/07, David T. Lewis <lewis at mail.msen.com> wrote:[snip]

> - What is a 64 bit VM?
> A 64 bit image is an image in which the object memory uses 64 bit word
> size for object pointers. Squeak now supports a 64 bit image format that
> is sufficient to produce a working system, but which is intentionally
> simple, and is expected to be modified and extended to take advantage of
> additional 64 bit capabilities in the future.


Considering the answer you gave,  did you mean this question to be
"What is a 64-bit image?"?

Here's a pass at answering the "what is a 64-bit VM?" question:
A 64-bit VM is one which is compiled with the LP64 or ILP64 data
model.  This means, in C terms, that pointers and longs are 64 bits
wide.

- Can I run a 32- or 64-bit VM on my computer?
Some current architectures (such as the x86-64 and the UltraSPARC)
can run 32-bit as well as 64-bit applications; these are known as
"bi-arch".  However, some (such as the Alpha) can only run 64-bit
applications.  For bi-arch systems, you can choose whether to run
a 32-bit or 64-bit VM.  For 64-bit-only systems, you can only run a
64-bit VM, since there's no way of compiling a 32-bit application.

- Can I run a 32 bit image on my 64 bit computer?
> Yes. A 32 bit image can be run on either a 32 bit VM or a 64 bit VM. Some
> computer platforms (e.g. 64 bit Linux) can run both the 32 bit VM and
> 64 bit VM on the same system.
>
> - Can I run a 64 bit image on my 32 bit computer?
> Yes. If you build a VM with the "64 bit VM?" check box selected, you will
> create a VM that runs 64 bit images. This will work on 32 bit host systems
> as well as on 64 bit host systems.


- How does a 32-bit VM manage to run a 64-bit image if pointers are 32-bits?
(I'm guessing here!)
It relies on the image size being smaller than 4GB. Code in the VM
converts the 64-bit object pointers to 32-bit ones that the VM can use.

- What sizes and alignment does the new 64-bit image format use for
pointers and integers?
(Again, I'm guessing here)
In the 64-bit image format, object pointers are 64-bits wide, allowing for
memory up to 2^64 bytes to be directly addressable.  They are aligned
on 8-byte boundaries.
Integers are still implemented as tagged 31-bit values.  They are aligned
to 4-byte boundaries.
These alignments were chosen as most 64-bit CPUs require them.

- how do I tell if a given image file is 32-bit or 64-bit?
(No idea.  Anyone?)

Andrew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20071017/38bd5d19/attachment.htm


More information about the Vm-dev mailing list