...which doesn't happen in your test program as it doesn't use as many. Remember that it takes only one page of memory sitting at the wrong virtual memory address to divide the available contiguous addresses in half. I would suggest playing around with the prelink tool to put dynamic libraries in better positions in memory.
I can take a look, but this is a Fedora Rawhide machine, which should run prelink nightly.