Yikes, ok that's not good!

Some googling suggests that we can possibly fake MAP_32BIT by setting RLIMIT_DATA: http://svnweb.freebsd.org/ports/head/emulators/dolphin-emu-devel/files/patch-Source-Core-Common-Src-MemoryUtil.cpp?revision=304577&view=markup

Also it may be possible to test if memory is already mapped by calling mincore() and checking for ENOMEM: http://www.freebsd.org/cgi/man.cgi?query=mincore&sektion=2