Dave,
Many thanks for the explanations.
At this point I am using the image scripts to generate a VMMaker image,
which on RasPi4 Linux gets close and dies, but I am able to run the
CoInterp init methods and generate code.
One wrinkle with the Squeak 6 version is that attempting to open a repo
in the Monticello Browser (e.g. VMMakerInbox) generates "Error:
primitiveSSLCreate failed".
I was able to access the repos via a 5.3 Squeak image and use the
package-cache to be able to load a Monticello package into VMMaker.
I am able to generate and build aarch64 and riscv64 images for test.
The ThreadedRiscV64FFIPlugin shares much of the mechanics with
ThreadedARM64FFIPlugin so is a subclass. Because of this, some updates
for riscv64 require a change to the ThreadedARM64FFIPlugin level.
The problem of the week is to get the C casting/coercion right for both
arm64 and riscv64, but [A] I have not used C much in the last couple of
decades and [B] I don't yet get know the VMMaker idioms to get the
generated code to do what I want. Still learning.
I know what I want at the CPU/machine/asm level and can get the (hacked)
generated C code to work on both arm64 and riscv64 VM binaries (in the
opensmalltalk-vm github repo see
src/plugins/SqueakFFIPrims/RiscV64FFIPlugin.c) but have not yet figured
out how to teach VMMaker how to get a clean RiscV64FFIPlugin.c from the
Smalltalk source.
The problem is to get the FFI called function to return the properly
cased float/double/other as the riscv64 gcc is very finicky to stick to
the strict ABI. Much less forgiving (or less creative) than the arm64
gcc codegen.
So I am currently in an observe, theorize, test, repeat (er, hack, gen
code, build) cycle as I learn the mechanics and I am re-remembering all
the reasons I droped development in C in favor of Smalltalk.
If you are deep into the mechanics, you can take a look at the attached,
but I will be experimenting in the mean time. I am happy to do an
off-line if you have a deep desire to get into the weeds on this, but I
suspect a bit more experimenting will get the Smalltalk->C->gcc->run
end-to-end up.
Thanks once again for the kind background description.
-KenD