Skip to content

Instantly share code, notes, and snippets.

@jamesmintram
Created November 25, 2021 09:54
Show Gist options
  • Save jamesmintram/46f62fc9db716321b455fd143cec14cc to your computer and use it in GitHub Desktop.
Save jamesmintram/46f62fc9db716321b455fd143cec14cc to your computer and use it in GitHub Desktop.
ENTRY(__start)
SECTIONS {
kernel_va_base = 0xFFFF000000000000;
kernel_page_size = 4K;
kps_less1 = kernel_page_size -1;
kernel_physical_start = (boot_end + kps_less1) & ~(kps_less1);
kernel_first_page = kernel_va_base + kernel_physical_start;
__kernel_stack_size = 1M;
__boot_phys_stack = __kernel_stack_start - kernel_first_page + kernel_physical_start;
__heap_phys_start = __heap_start - kernel_first_page + kernel_physical_start;
__page_tables_size = ((3 + 512) * 0x1000);
__page_tables_phys_start = __page_tables_start - kernel_first_page + kernel_physical_start;
__page_tables_phys_end = __page_tables_phys_start + __page_tables_size;
/*-----------------------------------------------*/
/* This is the bootstrap
/*------------------------------------------------*/
.boot.text 0x0 : {
KEEP(*(.text.entry))
. = 0x80000; /* Space for command line. */
KEEP(*(.text.boot))
}
.boot.data : {
*(.data.boot)
}
.boot.bss (NOLOAD) : {
*(.bss.boot)
}
boot_end = .;
.my_debug_data : {
__debug_info_start = .;
KEEP(*(.debug_info))
__debug_info_end = .;
__debug_abbrev_start = .;
KEEP(*(.debug_abbrev))
__debug_abbrev_end = .;
__debug_str_start = .;
KEEP(*(.debug_str))
__debug_str_end = .;
__debug_line_start = .;
KEEP(*(.debug_line))
__debug_line_end = .;
__debug_ranges_start = .;
KEEP(*(.debug_ranges))
__debug_ranges_end = .;
}
/*-----------------------------------------------*/
/* This is the kernel
/*------------------------------------------------*/
.text kernel_first_page : AT (kernel_physical_start) {
*.text
}
. = ALIGN(kernel_page_size);
__rodata_start = .;
.rodata : {*(.rodata .rodata*)}
__rodata_end = .;
. = ALIGN(kernel_page_size);
__data_start = .;
.data : {*(.data .data*)}
__data_end = .;
. = ALIGN(kernel_page_size);
.bss (NOLOAD) : {
__bss_start = ALIGN(0x10);
*(.bss .bss.*)
*(COMMON)
__bss_end = ALIGN(0x10);
}
__bss_dwords = (__bss_end - __bss_start) >> 3;
/*TODO: Shouldn't really be sticking the stack here*/
. = ALIGN(kernel_page_size);
__kernel_stack_guard = .;
. += kernel_page_size;
__kernel_stack_start = .;
. += __kernel_stack_size;
__kernel_stack_end = .;
__page_tables_start = .;
. += __page_tables_size;
__page_tables_end = .;
__heap_start = .;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment