diff options
Diffstat (limited to 'arch/mips/boot/compressed/ld.script')
-rw-r--r-- | arch/mips/boot/compressed/ld.script | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/arch/mips/boot/compressed/ld.script b/arch/mips/boot/compressed/ld.script new file mode 100644 index 000000000000..29e9f4c0d5d8 --- /dev/null +++ b/arch/mips/boot/compressed/ld.script | |||
@@ -0,0 +1,150 @@ | |||
1 | OUTPUT_ARCH(mips) | ||
2 | ENTRY(start) | ||
3 | SECTIONS | ||
4 | { | ||
5 | /* Read-only sections, merged into text segment: */ | ||
6 | .init : { *(.init) } =0 | ||
7 | .text : | ||
8 | { | ||
9 | _ftext = . ; | ||
10 | *(.text) | ||
11 | *(.rodata) | ||
12 | *(.rodata1) | ||
13 | /* .gnu.warning sections are handled specially by elf32.em. */ | ||
14 | *(.gnu.warning) | ||
15 | } =0 | ||
16 | .kstrtab : { *(.kstrtab) } | ||
17 | |||
18 | . = ALIGN(16); /* Exception table */ | ||
19 | __start___ex_table = .; | ||
20 | __ex_table : { *(__ex_table) } | ||
21 | __stop___ex_table = .; | ||
22 | |||
23 | __start___dbe_table = .; /* Exception table for data bus errors */ | ||
24 | __dbe_table : { *(__dbe_table) } | ||
25 | __stop___dbe_table = .; | ||
26 | |||
27 | __start___ksymtab = .; /* Kernel symbol table */ | ||
28 | __ksymtab : { *(__ksymtab) } | ||
29 | __stop___ksymtab = .; | ||
30 | |||
31 | _etext = .; | ||
32 | |||
33 | . = ALIGN(8192); | ||
34 | .data.init_task : { *(.data.init_task) } | ||
35 | |||
36 | /* Startup code */ | ||
37 | . = ALIGN(4096); | ||
38 | __init_begin = .; | ||
39 | .text.init : { *(.text.init) } | ||
40 | .data.init : { *(.data.init) } | ||
41 | . = ALIGN(16); | ||
42 | __setup_start = .; | ||
43 | .setup.init : { *(.setup.init) } | ||
44 | __setup_end = .; | ||
45 | __initcall_start = .; | ||
46 | .initcall.init : { *(.initcall.init) } | ||
47 | __initcall_end = .; | ||
48 | . = ALIGN(4096); /* Align double page for init_task_union */ | ||
49 | __init_end = .; | ||
50 | |||
51 | . = ALIGN(4096); | ||
52 | .data.page_aligned : { *(.data.idt) } | ||
53 | |||
54 | . = ALIGN(32); | ||
55 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | ||
56 | |||
57 | .fini : { *(.fini) } =0 | ||
58 | .reginfo : { *(.reginfo) } | ||
59 | /* Adjust the address for the data segment. We want to adjust up to | ||
60 | the same address within the page on the next page up. It would | ||
61 | be more correct to do this: | ||
62 | . = .; | ||
63 | The current expression does not correctly handle the case of a | ||
64 | text segment ending precisely at the end of a page; it causes the | ||
65 | data segment to skip a page. The above expression does not have | ||
66 | this problem, but it will currently (2/95) cause BFD to allocate | ||
67 | a single segment, combining both text and data, for this case. | ||
68 | This will prevent the text segment from being shared among | ||
69 | multiple executions of the program; I think that is more | ||
70 | important than losing a page of the virtual address space (note | ||
71 | that no actual memory is lost; the page which is skipped can not | ||
72 | be referenced). */ | ||
73 | . = .; | ||
74 | .data : | ||
75 | { | ||
76 | _fdata = . ; | ||
77 | *(.data) | ||
78 | |||
79 | /* Put the compressed image here, so bss is on the end. */ | ||
80 | __image_begin = .; | ||
81 | *(.image) | ||
82 | __image_end = .; | ||
83 | /* Align the initial ramdisk image (INITRD) on page boundaries. */ | ||
84 | . = ALIGN(4096); | ||
85 | __ramdisk_begin = .; | ||
86 | *(.initrd) | ||
87 | __ramdisk_end = .; | ||
88 | . = ALIGN(4096); | ||
89 | |||
90 | CONSTRUCTORS | ||
91 | } | ||
92 | .data1 : { *(.data1) } | ||
93 | _gp = . + 0x8000; | ||
94 | .lit8 : { *(.lit8) } | ||
95 | .lit4 : { *(.lit4) } | ||
96 | .ctors : { *(.ctors) } | ||
97 | .dtors : { *(.dtors) } | ||
98 | .got : { *(.got.plt) *(.got) } | ||
99 | .dynamic : { *(.dynamic) } | ||
100 | /* We want the small data sections together, so single-instruction offsets | ||
101 | can access them all, and initialized data all before uninitialized, so | ||
102 | we can shorten the on-disk segment size. */ | ||
103 | .sdata : { *(.sdata) } | ||
104 | . = ALIGN(4); | ||
105 | _edata = .; | ||
106 | PROVIDE (edata = .); | ||
107 | |||
108 | __bss_start = .; | ||
109 | _fbss = .; | ||
110 | .sbss : { *(.sbss) *(.scommon) } | ||
111 | .bss : | ||
112 | { | ||
113 | *(.dynbss) | ||
114 | *(.bss) | ||
115 | *(COMMON) | ||
116 | . = ALIGN(4); | ||
117 | _end = . ; | ||
118 | PROVIDE (end = .); | ||
119 | } | ||
120 | |||
121 | /* Sections to be discarded */ | ||
122 | /DISCARD/ : | ||
123 | { | ||
124 | *(.text.exit) | ||
125 | *(.data.exit) | ||
126 | *(.exitcall.exit) | ||
127 | } | ||
128 | |||
129 | /* This is the MIPS specific mdebug section. */ | ||
130 | .mdebug : { *(.mdebug) } | ||
131 | /* These are needed for ELF backends which have not yet been | ||
132 | converted to the new style linker. */ | ||
133 | .stab 0 : { *(.stab) } | ||
134 | .stabstr 0 : { *(.stabstr) } | ||
135 | /* DWARF debug sections. | ||
136 | Symbols in the .debug DWARF section are relative to the beginning of the | ||
137 | section so we begin .debug at 0. It's not clear yet what needs to happen | ||
138 | for the others. */ | ||
139 | .debug 0 : { *(.debug) } | ||
140 | .debug_srcinfo 0 : { *(.debug_srcinfo) } | ||
141 | .debug_aranges 0 : { *(.debug_aranges) } | ||
142 | .debug_pubnames 0 : { *(.debug_pubnames) } | ||
143 | .debug_sfnames 0 : { *(.debug_sfnames) } | ||
144 | .line 0 : { *(.line) } | ||
145 | /* These must appear regardless of . */ | ||
146 | .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } | ||
147 | .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } | ||
148 | .comment : { *(.comment) } | ||
149 | .note : { *(.note) } | ||
150 | } | ||