aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/kernel/uml.lds.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/um/kernel/uml.lds.S')
-rw-r--r--arch/um/kernel/uml.lds.S106
1 files changed, 106 insertions, 0 deletions
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
new file mode 100644
index 000000000000..76eadb309189
--- /dev/null
+++ b/arch/um/kernel/uml.lds.S
@@ -0,0 +1,106 @@
1#include <asm-generic/vmlinux.lds.h>
2
3OUTPUT_FORMAT(ELF_FORMAT)
4OUTPUT_ARCH(ELF_ARCH)
5ENTRY(_start)
6jiffies = jiffies_64;
7
8SECTIONS
9{
10 /*This must contain the right address - not quite the default ELF one.*/
11 PROVIDE (__executable_start = START);
12 . = START + SIZEOF_HEADERS;
13
14 /* Used in arch/um/kernel/mem.c. Any memory between START and __binary_start
15 * is remapped.*/
16 __binary_start = .;
17#ifdef MODE_TT
18 .thread_private : {
19 __start_thread_private = .;
20 errno = .;
21 . += 4;
22 arch/um/kernel/tt/unmap_fin.o (.data)
23 __end_thread_private = .;
24 }
25 . = ALIGN(4096);
26 .remap : { arch/um/kernel/tt/unmap_fin.o (.text) }
27
28 /* We want it only if we are in MODE_TT. In both cases, however, when MODE_TT
29 * is off the resulting binary segfaults.*/
30
31 . = ALIGN(4096); /* Init code and data */
32#endif
33
34 _stext = .;
35 __init_begin = .;
36 .init.text : {
37 _sinittext = .;
38 *(.init.text)
39 _einittext = .;
40 }
41 . = ALIGN(4096);
42 .text :
43 {
44 *(.text)
45 SCHED_TEXT
46 LOCK_TEXT
47 *(.fixup)
48 /* .gnu.warning sections are handled specially by elf32.em. */
49 *(.gnu.warning)
50 *(.gnu.linkonce.t*)
51 }
52
53 #include "asm/common.lds.S"
54
55 init.data : { *(init.data) }
56 .data :
57 {
58 . = ALIGN(KERNEL_STACK_SIZE); /* init_task */
59 *(.data.init_task)
60 *(.data)
61 *(.gnu.linkonce.d*)
62 CONSTRUCTORS
63 }
64 .data1 : { *(.data1) }
65 .ctors :
66 {
67 *(.ctors)
68 }
69 .dtors :
70 {
71 *(.dtors)
72 }
73
74 .got : { *(.got.plt) *(.got) }
75 .dynamic : { *(.dynamic) }
76 /* We want the small data sections together, so single-instruction offsets
77 can access them all, and initialized data all before uninitialized, so
78 we can shorten the on-disk segment size. */
79 .sdata : { *(.sdata) }
80 _edata = .;
81 PROVIDE (edata = .);
82 . = ALIGN(0x1000);
83 .sbss :
84 {
85 __bss_start = .;
86 PROVIDE(_bss_start = .);
87 *(.sbss)
88 *(.scommon)
89 }
90 .bss :
91 {
92 *(.dynbss)
93 *(.bss)
94 *(COMMON)
95 }
96 _end = . ;
97 PROVIDE (end = .);
98 /* Stabs debugging sections. */
99 .stab 0 : { *(.stab) }
100 .stabstr 0 : { *(.stabstr) }
101 .stab.excl 0 : { *(.stab.excl) }
102 .stab.exclstr 0 : { *(.stab.exclstr) }
103 .stab.index 0 : { *(.stab.index) }
104 .stab.indexstr 0 : { *(.stab.indexstr) }
105 .comment 0 : { *(.comment) }
106}