]> Devi Nivas Git - cs3210-lab1.git/commitdiff
oops
authorFrans Kaashoek <kaashoek@14.sub-75-194-120.myvzw.com>
Sun, 7 Aug 2011 16:30:34 +0000 (12:30 -0400)
committerFrans Kaashoek <kaashoek@14.sub-75-194-120.myvzw.com>
Sun, 7 Aug 2011 16:30:34 +0000 (12:30 -0400)
kernel.ld [new file with mode: 0644]
memlayout.h [new file with mode: 0644]

diff --git a/kernel.ld b/kernel.ld
new file mode 100644 (file)
index 0000000..3726f4e
--- /dev/null
+++ b/kernel.ld
@@ -0,0 +1,59 @@
+/* Simple linker script for the JOS kernel.
+   See the GNU ld 'info' manual ("info ld") to learn the syntax. */
+
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+ENTRY(_start)
+
+SECTIONS
+{
+       /* Load the kernel at this address: "." means the current address */
+       . = 0xF0100000;
+
+       .text : AT(0x100000) {
+               *(.text .stub .text.* .gnu.linkonce.t.*)
+       }
+
+       PROVIDE(etext = .);     /* Define the 'etext' symbol to this value */
+
+       .rodata : {
+               *(.rodata .rodata.* .gnu.linkonce.r.*)
+       }
+
+       /* Include debugging information in kernel memory */
+       .stab : {
+               PROVIDE(__STAB_BEGIN__ = .);
+               *(.stab);
+               PROVIDE(__STAB_END__ = .);
+               BYTE(0)         /* Force the linker to allocate space
+                                  for this section */
+       }
+
+       .stabstr : {
+               PROVIDE(__STABSTR_BEGIN__ = .);
+               *(.stabstr);
+               PROVIDE(__STABSTR_END__ = .);
+               BYTE(0)         /* Force the linker to allocate space
+                                  for this section */
+       }
+
+       /* Adjust the address for the data segment to the next page */
+       . = ALIGN(0x1000);
+
+       /* The data segment */
+       .data : {
+               *(.data)
+       }
+
+       PROVIDE(edata = .);
+
+       .bss : {
+               *(.bss)
+       }
+
+       PROVIDE(end = .);
+
+       /DISCARD/ : {
+               *(.eh_frame .note.GNU-stack)
+       }
+}
diff --git a/memlayout.h b/memlayout.h
new file mode 100644 (file)
index 0000000..3958062
--- /dev/null
@@ -0,0 +1,26 @@
+// Memory layout
+
+#define PGSIZE          4096            // bytes mapped by a page
+#define PGSHIFT         12              // log2(PGSIZE)
+
+#define KSTKSIZE        (8*PGSIZE)              // size of a kernel stack
+
+#define IOSPACEB  0x0A0000 // begin IO space
+#define IOSPACEE  0x100000  // end IO space
+#define PHYSTOP   0xE000000 // use phys mem up to here as free pool
+
+// Key addresses for address space layout (see kmap in vm.c for the actual layout)
+#define KERNBASE 0xF0000000  // First kernel virtual address
+#define USERTOP  (KERNBASE-PGSIZE)  // Highest user virtual address
+#define KERNLINK 0xF0100000   // Address where kernel is linked
+
+#ifndef __ASSEMBLER__
+
+static inline uint v2p(void *a) { return (uint) a  - KERNBASE; }
+static inline void *p2v(uint a) { return (void *) a + KERNBASE; }
+
+#endif
+
+#define V2P(a) ((uint) a - KERNBASE)
+#define P2V(a) ((void *) a + KERNBASE)
+