blob: 55dd4e1300cc199312fc4e1829062db948d6f94b [file] [log] [blame]
Stefan Roese90c932b2009-10-27 16:11:26 +01001/*
2 * Copyright 2007-2009 Freescale Semiconductor, Inc.
3 *
Wolfgang Denkd79de1d2013-07-08 09:37:19 +02004 * SPDX-License-Identifier: GPL-2.0+
Stefan Roese90c932b2009-10-27 16:11:26 +01005 */
6
7#include "config.h" /* CONFIG_BOARDDIR */
8
9#ifndef RESET_VECTOR_ADDRESS
Ricardo Ribalda Delgadob3843812010-12-07 14:27:56 +010010#ifdef CONFIG_RESET_VECTOR_ADDRESS
11#define RESET_VECTOR_ADDRESS CONFIG_RESET_VECTOR_ADDRESS
12#else
Stefan Roese90c932b2009-10-27 16:11:26 +010013#define RESET_VECTOR_ADDRESS 0xfffffffc
14#endif
Ricardo Ribalda Delgadob3843812010-12-07 14:27:56 +010015#endif
Stefan Roese90c932b2009-10-27 16:11:26 +010016
17OUTPUT_ARCH(powerpc)
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +010018
Stefan Roese90c932b2009-10-27 16:11:26 +010019PHDRS
20{
21 text PT_LOAD;
22 bss PT_LOAD;
23}
24
25SECTIONS
26{
27 /* Read-only sections, merged into text segment: */
28 . = + SIZEOF_HEADERS;
Stefan Roese90c932b2009-10-27 16:11:26 +010029 .text :
30 {
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +010031 *(.text*)
Stefan Roese90c932b2009-10-27 16:11:26 +010032 } :text
33 _etext = .;
34 PROVIDE (etext = .);
35 .rodata :
36 {
Stefan Roese90c932b2009-10-27 16:11:26 +010037 *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
38 } :text
Stefan Roese90c932b2009-10-27 16:11:26 +010039
40 /* Read-write section, merged into data segment: */
41 . = (. + 0x00FF) & 0xFFFFFF00;
42 _erotext = .;
43 PROVIDE (erotext = .);
44 .reloc :
45 {
Stefan Roese90c932b2009-10-27 16:11:26 +010046 _GOT2_TABLE_ = .;
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +010047 KEEP(*(.got2))
Joakim Tjernlund42126a62010-12-03 17:30:37 +010048 KEEP(*(.got))
Stefan Roese90c932b2009-10-27 16:11:26 +010049 _FIXUP_TABLE_ = .;
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +010050 KEEP(*(.fixup))
Stefan Roese90c932b2009-10-27 16:11:26 +010051 }
Joakim Tjernlund42126a62010-12-03 17:30:37 +010052 __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
Stefan Roese90c932b2009-10-27 16:11:26 +010053 __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
54
55 .data :
56 {
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +010057 *(.data*)
58 *(.sdata*)
Stefan Roese90c932b2009-10-27 16:11:26 +010059 }
60 _edata = .;
61 PROVIDE (edata = .);
62
63 . = .;
Stefan Roese90c932b2009-10-27 16:11:26 +010064
Marek Vasut607092a2012-10-12 10:27:03 +000065 . = ALIGN(4);
66 .u_boot_list : {
Albert ARIBAUDc24895e2013-02-25 00:59:00 +000067 KEEP(*(SORT(.u_boot_list*)));
Marek Vasut607092a2012-10-12 10:27:03 +000068 }
69
Stefan Roese90c932b2009-10-27 16:11:26 +010070 . = .;
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) }
Simon Glass2713fcf2015-02-07 11:51:44 -070078 .data.init : {
79 *(.data.init)
80 . = ALIGN(256);
81 LONG(0) LONG(0) /* Extend u-boot.bin to here */
82 }
Stefan Roese90c932b2009-10-27 16:11:26 +010083 __init_end = .;
Simon Glass2713fcf2015-02-07 11:51:44 -070084 _end = .;
Stefan Roese90c932b2009-10-27 16:11:26 +010085
Stefan Roese07038ad2013-04-02 10:37:04 +020086#ifndef CONFIG_SPL
Stefan Roese90c932b2009-10-27 16:11:26 +010087#ifdef CONFIG_440
88 .bootpg RESET_VECTOR_ADDRESS - 0xffc :
89 {
Stefan Roese88fbf932010-04-15 16:07:28 +020090 arch/powerpc/cpu/ppc4xx/start.o (.bootpg)
Stefan Roese90c932b2009-10-27 16:11:26 +010091
92 /*
93 * PPC440 board need a board specific object with the
94 * TLB definitions. This needs to get included right after
95 * start.o, since the first shadow TLB only covers 4k
96 * of address space.
97 */
Ricardo Ribalda Delgadob3843812010-12-07 14:27:56 +010098#ifdef CONFIG_INIT_TLB
99 CONFIG_INIT_TLB (.bootpg)
100#else
Stefan Roese90c932b2009-10-27 16:11:26 +0100101 CONFIG_BOARDDIR/init.o (.bootpg)
Ricardo Ribalda Delgadob3843812010-12-07 14:27:56 +0100102#endif
Stefan Roese90c932b2009-10-27 16:11:26 +0100103 } :text = 0xffff
104#endif
105
106 .resetvec RESET_VECTOR_ADDRESS :
107 {
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +0100108 KEEP(*(.resetvec))
Stefan Roese90c932b2009-10-27 16:11:26 +0100109 } :text = 0xffff
110
111 . = RESET_VECTOR_ADDRESS + 0x4;
112
113 /*
114 * Make sure that the bss segment isn't linked at 0x0, otherwise its
115 * address won't be updated during relocation fixups. Note that
116 * this is a temporary fix. Code to dynamically the fixup the bss
117 * location will be added in the future. When the bss relocation
118 * fixup code is present this workaround should be removed.
119 */
120#if (RESET_VECTOR_ADDRESS == 0xfffffffc)
121 . |= 0x10;
122#endif
Stefan Roese07038ad2013-04-02 10:37:04 +0200123#endif /* CONFIG_SPL */
Stefan Roese90c932b2009-10-27 16:11:26 +0100124
125 __bss_start = .;
126 .bss (NOLOAD) :
127 {
Wolfgang Denkfe33e6e2010-11-21 20:55:42 +0100128 *(.bss*)
129 *(.sbss*)
Stefan Roese90c932b2009-10-27 16:11:26 +0100130 *(COMMON)
131 } :bss
132
133 . = ALIGN(4);
Simon Glassed70c8f2013-03-14 06:54:53 +0000134 __bss_end = . ;
Stefan Roese90c932b2009-10-27 16:11:26 +0100135 PROVIDE (end = .);
136}