1/* 2 * Copyright 2007-2009, 2011 Freescale Semiconductor, Inc. 3 * 4 * See file CREDITS for list of people who contributed to this 5 * project. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as 9 * published by the Free Software Foundation; either version 2 of 10 * the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20 * MA 02111-1307 USA 21 */ 22 23#include "config.h" /* CONFIG_BOARDDIR */ 24 25#ifdef CONFIG_RESET_VECTOR_ADDRESS 26#define RESET_VECTOR_ADDRESS CONFIG_RESET_VECTOR_ADDRESS 27#else 28#define RESET_VECTOR_ADDRESS 0xfffffffc 29#endif 30 31OUTPUT_ARCH(powerpc) 32 33PHDRS 34{ 35 text PT_LOAD; 36 bss PT_LOAD; 37} 38 39SECTIONS 40{ 41 /* Read-only sections, merged into text segment: */ 42 . = + SIZEOF_HEADERS; 43 .interp : { *(.interp) } 44 .text : 45 { 46 *(.text*) 47 } :text 48 _etext = .; 49 PROVIDE (etext = .); 50 .rodata : 51 { 52 *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) 53 } :text 54 55 /* Read-write section, merged into data segment: */ 56 . = (. + 0x00FF) & 0xFFFFFF00; 57 _erotext = .; 58 PROVIDE (erotext = .); 59 .reloc : 60 { 61 _GOT2_TABLE_ = .; 62 KEEP(*(.got2)) 63 KEEP(*(.got)) 64 PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4); 65 _FIXUP_TABLE_ = .; 66 KEEP(*(.fixup)) 67 } 68 __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1; 69 __fixup_entries = (. - _FIXUP_TABLE_) >> 2; 70 71 .data : 72 { 73 *(.data*) 74 *(.sdata*) 75 } 76 _edata = .; 77 PROVIDE (edata = .); 78 79 . = .; 80 81 . = ALIGN(4); 82 .u_boot_list : { 83 KEEP(*(SORT(.u_boot_list*))); 84 } 85 86 . = .; 87 __start___ex_table = .; 88 __ex_table : { *(__ex_table) } 89 __stop___ex_table = .; 90 91 . = ALIGN(256); 92 __init_begin = .; 93 .text.init : { *(.text.init) } 94 .data.init : { *(.data.init) } 95 . = ALIGN(256); 96 __init_end = .; 97 98#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC 99 .bootpg ADDR(.text) - 0x1000 : 100 { 101 KEEP(arch/powerpc/cpu/mpc85xx/start.o (.bootpg)) 102 } :text = 0xffff 103 . = ADDR(.text) + 0x80000; 104#else 105 .bootpg RESET_VECTOR_ADDRESS - 0xffc : 106 { 107 arch/powerpc/cpu/mpc85xx/start.o (.bootpg) 108 } :text = 0xffff 109 110 .resetvec RESET_VECTOR_ADDRESS : 111 { 112 KEEP(*(.resetvec)) 113 } :text = 0xffff 114 115 . = RESET_VECTOR_ADDRESS + 0x4; 116 117 /* 118 * Make sure that the bss segment isn't linked at 0x0, otherwise its 119 * address won't be updated during relocation fixups. Note that 120 * this is a temporary fix. Code to dynamically the fixup the bss 121 * location will be added in the future. When the bss relocation 122 * fixup code is present this workaround should be removed. 123 */ 124#if (RESET_VECTOR_ADDRESS == 0xfffffffc) 125 . |= 0x10; 126#endif 127#endif 128 129 __bss_start = .; 130 .bss (NOLOAD) : 131 { 132 *(.sbss*) 133 *(.bss*) 134 *(COMMON) 135 } :bss 136 137 . = ALIGN(4); 138 __bss_end = . ; 139 PROVIDE (end = .); 140} 141