xref: /freebsd/sys/conf/ldscript.arm64 (revision 23dff4fdba987a56f4118f065cdb534cb6faba37)
1e5acd89cSAndrew TurnerOUTPUT_ARCH(aarch64)
2e5acd89cSAndrew TurnerENTRY(_start)
3e5acd89cSAndrew Turner
4e5acd89cSAndrew TurnerSEARCH_DIR(/usr/lib);
5e5acd89cSAndrew TurnerSECTIONS
6e5acd89cSAndrew Turner{
7e5acd89cSAndrew Turner  /* Read-only sections, merged into text segment: */
831333ebbSIan Lepore  . = text_start; /* This is set using --defsym= on the command line. */
947e07394SAndrew Turner  .vmm_vectors : { *(.vmm_vectors) }
10e5acd89cSAndrew Turner  .text      :
11e5acd89cSAndrew Turner  {
12e5acd89cSAndrew Turner    *(.text)
13e5acd89cSAndrew Turner    *(.stub)
14e5acd89cSAndrew Turner    /* .gnu.warning sections are handled specially by elf32.em.  */
15e5acd89cSAndrew Turner    *(.gnu.warning)
16e5acd89cSAndrew Turner    *(.gnu.linkonce.t*)
17e5acd89cSAndrew Turner  } =0x9090
18e5acd89cSAndrew Turner  _etext = .;
19e5acd89cSAndrew Turner  PROVIDE (etext = .);
2047e07394SAndrew Turner
21e5acd89cSAndrew Turner  .fini      : { *(.fini)    } =0x9090
226f0c70d4SAndrew Turner  .rodata    : { *(.rodata*) *(.gnu.linkonce.r*) }
23e5acd89cSAndrew Turner  .rodata1   : { *(.rodata1) }
24e5acd89cSAndrew Turner   .interp     : { *(.interp) 	}
25e5acd89cSAndrew Turner  .hash          : { *(.hash)		}
26e5acd89cSAndrew Turner  .dynsym        : { *(.dynsym)		}
27e5acd89cSAndrew Turner  .dynstr        : { *(.dynstr)		}
28e5acd89cSAndrew Turner  .gnu.version   : { *(.gnu.version)	}
29e5acd89cSAndrew Turner  .gnu.version_d   : { *(.gnu.version_d)	}
30e5acd89cSAndrew Turner  .gnu.version_r   : { *(.gnu.version_r)	}
3174cd06b4SEd Maste  .note.gnu.build-id : {
3274cd06b4SEd Maste    PROVIDE (__build_id_start = .);
3374cd06b4SEd Maste    *(.note.gnu.build-id)
3474cd06b4SEd Maste    PROVIDE (__build_id_end = .);
3574cd06b4SEd Maste  }
36e5acd89cSAndrew Turner  .rel.text      :
37e5acd89cSAndrew Turner    { *(.rel.text) *(.rel.gnu.linkonce.t*) }
38e5acd89cSAndrew Turner  .rela.text     :
39e5acd89cSAndrew Turner    { *(.rela.text) *(.rela.gnu.linkonce.t*) }
40e5acd89cSAndrew Turner  .rel.data      :
41e5acd89cSAndrew Turner    { *(.rel.data) *(.rel.gnu.linkonce.d*) }
42e5acd89cSAndrew Turner  .rela.data     :
43e5acd89cSAndrew Turner    { *(.rela.data) *(.rela.gnu.linkonce.d*) }
44e5acd89cSAndrew Turner  .rel.rodata    :
45e5acd89cSAndrew Turner    { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
46e5acd89cSAndrew Turner  .rela.rodata   :
47e5acd89cSAndrew Turner    { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
48e5acd89cSAndrew Turner  .rel.got       : { *(.rel.got)		}
49e5acd89cSAndrew Turner  .rela.got      : { *(.rela.got)		}
50e5acd89cSAndrew Turner  .rel.ctors     : { *(.rel.ctors)	}
51e5acd89cSAndrew Turner  .rela.ctors    : { *(.rela.ctors)	}
52e5acd89cSAndrew Turner  .rel.dtors     : { *(.rel.dtors)	}
53e5acd89cSAndrew Turner  .rela.dtors    : { *(.rela.dtors)	}
54e5acd89cSAndrew Turner  .rel.init      : { *(.rel.init)	}
55e5acd89cSAndrew Turner  .rela.init     : { *(.rela.init)	}
56e5acd89cSAndrew Turner  .rel.fini      : { *(.rel.fini)	}
57e5acd89cSAndrew Turner  .rela.fini     : { *(.rela.fini)	}
58e5acd89cSAndrew Turner  .rel.bss       : { *(.rel.bss)		}
59e5acd89cSAndrew Turner  .rela.bss      : { *(.rela.bss)		}
60e5acd89cSAndrew Turner  .rel.plt       : { *(.rel.plt)		}
61e5acd89cSAndrew Turner  .rela.plt      : { *(.rela.plt)		}
62e5acd89cSAndrew Turner  .init          : { *(.init)	} =0x9090
63e5acd89cSAndrew Turner  .plt      : { *(.plt)	}
64e5acd89cSAndrew Turner
65e5acd89cSAndrew Turner  . = ALIGN(4);
66e5acd89cSAndrew Turner  _extab_start = .;
67e5acd89cSAndrew Turner  PROVIDE(extab_start = .);
68e5acd89cSAndrew Turner  .ARM.extab : { *(.ARM.extab) }
69e5acd89cSAndrew Turner  _extab.end = .;
70e5acd89cSAndrew Turner  PROVIDE(extab_end = .);
71e5acd89cSAndrew Turner
72e5acd89cSAndrew Turner  _exidx_start = .;
73e5acd89cSAndrew Turner  PROVIDE(exidx_start = .);
74e5acd89cSAndrew Turner  .ARM.exidx : { *(.ARM.exidx) }
75e5acd89cSAndrew Turner  _exidx_end = .;
76e5acd89cSAndrew Turner  PROVIDE(exidx_end = .);
77e5acd89cSAndrew Turner
78e5acd89cSAndrew Turner  /* Adjust the address for the data segment.  We want to adjust up to
79e5acd89cSAndrew Turner     the same address within the page on the next page up.  */
80e5acd89cSAndrew Turner  . = ALIGN(0x1000) + (. & (0x1000 - 1)) ;
81e5acd89cSAndrew Turner  .data    :
82e5acd89cSAndrew Turner  {
83e5acd89cSAndrew Turner    *(.data)
84e5acd89cSAndrew Turner    *(.gnu.linkonce.d*)
85e5acd89cSAndrew Turner  }
86766a7c73SMateusz Guzik  . = ALIGN(128);
87766a7c73SMateusz Guzik  .data.read_frequently :
88766a7c73SMateusz Guzik  {
89766a7c73SMateusz Guzik    *(SORT_BY_ALIGNMENT(.data.read_frequently))
90766a7c73SMateusz Guzik  }
91766a7c73SMateusz Guzik  .data.read_mostly :
92766a7c73SMateusz Guzik  {
93766a7c73SMateusz Guzik    *(.data.read_mostly)
94766a7c73SMateusz Guzik  }
95766a7c73SMateusz Guzik  . = ALIGN(128);
96766a7c73SMateusz Guzik  .data.exclusive_cache_line :
97766a7c73SMateusz Guzik  {
98766a7c73SMateusz Guzik    *(.data.exclusive_cache_line)
99766a7c73SMateusz Guzik  }
100766a7c73SMateusz Guzik  . = ALIGN(128);
101e5acd89cSAndrew Turner  .data1   : { *(.data1) }
102e5acd89cSAndrew Turner  . = ALIGN(32 / 8);
103e5acd89cSAndrew Turner  _start_ctors = .;
104e5acd89cSAndrew Turner  PROVIDE (start_ctors = .);
105e5acd89cSAndrew Turner  .ctors         :
106e5acd89cSAndrew Turner  {
107e5acd89cSAndrew Turner    *(.ctors)
108e5acd89cSAndrew Turner  }
109e5acd89cSAndrew Turner  _stop_ctors = .;
110e5acd89cSAndrew Turner  PROVIDE (stop_ctors = .);
111e5acd89cSAndrew Turner  .dtors         :
112e5acd89cSAndrew Turner  {
113e5acd89cSAndrew Turner    *(.dtors)
114e5acd89cSAndrew Turner  }
115e5acd89cSAndrew Turner  .got           : { *(.got.plt) *(.got) }
116e5acd89cSAndrew Turner  .dynamic       : { *(.dynamic) }
117e5acd89cSAndrew Turner  /* We want the small data sections together, so single-instruction offsets
118e5acd89cSAndrew Turner     can access them all, and initialized data all before uninitialized, so
119e5acd89cSAndrew Turner     we can shorten the on-disk segment size.  */
120e5acd89cSAndrew Turner  . = ALIGN(8);
121e5acd89cSAndrew Turner  .sdata     : { *(.sdata) }
122e5acd89cSAndrew Turner  _edata  =  .;
123e5acd89cSAndrew Turner  PROVIDE (edata = .);
124e5acd89cSAndrew Turner  __bss_start = .;
125e5acd89cSAndrew Turner  .sbss      : { *(.sbss) *(.scommon) }
126e5acd89cSAndrew Turner  .bss       :
127e5acd89cSAndrew Turner  {
128e5acd89cSAndrew Turner   *(.dynbss)
129e5acd89cSAndrew Turner   *(.bss)
130e5acd89cSAndrew Turner   *(COMMON)
131e5acd89cSAndrew Turner   . = ALIGN(8);
132166ceb6fSAndrew Turner   __bss_end = .;
133166ceb6fSAndrew Turner   /* A section for the initial page table, it doesn't need to be in the
134166ceb6fSAndrew Turner      kernel file, however unlike normal .bss entries should not be zeroed
135166ceb6fSAndrew Turner      out as we use it before the .bss section is cleared. */
136166ceb6fSAndrew Turner   *(.init_pagetable)
137166ceb6fSAndrew Turner  }
138e5acd89cSAndrew Turner  _end = . ;
139e5acd89cSAndrew Turner  PROVIDE (end = .);
140e5acd89cSAndrew Turner  /* Stabs debugging sections.  */
141e5acd89cSAndrew Turner  .stab 0 : { *(.stab) }
142e5acd89cSAndrew Turner  .stabstr 0 : { *(.stabstr) }
143e5acd89cSAndrew Turner  .stab.excl 0 : { *(.stab.excl) }
144e5acd89cSAndrew Turner  .stab.exclstr 0 : { *(.stab.exclstr) }
145e5acd89cSAndrew Turner  .stab.index 0 : { *(.stab.index) }
146e5acd89cSAndrew Turner  .stab.indexstr 0 : { *(.stab.indexstr) }
147e5acd89cSAndrew Turner  .comment 0 : { *(.comment) }
148e5acd89cSAndrew Turner  /* DWARF debug sections.
149e5acd89cSAndrew Turner     Symbols in the DWARF debugging sections are relative to the beginning
150e5acd89cSAndrew Turner     of the section so we begin them at 0.  */
151e5acd89cSAndrew Turner  /* DWARF 1 */
152e5acd89cSAndrew Turner  .debug          0 : { *(.debug) }
153e5acd89cSAndrew Turner  .line           0 : { *(.line) }
154e5acd89cSAndrew Turner  /* GNU DWARF 1 extensions */
155e5acd89cSAndrew Turner  .debug_srcinfo  0 : { *(.debug_srcinfo) }
156e5acd89cSAndrew Turner  .debug_sfnames  0 : { *(.debug_sfnames) }
157e5acd89cSAndrew Turner  /* DWARF 1.1 and DWARF 2 */
158e5acd89cSAndrew Turner  .debug_aranges  0 : { *(.debug_aranges) }
159e5acd89cSAndrew Turner  .debug_pubnames 0 : { *(.debug_pubnames) }
160e5acd89cSAndrew Turner  /* DWARF 2 */
161e5acd89cSAndrew Turner  .debug_info     0 : { *(.debug_info) }
162e5acd89cSAndrew Turner  .debug_abbrev   0 : { *(.debug_abbrev) }
163e5acd89cSAndrew Turner  .debug_line     0 : { *(.debug_line) }
164e5acd89cSAndrew Turner  .debug_frame    0 : { *(.debug_frame) }
165e5acd89cSAndrew Turner  .debug_str      0 : { *(.debug_str) }
166e5acd89cSAndrew Turner  .debug_loc      0 : { *(.debug_loc) }
167e5acd89cSAndrew Turner  .debug_macinfo  0 : { *(.debug_macinfo) }
168e5acd89cSAndrew Turner  /* SGI/MIPS DWARF 2 extensions */
169e5acd89cSAndrew Turner  .debug_weaknames 0 : { *(.debug_weaknames) }
170e5acd89cSAndrew Turner  .debug_funcnames 0 : { *(.debug_funcnames) }
171e5acd89cSAndrew Turner  .debug_typenames 0 : { *(.debug_typenames) }
172e5acd89cSAndrew Turner  .debug_varnames  0 : { *(.debug_varnames) }
173*23dff4fdSWarner Losh
174*23dff4fdSWarner Losh  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
175*23dff4fdSWarner Losh  /DISCARD/ : { *(.note.GNU-stack) }
176e5acd89cSAndrew Turner}
177