I am using gcc on linux 3.16.0-29-generic.
I managed to instruct the gcc compiler to set as loading address of the code I am compiling 0x201.000 using the option of gcc
Regarding the inability to mmap addresses bellow 0x10.000, the answer is in "https://wiki.ubuntu.com/Security/Features" .
Since the kernel and userspace share virtual memory addresses, the "NULL" memory space needs to be protected so that userspace mmap'd memory cannot start at address 0, stopping "NULL dereference" kernel attacks. This is possible with 2.6.22 kernels, and was implemented with the "mmap_min_addr" sysctl setting. Since Ubuntu 9.04, the mmap_min_addr setting is built into the kernel. (64k for x86, 32k for ARM.)
We may change the "mmap_min_addr" by using the instruction
sudo sysctl -w vm.mmap_min_addr=0
So the answer is that the whole address space is available without exceptions ( linear addresses ).