86 lines
1.7 KiB
Text
86 lines
1.7 KiB
Text
OUTPUT_ARCH(riscv)
|
|
ENTRY(_start)
|
|
|
|
KERNEL_PHYS_BASE = 0x80200000;
|
|
KERNEL_VIRT_OFFSET = 0xffffffc000000000;
|
|
BOOT_STACK_SIZE = 0x10000;
|
|
KERNEL_STACK_SIZE = 0x10000;
|
|
|
|
SECTIONS
|
|
{
|
|
. = KERNEL_PHYS_BASE;
|
|
|
|
__boot_phys_start = .;
|
|
|
|
.boot.text : ALIGN(0x1000) {
|
|
*(.boot.text)
|
|
*(.boot.text.*)
|
|
}
|
|
|
|
.boot.rodata : ALIGN(0x1000) {
|
|
*(.boot.rodata)
|
|
*(.boot.rodata.*)
|
|
}
|
|
|
|
.boot.data : ALIGN(0x1000) {
|
|
*(.boot.data)
|
|
*(.boot.data.*)
|
|
}
|
|
|
|
.boot.bss (NOLOAD) : ALIGN(0x1000) {
|
|
*(.boot.bss)
|
|
*(.boot.bss.*)
|
|
}
|
|
|
|
. = ALIGN(16);
|
|
. += BOOT_STACK_SIZE;
|
|
__boot_stack_top = .;
|
|
. = ALIGN(0x1000);
|
|
__boot_phys_end = .;
|
|
|
|
__kernel_phys_start = .;
|
|
. = KERNEL_VIRT_OFFSET + __kernel_phys_start;
|
|
__kernel_start = .;
|
|
__kernel_virt_start = .;
|
|
|
|
.text : AT(ADDR(.text) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
|
|
*(.text)
|
|
*(.text.*)
|
|
}
|
|
|
|
.rodata : AT(ADDR(.rodata) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
|
|
*(.rodata)
|
|
*(.rodata.*)
|
|
}
|
|
|
|
.data : AT(ADDR(.data) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
|
|
PROVIDE(__global_pointer$ = . + 0x800);
|
|
*(.data)
|
|
*(.data.*)
|
|
*(.sdata)
|
|
*(.sdata.*)
|
|
}
|
|
|
|
.bss : AT(ADDR(.bss) - KERNEL_VIRT_OFFSET) ALIGN(0x1000) {
|
|
__bss_start = .;
|
|
*(.bss)
|
|
*(.bss.*)
|
|
*(.sbss)
|
|
*(.sbss.*)
|
|
*(COMMON)
|
|
. = ALIGN(16);
|
|
. += KERNEL_STACK_SIZE;
|
|
__stack_top = .;
|
|
__bss_end = .;
|
|
}
|
|
|
|
__kernel_end = ALIGN(., 0x1000);
|
|
__kernel_virt_end = __kernel_end;
|
|
__kernel_phys_end = __kernel_end - KERNEL_VIRT_OFFSET;
|
|
__memory_start = __kernel_phys_end;
|
|
|
|
/DISCARD/ : {
|
|
*(.eh_frame)
|
|
*(.eh_frame_hdr)
|
|
}
|
|
}
|