xref: /freebsd/sys/conf/ldscript.arm64 (revision a3cefe7f2b4df0f70ff92d4570ce18e517af43ec)
1OUTPUT_ARCH(aarch64)
2ENTRY(_start)
3
4SEARCH_DIR(/usr/lib);
5SECTIONS
6{
7  /* Read-only sections, merged into text segment: */
8  . = text_start; /* This is set using --defsym= on the command line. */
9  .vmm_vectors : { *(.vmm_vectors) }
10  .text      :
11  {
12    *(.text)
13    *(.stub)
14    /* .gnu.warning sections are handled specially by elf32.em.  */
15    *(.gnu.warning)
16    *(.gnu.linkonce.t*)
17  } =0x9090
18  .plt       :
19  {
20    *(.plt)
21    *(.iplt)
22  }
23
24  /*
25   * Align to the the largest page size the kernel could be built for.
26   * If we don't then building page tables in locore.S could fail as it
27   * assumes the .text section is on a different page to later sections.
28   */
29  . = ALIGN(CONSTANT(MAXPAGESIZE));
30  _etext = .;
31  PROVIDE (etext = .);
32
33  .fini      : { *(.fini)    } =0x9090
34  .rodata    : { *(.rodata*) *(.gnu.linkonce.r*) }
35  .rodata1   : { *(.rodata1) }
36   .interp     : { *(.interp) 	}
37  .hash          : { *(.hash)		}
38  .dynsym        : { *(.dynsym)		}
39  .dynstr        : { *(.dynstr)		}
40  .gnu.version   : { *(.gnu.version)	}
41  .gnu.version_d   : { *(.gnu.version_d)	}
42  .gnu.version_r   : { *(.gnu.version_r)	}
43  .note.gnu.build-id : {
44    PROVIDE (__build_id_start = .);
45    *(.note.gnu.build-id)
46    PROVIDE (__build_id_end = .);
47  }
48  .rel.text      :
49    { *(.rel.text) *(.rel.gnu.linkonce.t*) }
50  .rela.text     :
51    { *(.rela.text) *(.rela.gnu.linkonce.t*) }
52  .rel.data      :
53    { *(.rel.data) *(.rel.gnu.linkonce.d*) }
54  .rela.data     :
55    { *(.rela.data) *(.rela.gnu.linkonce.d*) }
56  .rel.rodata    :
57    { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
58  .rela.rodata   :
59    { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
60  .rel.got       : { *(.rel.got)		}
61  .rela.got      : { *(.rela.got)		}
62  .rel.ctors     : { *(.rel.ctors)	}
63  .rela.ctors    : { *(.rela.ctors)	}
64  .rel.dtors     : { *(.rel.dtors)	}
65  .rela.dtors    : { *(.rela.dtors)	}
66  .rel.init      : { *(.rel.init)	}
67  .rela.init     : { *(.rela.init)	}
68  .rel.fini      : { *(.rel.fini)	}
69  .rela.fini     : { *(.rela.fini)	}
70  .rel.bss       : { *(.rel.bss)		}
71  .rela.bss      : { *(.rela.bss)		}
72  .rel.plt       : { *(.rel.plt)		}
73  .rela.plt      : { *(.rela.plt)		}
74  .init          : { *(.init)	} =0x9090
75
76  . = ALIGN(4);
77  _extab_start = .;
78  PROVIDE(extab_start = .);
79  .ARM.extab : { *(.ARM.extab) }
80  _extab.end = .;
81  PROVIDE(extab_end = .);
82
83  _exidx_start = .;
84  PROVIDE(exidx_start = .);
85  .ARM.exidx : { *(.ARM.exidx) }
86  _exidx_end = .;
87  PROVIDE(exidx_end = .);
88
89  /* Adjust the address for the data segment.  We want to adjust up to
90     the same address within the page on the next page up.  */
91  . = ALIGN(0x1000) + (. & (0x1000 - 1)) ;
92  .data    :
93  {
94    *(.data)
95    *(.gnu.linkonce.d*)
96  }
97  . = ALIGN(128);
98  .data.read_frequently :
99  {
100    *(SORT_BY_ALIGNMENT(.data.read_frequently))
101  }
102  .data.read_mostly :
103  {
104    *(.data.read_mostly)
105  }
106  . = ALIGN(128);
107  .data.exclusive_cache_line :
108  {
109    *(.data.exclusive_cache_line)
110  }
111  . = ALIGN(128);
112  .data1   : { *(.data1) }
113  . = ALIGN(32 / 8);
114  .init_array    :
115  {
116    PROVIDE_HIDDEN (__init_array_start = .);
117    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)))
118    KEEP (*(.init_array))
119    PROVIDE_HIDDEN (__init_array_end = .);
120  }
121  .fini_array    :
122  {
123    PROVIDE_HIDDEN (__fini_array_start = .);
124    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*)))
125    KEEP (*(.fini_array))
126    PROVIDE_HIDDEN (__fini_array_end = .);
127  }
128  _start_ctors = .;
129  PROVIDE (start_ctors = .);
130  .ctors         :
131  {
132    *(.ctors)
133  }
134  _stop_ctors = .;
135  PROVIDE (stop_ctors = .);
136  .dtors         :
137  {
138    *(.dtors)
139  }
140  .got           : { *(.got.plt) *(.got) }
141  .dynamic       : { *(.dynamic) }
142  /* We want the small data sections together, so single-instruction offsets
143     can access them all, and initialized data all before uninitialized, so
144     we can shorten the on-disk segment size.  */
145  . = ALIGN(8);
146  .sdata     : { *(.sdata) }
147  _edata  =  .;
148  PROVIDE (edata = .);
149  . = ALIGN(16);
150  __bss_start = .;
151  .sbss      : { *(.sbss) *(.scommon) }
152  .bss       :
153  {
154   *(.dynbss)
155   *(.bss)
156   *(COMMON)
157   . = ALIGN(16);
158   __bss_end = .;
159   /* A section for the initial page table, it doesn't need to be in the
160      kernel file, however unlike normal .bss entries should not be zeroed
161      out as we use it before the .bss section is cleared. */
162   *(.init_pagetable)
163  }
164  _end = . ;
165  PROVIDE (end = .);
166
167  /* Debug */
168  INCLUDE debuginfo.ldscript
169
170  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
171  /DISCARD/ : { *(.note.GNU-stack) }
172}
173