Solved x86 process memory map

When I run procstat on a small 32bit app that just calls sleep (on FreeBSD 12.1 amd64) then I see at the end of the map

Code:
22353         0xfbffe000         0xfffde000 ---    0    0   0   0 ----- -- 
22353         0xfffde000         0xffffe000 rw-    3    3   1   0 ---D- df 
22353         0xffffe000         0xfffff000 r-x    1    1  94   0 ----- ph

I think the last block is for signal handlers and the last but one block is the user stack.
But what is between 0xfbffe000 and 0xfffde000? It's a bit less than 64Mbytes. This has no protection flags, no resident pages or references and no type. My guess is that this is some sort of guard page for the user stack.

Can anyone confirm this? Also, does anyone know if this has been present in FreeBSD for a long time? My copy of D&I 2e doesn't show anything between stack and share libraries.
 
I got an answer to this from the tools mailing list. It's a change that occurred in FreeBSD 11.1 which adds a guard region below the user stack with the MAP_GUARD flag, described in the mmap man page.
 
Back
Top