[117] | 1 | $
|
---|
| 2 | $ TOPPERS ATK2
|
---|
| 3 | $ Toyohashi Open Platform for Embedded Real-Time Systems
|
---|
| 4 | $ Automotive Kernel Version 2
|
---|
| 5 | $
|
---|
| 6 | $ Copyright (C) 2007-2014 by Center for Embedded Computing Systems
|
---|
| 7 | $ Graduate School of Information Science, Nagoya Univ., JAPAN
|
---|
| 8 | $ Copyright (C) 2011-2014 by FUJI SOFT INCORPORATED, JAPAN
|
---|
| 9 | $ Copyright (C) 2011-2013 by Spansion LLC, USA
|
---|
| 10 | $ Copyright (C) 2011-2013 by NEC Communication Systems, Ltd., JAPAN
|
---|
| 11 | $ Copyright (C) 2011-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
|
---|
| 12 | $ Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
|
---|
| 13 | $ Copyright (C) 2011-2014 by Sunny Giken Inc., JAPAN
|
---|
| 14 | $ Copyright (C) 2011-2014 by TOSHIBA CORPORATION, JAPAN
|
---|
| 15 | $ Copyright (C) 2011-2014 by Witz Corporation, JAPAN
|
---|
| 16 | $
|
---|
| 17 | $ 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
|
---|
| 18 | $ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
---|
| 19 | $ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
---|
| 20 | $ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
---|
| 21 | $ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
---|
| 22 | $ スコード中に含まれていること.
|
---|
| 23 | $ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
---|
| 24 | $ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
---|
| 25 | $ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
---|
| 26 | $ の無保証規定を掲載すること.
|
---|
| 27 | $ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
---|
| 28 | $ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
---|
| 29 | $ と.
|
---|
| 30 | $ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
---|
| 31 | $ 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
| 32 | $ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
---|
| 33 | $ 報告すること.
|
---|
| 34 | $ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
---|
| 35 | $ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
---|
| 36 | $ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
---|
| 37 | $ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
---|
| 38 | $ 免責すること.
|
---|
| 39 | $
|
---|
| 40 | $ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
|
---|
| 41 | $ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
|
---|
| 42 | $ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
|
---|
| 43 | $ 用する者に対して,AUTOSARパートナーになることを求めている.
|
---|
| 44 | $
|
---|
| 45 | $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
---|
| 46 | $ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
---|
| 47 | $ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
---|
| 48 | $ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
---|
| 49 | $ の責任を負わない.
|
---|
| 50 | $
|
---|
| 51 | $ $Id: ldscript.tf 115 2014-12-10 01:33:17Z t_ishikawa $
|
---|
| 52 | $
|
---|
| 53 |
|
---|
| 54 | $ =====================================================================
|
---|
| 55 | $ 仮のリンカスクリプト(cfg2_out.ld)の生成
|
---|
| 56 | $ =====================================================================
|
---|
| 57 |
|
---|
| 58 | $
|
---|
| 59 | $ 生成するファイルの指定
|
---|
| 60 | $
|
---|
| 61 | $FILE "cfg2_out.ld"$
|
---|
| 62 |
|
---|
| 63 | $
|
---|
| 64 | $ ターゲット依存のOUTPUT記述の生成
|
---|
| 65 | $
|
---|
| 66 | $IF ISFUNCTION("GENERATE_OUTPUT")$
|
---|
| 67 | $GENERATE_OUTPUT()$
|
---|
| 68 | $END$
|
---|
| 69 |
|
---|
| 70 | $
|
---|
| 71 | $ MEMORY記述の生成
|
---|
| 72 | $
|
---|
| 73 | MEMORY {$NL$
|
---|
| 74 | $FOREACH reg REG.ORDER_LIST$
|
---|
| 75 | $TAB$$FORMAT("%s : ORIGIN = 0x%x, LENGTH = 0x%x",
|
---|
| 76 | REG.REGNAME[reg], +REG.BASE[reg], +REG.SIZE[reg])$$NL$
|
---|
| 77 | $END$
|
---|
| 78 | $IF ISFUNCTION("GENERATE_MEMORY")$
|
---|
| 79 | $GENERATE_MEMORY()$
|
---|
| 80 | $END$
|
---|
| 81 | }$NL$
|
---|
| 82 | $NL$
|
---|
| 83 |
|
---|
| 84 | $
|
---|
| 85 | $ ターゲット依存のPROVIDE記述の生成
|
---|
| 86 | $
|
---|
| 87 | $IF ISFUNCTION("GENERATE_PROVIDE")$
|
---|
| 88 | $GENERATE_PROVIDE()$
|
---|
| 89 | $END$
|
---|
| 90 |
|
---|
| 91 | $
|
---|
| 92 | $ 変数の初期化
|
---|
| 93 | $
|
---|
| 94 | $reset_lma = 0$
|
---|
| 95 |
|
---|
| 96 | $provide_gp = 0$
|
---|
| 97 |
|
---|
| 98 | $
|
---|
| 99 | $ リンク指定の生成
|
---|
| 100 | $
|
---|
| 101 | SECTIONS {$NL$
|
---|
| 102 | $ ターゲット依存のセクション記述の生成
|
---|
| 103 | $IF ISFUNCTION("GENERATE_SECTION_FIRST")$
|
---|
| 104 | $GENERATE_SECTION_FIRST()$
|
---|
| 105 | $END$
|
---|
| 106 |
|
---|
| 107 | $IF TOPPERS_LABEL_ASM$
|
---|
| 108 | $PREFIX_START = "___start_"$
|
---|
| 109 | $PREFIX_END = "___end_"$
|
---|
| 110 | $PREFIX_LIMIT = "___limit_"$
|
---|
| 111 | $ELSE$
|
---|
| 112 | $PREFIX_START = "__start_"$
|
---|
| 113 | $PREFIX_END = "__end_"$
|
---|
| 114 | $PREFIX_LIMIT = "__limit_"$
|
---|
| 115 | $END$
|
---|
| 116 |
|
---|
| 117 | $FOREACH moid MO_ORDER$
|
---|
| 118 | $IF MO.LINKER[moid]$
|
---|
| 119 | $ // セクションの開始記述の生成
|
---|
| 120 | $IF (MO.SEFLAG[moid] & 0x01) != 0$
|
---|
| 121 | $TAB$.$MO.SLABEL[moid]$$SPC$
|
---|
| 122 | $IF (MO.SEFLAG[moid] & 0x40) == 0$
|
---|
| 123 | ALIGN($TARGET_SEC_ALIGN_STR$)$SPC$
|
---|
| 124 | $END$
|
---|
| 125 | $IF (MO.MEMATR[moid] & TA_NOWRITE) == 0
|
---|
| 126 | && (MO.MEMATR[moid] & TA_MEMINI) == 0$
|
---|
| 127 | (NOLOAD)$SPC$
|
---|
| 128 | $END$
|
---|
| 129 | :$SPC$
|
---|
| 130 | $IF !EQ(MO.ILABEL[moid], "")$
|
---|
| 131 | ALIGN($TARGET_SEC_ALIGN_STR$)$SPC$
|
---|
| 132 | $END$
|
---|
| 133 | {$NL$
|
---|
| 134 | $END$
|
---|
| 135 |
|
---|
| 136 | $ // セクションとメモリオブジェクトの開始ラベルの生成
|
---|
| 137 | $IF (MO.SEFLAG[moid] & 0x400) != 0$
|
---|
| 138 | $IF ISFUNCTION("GENERATE_GP_LABEL")$
|
---|
| 139 | $GENERATE_GP_LABEL()$
|
---|
| 140 | $END$
|
---|
| 141 | $END$
|
---|
| 142 | $IF (MO.SEFLAG[moid] & 0x100) != 0$
|
---|
| 143 | $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
|
---|
| 144 | $TAB$$TAB$$PREFIX_START$srpw_all = .;$NL$
|
---|
| 145 | $ELSE$
|
---|
| 146 | $TAB$$TAB$$PREFIX_START$ssrpw_all = .;$NL$
|
---|
| 147 | $END$
|
---|
| 148 | $END$
|
---|
| 149 | $IF (MO.SEFLAG[moid] & 0x10) != 0$
|
---|
| 150 | $IF !EQ(MO.PLABEL[moid], "")$
|
---|
| 151 | $TAB$$TAB$$PREFIX_START$$MO.PLABEL[moid]$ = .;$NL$
|
---|
| 152 | $END$
|
---|
| 153 | $END$
|
---|
| 154 | $IF (MO.SEFLAG[moid] & 0x01) != 0$
|
---|
| 155 | $IF !EQ(MO.SLABEL[moid], ALT(omit_start_slabel,""))$
|
---|
| 156 | $TAB$$TAB$$PREFIX_START$$MO.SLABEL[moid]$ = .;$NL$
|
---|
| 157 | $END$
|
---|
| 158 | $END$
|
---|
| 159 | $IF (MO.SEFLAG[moid] & 0x04) != 0$
|
---|
| 160 | $IF (MO.SEFLAG[moid] & 0x01) == 0$
|
---|
| 161 | $NL$
|
---|
| 162 | $END$
|
---|
| 163 | $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])
|
---|
| 164 | && !EQ(MO.MLABEL[moid], ALT(omit_start_mlabel,""))$
|
---|
| 165 | $TAB$$TAB$$PREFIX_START$$MO.MLABEL[moid]$ = .;$NL$
|
---|
| 166 | $END$
|
---|
| 167 | $TAB$$TAB$
|
---|
| 168 | $END$
|
---|
| 169 |
|
---|
| 170 | $ // リンクするファイル記述の生成
|
---|
| 171 | $section_dscr = SECTION_DESCRIPTION(MO.SECTION[moid])$
|
---|
| 172 | $IF MO.TYPE[moid] == TOPPERS_ATTMOD$
|
---|
| 173 | $IF EQ(MO.MODULE[moid], "kernel_mem.o")$
|
---|
| 174 | kernel_mem2.o
|
---|
| 175 | $ELSE$
|
---|
| 176 | $MO.MODULE[moid]$
|
---|
| 177 | $END$
|
---|
| 178 | ($section_dscr$)$SPC$
|
---|
| 179 | $ELIF MO.TYPE[moid] == TOPPERS_ATTSEC$
|
---|
| 180 | *($section_dscr$)$SPC$
|
---|
| 181 | $ELSE$
|
---|
| 182 | $ // ユーザスタック領域
|
---|
| 183 | Os_Lcfg.o($section_dscr$)$SPC$
|
---|
| 184 | $END$
|
---|
| 185 |
|
---|
| 186 | $ // セクションとメモリオブジェクトの終了ラベルの生成
|
---|
| 187 | $IF (MO.SEFLAG[moid] & 0x08) != 0$
|
---|
| 188 | $NL$
|
---|
| 189 | $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])$
|
---|
| 190 | $TAB$$TAB$$PREFIX_END$$MO.MLABEL[moid]$ = .;$NL$
|
---|
| 191 | $END$
|
---|
| 192 | $END$
|
---|
| 193 | $IF (MO.SEFLAG[moid] & 0x02) != 0$
|
---|
| 194 | $TAB$$TAB$$PREFIX_END$$MO.SLABEL[moid]$ = .;$NL$
|
---|
| 195 | $END$
|
---|
| 196 | $IF (MO.SEFLAG[moid] & 0x200) != 0$
|
---|
| 197 | $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
|
---|
| 198 | $TAB$$TAB$$PREFIX_END$srpw_all = .;$NL$
|
---|
| 199 | $ELSE$
|
---|
| 200 | $TAB$$TAB$$PREFIX_END$ssrpw_all = .;$NL$
|
---|
| 201 | $END$
|
---|
| 202 | $END$
|
---|
| 203 |
|
---|
| 204 | $ // セクションの終了記述の生成
|
---|
| 205 | $IF (MO.SEFLAG[moid] & 0x02) != 0$
|
---|
| 206 | $TAB$} > $REG.REGNAME[MO.MEMREG[moid]]$
|
---|
| 207 | $IF !OMIT_IDATA$
|
---|
| 208 | $IF !EQ(MO.ILABEL[moid], "")$
|
---|
| 209 | $SPC$AT > $REG.REGNAME[STANDARD_ROM]$
|
---|
| 210 | $reset_lma = 1$
|
---|
| 211 | $ELIF reset_lma$
|
---|
| 212 | $SPC$AT > $REG.REGNAME[MO.MEMREG[moid]]$
|
---|
| 213 | $reset_lma = 0$
|
---|
| 214 | $END$
|
---|
| 215 | $END$
|
---|
| 216 | $IF ISFUNCTION("TARGET_CODE_FILLER")$
|
---|
| 217 | $TARGET_CODE_FILLER(moid)$
|
---|
| 218 | $END$
|
---|
| 219 | $NL$
|
---|
| 220 | $IF !OMIT_IDATA && !EQ(MO.ILABEL[moid], "")$
|
---|
| 221 | $TAB$$PREFIX_START$$MO.ILABEL[moid]$ = LOADADDR(.$MO.SLABEL[moid]$);$NL$
|
---|
| 222 | $END$
|
---|
| 223 | $END$
|
---|
| 224 |
|
---|
| 225 | $ // アライン記述の生成
|
---|
| 226 | $IF (MO.SEFLAG[moid] & 0x20) != 0$
|
---|
| 227 | $TAB$. = ALIGN($TARGET_PAGE_SIZE_STR$);$NL$
|
---|
| 228 | $ELIF (MO.SEFLAG[moid] & 0x08) != 0$
|
---|
| 229 | $ // セクションが継続している場合には,TABを1つ出力
|
---|
| 230 | $IF (MO.SEFLAG[moid] & 0x02) == 0$$TAB$$END$
|
---|
| 231 | $TAB$. = ALIGN($TARGET_SEC_ALIGN_STR$);$NL$
|
---|
| 232 | $END$
|
---|
| 233 |
|
---|
| 234 | $ // セクションとメモリオブジェクトの上限ラベルの生成
|
---|
| 235 | $IF (MO.SEFLAG[moid] & 0x08) != 0$
|
---|
| 236 | $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])$
|
---|
| 237 | $ // セクションが継続している場合には,TABを1つ出力
|
---|
| 238 | $IF (MO.SEFLAG[moid] & 0x02) == 0$$TAB$$END$
|
---|
| 239 | $TAB$$PREFIX_LIMIT$$MO.MLABEL[moid]$ = .;$NL$
|
---|
| 240 | $END$
|
---|
| 241 | $END$
|
---|
| 242 | $IF (MO.SEFLAG[moid] & 0x02) != 0$
|
---|
| 243 | $TAB$$PREFIX_LIMIT$$MO.SLABEL[moid]$ = .;$NL$
|
---|
| 244 | $END$
|
---|
| 245 | $IF (MO.SEFLAG[moid] & 0x20) != 0$
|
---|
| 246 | $IF !EQ(MO.PLABEL[moid], "")$
|
---|
| 247 | $TAB$$PREFIX_LIMIT$$MO.PLABEL[moid]$ = .;$NL$
|
---|
| 248 | $END$
|
---|
| 249 | $END$
|
---|
| 250 | $IF (MO.SEFLAG[moid] & 0x200) != 0$
|
---|
| 251 | $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
|
---|
| 252 | $TAB$$PREFIX_LIMIT$srpw_all = .;$NL$
|
---|
| 253 | $ELSE$
|
---|
| 254 | $TAB$$PREFIX_LIMIT$ssrpw_all = .;$NL$
|
---|
| 255 | $END$
|
---|
| 256 | $END$
|
---|
| 257 |
|
---|
| 258 | $IF (MO.SEFLAG[moid] & 0x02) != 0$
|
---|
| 259 | $NL$
|
---|
| 260 | $END$
|
---|
| 261 |
|
---|
| 262 | $ // メモリリージョン末でアラインさせるためのダミーセクションの生成
|
---|
| 263 | $IF (MO.SEFLAG[moid] & 0x80) != 0$
|
---|
| 264 | $TAB$.$REG.REGNAME[MO.MEMREG[moid]]$_align$SPC$
|
---|
| 265 | ALIGN($TARGET_SEC_ALIGN_STR$) : {$NL$
|
---|
| 266 | $TAB$$TAB$__$REG.REGNAME[MO.MEMREG[moid]]$_align = .;$NL$
|
---|
| 267 | $TAB$} > $REG.REGNAME[MO.MEMREG[moid]]$$NL$
|
---|
| 268 | $NL$
|
---|
| 269 | $END$
|
---|
| 270 | $END$
|
---|
| 271 | $END$
|
---|
| 272 |
|
---|
| 273 | $FOREACH lsid RANGE(1, numls)$
|
---|
| 274 | $TAB$$LNKSEC.SECTION[lsid]$ : {$NL$
|
---|
| 275 | $TAB$$TAB$*($LNKSEC.SECTION[lsid]$)$NL$
|
---|
| 276 | $TAB$} > $REG.REGNAME[LNKSEC.MEMREG[lsid]]$$NL$
|
---|
| 277 | $NL$
|
---|
| 278 | $END$
|
---|
| 279 |
|
---|
| 280 | $ // C++testで必要な標準ライブラリで使用するセクション
|
---|
| 281 | $TAB$.dummy_rom_for_cpptest : {$NL$
|
---|
| 282 | $TAB$$TAB$*(.ctors.65535) *(.eh_frame)$NL$
|
---|
| 283 | $TAB$} > $REG.REGNAME[STANDARD_ROM]$$NL$
|
---|
| 284 | $TAB$. = ALIGN(64);$NL$$NL$
|
---|
| 285 | $TAB$.dummy_ram_for_cpptest : {$NL$
|
---|
| 286 | $TAB$$TAB$_end = .;$NL$
|
---|
| 287 | $TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
|
---|
| 288 | $TAB$. = ALIGN(64);$NL$$NL$
|
---|
| 289 |
|
---|
| 290 | $TAB$/DISCARD/ : {$NL$
|
---|
| 291 | $TAB$$TAB$*(.rel.dyn)$NL$
|
---|
| 292 | $TAB$}$NL$
|
---|
| 293 | $NL$
|
---|
| 294 |
|
---|
| 295 | $TAB$/* DWARF debug sections.$NL$
|
---|
| 296 | $TAB$Symbols in the DWARF debugging sections are relative to $NL$
|
---|
| 297 | $TAB$the beginning of the section so we begin them at 0. */$NL$
|
---|
| 298 | $NL$
|
---|
| 299 | $TAB$/* DWARF 1 */$NL$
|
---|
| 300 | $TAB$.debug 0 : { *(.debug) }$NL$
|
---|
| 301 | $TAB$.line 0 : { *(.line) }$NL$
|
---|
| 302 | $NL$
|
---|
| 303 | $TAB$/* GNU DWARF 1 extensions */$NL$
|
---|
| 304 | $TAB$.debug_srcinfo 0 : { *(.debug_srcinfo) }$NL$
|
---|
| 305 | $TAB$.debug_sfnames 0 : { *(.debug_sfnames) }$NL$
|
---|
| 306 | $NL$
|
---|
| 307 | $TAB$/* DWARF 1.1 and DWARF 2 */$NL$
|
---|
| 308 | $TAB$.debug_aranges 0 : { *(.debug_aranges) }$NL$
|
---|
| 309 | $TAB$.debug_pubnames 0 : { *(.debug_pubnames) }$NL$
|
---|
| 310 | $NL$
|
---|
| 311 | $TAB$/* DWARF 2 */$NL$
|
---|
| 312 | $TAB$.debug_info 0 : { *(.debug_info) }$NL$
|
---|
| 313 | $TAB$.debug_abbrev 0 : { *(.debug_abbrev) }$NL$
|
---|
| 314 | $TAB$.debug_line 0 : { *(.debug_line) }$NL$
|
---|
| 315 | $TAB$.debug_frame 0 : { *(.debug_frame) }$NL$
|
---|
| 316 | $TAB$.debug_str 0 : { *(.debug_str) }$NL$
|
---|
| 317 | $TAB$.debug_loc 0 : { *(.debug_loc) }$NL$
|
---|
| 318 | $TAB$.debug_macinfo 0 : { *(.debug_macinfo) }$NL$
|
---|
| 319 | $TAB$.debug_ranges 0 : { *(.debug_ranges) }$NL$
|
---|
| 320 | $NL$
|
---|
| 321 | $TAB$/* SGI/MIPS DWARF 2 extensions */$NL$
|
---|
| 322 | $TAB$.debug_weaknames 0 : { *(.debug_weaknames) }$NL$
|
---|
| 323 | $TAB$.debug_funcnames 0 : { *(.debug_funcnames) }$NL$
|
---|
| 324 | $TAB$.debug_typenames 0 : { *(.debug_typenames) }$NL$
|
---|
| 325 | $TAB$.debug_varnames 0 : { *(.debug_varnames) }$NL$
|
---|
| 326 | $NL$
|
---|
| 327 | }$NL$
|
---|