¿Por qué Linux / gnu linker eligió la dirección 0x400000?

Estoy experimentando con los ejecutables ELF y el gnu toolchain en Linux x86_64:

He vinculado y eliminado (a mano) un test.s "Hello World":

        .global _start
        .text
_start:
        mov     $1, %rax
        ...

en un ejecutable ELF64 de 267 bytes ...

0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 3e00 0100 0000 d400 4000 0000 0000  ..>.......@.....
0000020: 4000 0000 0000 0000 0000 0000 0000 0000  @...............
0000030: 0000 0000 4000 3800 0100 4000 0000 0000  [email protected]...@.....
0000040: 0100 0000 0500 0000 0000 0000 0000 0000  ................
0000050: 0000 4000 0000 0000 0000 4000 0000 0000  ..@.......@.....
0000060: 0b01 0000 0000 0000 0b01 0000 0000 0000  ................
0000070: 0000 2000 0000 0000 0000 0000 0000 0000  .. .............
0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b0: 0400 0000 1400 0000 0300 0000 474e 5500  ............GNU.
00000c0: c3b0 cbbd 0abf a73c 26ef e960 fc64 4026  .......<&..`.d@&
00000d0: e242 8bc7 48c7 c001 0000 0048 c7c7 0100  .B..H......H....
00000e0: 0000 48c7 c6fe 0040 0048 c7c2 0d00 0000  [email protected]......
00000f0: 0f05 48c7 c03c 0000 0048 31ff 0f05 4865  ..H..<...H1...He
0000100: 6c6c 6f2c 2057 6f72 6c64 0a              llo, World.

Tiene un encabezado de programa (LOAD) y no tiene secciones:

There are 1 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x000000000000010b 0x000000000000010b  R E    200000

Esto parece cargar el archivo completo (desplazamiento de archivo 0 a 0x10b - encabezado de elfo y todo) en la dirección 0x400000.

El punto de entrada es:

 Entry point address:               0x4000d4

Que corresponde al desplazamiento 0xd4 en el archivo, y como podemos ver, esa dirección es el comienzo del código de la máquina (mov $1, %rax1)

Mi pregunta es por qué (cómo) eligió el enlazador GNU la dirección0x400000 para asignar el archivo a?

Respuestas a la pregunta(1)

Su respuesta a la pregunta