aboutsummaryrefslogtreecommitdiff
path: root/src/linker.ld
diff options
context:
space:
mode:
Diffstat (limited to 'src/linker.ld')
-rw-r--r--src/linker.ld70
1 files changed, 34 insertions, 36 deletions
diff --git a/src/linker.ld b/src/linker.ld
index d8e7f4b..54437ba 100644
--- a/src/linker.ld
+++ b/src/linker.ld
@@ -1,43 +1,41 @@
-/* The bootloader will look at this image and start execution at the symbol
- designated as the entry point. */
-ENTRY(_start)
+ENTRY (_start)
-/* Tell where the various sections of the object files will be put in the final
- kernel image. */
SECTIONS
{
- /* Begin putting sections at 1 MiB, a conventional place for kernels to be
- loaded at by the bootloader. */
- . = 1M;
+ . = 0x00100000;
+ /* The kernel will live at 3GB + 1MB in the virtual address space, */
+ /* which will be mapped to 1MB in the physical address space. */
+ /* Note that we page-align the sections. */
- /* First put the multiboot header, as it is required to be put very early
- early in the image or the bootloader won't recognize the file format.
- Next we'll put the .text section. */
- .text BLOCK(4K) : ALIGN(4K)
- {
- *(.multiboot)
- *(.text)
- }
+ _kernel_start = .;
+ .multiboot.data : {
+ *(.multiboot.data)
+ }
- /* Read-only data. */
- .rodata BLOCK(4K) : ALIGN(4K)
- {
- *(.rodata)
- }
+ .multiboot.text : {
+ *(.multiboot.text)
+ }
- /* Read-write data (initialized) */
- .data BLOCK(4K) : ALIGN(4K)
- {
- *(.data)
- }
-
- /* Read-write data (uninitialized) and stack */
- .bss BLOCK(4K) : ALIGN(4K)
- {
- *(COMMON)
- *(.bss)
- }
-
- /* The compiler may produce other sections, by default it will put them in
- a segment with the same name. Simply add stuff here as needed. */
+ . += 0xC0000000;
+ /* Add a symbol that indicates the start address of the kernel. */
+ .text ALIGN (4K) : AT (ADDR (.text) - 0xC0000000)
+ {
+ *(.text)
+ }
+ .rodata ALIGN (4K) : AT (ADDR (.rodata) - 0xC0000000)
+ {
+ *(.rodata)
+ }
+ .data ALIGN (4K) : AT (ADDR (.data) - 0xC0000000)
+ {
+ *(.data)
+ }
+ .bss ALIGN (4K) : AT (ADDR (.bss) - 0xC0000000)
+ {
+ *(COMMON)
+ *(.bss)
+ *(.bootstrap_stack)
+ }
+ /* Add a symbol that indicates the end address of the kernel. */
+ _kernel_end = .;
}