blob: 7d71c11ae4c6cfa5ff1aa22df51a20d4ceb16bc0 [file] [log] [blame]
Gabor Juhos7f444662013-01-30 04:31:52 +00001/*
2 * (C) Copyright 2003
3 * Wolfgang Denk Engineering, <wd@denx.de>
4 *
Wolfgang Denkd79de1d2013-07-08 09:37:19 +02005 * SPDX-License-Identifier: GPL-2.0+
Gabor Juhos7f444662013-01-30 04:31:52 +00006 */
7
8#if defined(CONFIG_64BIT)
9#define PTR_COUNT_SHIFT 3
10#else
11#define PTR_COUNT_SHIFT 2
12#endif
13
14OUTPUT_ARCH(mips)
15ENTRY(_start)
16SECTIONS
17{
18 . = 0x00000000;
19
20 . = ALIGN(4);
21 .text : {
22 *(.text*)
23 }
24
25 . = ALIGN(4);
26 .rodata : {
27 *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
28 }
29
30 . = ALIGN(4);
31 .data : {
32 *(.data*)
33 }
34
35 . = .;
36 _gp = ALIGN(16) + 0x7ff0;
37
38 .got : {
Gabor Juhos7f444662013-01-30 04:31:52 +000039 *(.got)
Gabor Juhos7f444662013-01-30 04:31:52 +000040 }
41
Gabor Juhos7092ce82013-02-12 22:22:12 +010042 num_got_entries = SIZEOF(.got) >> PTR_COUNT_SHIFT;
43
Gabor Juhos7f444662013-01-30 04:31:52 +000044 . = ALIGN(4);
45 .sdata : {
46 *(.sdata*)
47 }
48
49 . = ALIGN(4);
50 .u_boot_list : {
Albert ARIBAUDc24895e2013-02-25 00:59:00 +000051 KEEP(*(SORT(.u_boot_list*)));
Gabor Juhos7f444662013-01-30 04:31:52 +000052 }
53
Gabor Juhos7f444662013-01-30 04:31:52 +000054 . = ALIGN(4);
Daniel Schwierzeck9049d032013-02-12 22:22:12 +010055 __image_copy_end = .;
Paul Burtond0589bb2014-04-07 10:11:19 +010056 __init_end = .;
Daniel Schwierzeck9049d032013-02-12 22:22:12 +010057
Gabor Juhos44ea3c32013-02-12 22:22:13 +010058 .rel.dyn : {
59 __rel_dyn_start = .;
60 *(.rel.dyn)
61 __rel_dyn_end = .;
62 }
63
Daniel Schwierzeck4e6cdff2014-10-29 17:30:36 +010064 .padding : {
65 /*
66 * Workaround for a binutils feature (or bug?).
67 *
68 * The GNU ld from binutils puts the dynamic relocation
69 * entries into the .rel.dyn section. Sometimes it
70 * allocates more dynamic relocation entries than it needs
71 * and the unused slots are set to R_MIPS_NONE entries.
72 *
73 * However the size of the .rel.dyn section in the ELF
74 * section header does not cover the unused entries, so
75 * objcopy removes those during stripping.
76 *
77 * Create a small section here to avoid that.
78 */
79 LONG(0xFFFFFFFF)
80 }
81
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +020082 _end = .;
Gabor Juhos44ea3c32013-02-12 22:22:13 +010083
84 .bss __rel_dyn_start (OVERLAY) : {
Daniel Schwierzeck56b5ec72013-02-12 22:22:12 +010085 __bss_start = .;
86 *(.sbss.*)
87 *(.bss.*)
88 *(COMMON)
Gabor Juhos7f444662013-01-30 04:31:52 +000089 . = ALIGN(4);
Daniel Schwierzeck56b5ec72013-02-12 22:22:12 +010090 __bss_end = .;
Gabor Juhos7f444662013-01-30 04:31:52 +000091 }
Gabor Juhos44ea3c32013-02-12 22:22:13 +010092
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +020093 .dynsym _end : {
94 *(.dynsym)
95 }
96
97 .dynbss : {
Gabor Juhos44ea3c32013-02-12 22:22:13 +010098 *(.dynbss)
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +020099 }
100
101 .dynstr : {
Gabor Juhos44ea3c32013-02-12 22:22:13 +0100102 *(.dynstr)
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +0200103 }
104
105 .dynamic : {
Gabor Juhos44ea3c32013-02-12 22:22:13 +0100106 *(.dynamic)
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +0200107 }
108
109 .plt : {
110 *(.plt)
111 }
112
113 .interp : {
Gabor Juhos44ea3c32013-02-12 22:22:13 +0100114 *(.interp)
Daniel Schwierzeck1263ea82013-10-11 17:46:59 +0200115 }
116
117 .gnu : {
118 *(.gnu*)
119 }
120
121 .MIPS.stubs : {
122 *(.MIPS.stubs)
123 }
124
125 .hash : {
Gabor Juhos44ea3c32013-02-12 22:22:13 +0100126 *(.hash)
Gabor Juhos44ea3c32013-02-12 22:22:13 +0100127 }
Gabor Juhos7f444662013-01-30 04:31:52 +0000128}