178b36e3cSOlivier Houchard/* $FreeBSD$ */ 278b36e3cSOlivier HouchardOUTPUT_ARCH(arm) 378b36e3cSOlivier HouchardENTRY(_start) 478b36e3cSOlivier Houchard 578b36e3cSOlivier HouchardSEARCH_DIR(/usr/lib); 678b36e3cSOlivier HouchardSECTIONS 778b36e3cSOlivier Houchard{ 878b36e3cSOlivier Houchard /* Read-only sections, merged into text segment: */ 9c60e48e2SOlivier Houchard . = KERNVIRTADDR + SIZEOF_HEADERS; 10f5a9ac9cSOlivier Houchard .text : 11f5a9ac9cSOlivier Houchard { 12f5a9ac9cSOlivier Houchard *(.text) 13f5a9ac9cSOlivier Houchard *(.stub) 14f5a9ac9cSOlivier Houchard /* .gnu.warning sections are handled specially by elf32.em. */ 15f5a9ac9cSOlivier Houchard *(.gnu.warning) 16f5a9ac9cSOlivier Houchard *(.gnu.linkonce.t*) 17f5a9ac9cSOlivier Houchard } =0x9090 18f5a9ac9cSOlivier Houchard _etext = .; 19f5a9ac9cSOlivier Houchard PROVIDE (etext = .); 20f5a9ac9cSOlivier Houchard .fini : { *(.fini) } =0x9090 21f5a9ac9cSOlivier Houchard .rodata : { *(.rodata) *(.gnu.linkonce.r*) } 22f5a9ac9cSOlivier Houchard .rodata1 : { *(.rodata1) } 2378b36e3cSOlivier Houchard .interp : { *(.interp) } 2478b36e3cSOlivier Houchard .hash : { *(.hash) } 2578b36e3cSOlivier Houchard .dynsym : { *(.dynsym) } 2678b36e3cSOlivier Houchard .dynstr : { *(.dynstr) } 2778b36e3cSOlivier Houchard .gnu.version : { *(.gnu.version) } 2878b36e3cSOlivier Houchard .gnu.version_d : { *(.gnu.version_d) } 2978b36e3cSOlivier Houchard .gnu.version_r : { *(.gnu.version_r) } 30*74cd06b4SEd Maste .note.gnu.build-id : { 31*74cd06b4SEd Maste PROVIDE (__build_id_start = .); 32*74cd06b4SEd Maste *(.note.gnu.build-id) 33*74cd06b4SEd Maste PROVIDE (__build_id_end = .); 34*74cd06b4SEd Maste } 3578b36e3cSOlivier Houchard .rel.text : 3678b36e3cSOlivier Houchard { *(.rel.text) *(.rel.gnu.linkonce.t*) } 3778b36e3cSOlivier Houchard .rela.text : 3878b36e3cSOlivier Houchard { *(.rela.text) *(.rela.gnu.linkonce.t*) } 3978b36e3cSOlivier Houchard .rel.data : 4078b36e3cSOlivier Houchard { *(.rel.data) *(.rel.gnu.linkonce.d*) } 4178b36e3cSOlivier Houchard .rela.data : 4278b36e3cSOlivier Houchard { *(.rela.data) *(.rela.gnu.linkonce.d*) } 4378b36e3cSOlivier Houchard .rel.rodata : 4478b36e3cSOlivier Houchard { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } 4578b36e3cSOlivier Houchard .rela.rodata : 4678b36e3cSOlivier Houchard { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 4778b36e3cSOlivier Houchard .rel.got : { *(.rel.got) } 4878b36e3cSOlivier Houchard .rela.got : { *(.rela.got) } 4978b36e3cSOlivier Houchard .rel.ctors : { *(.rel.ctors) } 5078b36e3cSOlivier Houchard .rela.ctors : { *(.rela.ctors) } 5178b36e3cSOlivier Houchard .rel.dtors : { *(.rel.dtors) } 5278b36e3cSOlivier Houchard .rela.dtors : { *(.rela.dtors) } 5378b36e3cSOlivier Houchard .rel.init : { *(.rel.init) } 5478b36e3cSOlivier Houchard .rela.init : { *(.rela.init) } 5578b36e3cSOlivier Houchard .rel.fini : { *(.rel.fini) } 5678b36e3cSOlivier Houchard .rela.fini : { *(.rela.fini) } 5778b36e3cSOlivier Houchard .rel.bss : { *(.rel.bss) } 5878b36e3cSOlivier Houchard .rela.bss : { *(.rela.bss) } 5978b36e3cSOlivier Houchard .rel.plt : { *(.rel.plt) } 6078b36e3cSOlivier Houchard .rela.plt : { *(.rela.plt) } 6178b36e3cSOlivier Houchard .init : { *(.init) } =0x9090 6278b36e3cSOlivier Houchard .plt : { *(.plt) } 63f5a9ac9cSOlivier Houchard 6467727fbfSAndrew Turner . = ALIGN(4); 65b56c0c67SAndrew Turner _extab_start = .; 66b56c0c67SAndrew Turner PROVIDE(extab_start = .); 67b56c0c67SAndrew Turner .ARM.extab : { *(.ARM.extab) } 68b56c0c67SAndrew Turner _extab.end = .; 69b56c0c67SAndrew Turner PROVIDE(extab_end = .); 70b56c0c67SAndrew Turner 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 } 8578b36e3cSOlivier Houchard .data1 : { *(.data1) } 8678b36e3cSOlivier Houchard . = ALIGN(32 / 8); 8778b36e3cSOlivier Houchard _start_ctors = .; 8878b36e3cSOlivier Houchard PROVIDE (start_ctors = .); 8978b36e3cSOlivier Houchard .ctors : 9078b36e3cSOlivier Houchard { 9178b36e3cSOlivier Houchard *(.ctors) 9278b36e3cSOlivier Houchard } 9378b36e3cSOlivier Houchard _stop_ctors = .; 9478b36e3cSOlivier Houchard PROVIDE (stop_ctors = .); 9578b36e3cSOlivier Houchard .dtors : 9678b36e3cSOlivier Houchard { 9778b36e3cSOlivier Houchard *(.dtors) 9878b36e3cSOlivier Houchard } 9978b36e3cSOlivier Houchard .got : { *(.got.plt) *(.got) } 10078b36e3cSOlivier Houchard .dynamic : { *(.dynamic) } 10178b36e3cSOlivier Houchard /* We want the small data sections together, so single-instruction offsets 10278b36e3cSOlivier Houchard can access them all, and initialized data all before uninitialized, so 10378b36e3cSOlivier Houchard we can shorten the on-disk segment size. */ 10478b36e3cSOlivier Houchard .sdata : { *(.sdata) } 10578b36e3cSOlivier Houchard _edata = .; 10678b36e3cSOlivier Houchard PROVIDE (edata = .); 10778b36e3cSOlivier Houchard __bss_start = .; 10878b36e3cSOlivier Houchard .sbss : { *(.sbss) *(.scommon) } 10978b36e3cSOlivier Houchard .bss : 11078b36e3cSOlivier Houchard { 11178b36e3cSOlivier Houchard *(.dynbss) 11278b36e3cSOlivier Houchard *(.bss) 11378b36e3cSOlivier Houchard *(COMMON) 114979d76c9SAndrew Turner . = ALIGN(32 / 8); 115979d76c9SAndrew Turner _ebss = .; 116979d76c9SAndrew Turner /* A section for the initial page table, it doesn't need to be in the 117979d76c9SAndrew Turner kernel file, however unlike normal .bss entries should not be zeroed 118979d76c9SAndrew Turner out as we use it before the .bss section is cleared. */ 119979d76c9SAndrew Turner *(.init_pagetable) 12078b36e3cSOlivier Houchard } 12178b36e3cSOlivier Houchard . = ALIGN(32 / 8); 12278b36e3cSOlivier Houchard _end = . ; 12378b36e3cSOlivier Houchard PROVIDE (end = .); 12478b36e3cSOlivier Houchard /* Stabs debugging sections. */ 12578b36e3cSOlivier Houchard .stab 0 : { *(.stab) } 12678b36e3cSOlivier Houchard .stabstr 0 : { *(.stabstr) } 12778b36e3cSOlivier Houchard .stab.excl 0 : { *(.stab.excl) } 12878b36e3cSOlivier Houchard .stab.exclstr 0 : { *(.stab.exclstr) } 12978b36e3cSOlivier Houchard .stab.index 0 : { *(.stab.index) } 13078b36e3cSOlivier Houchard .stab.indexstr 0 : { *(.stab.indexstr) } 13178b36e3cSOlivier Houchard .comment 0 : { *(.comment) } 13278b36e3cSOlivier Houchard /* DWARF debug sections. 13378b36e3cSOlivier Houchard Symbols in the DWARF debugging sections are relative to the beginning 13478b36e3cSOlivier Houchard of the section so we begin them at 0. */ 13578b36e3cSOlivier Houchard /* DWARF 1 */ 13678b36e3cSOlivier Houchard .debug 0 : { *(.debug) } 13778b36e3cSOlivier Houchard .line 0 : { *(.line) } 13878b36e3cSOlivier Houchard /* GNU DWARF 1 extensions */ 13978b36e3cSOlivier Houchard .debug_srcinfo 0 : { *(.debug_srcinfo) } 14078b36e3cSOlivier Houchard .debug_sfnames 0 : { *(.debug_sfnames) } 14178b36e3cSOlivier Houchard /* DWARF 1.1 and DWARF 2 */ 14278b36e3cSOlivier Houchard .debug_aranges 0 : { *(.debug_aranges) } 14378b36e3cSOlivier Houchard .debug_pubnames 0 : { *(.debug_pubnames) } 14478b36e3cSOlivier Houchard /* DWARF 2 */ 14578b36e3cSOlivier Houchard .debug_info 0 : { *(.debug_info) } 14678b36e3cSOlivier Houchard .debug_abbrev 0 : { *(.debug_abbrev) } 14778b36e3cSOlivier Houchard .debug_line 0 : { *(.debug_line) } 14878b36e3cSOlivier Houchard .debug_frame 0 : { *(.debug_frame) } 14978b36e3cSOlivier Houchard .debug_str 0 : { *(.debug_str) } 15078b36e3cSOlivier Houchard .debug_loc 0 : { *(.debug_loc) } 15178b36e3cSOlivier Houchard .debug_macinfo 0 : { *(.debug_macinfo) } 15278b36e3cSOlivier Houchard /* SGI/MIPS DWARF 2 extensions */ 15378b36e3cSOlivier Houchard .debug_weaknames 0 : { *(.debug_weaknames) } 15478b36e3cSOlivier Houchard .debug_funcnames 0 : { *(.debug_funcnames) } 15578b36e3cSOlivier Houchard .debug_typenames 0 : { *(.debug_typenames) } 15678b36e3cSOlivier Houchard .debug_varnames 0 : { *(.debug_varnames) } 15778b36e3cSOlivier Houchard /* These must appear regardless of . */ 15878b36e3cSOlivier Houchard} 159