]> git.sur5r.net Git - u-boot/blob - arch/powerpc/cpu/mpc85xx/u-boot.lds
fsl/usb: Workaround for USB erratum-A007075
[u-boot] / arch / powerpc / cpu / mpc85xx / u-boot.lds
1 /*
2  * Copyright 2007-2009, 2011 Freescale Semiconductor, Inc.
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6
7 #include "config.h"     /* CONFIG_BOARDDIR */
8
9 #ifdef CONFIG_RESET_VECTOR_ADDRESS
10 #define RESET_VECTOR_ADDRESS    CONFIG_RESET_VECTOR_ADDRESS
11 #else
12 #define RESET_VECTOR_ADDRESS    0xfffffffc
13 #endif
14
15 OUTPUT_ARCH(powerpc)
16 ENTRY(_start_e500)
17
18 PHDRS
19 {
20   text PT_LOAD;
21   bss PT_LOAD;
22 }
23
24 SECTIONS
25 {
26   /* Read-only sections, merged into text segment: */
27   . = + SIZEOF_HEADERS;
28   .interp : { *(.interp) }
29   .text      :
30   {
31     *(.text*)
32    } :text
33     _etext = .;
34     PROVIDE (etext = .);
35     .rodata    :
36    {
37     *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
38   } :text
39
40   /* Read-write section, merged into data segment: */
41   . = (. + 0x00FF) & 0xFFFFFF00;
42   _erotext = .;
43   PROVIDE (erotext = .);
44   .reloc   :
45   {
46     _GOT2_TABLE_ = .;
47     KEEP(*(.got2))
48     KEEP(*(.got))
49     PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
50     _FIXUP_TABLE_ = .;
51     KEEP(*(.fixup))
52   }
53   __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
54   __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
55
56   .data    :
57   {
58     *(.data*)
59     *(.sdata*)
60   }
61   _edata  =  .;
62   PROVIDE (edata = .);
63
64   . = .;
65
66   . = ALIGN(4);
67   .u_boot_list : {
68         KEEP(*(SORT(.u_boot_list*)));
69   }
70
71   . = .;
72   __start___ex_table = .;
73   __ex_table : { *(__ex_table) }
74   __stop___ex_table = .;
75
76   . = ALIGN(256);
77   __init_begin = .;
78   .text.init : { *(.text.init) }
79   .data.init : { *(.data.init) }
80   . = ALIGN(256);
81   __init_end = .;
82
83 #ifdef CONFIG_SYS_MPC85XX_NO_RESETVEC
84   .bootpg ADDR(.text) - 0x1000 :
85   {
86     KEEP(arch/powerpc/cpu/mpc85xx/start.o (.bootpg))
87   } :text = 0xffff
88   . = ADDR(.text) + 0x80000;
89 #else
90   .bootpg RESET_VECTOR_ADDRESS - 0xffc :
91   {
92     arch/powerpc/cpu/mpc85xx/start.o    (.bootpg)
93   } :text = 0xffff
94
95   .resetvec RESET_VECTOR_ADDRESS :
96   {
97     KEEP(*(.resetvec))
98   } :text = 0xffff
99
100   . = RESET_VECTOR_ADDRESS + 0x4;
101
102   /*
103    * Make sure that the bss segment isn't linked at 0x0, otherwise its
104    * address won't be updated during relocation fixups.  Note that
105    * this is a temporary fix.  Code to dynamically the fixup the bss
106    * location will be added in the future.  When the bss relocation
107    * fixup code is present this workaround should be removed.
108    */
109 #if (RESET_VECTOR_ADDRESS == 0xfffffffc)
110   . |= 0x10;
111 #endif
112 #endif
113
114   __bss_start = .;
115   .bss (NOLOAD)       :
116   {
117    *(.sbss*)
118    *(.bss*)
119    *(COMMON)
120   } :bss
121
122   . = ALIGN(4);
123   __bss_end = . ;
124   PROVIDE (end = .);
125 }