blob: 2af4c80f6080accf32d591ac23c56dbf96d91d63 [file] [log] [blame]
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -05001/*
Kumar Gala7a577fd2011-01-12 02:48:53 -06002 * Copyright 2007-2009, 2011 Freescale Semiconductor, Inc.
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -05003 *
Wolfgang Denk1a459662013-07-08 09:37:19 +02004 * SPDX-License-Identifier: GPL-2.0+
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -05005 */
6
Kumar Gala7a577fd2011-01-12 02:48:53 -06007#include "config.h" /* CONFIG_BOARDDIR */
8
9#ifdef CONFIG_RESET_VECTOR_ADDRESS
10#define RESET_VECTOR_ADDRESS CONFIG_RESET_VECTOR_ADDRESS
11#else
Kumar Gala6c97a202009-09-09 11:40:41 -050012#define RESET_VECTOR_ADDRESS 0xfffffffc
13#endif
14
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050015OUTPUT_ARCH(powerpc)
Peter Tyserfbe53f52010-09-29 14:05:56 -050016
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050017PHDRS
18{
19 text PT_LOAD;
20 bss PT_LOAD;
21}
22
23SECTIONS
24{
25 /* Read-only sections, merged into text segment: */
26 . = + SIZEOF_HEADERS;
27 .interp : { *(.interp) }
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050028 .text :
29 {
Peter Tyserfbe53f52010-09-29 14:05:56 -050030 *(.text*)
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050031 } :text
32 _etext = .;
33 PROVIDE (etext = .);
34 .rodata :
35 {
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050036 *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
37 } :text
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050038
39 /* Read-write section, merged into data segment: */
40 . = (. + 0x00FF) & 0xFFFFFF00;
41 _erotext = .;
42 PROVIDE (erotext = .);
43 .reloc :
44 {
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050045 _GOT2_TABLE_ = .;
Peter Tyserfbe53f52010-09-29 14:05:56 -050046 KEEP(*(.got2))
Joakim Tjernlund337f5f52010-12-03 17:30:37 +010047 KEEP(*(.got))
48 PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050049 _FIXUP_TABLE_ = .;
Peter Tyserfbe53f52010-09-29 14:05:56 -050050 KEEP(*(.fixup))
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050051 }
Joakim Tjernlund337f5f52010-12-03 17:30:37 +010052 __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050053 __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
54
55 .data :
56 {
Peter Tyserfbe53f52010-09-29 14:05:56 -050057 *(.data*)
58 *(.sdata*)
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050059 }
60 _edata = .;
61 PROVIDE (edata = .);
62
63 . = .;
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050064
Marek Vasut55675142012-10-12 10:27:03 +000065 . = ALIGN(4);
66 .u_boot_list : {
Albert ARIBAUDef123c52013-02-25 00:59:00 +000067 KEEP(*(SORT(.u_boot_list*)));
Marek Vasut55675142012-10-12 10:27:03 +000068 }
69
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050070 . = .;
71 __start___ex_table = .;
72 __ex_table : { *(__ex_table) }
73 __stop___ex_table = .;
74
75 . = ALIGN(256);
76 __init_begin = .;
77 .text.init : { *(.text.init) }
78 .data.init : { *(.data.init) }
79 . = ALIGN(256);
80 __init_end = .;
81
Ying Zhang5df572f2013-05-20 14:07:23 +080082#ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
83 .bootpg ADDR(.text) - 0x1000 :
84 {
85 KEEP(arch/powerpc/cpu/mpc85xx/start.o (.bootpg))
86 } :text = 0xffff
87 . = ADDR(.text) + 0x80000;
88#else
Kumar Gala6c97a202009-09-09 11:40:41 -050089 .bootpg RESET_VECTOR_ADDRESS - 0xffc :
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050090 {
Stefan Roesea47a12b2010-04-15 16:07:28 +020091 arch/powerpc/cpu/mpc85xx/start.o (.bootpg)
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050092 } :text = 0xffff
93
Kumar Gala6c97a202009-09-09 11:40:41 -050094 .resetvec RESET_VECTOR_ADDRESS :
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050095 {
Peter Tyserfbe53f52010-09-29 14:05:56 -050096 KEEP(*(.resetvec))
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -050097 } :text = 0xffff
98
Kumar Gala6c97a202009-09-09 11:40:41 -050099 . = RESET_VECTOR_ADDRESS + 0x4;
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -0500100
Peter Tyser3beb40c2009-10-07 11:45:00 -0500101 /*
102 * Make sure that the bss segment isn't linked at 0x0, otherwise its
103 * address won't be updated during relocation fixups. Note that
104 * this is a temporary fix. Code to dynamically the fixup the bss
105 * location will be added in the future. When the bss relocation
106 * fixup code is present this workaround should be removed.
107 */
108#if (RESET_VECTOR_ADDRESS == 0xfffffffc)
109 . |= 0x10;
110#endif
Ying Zhang5df572f2013-05-20 14:07:23 +0800111#endif
Peter Tyser3beb40c2009-10-07 11:45:00 -0500112
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -0500113 __bss_start = .;
114 .bss (NOLOAD) :
115 {
Peter Tyserfbe53f52010-09-29 14:05:56 -0500116 *(.sbss*)
117 *(.bss*)
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -0500118 *(COMMON)
119 } :bss
120
121 . = ALIGN(4);
Simon Glass3929fb02013-03-14 06:54:53 +0000122 __bss_end = . ;
Srikanth Srinivasanfeb78382009-04-03 15:36:13 -0500123 PROVIDE (end = .);
124}