Maybe write_long should handle unaligned addresses?
Possibly. But something is wrong.
Unaligned accesses should be done with unaligned-l@ ( addr -- quad ) instead of l@.
So either the pointer was calculated wrong or Solaris does not care about alignment in l@
If you change it, please make the change specific to sparc.
I noticed that the memory allocators either don't enforce alignment or align just to 4. That could be one reason for the problem.