1# Copyright (C) 2014-2024 Free Software Foundation, Inc. 2# 3# Copying and distribution of this file, with or without modification, 4# are permitted in any medium without royalty provided the copyright 5# notice and this notice are preserved. 6 7test -z "$ENTRY" && ENTRY=_start 8test -z "${BIG_OUTPUT_FORMAT}" && BIG_OUTPUT_FORMAT=${OUTPUT_FORMAT} 9test -z "${LITTLE_OUTPUT_FORMAT}" && LITTLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} 10if [ -z "$MACHINE" ]; then OUTPUT_ARCH=${ARCH}; else OUTPUT_ARCH=${ARCH}:${MACHINE}; fi 11test "$LD_FLAG" = "N" && DATA_ADDR=. 12INTERP=".interp ${RELOCATING-0} : { *(.interp) }" 13PLT=".plt ${RELOCATING-0} : { *(.plt) }" 14 15 16CTOR=".ctors ${CONSTRUCTING-0} : 17 { 18 ${CONSTRUCTING+${CTOR_START}} 19 /* gcc uses crtbegin.o to find the start of 20 the constructors, so we make sure it is 21 first. Because this is a wildcard, it 22 doesn't matter if the user does not 23 actually link against crtbegin.o; the 24 linker won't look for a file to match a 25 wildcard. The wildcard also means that it 26 doesn't matter which directory crtbegin.o 27 is in. */ 28 29 KEEP (*crtbegin.o(.ctors)) 30 KEEP (*crtbegin?.o(.ctors)) 31 32 /* We don't want to include the .ctor section from 33 the crtend.o file until after the sorted ctors. 34 The .ctor section from the crtend file contains the 35 end of ctors marker and it must be last */ 36 37 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors)) 38 KEEP (*(SORT(.ctors.*))) 39 KEEP (*(.ctors)) 40 ${CONSTRUCTING+${CTOR_END}} 41 }" 42 43DTOR=" .dtors ${CONSTRUCTING-0} : 44 { 45 ${CONSTRUCTING+${DTOR_START}} 46 KEEP (*crtbegin.o(.dtors)) 47 KEEP (*crtbegin?.o(.dtors)) 48 KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors)) 49 KEEP (*(SORT(.dtors.*))) 50 KEEP (*(.dtors)) 51 ${CONSTRUCTING+${DTOR_END}} 52 }" 53 54STACK=" .stack : { _stack = .; *(.stack) } >STACK " 55 56# if this is for an embedded system, don't add SIZEOF_HEADERS. 57if [ -z "$EMBEDDED" ]; then 58 test -z "${READONLY_BASE_ADDRESS}" && READONLY_BASE_ADDRESS="${READONLY_START_ADDR} + SIZEOF_HEADERS" 59else 60 test -z "${READONLY_BASE_ADDRESS}" && READONLY_BASE_ADDRESS="${READONLY_START_ADDR}" 61fi 62 63cat <<EOF 64/* Copyright (C) 2014-2024 Free Software Foundation, Inc. 65 66 Copying and distribution of this script, with or without modification, 67 are permitted in any medium without royalty provided the copyright 68 notice and this notice are preserved. */ 69 70OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", 71 "${LITTLE_OUTPUT_FORMAT}") 72OUTPUT_ARCH(${OUTPUT_ARCH}) 73EOF 74 75test -n "${RELOCATING}" && cat <<EOF 76ENTRY(${ENTRY}) 77 78${LIB_SEARCH_DIRS} 79/* Do we need any of these for elf? 80 __DYNAMIC = 0; ${STACKZERO+${STACKZERO}} ${SHLIB_PATH+${SHLIB_PATH}} */ 81${EXECUTABLE_SYMBOLS} 82 83MEMORY 84{ 85 /* These are the values for the D10V-TS3 board. 86 There are other memory regions available on 87 the TS3 (eg ROM, FLASH, etc) but these are not 88 used by this script. */ 89 90 INSN : org = 0x01000000, len = 256K 91 DATA : org = 0x02000000, len = 48K 92 93 /* This is a fake memory region at the top of the 94 on-chip RAM, used as the start of the 95 (descending) stack. */ 96 97 STACK : org = 0x0200BFFC, len = 4 98} 99 100EOF 101 102cat <<EOF 103SECTIONS 104{ 105 .text ${RELOCATING+${TEXT_START_ADDR}} : 106 { 107 ${RELOCATING+${TEXT_START_SYMBOLS} 108 KEEP (*(SORT_NONE(.init))) 109 KEEP (*(SORT_NONE(.init.*))) 110 KEEP (*(SORT_NONE(.fini))) 111 KEEP (*(SORT_NONE(.fini.*)))} 112 *(.text) 113 ${RELOCATING+*(.text.*)} 114 /* .gnu.warning sections are handled specially by elf.em. */ 115 *(.gnu.warning) 116 ${RELOCATING+*(.gnu.linkonce.t*) 117 _etext = .; 118 PROVIDE (etext = .);} 119 } ${RELOCATING+ >INSN} =${NOP-0} 120 121 .rodata ${RELOCATING+${READONLY_START_ADDR}} : { 122 *(.rodata) 123 ${RELOCATING+*(.gnu.linkonce.r*) 124 *(.rodata.*)} 125 } ${RELOCATING+ >DATA} 126 127 .rodata1 ${RELOCATING-0} : { 128 *(.rodata1) 129 ${RELOCATING+*(.rodata1.*)} 130 } ${RELOCATING+ >DATA} 131 132 .data ${RELOCATING-0} : 133 { 134 ${RELOCATING+${DATA_START_SYMBOLS}} 135 *(.data) 136 ${RELOCATING+*(.data.*) 137 *(.gnu.linkonce.d*)} 138 ${CONSTRUCTING+CONSTRUCTORS} 139 } ${RELOCATING+ >DATA} 140 141 .data1 ${RELOCATING-0} : { 142 *(.data1) 143 ${RELOCATING+*(.data1.*)} 144 } ${RELOCATING+ >DATA} 145 146 ${RELOCATING+${CTOR} >DATA} 147 ${RELOCATING+${DTOR} >DATA} 148 149 /* We want the small data sections together, so single-instruction offsets 150 can access them all, and initialized data all before uninitialized, so 151 we can shorten the on-disk segment size. */ 152 .sdata ${RELOCATING-0} : { 153 *(.sdata) 154 ${RELOCATING+*(.sdata.*)} 155 } ${RELOCATING+ >DATA} 156 157 ${RELOCATING+_edata = .;} 158 ${RELOCATING+PROVIDE (edata = .);} 159 ${RELOCATING+. = ALIGN(ALIGNOF(NEXT_SECTION));} 160 ${RELOCATING+__bss_start = .;} 161 .sbss ${RELOCATING-0} : { *(.sbss)${RELOCATING+ *(.scommon)} } ${RELOCATING+ >DATA} 162 .bss ${RELOCATING-0} : 163 { 164 ${RELOCATING+*(.dynbss) 165 *(.dynbss.*)} 166 *(.bss) 167 ${RELOCATING+*(.bss.*) 168 *(COMMON)} 169 } ${RELOCATING+ >DATA} 170 171 ${RELOCATING+_end = . ;} 172 ${RELOCATING+PROVIDE (end = .);} 173 174 ${RELOCATING+$STACK} 175 176EOF 177 178source_sh $srcdir/scripttempl/misc-sections.sc 179source_sh $srcdir/scripttempl/DWARF.sc 180 181cat <<EOF 182} 183EOF 184