[oi-dev] mapfile and RESERVE_SEGMENT or CAPABILITY

stes@PANDORA.BE stes at telenet.be
Sun Aug 15 11:16:19 UTC 2021


I've done some further research on this issue;

First of all, the reason I was interested in this,
was because a recent change in OpenSmalltalk cog-spur,
made me debug the cog-spur executable on OpenIndiana,
and I noticed addresses like:

/usr/bin/squeak $HOME/v5/Squeak6.0alpha-20532-64bit.image

   JIT codezone 0x7fffae411000 0x7fffae56f000
   mmap 0x7fffae600000 0x7fffa5000000

Note that the mmap result pointers are in the range 0x7fffa5000000.

In the past on OpenIndiana I had addresses like: 0xffff80ffbf6b0000 !

So in my understanding what I observed was the result of recent OpenIndiana systems that now have

   /etc/system.d/reserve_bits_for_tagged_pointers

Effectively I think the spidermonkey setting is now changing the memory layout of virtual addresses,
for most applications, including OpenSmalltalk, on OpenIndiana.

Anyway, this is not in itself a problem.

After investigating "link editor mapfile" and the difference between AT&T SVR4 syntax,
which was the old syntax which in my understanding is still used on Illumos, 
I experimented with adding in a oi-userland Makefile :

LD_MAP_COGVM = -M map.cogvm
CONFIGURE_ENV.64 +=     LD_OPTIONS="$(LD_OPTIONS) $(LD_MAP_COGVM)"

This works fine because LD_OPTIONS is passed to the Illumos traditional "ld" (link editor) which accepts old-style mapfiles.


However, all of this is not really essential I think now, to the "OpenSmalltalk cog-vm" issue.

I have meanwhile discovered that another difference is that in the old OpenSmalltalk code,
there was a page-alligned argument being passed to the mmap() call.

That code was recently (2-3 weeks ago) removed, and when I restore that piece of code,
the cog-spur is working again as before - also when    /etc/system.d/reserve_bits_for_tagged_pointers  is applied.

So as a summary, I think a change in the Spur mmap() based memory management for OpenSmalltalk,
made me observe the results of the    /etc/system.d/reserve_bits_for_tagged_pointers,
and I incorrectly thought I had to investigate that in order to fix my OpenSmalltalk issue,
which turns out to be a different issue ...

Anyway it's an interesting and subtle difference between Linux virtual address memory layout and OpenIndiana/Illumos layout.

Regards,
David Stes




More information about the oi-dev mailing list