xref: /freebsd/sys/conf/ldscript.arm (revision d98a18d032e6ed3dbae30233d217c6597000e391)
178b36e3cSOlivier HouchardOUTPUT_ARCH(arm)
278b36e3cSOlivier HouchardENTRY(_start)
378b36e3cSOlivier Houchard
478b36e3cSOlivier HouchardSEARCH_DIR(/usr/lib);
578b36e3cSOlivier HouchardSECTIONS
678b36e3cSOlivier Houchard{
778b36e3cSOlivier Houchard  /* Read-only sections, merged into text segment: */
831333ebbSIan Lepore  . = text_start; /* This is set using --defsym= on the command line. */
9f5a9ac9cSOlivier Houchard  .text      :
10f5a9ac9cSOlivier Houchard  {
11f5a9ac9cSOlivier Houchard    *(.text)
12f5a9ac9cSOlivier Houchard    *(.stub)
13f5a9ac9cSOlivier Houchard    /* .gnu.warning sections are handled specially by elf32.em.  */
14f5a9ac9cSOlivier Houchard    *(.gnu.warning)
15f5a9ac9cSOlivier Houchard    *(.gnu.linkonce.t*)
16f5a9ac9cSOlivier Houchard  } =0x9090
17f5a9ac9cSOlivier Houchard  _etext = .;
18f5a9ac9cSOlivier Houchard  PROVIDE (etext = .);
19f5a9ac9cSOlivier Houchard  .fini      : { *(.fini)    } =0x9090
20f5a9ac9cSOlivier Houchard  .rodata    : { *(.rodata) *(.gnu.linkonce.r*) }
21f5a9ac9cSOlivier Houchard  .rodata1   : { *(.rodata1) }
2278b36e3cSOlivier Houchard   .interp     : { *(.interp) 	}
2378b36e3cSOlivier Houchard  .hash          : { *(.hash)		}
2478b36e3cSOlivier Houchard  .dynsym        : { *(.dynsym)		}
2578b36e3cSOlivier Houchard  .dynstr        : { *(.dynstr)		}
2678b36e3cSOlivier Houchard  .gnu.version   : { *(.gnu.version)	}
2778b36e3cSOlivier Houchard  .gnu.version_d   : { *(.gnu.version_d)	}
2878b36e3cSOlivier Houchard  .gnu.version_r   : { *(.gnu.version_r)	}
2974cd06b4SEd Maste  .note.gnu.build-id : {
3074cd06b4SEd Maste    PROVIDE (__build_id_start = .);
3174cd06b4SEd Maste    *(.note.gnu.build-id)
3274cd06b4SEd Maste    PROVIDE (__build_id_end = .);
3374cd06b4SEd Maste  }
3478b36e3cSOlivier Houchard  .rel.text      :
3578b36e3cSOlivier Houchard    { *(.rel.text) *(.rel.gnu.linkonce.t*) }
3678b36e3cSOlivier Houchard  .rela.text     :
3778b36e3cSOlivier Houchard    { *(.rela.text) *(.rela.gnu.linkonce.t*) }
3878b36e3cSOlivier Houchard  .rel.data      :
3978b36e3cSOlivier Houchard    { *(.rel.data) *(.rel.gnu.linkonce.d*) }
4078b36e3cSOlivier Houchard  .rela.data     :
4178b36e3cSOlivier Houchard    { *(.rela.data) *(.rela.gnu.linkonce.d*) }
4278b36e3cSOlivier Houchard  .rel.rodata    :
4378b36e3cSOlivier Houchard    { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
4478b36e3cSOlivier Houchard  .rela.rodata   :
4578b36e3cSOlivier Houchard    { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
4678b36e3cSOlivier Houchard  .rel.got       : { *(.rel.got)		}
4778b36e3cSOlivier Houchard  .rela.got      : { *(.rela.got)		}
4878b36e3cSOlivier Houchard  .rel.ctors     : { *(.rel.ctors)	}
4978b36e3cSOlivier Houchard  .rela.ctors    : { *(.rela.ctors)	}
5078b36e3cSOlivier Houchard  .rel.dtors     : { *(.rel.dtors)	}
5178b36e3cSOlivier Houchard  .rela.dtors    : { *(.rela.dtors)	}
5278b36e3cSOlivier Houchard  .rel.init      : { *(.rel.init)	}
5378b36e3cSOlivier Houchard  .rela.init     : { *(.rela.init)	}
5478b36e3cSOlivier Houchard  .rel.fini      : { *(.rel.fini)	}
5578b36e3cSOlivier Houchard  .rela.fini     : { *(.rela.fini)	}
5678b36e3cSOlivier Houchard  .rel.bss       : { *(.rel.bss)		}
5778b36e3cSOlivier Houchard  .rela.bss      : { *(.rela.bss)		}
5878b36e3cSOlivier Houchard  .rel.plt       : { *(.rel.plt)		}
5978b36e3cSOlivier Houchard  .rela.plt      : { *(.rela.plt)		}
6078b36e3cSOlivier Houchard  .init          : { *(.init)	} =0x9090
6178b36e3cSOlivier Houchard  .plt      : { *(.plt)	}
62f5a9ac9cSOlivier Houchard
6367727fbfSAndrew Turner  . = ALIGN(4);
64b56c0c67SAndrew Turner  _extab_start = .;
65b56c0c67SAndrew Turner  PROVIDE(extab_start = .);
66b56c0c67SAndrew Turner  .ARM.extab : { *(.ARM.extab) }
670381f0b6SMichal Meloun  _extab_end = .;
68b56c0c67SAndrew Turner  PROVIDE(extab_end = .);
69b56c0c67SAndrew Turner
701701dfaeSMichal Meloun  . = ALIGN(4);
71b56c0c67SAndrew Turner  _exidx_start = .;
72b56c0c67SAndrew Turner  PROVIDE(exidx_start = .);
73b56c0c67SAndrew Turner  .ARM.exidx : { *(.ARM.exidx) }
74b56c0c67SAndrew Turner  _exidx_end = .;
75b56c0c67SAndrew Turner  PROVIDE(exidx_end = .);
76b56c0c67SAndrew Turner
7778b36e3cSOlivier Houchard  /* Adjust the address for the data segment.  We want to adjust up to
7878b36e3cSOlivier Houchard     the same address within the page on the next page up.  */
7978b36e3cSOlivier Houchard  . = ALIGN(0x1000) + (. & (0x1000 - 1)) ;
8078b36e3cSOlivier Houchard  .data    :
8178b36e3cSOlivier Houchard  {
8278b36e3cSOlivier Houchard    *(.data)
8378b36e3cSOlivier Houchard    *(.gnu.linkonce.d*)
8478b36e3cSOlivier Houchard  }
85*d98a18d0SMichal Meloun  . = ALIGN(64);
86*d98a18d0SMichal Meloun  .data.read_frequently :
87*d98a18d0SMichal Meloun  {
88*d98a18d0SMichal Meloun    *(SORT_BY_ALIGNMENT(.data.read_frequently))
89*d98a18d0SMichal Meloun  }
90*d98a18d0SMichal Meloun  .data.read_mostly :
91*d98a18d0SMichal Meloun  {
92*d98a18d0SMichal Meloun    *(.data.read_mostly)
93*d98a18d0SMichal Meloun  }
94*d98a18d0SMichal Meloun  . = ALIGN(64);
95*d98a18d0SMichal Meloun  .data.exclusive_cache_line :
96*d98a18d0SMichal Meloun  {
97*d98a18d0SMichal Meloun    *(.data.exclusive_cache_line)
98*d98a18d0SMichal Meloun  }
99*d98a18d0SMichal Meloun  . = ALIGN(64);
10078b36e3cSOlivier Houchard  .data1   : { *(.data1) }
10178b36e3cSOlivier Houchard  . = ALIGN(32 / 8);
1023e76d052SZhenlei Huang  .init_array    :
1033e76d052SZhenlei Huang  {
1043e76d052SZhenlei Huang    PROVIDE_HIDDEN (__init_array_start = .);
1053e76d052SZhenlei Huang    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*)))
1063e76d052SZhenlei Huang    KEEP (*(.init_array))
1073e76d052SZhenlei Huang    PROVIDE_HIDDEN (__init_array_end = .);
1083e76d052SZhenlei Huang  }
1093e76d052SZhenlei Huang  .fini_array    :
1103e76d052SZhenlei Huang  {
1113e76d052SZhenlei Huang    PROVIDE_HIDDEN (__fini_array_start = .);
1123e76d052SZhenlei Huang    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*)))
1133e76d052SZhenlei Huang    KEEP (*(.fini_array))
1143e76d052SZhenlei Huang    PROVIDE_HIDDEN (__fini_array_end = .);
1153e76d052SZhenlei Huang  }
11678b36e3cSOlivier Houchard  _start_ctors = .;
11778b36e3cSOlivier Houchard  PROVIDE (start_ctors = .);
11878b36e3cSOlivier Houchard  .ctors         :
11978b36e3cSOlivier Houchard  {
12078b36e3cSOlivier Houchard    *(.ctors)
12178b36e3cSOlivier Houchard  }
12278b36e3cSOlivier Houchard  _stop_ctors = .;
12378b36e3cSOlivier Houchard  PROVIDE (stop_ctors = .);
12478b36e3cSOlivier Houchard  .dtors         :
12578b36e3cSOlivier Houchard  {
12678b36e3cSOlivier Houchard    *(.dtors)
12778b36e3cSOlivier Houchard  }
12878b36e3cSOlivier Houchard  .got           : { *(.got.plt) *(.got) }
12978b36e3cSOlivier Houchard  .dynamic       : { *(.dynamic) }
13078b36e3cSOlivier Houchard  /* We want the small data sections together, so single-instruction offsets
13178b36e3cSOlivier Houchard     can access them all, and initialized data all before uninitialized, so
13278b36e3cSOlivier Houchard     we can shorten the on-disk segment size.  */
13378b36e3cSOlivier Houchard  .sdata     : { *(.sdata) }
13478b36e3cSOlivier Houchard  _edata  =  .;
13578b36e3cSOlivier Houchard  PROVIDE (edata = .);
13678b36e3cSOlivier Houchard  __bss_start = .;
13778b36e3cSOlivier Houchard  .sbss      : { *(.sbss) *(.scommon) }
13878b36e3cSOlivier Houchard  .bss       :
13978b36e3cSOlivier Houchard  {
14078b36e3cSOlivier Houchard   *(.dynbss)
14178b36e3cSOlivier Houchard   *(.bss)
14278b36e3cSOlivier Houchard   *(COMMON)
143979d76c9SAndrew Turner   . = ALIGN(32 / 8);
144979d76c9SAndrew Turner   _ebss = .;
145979d76c9SAndrew Turner   /* A section for the initial page table, it doesn't need to be in the
146979d76c9SAndrew Turner      kernel file, however unlike normal .bss entries should not be zeroed
147979d76c9SAndrew Turner      out as we use it before the .bss section is cleared. */
148979d76c9SAndrew Turner   *(.init_pagetable)
14978b36e3cSOlivier Houchard  }
15078b36e3cSOlivier Houchard  . = ALIGN(32 / 8);
15178b36e3cSOlivier Houchard  _end = . ;
15278b36e3cSOlivier Houchard  PROVIDE (end = .);
15337d6d682SWarner Losh
15437d6d682SWarner Losh  /* Debug */
15537d6d682SWarner Losh  INCLUDE debuginfo.ldscript
15623dff4fdSWarner Losh
15723dff4fdSWarner Losh  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
15823dff4fdSWarner Losh  /DISCARD/ : { *(.note.GNU-stack) }
15978b36e3cSOlivier Houchard}
160