-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkernel.ld
124 lines (108 loc) · 3.04 KB
/
kernel.ld
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
OUTPUT_ARCH( "riscv" )
ENTRY( _entry )
SECTIONS
{
/*
* ensure that entry.S / _entry is at 0x80000000,
* where qemu's -kernel jumps.
*/
. = 0x80000000;
PROVIDE(begin = .);
.text : {
PROVIDE(kernel_text_start = .);
*(.entry_os) . = ALIGN(0x1000);
PROVIDE(kerel_text_start = .);
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.text .text*)
. = ALIGN(0x1000);
}
PROVIDE(kernel_text_end = .);
PROVIDE(kernel_data_start = . );
.rodata : {
. = ALIGN(16);
/* do not need to distinguish this from .rodata */
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.srodata .srodata.*)
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.rodata .rodata.*)
}
.data : {
. = ALIGN(16);
/* do not need to distinguish this from .data */
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.sdata .sdata.*)
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.data .data.*)
}
.bss : {
. = ALIGN(16);
/* do not need to distinguish this from .bss */
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.sbss .sbss.*)
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o */syscall_c.o */syscall_cpp.o ) *(.bss .bss.*)
}
/* Aling user code to next page */
. = ALIGN(0x1000) ;
PROVIDE(kernel_data_end = . );
PROVIDE(kernel_end = . );
PROVIDE(syscall_start = .);
.text.syscall : {
. = ALIGN(0x1000);
PROVIDE(syscall_text_start = .);
EXCLUDE_FILE (*tests/*.o) *(.text .text*)
. = ALIGN(0x1000);
}
PROVIDE(syscall_text_end = .);
PROVIDE(syscall_data_start = . );
.rodata.syscall : {
. = ALIGN(16);
/* do not need to distinguish this from .rodata */
EXCLUDE_FILE (*tests/*.o) *(.srodata .srodata.*)
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o) *(.rodata .rodata.*)
}
.data.syscall : {
. = ALIGN(16);
/* do not need to distinguish this from .data */
EXCLUDE_FILE (*tests/*.o) *(.sdata .sdata.* )
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o) *(.data .data.* )
}
.bss.syscall : {
. = ALIGN(16);
/* do not need to distinguish this from .bss */
EXCLUDE_FILE (*tests/*.o) *(.sbss .sbss.* )
. = ALIGN(16);
EXCLUDE_FILE (*tests/*.o) *(.bss .bss.* )
}
. = ALIGN(0x1000) ;
PROVIDE(syscall_data_end = . );
PROVIDE(syscall_end = .);
PROVIDE(user_start = . );
.text.user : {
PROVIDE(user_code_start = . );
*(*/tests/*.o) *(.text .text*)
. = ALIGN(0x1000) ;
PROVIDE(user_code_end = . );
}
PROVIDE(user_data_start = . );
.rodata.user : {
. = ALIGN(16);
*(*/tests/*.o) *(.srodata .srodata.*)
. = ALIGN(16);
*(*/tests/*.o) *(.rodata .rodata.*)
}
.data.user : {
. = ALIGN(16);
*(*/tests/*.o) *(.sdata .sdata.*)
. = ALIGN(16);
*(*/tests/*.o) *(.data .data.*)
}
.bss.user :{
. = ALIGN(16);
*(*/tests/*.o) *(.sbss .sbss.*)
. = ALIGN(16);
*(*/tests/*.o) *(.bss .bss.*)
}
. = ALIGN(0x1000);
PROVIDE(user_data_end = .);
PROVIDE(user_end = .);
PROVIDE(end = .);
}