From dd4438b4fe934eef3f631238d45b3681a3abdd4d Mon Sep 17 00:00:00 2001
From: Austin Clements <amdragon@mit.edu>
Date: Fri, 2 Sep 2011 14:51:55 -0400
Subject: [PATCH] Nuke data.S, since we do have a custom linker script.

---
 Makefile  |  8 ++++----
 data.S    | 26 --------------------------
 kernel.ld |  8 ++++++++
 vm.c      |  2 +-
 4 files changed, 13 insertions(+), 31 deletions(-)
 delete mode 100644 data.S

diff --git a/Makefile b/Makefile
index fbfd2f9..6797c8c 100644
--- a/Makefile
+++ b/Makefile
@@ -109,8 +109,8 @@ initcode: initcode.S
 	$(OBJCOPY) -S -O binary initcode.out initcode
 	$(OBJDUMP) -S initcode.o > initcode.asm
 
-kernel: $(OBJS) entry.o data.o entryother initcode
-	$(LD) $(LDFLAGS) -T kernel.ld -e entry -o kernel entry.o data.o $(OBJS) -b binary initcode entryother
+kernel: $(OBJS) entry.o entryother initcode
+	$(LD) $(LDFLAGS) -T kernel.ld -e entry -o kernel entry.o $(OBJS) -b binary initcode entryother
 	$(OBJDUMP) -S kernel > kernel.asm
 	$(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym
 
@@ -121,8 +121,8 @@ kernel: $(OBJS) entry.o data.o entryother initcode
 # great for testing the kernel on real hardware without
 # needing a scratch disk.
 MEMFSOBJS = $(filter-out ide.o,$(OBJS)) memide.o
-kernelmemfs: $(MEMFSOBJS) entry.o data.o entryother initcode fs.img
-	$(LD) $(LDFLAGS) -Ttext 0x100000 -e main -o kernelmemfs entry.o data.o $(MEMFSOBJS) -b binary initcode entryother fs.img
+kernelmemfs: $(MEMFSOBJS) entry.o entryother initcode fs.img
+	$(LD) $(LDFLAGS) -Ttext 0x100000 -e main -o kernelmemfs entry.o  $(MEMFSOBJS) -b binary initcode entryother fs.img
 	$(OBJDUMP) -S kernelmemfs > kernelmemfs.asm
 	$(OBJDUMP) -t kernelmemfs | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernelmemfs.sym
 
diff --git a/data.S b/data.S
deleted file mode 100644
index 8b651b4..0000000
--- a/data.S
+++ /dev/null
@@ -1,26 +0,0 @@
-// The kernel layout is:
-//
-//     text
-//     rodata
-//     data
-//     bss
-//
-// Conventionally, Unix linkers provide pseudo-symbols
-// etext, edata, and end, at the end of the text, data, and bss.
-// For the kernel mapping, we need the address at the beginning
-// of the data section, but that's not one of the conventional
-// symbols, because the convention started before there was a
-// read-only rodata section between text and data.
-//
-// To get the address of the data section, we define a symbol
-// named data and make sure this is the first object passed to
-// the linker, so that it will be the first symbol in the data section.
-//
-// Alternative approaches would be to parse our own ELF header
-// or to write a linker script, but this is simplest.
-
-.data
-.align 4096
-.globl data
-data:
-  .word 1
diff --git a/kernel.ld b/kernel.ld
index a778fc4..e24c860 100644
--- a/kernel.ld
+++ b/kernel.ld
@@ -41,6 +41,14 @@ SECTIONS
 	/* Adjust the address for the data segment to the next page */
 	. = ALIGN(0x1000);
 
+	/* Conventionally, Unix linkers provide pseudo-symbols
+	 * etext, edata, and end, at the end of the text, data, and bss.
+	 * For the kernel mapping, we need the address at the beginning
+	 * of the data section, but that's not one of the conventional
+	 * symbols, because the convention started before there was a
+	 * read-only rodata section between text and data. */
+	PROVIDE(data = .);
+
 	/* The data segment */
 	.data : {
 		*(.data)
diff --git a/vm.c b/vm.c
index f2251ac..75fbc59 100644
--- a/vm.c
+++ b/vm.c
@@ -7,7 +7,7 @@
 #include "proc.h"
 #include "elf.h"
 
-extern char data[];  // defined in data.S
+extern char data[];  // defined by kernel.ld
 pde_t *kpgdir;  // for use in scheduler()
 struct segdesc gdt[NSEGS];
 
-- 
GitLab