Not exactly sure what you are asking, but I can recommend looking into the source code of the dynamic linker, ld.so, which actually loads the ELF objects.
See the source code of _dl_map_object_from_fd , have a look at the __mmap
invocations there (one case for relocatable objects, one case for objects that need to be loaded at a fixed address). The parameters of those calls should tell you everything on how the memory is allocated.