Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 1 | /* |
2 | * (C) Copyright 2003 | ||||
3 | * Wolfgang Denk Engineering, <wd@denx.de> | ||||
4 | * | ||||
Wolfgang Denk | d79de1d | 2013-07-08 09:37:19 +0200 | [diff] [blame] | 5 | * SPDX-License-Identifier: GPL-2.0+ |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 6 | */ |
7 | |||||
8 | #if defined(CONFIG_64BIT) | ||||
9 | #define PTR_COUNT_SHIFT 3 | ||||
10 | #else | ||||
11 | #define PTR_COUNT_SHIFT 2 | ||||
12 | #endif | ||||
13 | |||||
14 | OUTPUT_ARCH(mips) | ||||
15 | ENTRY(_start) | ||||
16 | SECTIONS | ||||
17 | { | ||||
18 | . = 0x00000000; | ||||
19 | |||||
20 | . = ALIGN(4); | ||||
21 | .text : { | ||||
Paul Burton | 92a06ee | 2016-09-21 11:11:06 +0100 | [diff] [blame] | 22 | __text_start = .; |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 23 | *(.text*) |
Paul Burton | 92a06ee | 2016-09-21 11:11:06 +0100 | [diff] [blame] | 24 | __text_end = .; |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 25 | } |
26 | |||||
27 | . = ALIGN(4); | ||||
28 | .rodata : { | ||||
29 | *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) | ||||
30 | } | ||||
31 | |||||
32 | . = ALIGN(4); | ||||
33 | .data : { | ||||
34 | *(.data*) | ||||
35 | } | ||||
36 | |||||
37 | . = .; | ||||
38 | _gp = ALIGN(16) + 0x7ff0; | ||||
39 | |||||
40 | .got : { | ||||
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 41 | *(.got) |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 42 | } |
43 | |||||
Gabor Juhos | 7092ce8 | 2013-02-12 22:22:12 +0100 | [diff] [blame] | 44 | num_got_entries = SIZEOF(.got) >> PTR_COUNT_SHIFT; |
45 | |||||
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 46 | . = ALIGN(4); |
47 | .sdata : { | ||||
48 | *(.sdata*) | ||||
49 | } | ||||
50 | |||||
51 | . = ALIGN(4); | ||||
52 | .u_boot_list : { | ||||
Albert ARIBAUD | c24895e | 2013-02-25 00:59:00 +0000 | [diff] [blame] | 53 | KEEP(*(SORT(.u_boot_list*))); |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 54 | } |
55 | |||||
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 56 | . = ALIGN(4); |
Daniel Schwierzeck | 9049d03 | 2013-02-12 22:22:12 +0100 | [diff] [blame] | 57 | __image_copy_end = .; |
Paul Burton | d0589bb | 2014-04-07 10:11:19 +0100 | [diff] [blame] | 58 | __init_end = .; |
Daniel Schwierzeck | 9049d03 | 2013-02-12 22:22:12 +0100 | [diff] [blame] | 59 | |
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 60 | .rel.dyn : { |
61 | __rel_dyn_start = .; | ||||
62 | *(.rel.dyn) | ||||
63 | __rel_dyn_end = .; | ||||
64 | } | ||||
65 | |||||
Daniel Schwierzeck | 4e6cdff | 2014-10-29 17:30:36 +0100 | [diff] [blame] | 66 | .padding : { |
67 | /* | ||||
68 | * Workaround for a binutils feature (or bug?). | ||||
69 | * | ||||
70 | * The GNU ld from binutils puts the dynamic relocation | ||||
71 | * entries into the .rel.dyn section. Sometimes it | ||||
72 | * allocates more dynamic relocation entries than it needs | ||||
73 | * and the unused slots are set to R_MIPS_NONE entries. | ||||
74 | * | ||||
75 | * However the size of the .rel.dyn section in the ELF | ||||
76 | * section header does not cover the unused entries, so | ||||
77 | * objcopy removes those during stripping. | ||||
78 | * | ||||
79 | * Create a small section here to avoid that. | ||||
80 | */ | ||||
81 | LONG(0xFFFFFFFF) | ||||
82 | } | ||||
83 | |||||
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 84 | _end = .; |
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 85 | |
86 | .bss __rel_dyn_start (OVERLAY) : { | ||||
Daniel Schwierzeck | 56b5ec7 | 2013-02-12 22:22:12 +0100 | [diff] [blame] | 87 | __bss_start = .; |
88 | *(.sbss.*) | ||||
89 | *(.bss.*) | ||||
90 | *(COMMON) | ||||
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 91 | . = ALIGN(4); |
Daniel Schwierzeck | 56b5ec7 | 2013-02-12 22:22:12 +0100 | [diff] [blame] | 92 | __bss_end = .; |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 93 | } |
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 94 | |
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 95 | .dynsym _end : { |
96 | *(.dynsym) | ||||
97 | } | ||||
98 | |||||
99 | .dynbss : { | ||||
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 100 | *(.dynbss) |
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 101 | } |
102 | |||||
103 | .dynstr : { | ||||
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 104 | *(.dynstr) |
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 105 | } |
106 | |||||
107 | .dynamic : { | ||||
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 108 | *(.dynamic) |
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 109 | } |
110 | |||||
111 | .plt : { | ||||
112 | *(.plt) | ||||
113 | } | ||||
114 | |||||
115 | .interp : { | ||||
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 116 | *(.interp) |
Daniel Schwierzeck | 1263ea8 | 2013-10-11 17:46:59 +0200 | [diff] [blame] | 117 | } |
118 | |||||
119 | .gnu : { | ||||
120 | *(.gnu*) | ||||
121 | } | ||||
122 | |||||
123 | .MIPS.stubs : { | ||||
124 | *(.MIPS.stubs) | ||||
125 | } | ||||
126 | |||||
127 | .hash : { | ||||
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 128 | *(.hash) |
Gabor Juhos | 44ea3c3 | 2013-02-12 22:22:13 +0100 | [diff] [blame] | 129 | } |
Gabor Juhos | 7f44466 | 2013-01-30 04:31:52 +0000 | [diff] [blame] | 130 | } |