1dde3b70dSSimon Glass/* 2dde3b70dSSimon Glass * Copyright (c) 2004-2008 Texas Instruments 3dde3b70dSSimon Glass * 4dde3b70dSSimon Glass * (C) Copyright 2002 5dde3b70dSSimon Glass * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 6dde3b70dSSimon Glass * 71a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 8dde3b70dSSimon Glass */ 9dde3b70dSSimon Glass 10bf433afdSMarc Zyngier#include <config.h> 11bf433afdSMarc Zyngier 12dde3b70dSSimon GlassOUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") 13dde3b70dSSimon GlassOUTPUT_ARCH(arm) 14dde3b70dSSimon GlassENTRY(_start) 15dde3b70dSSimon GlassSECTIONS 16dde3b70dSSimon Glass{ 17*d47cb0b6SPeng Fan /* 18*d47cb0b6SPeng Fan * Discard the relocation entries for secure text. 19*d47cb0b6SPeng Fan * The secure code is bundled with u-boot image, so there will 20*d47cb0b6SPeng Fan * be relocations entries for the secure code, since we use 21*d47cb0b6SPeng Fan * "-mword-relocations" to compile and "-pie" to link into the 22*d47cb0b6SPeng Fan * final image. We do not need the relocation entries for secure 23*d47cb0b6SPeng Fan * code, because secure code will not be relocated, it only needs 24*d47cb0b6SPeng Fan * to be copied from loading address to CONFIG_ARMV7_SECURE_BASE, 25*d47cb0b6SPeng Fan * which is the linking and running address for secure code. 26*d47cb0b6SPeng Fan * If keep the relocation entries in .rel.dyn section, 27*d47cb0b6SPeng Fan * "relocation offset + linking address" may locates into an 28*d47cb0b6SPeng Fan * address that is reserved by SoC, then will trigger data abort. 29*d47cb0b6SPeng Fan * 30*d47cb0b6SPeng Fan * The reason that move .rel._secure at the beginning, is to 31*d47cb0b6SPeng Fan * avoid hole in the final image. 32*d47cb0b6SPeng Fan */ 33*d47cb0b6SPeng Fan /DISCARD/ : { *(.rel._secure*) } 34dde3b70dSSimon Glass . = 0x00000000; 35dde3b70dSSimon Glass 36dde3b70dSSimon Glass . = ALIGN(4); 37dde3b70dSSimon Glass .text : 38dde3b70dSSimon Glass { 39d026dec8SAlbert ARIBAUD *(.__image_copy_start) 4041623c91SAlbert ARIBAUD *(.vectors) 41b68d6712SStephen Warren CPUDIR/start.o (.text*) 42b68d6712SStephen Warren *(.text*) 43dde3b70dSSimon Glass } 44dde3b70dSSimon Glass 45104d6fb6SJan Kiszka#ifdef CONFIG_ARMV7_NONSEC 46bf433afdSMarc Zyngier 47bf433afdSMarc Zyngier#ifndef CONFIG_ARMV7_SECURE_BASE 48bf433afdSMarc Zyngier#define CONFIG_ARMV7_SECURE_BASE 49bf433afdSMarc Zyngier#endif 50bf433afdSMarc Zyngier 51bf433afdSMarc Zyngier .__secure_start : { 52bf433afdSMarc Zyngier . = ALIGN(0x1000); 53bf433afdSMarc Zyngier *(.__secure_start) 54bf433afdSMarc Zyngier } 55bf433afdSMarc Zyngier 56bf433afdSMarc Zyngier .secure_text CONFIG_ARMV7_SECURE_BASE : 57bf433afdSMarc Zyngier AT(ADDR(.__secure_start) + SIZEOF(.__secure_start)) 58bf433afdSMarc Zyngier { 59bf433afdSMarc Zyngier *(._secure.text) 60bf433afdSMarc Zyngier } 61bf433afdSMarc Zyngier 62bf433afdSMarc Zyngier . = LOADADDR(.__secure_start) + 63bf433afdSMarc Zyngier SIZEOF(.__secure_start) + 64bf433afdSMarc Zyngier SIZEOF(.secure_text); 65bf433afdSMarc Zyngier 66bf433afdSMarc Zyngier __secure_end_lma = .; 67bf433afdSMarc Zyngier .__secure_end : AT(__secure_end_lma) { 68bf433afdSMarc Zyngier *(.__secure_end) 69bf433afdSMarc Zyngier LONG(0x1d1071c); /* Must output something to reset LMA */ 70bf433afdSMarc Zyngier } 71bf433afdSMarc Zyngier#endif 72bf433afdSMarc Zyngier 73dde3b70dSSimon Glass . = ALIGN(4); 74dde3b70dSSimon Glass .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } 75dde3b70dSSimon Glass 76dde3b70dSSimon Glass . = ALIGN(4); 77dde3b70dSSimon Glass .data : { 78b68d6712SStephen Warren *(.data*) 79dde3b70dSSimon Glass } 80dde3b70dSSimon Glass 81dde3b70dSSimon Glass . = ALIGN(4); 82dde3b70dSSimon Glass 83dde3b70dSSimon Glass . = .; 84dde3b70dSSimon Glass 85dde3b70dSSimon Glass . = ALIGN(4); 8655675142SMarek Vasut .u_boot_list : { 87ef123c52SAlbert ARIBAUD KEEP(*(SORT(.u_boot_list*))); 8855675142SMarek Vasut } 8955675142SMarek Vasut 9055675142SMarek Vasut . = ALIGN(4); 91dde3b70dSSimon Glass 92d026dec8SAlbert ARIBAUD .image_copy_end : 93d026dec8SAlbert ARIBAUD { 94d026dec8SAlbert ARIBAUD *(.__image_copy_end) 95d026dec8SAlbert ARIBAUD } 96dde3b70dSSimon Glass 9747bd65efSAlbert ARIBAUD .rel_dyn_start : 9847bd65efSAlbert ARIBAUD { 9947bd65efSAlbert ARIBAUD *(.__rel_dyn_start) 10047bd65efSAlbert ARIBAUD } 10147bd65efSAlbert ARIBAUD 102dde3b70dSSimon Glass .rel.dyn : { 103dde3b70dSSimon Glass *(.rel*) 10447bd65efSAlbert ARIBAUD } 10547bd65efSAlbert ARIBAUD 10647bd65efSAlbert ARIBAUD .rel_dyn_end : 10747bd65efSAlbert ARIBAUD { 10847bd65efSAlbert ARIBAUD *(.__rel_dyn_end) 109dde3b70dSSimon Glass } 110dde3b70dSSimon Glass 111d0b5d9daSAlbert ARIBAUD .end : 112d0b5d9daSAlbert ARIBAUD { 113d0b5d9daSAlbert ARIBAUD *(.__end) 114d0b5d9daSAlbert ARIBAUD } 115d0b5d9daSAlbert ARIBAUD 116d0b5d9daSAlbert ARIBAUD _image_binary_end = .; 117dde3b70dSSimon Glass 118dde3b70dSSimon Glass /* 119dde3b70dSSimon Glass * Deprecated: this MMU section is used by pxa at present but 120dde3b70dSSimon Glass * should not be used by new boards/CPUs. 121dde3b70dSSimon Glass */ 122dde3b70dSSimon Glass . = ALIGN(4096); 123dde3b70dSSimon Glass .mmutable : { 124dde3b70dSSimon Glass *(.mmutable) 125dde3b70dSSimon Glass } 126dde3b70dSSimon Glass 127f84a7b8fSAlbert ARIBAUD/* 128f84a7b8fSAlbert ARIBAUD * Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c 129f84a7b8fSAlbert ARIBAUD * __bss_base and __bss_limit are for linker only (overlay ordering) 130f84a7b8fSAlbert ARIBAUD */ 131f84a7b8fSAlbert ARIBAUD 1323ebd1cbcSAlbert ARIBAUD .bss_start __rel_dyn_start (OVERLAY) : { 1333ebd1cbcSAlbert ARIBAUD KEEP(*(.__bss_start)); 134f84a7b8fSAlbert ARIBAUD __bss_base = .; 1353ebd1cbcSAlbert ARIBAUD } 1363ebd1cbcSAlbert ARIBAUD 137f84a7b8fSAlbert ARIBAUD .bss __bss_base (OVERLAY) : { 138b68d6712SStephen Warren *(.bss*) 139dde3b70dSSimon Glass . = ALIGN(4); 140f84a7b8fSAlbert ARIBAUD __bss_limit = .; 141dde3b70dSSimon Glass } 142dde3b70dSSimon Glass 143f84a7b8fSAlbert ARIBAUD .bss_end __bss_limit (OVERLAY) : { 144f84a7b8fSAlbert ARIBAUD KEEP(*(.__bss_end)); 145dde3b70dSSimon Glass } 146dde3b70dSSimon Glass 147d0b5d9daSAlbert ARIBAUD .dynsym _image_binary_end : { *(.dynsym) } 14847ed5dd0SAlbert ARIBAUD .dynbss : { *(.dynbss) } 14947ed5dd0SAlbert ARIBAUD .dynstr : { *(.dynstr*) } 15047ed5dd0SAlbert ARIBAUD .dynamic : { *(.dynamic*) } 15147ed5dd0SAlbert ARIBAUD .plt : { *(.plt*) } 15247ed5dd0SAlbert ARIBAUD .interp : { *(.interp*) } 1532c67e0e7SAndreas Färber .gnu.hash : { *(.gnu.hash) } 15447ed5dd0SAlbert ARIBAUD .gnu : { *(.gnu*) } 15547ed5dd0SAlbert ARIBAUD .ARM.exidx : { *(.ARM.exidx*) } 156b02bfc4dSAlbert ARIBAUD .gnu.linkonce.armexidx : { *(.gnu.linkonce.armexidx.*) } 157dde3b70dSSimon Glass} 158