aboutsummaryrefslogtreecommitdiff
path: root/src/linker.ld
diff options
context:
space:
mode:
Diffstat (limited to 'src/linker.ld')
-rw-r--r--src/linker.ld44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/linker.ld b/src/linker.ld
new file mode 100644
index 0000000..8a9d5f8
--- /dev/null
+++ b/src/linker.ld
@@ -0,0 +1,44 @@
+/* The bootloader witll look at this image and start execution at
+ * the symbol desugbated as ENTRY
+ *
+ * In this case, it is _start in boot.s
+ */
+ENTRY (_start)
+
+/* Tell where the sections of the object files (.o) will be put in the
+ * final image
+ */
+SECTIONS
+{
+ /* Put sections at 1MiB, the conventional place for kernels to be
+ * loaded at by the bootloader. */
+ . = 1M;
+
+ /* First, put the multiboot header. It is required to be put
+ * VERY early in the image or the bootloader wont recognize the file
+ * format. Next, we will put the .text section*/
+ .text BLOCK(4K) : ALIGN(4K)
+ {
+ *(.multiboot)
+ *(.text)
+ }
+ /* Read only data */
+ .rodata BLOCK(4K) : ALIGN(4K)
+ {
+ *(.rodata)
+ }
+ /* 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, but they will be put in
+ * a section with the same name by default. Add stuff here as needed */
+}