title: Change .text section to an address lower than the default address
body: <p>I am trying to link with a specific .text section address(which is lower than the default address 0x08048000 for linux/x86 ), </p>
  
  <pre><code>"gcc -Ttext 0x00849a40"
  </code></pre>
  
  <p>the program compile, link and run without any problem, but When I try with a different address :</p>
  
  <pre><code>"gcc -Ttext 0x00840000"
  </code></pre>
  
  <p>the program will gives a segmentation fault.</p>
  
  <p>if I try any address above 0x00840000 from which does not conflict with the other section, e.g.</p>
  
  <pre><code> "gcc -Ttext 0x09000000" or "gcc -Ttext 0x091111111" 
  </code></pre>
  
  <p>the program also compile, link and run without any problem.</p>
  
  <p>I understand that:</p>
  
  <ul>
  <li><p><strong>0x08048000</strong> is the default address on which ld starts the first <strong>PT_LOAD</strong> segment on Linux/x86. On Linux/amd64 the default is <strong>0x400000</strong> and you can change the default by using a custom linker script. </p></li>
  <li><p>I check with "/proc/sys/vm/mmap_min_addr" is 0x10000 and the "/proc/self/maps" to make sure the .text section wont use any of the above memory address.</p></li>
  <li><p>the text section should be aligned to 16, both of the above address 0x00849a40 and 0x00840000 is.</p></li>
  </ul>
  
  <p>So My question is :</p>
  
  <ul>
  <li><p>Is it allowed to use section-start address lower than the default value?(I believe it is allowed)</p></li>
  <li><p>Is there any requirement when using a different section start address?</p></li>
  </ul>